Skip to content

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_sql support: 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_table reply gives the live count under publication.
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).