changedInput schema / properties / date / description
Previous value: -"Point-in-time date, ISO 8601 (YYYY-MM-DD). Defaults to current. Structure mode uses it for the historical hierarchy. Search mode matches only the section text in effect on that day, so a past date searches the CFR as it read then; eCFR indexes 2017-01-03 onward and rejects a date past its current index date."New value: +"Point-in-time date, ISO 8601 (YYYY-MM-DD). Defaults to current. Structure mode uses it for the historical hierarchy, and rejects a date past the title's up-to-date date. Search mode matches only the section text in effect on that day, so a past date searches the CFR as it read then; eCFR indexes 2017-01-03 onward and rejects a date past its current index date."
changedInput schema / properties / mode / description
Previous value: -"\"structure\": browse the CFR tree (titles, or one title's chapters/parts/sections) to find a cite. \"search\": full-text search the codified CFR for sections matching a phrase."New value: +"\"structure\": list titles, a title's top-level divisions, or a part's sections and appendices, to find a cite. \"search\": full-text search the codified CFR for sections matching a phrase."
addedInput schema / properties / page
Added value: +{
+ "default": 1,
+ "description": "1-based page of search results, or of a part's listing in structure mode (default 1); ignored by a structure listing above a part, which comes back whole. A truncation notice names the next page. Live eCFR search pages through its first 10,000 hits only, so a page starting past them is refused — narrow the query instead of paging deeper.",
+ "maximum": 9007199254740991,
+ "minimum": 1,
+ "type": "integer"
+}
changedInput schema / properties / part / description
Previous value: -"CFR part within the title, in both modes — structure mode narrows the returned tree to that part's sections, search mode restricts matches to text inside that part. Requires title; a part on its own is rejected. Parts can be alphanumeric (\"1203a\", \"16A\") and are matched exactly, so pass the identifier as eCFR writes it — \"58\", not \"Part 58\" or \"058\"."New value: +"CFR part within the title, in both modes — structure mode lists every section and appendix in the part, flattened and paged by page/per_page; search mode restricts matches to text inside that part. Requires title; a part on its own is rejected. Parts can be alphanumeric (\"1203a\", \"16A\") and are matched exactly, so pass the identifier as eCFR writes it — \"58\", not \"Part 58\" or \"058\"."
changedInput schema / properties / per_page / description
Previous value: -"Results per page in search mode (1–50, default 20). Ignored in structure mode."New value: +"Rows per page — search results, or nodes of a part's listing in structure mode (1–50, default 20)."
changedInput schema / properties / title / description
Previous value: -"CFR title number (1–50). Structure mode: omit to list all 50 titles, or provide to expand one title. Search mode: optional filter restricting matches to that title — e.g. 40 for environmental rules, 21 for food and drugs."New value: +"CFR title number (1–50). Structure mode: omit to list all 50 titles; provide it alone to list the title's top-level divisions (chapters, or subtitles) — not the parts beneath them — or with part to list that part. Search mode: optional filter restricting matches to that title — e.g. 40 for environmental rules, 21 for food and drugs."
addedOutput schema / properties / countBasis
Added value: +{
+ "description": "What a search totalCount counts. \"sections\": distinct sections and appendices, one per result row. \"section_versions\": eCFR's own hit count, which counts every indexed version of each section — an upper bound on the rows the query pages through, reported until the whole hit list has been read.",
+ "enum": [
+ "sections",
+ "section_versions"
+ ],
+ "type": "string"
+}
changedOutput schema / properties / error / properties / data / properties / reason / description
Previous value: -"Machine-readable failure mode. Declared by this tool: `query_required`: mode=\"search\" with no query phrase. `title_not_found`: Structure mode where eCFR publishes no tree for the title at that date (a reserved title, or a date outside its coverage), or where the part is absent from the tree it does publish. `title_required_for_part`: A part was given with no title. Part identifiers repeat across titles, and eCFR rejects a part filter that names no title. `date_out_of_range`: Search mode with a date outside eCFR's indexed window (before 2017-01-03, or past its current index date). `upstream_unavailable`: eCFR returned a 5xx, timed out, or served an HTML error page (live path). Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `query_required`: mode=\"search\" with no query phrase. `title_not_found`: Structure mode where eCFR publishes no tree for the title at that date (a reserved title, or a date before its coverage), or where the part is absent from the tree it does publish. `title_required_for_part`: A part was given with no title. Part identifiers repeat across titles, and eCFR rejects a part filter that names no title. `date_out_of_range`: A date past what eCFR serves: in structure mode, past the title's up-to-date date; in search mode, outside the indexed window (before 2017-01-03, or past its current index date). `page_out_of_window`: A live search page that starts past the 10,000 hits eCFR pages through for one query. `upstream_unavailable`: eCFR returned a 5xx, timed out, or served an HTML error page (live path). Other values are possible when a failure originates below the handler."
changedOutput schema / properties / error / properties / data / properties / reason / examples
Previous value: -[
- "query_required",
- "title_not_found",
- "title_required_for_part",
- "date_out_of_range",
- "upstream_unavailable"
-]New value: +[
+ "query_required",
+ "title_not_found",
+ "title_required_for_part",
+ "date_out_of_range",
+ "page_out_of_window",
+ "upstream_unavailable"
+]
changedOutput schema / properties / nodes / description
Previous value: -"Hierarchy nodes at the requested level (structure mode)."New value: +"Structure mode: the 50 titles, a title's top-level divisions, or this page of a part's sections and appendices in document order."
changedOutput schema / properties / nodes / items / properties / cfrCite / description
Previous value: -"Assembled cite → regulations_get_cfr_section: \"40 CFR 50\" / \"40 CFR 50.1\" for a part or section, \"Appendix A-1 to Part 50, Title 40\" for an appendix. Null on a level with no read path (chapter, subchapter, subpart, subject group)."New value: +"Assembled cite → regulations_get_cfr_section: \"40 CFR 50.1\" for a section, \"Appendix A-1 to Part 50, Title 40\" for an appendix. Null on a level with no read path (title, subtitle, chapter)."
changedOutput schema / properties / nodes / items / properties / identifier / description
Previous value: -"Node identifier (e.g. \"40\", \"I\", \"50\", \"50.1\")."New value: +"Node identifier (e.g. \"40\", \"I\", \"50.1\")."
changedOutput schema / properties / nodes / items / properties / label / description
Previous value: -"Human-readable label."New value: +"Human-readable label, plain text."
addedOutput schema / properties / nodes / items / properties / subjectGroup
Added value: +{
+ "description": "In a part listing, the heading of the subject group the node sits under (a group of sections inside a part or subpart); null when it sits in none, and on every node above a part.",
+ "type": [
+ "string",
+ "null"
+ ]
+}
addedOutput schema / properties / nodes / items / properties / subpart
Added value: +{
+ "description": "In a part listing, the label of the subpart the node sits under (\"Subpart A—General\"); null when no subpart encloses it, and on every node above a part.",
+ "type": [
+ "string",
+ "null"
+ ]
+}
changedOutput schema / properties / nodes / items / properties / type / description
Previous value: -"Node type: title, chapter, subchapter, subpart, part, section, appendix, subject_group, or other (treat unknown types as passthrough)."New value: +"Node type: title, subtitle, or chapter above a part; section or appendix in a part listing. Treat an unknown type as passthrough."
changedOutput schema / properties / nodes / items / required
Previous value: -[
- "type",
- "identifier",
- "label",
- "description",
- "reserved",
- "cfrCite",
- "appendix"
-]New value: +[
+ "type",
+ "identifier",
+ "label",
+ "description",
+ "reserved",
+ "cfrCite",
+ "appendix",
+ "subpart",
+ "subjectGroup"
+]
changedOutput schema / properties / notice / description
Previous value: -"Guidance when nothing matched."New value: +"Guidance: the next page to request, a page past the end, an empty result, or what the count means."
addedOutput schema / properties / page
Added value: +{
+ "description": "The page served — of search results, or of a part's listing.",
+ "type": "number"
+}
changedOutput schema / properties / results / description
Previous value: -"Matching CFR sections, this page (search mode)."New value: +"Matching CFR sections and appendices, this page, one row per section however many of its versions matched (search mode)."
changedOutput schema / properties / shown / description
Previous value: -"Results returned on this page (search mode)."New value: +"Rows returned on this page."
changedOutput schema / properties / totalCount / description
Previous value: -"Total search matches before pagination (search mode)."New value: +"Total matches before pagination — search results (see countBasis for what they count), or the nodes in a part's listing."
changedOutput schema / properties / truncated / description
Previous value: -"True when search results were capped at per_page."New value: +"True when another page follows this one."