cfr_sections
Code of Federal Regulations sections
One row per GovInfo annual CFR granule, including sections, appendices, tables of contents and other structural units; metadata only, no regulatory body text. Neither a granule id nor a printed section number establishes the enclosing part, so each section granule is placed under the PART heading of its package's annual volume XML: Title 43 numbers sections by subpart (§ 1601.0-1 is in Part 1600), Title 41's parts contain a hyphen (50-201) and Title 14 Part 241 prints 19-8.1. part is that structure; cfr_ref is the printed citation that joins the Federal Register side. Other granules keep the part their identifier spells, except in Title 41, whose identifiers cut a compound part at the hyphen (…-part60 is Part 60-1): there a structural row takes the compound part its part granule's heading states (60-2), as the section rows do, and a Reserved part granule whose heading states no number takes NULL. The Parquet footer key spicy_regs.cfr_sections.placement records that every section row was placed by this rule; generations without it keep identifier-derived parts. The key says nothing of Title 41's structural rows, which no volume scan places: they take their compound part from their part granule's heading on every run from 2026-10-03, under the same key. A generation built before keeps the identifier's chapter there (part 60, cfr_ref 41-60 on …-part60-id334), and count(*) WHERE title = '41' AND section IS NULL AND part LIKE '%-%' is 0 on it and above 0 once the compound parts are in. A package is re-placed only when it is new or its GovInfo lastModified changed; an unchanged package, or one whose volume cannot be read, keeps its prior rows. Missing credentials and incomplete source traversals refuse before output replacement. GovInfo's annual index package (GPO-CFR-INDEX-2025) is not a title volume and is not in the table. All columns are stored as VARCHAR.
Coverage. Window. Annual-edition section metadata from the 2025 edition and, for some titles, the 2026 edition (SELECT DISTINCT edition_year, title lists which), not full publication history or body text. Each section's part comes from its volume's PART heading; on 2026-09-23 every compared Title 41, 43 and 14 section agreed with eCFR's 2025-01-01 structure. Receipts: fork-execution-2026-09-21/cfr-ancestry-fix-2026-09-23/ (candidate.json, validation.json). (measured 2026-10-03)
- Parquet file:
cfr_sections.parquet - MCP
query_sqlsupport: Configured; requires an available artifact. - Publication status: Not established by this schema page or its measurement date.
- Row count: Not stated here; the MCP
describe_tablereply gives the live count underpublication.
| Column | Type | Description |
|---|---|---|
granule_id |
VARCHAR |
GovInfo granule identifier. Primary key / dedup key, including non-section structural units. |
package_id |
VARCHAR |
GovInfo package identifier for the enclosing annual CFR title and volume. |
cfr_ref |
VARCHAR |
Join key to Federal Register cfr_references_json. For a section, the title and its printed citation (e.g. 43-1601.0-1, 41-50-201.1); Title 43 keeps its subpart-numbered spelling while part names the enclosing part. The Federal Register side cuts every Title 41 compound part at the hyphen (41 CFR 60-1.4 reads 41-60), so a Title 41 reference there names a chapter, not a part, and matches no structural row here once the generation carries Title 41's compound parts (see the summary): match it at chapter level (title = '41' AND part LIKE '60-%'). NULL for ranges, publisher typos, unprefixed numbers (Sec. 1-1), parenthesized citations (1.401(k)-1), sections outside a numbered PART and section tokens the volume does not hold; 12 single sections printed with §§ (§§ 2.188) are read as ranges until spicy-docs 0.31.0. For other granules, composed from the part and the identifier's tokens (e.g. 48-700, 15-746.10-app1); NULL without a part. A part-level reference (40-60) equals cfr_ref only on a part's structural rows, of which the part's own granule has part_granule 'true', and a part held only as sections has none (50 CFR 622 among 12 on 2026-10-03): match a part on title and part, which section rows carry. |
title |
VARCHAR |
CFR title number from the package or granule identifier (e.g. 40). |
part |
VARCHAR |
For a section, the number in the enclosing PART heading of the package's annual volume XML (e.g. 1600, 50-201, 241); NULL outside a numbered PART or when the volume does not hold the section. For a section's appendix or TOC (sec746-10-app1), its host section's part when the volume holds the host, else its token's leading number. For other granules, the identifier's part token including letter suffixes (e.g. 1203a); in Title 41, whose identifiers cut a compound part at the hyphen, the compound part its part granule's heading states (60-2). |
section |
VARCHAR |
For a section, the printed number less its {part}. prefix (e.g. 1 for § 50-201.1, 19-8.1 in Part 241, 1601.0-1 in Part 1600, 401(k)-1). For a section's appendix or TOC, the rest of its token after the leading number (10-app1); for a section token the volume does not hold, the whole token. NULL for other granules. |
heading |
VARCHAR |
Granule heading / caption text from GovInfo's list-level title field. |
structure_level |
VARCHAR |
GovInfo granule class / structural level (e.g. CONTENT, NODE, TOC, APPENDIX). |
edition_year |
VARCHAR |
Annual edition year from the package or granule identifier, falling back to the year in dateIssued. This is not necessarily the printed body revision year or proof of a substantive edition. |
last_modified |
VARCHAR |
Granule lastModified when supplied, otherwise the enclosing package's lastModified. GovInfo's granule listing supplies none, so in practice every row carries its package's stamp. |
url |
VARCHAR |
Canonical GovInfo details URL composed from the package and granule identifiers. |
part_granule |
VARCHAR |
'true' on the granule that is a part itself (an id ending -part200, or -part60-id334 in Title 41), 'false' on every other row. A part's subparts, subject groups, appendices and table of contents share its cfr_ref and read 'false', so part_granule = 'true' picks the part out of them; a part citation's lookup does exactly that. Read from the granule id alone by SpicyDocs' grammar, never from the heading. A part held in two annual editions has one such row per edition, and a part printed across volumes one per volume (40 CFR part 60 spans volumes 7 to 9 of the 2025 edition). |