From 7d68c0c475700ad7ebdcf4ce7a288f97cf8b76d0 Mon Sep 17 00:00:00 2001 From: snapsynapse <57973674+snapsynapse@users.noreply.github.com> Date: Sun, 11 Oct 2026 16:55:46 -0600 Subject: [PATCH] feat(admission): receipt succession; correct the SB226 Summary under it Accepted admission receipts become immutable. A successor receipt embeds the accepted receipt verbatim under supersedes, binds to the record state it admitted, reviews only the units changed since, and must carry forward every earlier unresolved item. Embedded receipts are validated recursively and must reproduce their admitted record hash. Against a base commit, check:admission now fails when an accepted receipt is rewritten instead of superseded. prepare-source-admission gains --supersede, and Obligation-First evidence inputs read unit reviews through the lineage. The Verified rule is unchanged: an agent successor cannot renew it. Using it, the Utah SB 226 instrument Summary is corrected against the retained enrolled bill (Foundation SB226 comparison U02, U03.a2, U03.b, U04.a-d) under an agent successor that embeds Sam Rogers' 2026-09-24 human receipt. Only the Summary text unit changes; last_verified stays 2026-09-23. Receipt succession was chosen by Sam Rogers on 2026-10-11. The guarded Obligation-First fingerprint update changes provenance_claims only, for the six SB226 records. Tests 76/76, evals, admission (124 unit reviews), validate:of and fingerprint (130 records), and hashes pass. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 2 + MANIFEST.yaml | 24 +- data/admission/receipts.json | 513 +++++++++++++----- data/admission/sources/README.md | 4 + .../us-ut-legislature-statute-2025-sb226.md | 10 +- docs/MANIFEST.yaml | 24 +- docs/api/v1/of/determinations.json | 14 +- docs/api/v1/of/instruments.json | 14 +- docs/api/v1/of/obligations.json | 36 +- ...and-ai-defense-ai-defense-elimination.json | 12 +- ...se-disclose-genai-high-risk-proactive.json | 12 +- ...-ai-defense-disclose-genai-on-request.json | 12 +- .../sb226-disclosure-and-ai-defense.json | 14 +- ...gislature-statute-2025-sb226-issuance.json | 14 +- .../us-ut-legislature-statute-2025-sb226.json | 14 +- docs/api/v1/of/terms.json | 14 +- .../us-ut-legislature-statute-2025-sb226.md | 10 +- ...gislature-statute-2025-sb226-issuance.json | 14 +- .../us-ut-legislature-statute-2025-sb226.json | 14 +- ...and-ai-defense-ai-defense-elimination.json | 12 +- ...se-disclose-genai-high-risk-proactive.json | 12 +- ...-ai-defense-disclose-genai-on-request.json | 12 +- .../term/sb226-disclosure-and-ai-defense.json | 14 +- .../sb226-summary-succession-2026-10-11.md | 41 ++ scripts/build.js | 15 +- scripts/check-source-admission.js | 14 +- scripts/lib/source-admission.js | 157 ++++-- scripts/prepare-source-admission.js | 35 +- tests/fixtures/of-contract-fingerprint.json | 78 ++- tests/sb226-r1.test.js | 4 +- tests/sb226-summary-succession.test.js | 62 +++ tests/source-admission.test.js | 106 ++++ 32 files changed, 993 insertions(+), 340 deletions(-) create mode 100644 ops/evidence/sb226-summary-succession-2026-10-11.md create mode 100644 tests/sb226-summary-succession.test.js diff --git a/CHANGELOG.md b/CHANGELOG.md index b398f5a4..bf54defe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ Source admission, per-kind evidence, and qualified legal uncertainty. The protoc - Add source-controlled publication state with dated npm, MCP Registry, tag, and release snapshots, plus tests and evals that retain independent provider evidence through partial publication. - Add per-kind evidence inputs (`pub:evidence_inputs`, `admission_status`, `evidence_type`, `pub:source_review_state`) to every Obligation-First record, with regression coverage for the evidence boundary. A reviewed mapping input cannot promote a record whose native instrument or obligation definition remains legacy-unreviewed. - Retain D. Colo. ECF 24, the Utah HB 452 enrolled bill, and the Doctronic signed agreement, outcomes report, FAQ, and pilot page as admission sources, with source-specific regressions. +- Add admission receipt succession: a successor receipt embeds the accepted receipt verbatim, reviews only units changed since it, and must carry forward its unresolved items. Accepted receipts become immutable; the base-commit check rejects a rewritten receipt. `prepare-source-admission.js --supersede` prepares a successor packet, and Obligation-First evidence inputs read unit reviews through the lineage. - Retain the Legion and ElizaChat signed agreements (with OCR review snapshots), the OAIP authorized-pilots register and pilot pages, the OAIP home page, and the Utah SB 149 bill-status page as admission sources. ### Changed @@ -25,6 +26,7 @@ Source admission, per-kind evidence, and qualified legal uncertainty. The protoc - README and current guides link to provider observations; `agents.json` and `/.well-known/mcp.json` render the independently evidenced install identity and any actual source candidate. - CI checks out full history so receipt retention is compared against the pull-request base or prior push head. - Correct the nine overdue Utah records (issue #3) and six linked obligation files against retained sources, under agent source-consistency receipts: enacting-bill citations, sunset and term-ceiling history, vote and introduction rows, sponsors and titles, statutory versus proposed disclosure triggers, RMA cure periods, phase thresholds, reporting clocks, forbearance scope, and dead official URLs. Unconfirmed facts are qualified rather than asserted. After human review and approval by Sam Rogers, the nine records' `last_verified` is renewed to 2026-09-23 under human review receipts. +- Correct the Utah SB 226 instrument Summary against the retained enrolled bill (conjunctive on-request content, safe-harbor alternatives and regulated-services branch, the individual regulated-occupation actor, the complete high-risk definition, timing, and the underlying-violation boundary of §13-75-102) under an agent successor receipt that embeds the 2026-09-24 human-reviewed receipt. `last_verified` stays 2026-09-23 and is not renewed. - Add an `obligation_qualification` field to two mapping entries; it appears in `api/v1/mappings.json`. ### Fixed diff --git a/MANIFEST.yaml b/MANIFEST.yaml index 4ee49d15..a1f5194d 100644 --- a/MANIFEST.yaml +++ b/MANIFEST.yaml @@ -193,7 +193,7 @@ files: - path: data/examples/instruments/us-ut-legislature-statute-2025-sb226.md role: instrument - hash: sha256:9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0 + hash: sha256:e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb note: data/examples/instruments/us-ut-legislature-statute-2025-sb226.md - path: data/examples/instruments/us-ut-legislature-statute-2025-sb332.md @@ -433,7 +433,7 @@ files: - path: CHANGELOG.md role: protocol - hash: sha256:98f17b9e5d32be9ce450dc2ea08aaae0896474cd2902df914d82d036d8ef90cf + hash: sha256:5c82713637e50b390f4d129f76960fe90926f50c59ddab8508d4c10eda12db9b note: CHANGELOG.md - path: CONTRIBUTING.md @@ -558,12 +558,12 @@ files: - path: scripts/check-source-admission.js role: tooling - hash: sha256:72aff0b1b51b4f90062298dd3a0e055f8ab1128c775478941d90b540239b4221 + hash: sha256:76a0e7590074fbe66084d92bbe3933fca6987f67fb2b611e7bacfbb2304db755 note: Source admission gate and EAL-compatible report - path: scripts/lib/source-admission.js role: tooling - hash: sha256:a58ce91920f115db9b69e7e47eaf497385e622e855de535455852b51c73b1b4f + hash: sha256:9d055d9310be2a708493e9214cc2c44cc61c0790f11096614c417ee568c3dbc8 note: Source admission digest and evidence policy - path: scripts/lib/api-projection.js @@ -578,7 +578,7 @@ files: - path: scripts/prepare-source-admission.js role: tooling - hash: sha256:f1287f2196bac855ae2b84c6f939e64e4e786ccadab16e69e23c01f436711dc6 + hash: sha256:a0b2780a88a9584ea5ea78600957d4521e6c000f5fcad0890c727bfa40da5f8e note: Pending admission packet generator - path: scripts/eval-mcp-rpc-framing.js @@ -598,7 +598,7 @@ files: - path: scripts/build.js role: tooling - hash: sha256:0ea9b3d271f36829c75e01943da3956143aa47fb581083894b171ae4067bcf96 + hash: sha256:08e3d69e730eb8edceefdebb1dfbaf94a522981a56cd8a2ee4e52d409cc18f71 note: scripts/build.js - path: scripts/check-production-search.mjs @@ -1038,7 +1038,7 @@ files: - path: tests/source-admission.test.js role: code - hash: sha256:e4fcbb61cf703c1dbcaf9b10c01feb50f548dfc3ac797b5ec3c717aeec3af5aa + hash: sha256:646f30d589ec1961dcc0f3377985c9dba1be6be2c0b0a66538135ba664632ac8 note: Source admission policy and producer-gate regressions - path: tests/publication-state.test.js @@ -1168,7 +1168,7 @@ files: - path: tests/sb226-r1.test.js role: code - hash: sha256:ba4f4636bad329be363c84d09c840cfe62a3fd89ec107025bddff21056a41c38 + hash: sha256:8f90a6fcb138808b652fe69ebf86e50e7a5c18c46f098155112f6726af1141d8 note: SB226 R1 retained-source and admission regressions - path: ops/evidence/sb226-r1-native-delta-2026-10-02.diff @@ -1185,3 +1185,11 @@ files: role: evidence hash: sha256:6d6bbc43b88d1ca9510466460e092bd6fd9484d3344919e810fc5d8259f09322 note: Scoped SB226 R1 owner repair receipt; instrument Summary remains gated + - path: ops/evidence/sb226-summary-succession-2026-10-11.md + role: evidence + hash: sha256:a26aa0c653c9c4f6ee4e89009914928e15ba15a3c567dda37cee3a865c3d5b86 + note: SB226 instrument Summary correction under agent receipt succession + - path: tests/sb226-summary-succession.test.js + role: code + hash: sha256:e16c21f3bfaabd8c89c5ba26cb159cff98451e0f5bb4bf0bb49a54679f55aeda + note: SB226 Summary successor embeds the human receipt and changes one unit diff --git a/data/admission/receipts.json b/data/admission/receipts.json index 3da1d050..9dbbfe74 100644 --- a/data/admission/receipts.json +++ b/data/admission/receipts.json @@ -3993,30 +3993,311 @@ } }, "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md": { - "record_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", - "baseline_sha256": "7e4a5fbb8f032549b461c3d8840b09b6dfe91587e3b95cde0269b6a9bd69ac2c", + "record_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", + "baseline_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", "whole_record": { - "before_sha256": "7e4a5fbb8f032549b461c3d8840b09b6dfe91587e3b95cde0269b6a9bd69ac2c", - "after_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530" + "before_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "after_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89" + }, + "supersedes": { + "packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "reason": "Agent source-consistency correction of the Summary text unit only, approved as receipt succession by Sam Rogers on 2026-10-11. The superseded human-reviewed receipt is embedded verbatim and continues to cover every unit this receipt does not change.", + "receipt": { + "record_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "baseline_sha256": "7e4a5fbb8f032549b461c3d8840b09b6dfe91587e3b95cde0269b6a9bd69ac2c", + "whole_record": { + "before_sha256": "7e4a5fbb8f032549b461c3d8840b09b6dfe91587e3b95cde0269b6a9bd69ac2c", + "after_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530" + }, + "review": { + "actor_type": "human", + "actor": "Sam Rogers", + "reviewed_at": "2026-09-24T02:36:37Z", + "decision": "source-consistency-reviewed", + "human_approved": true, + "scope": "Human review and approval by Sam Rogers, attested in the Claude Code session on 2026-09-23, of source-consistency corrections prepared by an agent (Claude). Renews last_verified to 2026-09-23 on that basis. Agent preparation scope: Add SB 226 sponsors and its 63I-2-213 repeal-date amendment with the two-thirds effective-date alternative; narrow the safe-harbor scope to 13-75-103; replace the three 404 section anchor URLs with the chapter URL; relabel the report row as the SB 149 annual OAIP duty; drop the unsupported four-bill package note; mark introduction and signing rows unconfirmed; set modified. Agent source-consistency correction only; does not renew last_verified, Verified rows, legal status or legal currentness.", + "packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733" + }, + "unresolved": [ + "enacted (2025-03-25) and the Introduced month (2025-02) are not in the enrolled copy and the le.utah.gov SB0226 status table is not retained; rows are marked unconfirmed and the enacted field is unchanged.", + "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", + "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", + "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + ], + "evidence": { + "sb226_sponsors": { + "official_url": "https://le.utah.gov/Session/2025/bills/enrolled/SB0226.pdf", + "snapshot_path": "data/admission/sources/utah-sb226/SB0226-enrolled.txt", + "snapshot_sha256": "088cb7315787b8f1a2c999ab3cdf9527b10eae034d032c7912ad6530441f08d7", + "original": { + "path": "data/admission/sources/utah-sb226/SB0226-enrolled.pdf", + "sha256": "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8" + }, + "acquisition": "retained_snapshot", + "document_id": "Utah SB 226 (2025)", + "document_title": "Enrolled Copy S.B. 226 Artificial Intelligence Consumer Protection Amendments", + "issuing_body": "Utah State Legislature", + "document_type": "enacted legislation", + "version": "2025 General Session enrolled copy", + "locator": "Enrolled copy p1 header", + "excerpt": "Chief Sponsor: Kirk A. Cullimore\n House Sponsor: Jefferson Moss", + "identity_excerpts": [ + "Artificial Intelligence Consumer Protection Amendments" + ] + }, + "sb226_sections": { + "official_url": "https://le.utah.gov/Session/2025/bills/enrolled/SB0226.pdf", + "snapshot_path": "data/admission/sources/utah-sb226/SB0226-enrolled.txt", + "snapshot_sha256": "088cb7315787b8f1a2c999ab3cdf9527b10eae034d032c7912ad6530441f08d7", + "original": { + "path": "data/admission/sources/utah-sb226/SB0226-enrolled.pdf", + "sha256": "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8" + }, + "acquisition": "retained_snapshot", + "document_id": "Utah SB 226 (2025)", + "document_title": "Enrolled Copy S.B. 226 Artificial Intelligence Consumer Protection Amendments", + "issuing_body": "Utah State Legislature", + "document_type": "enacted legislation", + "version": "2025 General Session enrolled copy", + "locator": "Utah Code Sections Affected, p1-2 lines 27-30", + "excerpt": "13-75-102 (Effective 05/07/25), Utah Code Annotated 1953\n29 13-75-103 (Effective 05/07/25), Utah Code Annotated 1953\n30 13-75-104 (Effective 05/07/25), Utah Code Annotated 1953", + "identity_excerpts": [ + "Artificial Intelligence Consumer Protection Amendments" + ] + }, + "sb226_safe_harbor": { + "official_url": "https://le.utah.gov/Session/2025/bills/enrolled/SB0226.pdf", + "snapshot_path": "data/admission/sources/utah-sb226/SB0226-enrolled.txt", + "snapshot_sha256": "088cb7315787b8f1a2c999ab3cdf9527b10eae034d032c7912ad6530441f08d7", + "original": { + "path": "data/admission/sources/utah-sb226/SB0226-enrolled.pdf", + "sha256": "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8" + }, + "acquisition": "retained_snapshot", + "document_id": "Utah SB 226 (2025)", + "document_title": "Enrolled Copy S.B. 226 Artificial Intelligence Consumer Protection Amendments", + "issuing_body": "Utah State Legislature", + "document_type": "enacted legislation", + "version": "2025 General Session enrolled copy", + "locator": "Section 4, Utah Code 13-75-104(1), p4 lines 118-119", + "excerpt": "(1) A person is not subject to an enforcement action for violating Section 13-75-103 if the", + "identity_excerpts": [ + "Artificial Intelligence Consumer Protection Amendments" + ] + }, + "sb226_repeal": { + "official_url": "https://le.utah.gov/Session/2025/bills/enrolled/SB0226.pdf", + "snapshot_path": "data/admission/sources/utah-sb226/SB0226-enrolled.txt", + "snapshot_sha256": "088cb7315787b8f1a2c999ab3cdf9527b10eae034d032c7912ad6530441f08d7", + "original": { + "path": "data/admission/sources/utah-sb226/SB0226-enrolled.pdf", + "sha256": "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8" + }, + "acquisition": "retained_snapshot", + "document_id": "Utah SB 226 (2025)", + "document_title": "Enrolled Copy S.B. 226 Artificial Intelligence Consumer Protection Amendments", + "issuing_body": "Utah State Legislature", + "document_type": "enacted legislation", + "version": "2025 General Session enrolled copy", + "locator": "Section 7, Utah Code 63I-2-213(5), p6 lines 181-182", + "excerpt": "(5) Title 13, Chapter 72, Artificial Intelligence Policy Act, is repealed [May 1, 2025] July 1,", + "identity_excerpts": [ + "Artificial Intelligence Consumer Protection Amendments" + ] + }, + "sb226_effective": { + "official_url": "https://le.utah.gov/Session/2025/bills/enrolled/SB0226.pdf", + "snapshot_path": "data/admission/sources/utah-sb226/SB0226-enrolled.txt", + "snapshot_sha256": "088cb7315787b8f1a2c999ab3cdf9527b10eae034d032c7912ad6530441f08d7", + "original": { + "path": "data/admission/sources/utah-sb226/SB0226-enrolled.pdf", + "sha256": "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8" + }, + "acquisition": "retained_snapshot", + "document_id": "Utah SB 226 (2025)", + "document_title": "Enrolled Copy S.B. 226 Artificial Intelligence Consumer Protection Amendments", + "issuing_body": "Utah State Legislature", + "document_type": "enacted legislation", + "version": "2025 General Session enrolled copy", + "locator": "Section 9, Effective Date, p6 lines 188-191", + "excerpt": "(a) except as provided in Subsection (2)(b), May 7, 2025; or\n191 (b) if approved by two-thirds of all members elected to each house:", + "identity_excerpts": [ + "Artificial Intelligence Consumer Protection Amendments" + ] + }, + "sb226_civil": { + "official_url": "https://le.utah.gov/Session/2025/bills/enrolled/SB0226.pdf", + "snapshot_path": "data/admission/sources/utah-sb226/SB0226-enrolled.txt", + "snapshot_sha256": "088cb7315787b8f1a2c999ab3cdf9527b10eae034d032c7912ad6530441f08d7", + "original": { + "path": "data/admission/sources/utah-sb226/SB0226-enrolled.pdf", + "sha256": "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8" + }, + "acquisition": "retained_snapshot", + "document_id": "Utah SB 226 (2025)", + "document_title": "Enrolled Copy S.B. 226 Artificial Intelligence Consumer Protection Amendments", + "issuing_body": "Utah State Legislature", + "document_type": "enacted legislation", + "version": "2025 General Session enrolled copy", + "locator": "Section 2, Utah Code 13-75-102, p3 lines 90-92", + "excerpt": "13-75-102 (Effective 05/07/25). Liability for violation of consumer protection law.", + "identity_excerpts": [ + "Artificial Intelligence Consumer Protection Amendments" + ] + }, + "sb149_report": { + "official_url": "https://le.utah.gov/Session/2024/bills/enrolled/SB0149.pdf", + "snapshot_path": "data/admission/sources/utah-sb149/SB0149-enrolled.txt", + "snapshot_sha256": "0a85408fb06d18d8a6fd3ce2db74c19e86c17c84d9c375daecb5a0b3eece8d86", + "original": { + "path": "data/admission/sources/utah-sb149/SB0149-enrolled.pdf", + "sha256": "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" + }, + "acquisition": "retained_snapshot", + "document_id": "Utah SB 149 (2024)", + "document_title": "Enrolled Copy S.B. 149 Artificial Intelligence Amendments", + "issuing_body": "Utah State Legislature", + "document_type": "enacted legislation", + "version": "2024 General Session enrolled copy", + "locator": "Section 5, Utah Code 13-70-201(3)(d), p14 line 465", + "excerpt": "(d) report annually, before November 30, to the Business and Labor Interim Committee", + "identity_excerpts": [ + "ARTIFICIAL INTELLIGENCE AMENDMENTS" + ] + } + }, + "units": { + "metadata:last_verified": { + "before_sha256": "e690a9db34a506022ddcf5d28c9159f07399430eedcb1db905f601ca73e1a743", + "after_sha256": "203550de69fd32247aa59c67343c1ec7437181af7576b6b4a0750aca2b15d62b", + "candidate_content": "2026-09-23", + "reason": "Human reviewer renews verification after reviewing the corrected record against its retained sources.", + "qualifications": { + "scope": "Whole-record source-consistency review against the retained sources cited in this receipt.", + "exceptions": "Items listed as unresolved remain unverified; review does not certify legal currentness beyond the cited sources.", + "time": "Reviewed 2026-09-23." + }, + "evidence": [ + "sb226_sponsors" + ] + }, + "metadata:modified": { + "before_sha256": "e690a9db34a506022ddcf5d28c9159f07399430eedcb1db905f601ca73e1a743", + "after_sha256": "203550de69fd32247aa59c67343c1ec7437181af7576b6b4a0750aca2b15d62b", + "candidate_content": "2026-09-23", + "reason": "Record the date of this bounded source-backed correction without renewing legal currentness.", + "qualifications": { + "scope": "This record edit only.", + "exceptions": "No last_verified, legal status or currentness renewal is accepted by this review.", + "time": "Correction reviewed September 24, 2026 UTC against retained sources." + }, + "evidence": [ + "sb226_sponsors" + ] + }, + "metadata:statute_anchors": { + "before_sha256": "7d7ce0db7b4b15d9c30fb055cc2f0f49a11b3c2b8606c3e7ed26a13d16f4ab24", + "after_sha256": "8b9915dad1742faad90fee8eec2b1cbf86bec8454106ed23ddaec03b549bd5de", + "candidate_content": [ + { + "cite": "Utah Code Title 13, Chapter 75 (Artificial Intelligence Consumer Protection Act)", + "url": "https://le.utah.gov/xcode/Title13/Chapter75/13-75.html" + }, + { + "cite": "Utah Code §13-75-102 (civil AI-assisted-violation liability)", + "url": "https://le.utah.gov/xcode/Title13/Chapter75/13-75.html" + }, + { + "cite": "Utah Code §13-75-103 (disclosure requirements)", + "url": "https://le.utah.gov/xcode/Title13/Chapter75/13-75.html" + }, + { + "cite": "Utah Code §13-75-104 (disclosure safe harbor)", + "url": "https://le.utah.gov/xcode/Title13/Chapter75/13-75.html" + } + ], + "reason": "Point the three section anchors at the Chapter 75 page because the section URLs returned 404; the cited sections are unchanged and appear in the enrolled bill.", + "qualifications": { + "scope": "Anchor URLs only; citations unchanged.", + "exceptions": "URL reachability is from the 2026-09-24 url_checks, not a retained snapshot.", + "time": "Checked 2026-09-24." + }, + "evidence": [ + "sb226_sections" + ] + }, + "section:Timeline/text": { + "before_sha256": "ea6e9ca331903aa90b963285665dbb6d83c213ab474e7bafa9387d490420dc2a", + "after_sha256": "29ccde23fabd81b5fc5a3fb6506de1a60c4d2d4d936ddc88e99dd122a66ceb24", + "candidate_content": "| Milestone | Date | Notes |\n|-----------|------|-------|\n| Introduced | 2025-02 | 2025 General Session (month unconfirmed: not in the enrolled copy) |\n| Governor Signed | 2025-03-25 | Unconfirmed: not in the enrolled copy; bill status page not retained |\n| Effective | 2025-05-07 | Chapter 75 and §13-2-12 repeal; the §63I-2-213 amendment took effect this date or on governor approval if passed by two-thirds of each house (vote not confirmed) |\n| Annual OAIP report due | 2025-11-30 | Before Nov 30, to Business & Labor Interim Committee; duty set by SB 149 (§13-70-201(3)(d)), not SB 226; filing history unverified |\n\n---", + "reason": "Replace the unsupported four-bill package note with the Chapter 75 effective date and the two-thirds alternative for the 63I-2-213 amendment; relabel the report row as the annual OAIP report due under SB 149; mark introduction and signing rows unconfirmed.", + "qualifications": { + "scope": "SB 226 Timeline rows.", + "exceptions": "Signing, introduction, vote and report filing remain unverified.", + "time": "SB 226 effective May 7, 2025; SB 149 report duty from 2024." + }, + "evidence": [ + "sb226_effective", + "sb149_report" + ] + }, + "section:Summary/text": { + "before_sha256": "ae7be6e41fc99ec5a55191378e9b874d2babd2e849ee081f3656cf2984da9915", + "after_sha256": "0e758e31d80f165f53b33e1db60de126783036dc96d69f8fcb3f76646e3f34be", + "candidate_content": "SB 226 relocated and narrowed Utah's generative AI disclosure framework. The original §13-2-12 disclosure requirement (enacted by SB 149 in 2024) was repealed and re-enacted as a new Chapter 75 with substantive changes:\n\n- **Narrower trigger.** The 2024 on-request standard was rewritten to require a consumer's \"clear and unambiguous\" request for AI disclosure (§13-75-103(1)).\n- **New safe harbor.** Providing a clear and conspicuous disclosure at the outset of consumer interactions, and throughout, eliminates enforcement exposure for violating §13-75-103 (§13-75-104).\n- **High-risk-occupation proactive tier.** For \"high-risk AI interactions\" (§13-75-101(5)) — sensitive data collection or personalized advice in finance, legal, medicine, or mental health — disclosure must be proactive: verbal at the start of oral exchanges, written before written exchanges (§13-75-103(2)-(3)).\n- **Civil AI-assisted-violation liability.** §13-75-102 codifies the civil mirror of §76-2-107: \"not a defense\" that GenAI made the violative statement or was used in furtherance of the violation.\n- **Chapter 72 repeal date.** SB 226 §7 also amended §63I-2-213(5) to move the Chapter 72 (Artificial Intelligence Policy Act) repeal date from May 1, 2025 to July 1, 2027, the same amendment SB 332 made. That amendment took effect May 7, 2025, or on governor approval if passed by two-thirds of each house; the vote is not confirmed here.", + "reason": "Narrow the safe harbor to 13-75-103 violations and add the 63I-2-213(5) repeal-date amendment with its special effective date.", + "qualifications": { + "scope": "Utah SB 226 enrolled provisions only.", + "exceptions": "Two-thirds vote not confirmed.", + "time": "SB 226 enrolled 2025; reviewed September 24, 2026 UTC." + }, + "evidence": [ + "sb226_safe_harbor", + "sb226_repeal", + "sb226_effective", + "sb226_civil" + ] + }, + "metadata:sponsors": { + "before_sha256": null, + "after_sha256": "2532ac224784054772f614fa9a20df45da591a64dda335844da6985c798614cf", + "candidate_content": [ + "Sen. Kirk A. Cullimore (Senate sponsor)", + "Rep. Jefferson Moss (House floor sponsor)" + ], + "reason": "Add sponsors printed on the enrolled copy: Chief Sponsor Kirk A. Cullimore, House Sponsor Jefferson Moss.", + "qualifications": { + "scope": "Sponsor names and chamber roles from the enrolled header.", + "exceptions": "Format matches the SB 149 and SB 332 records.", + "time": "SB 226 enrolled 2025." + }, + "evidence": [ + "sb226_sponsors" + ] + } + } + } }, "review": { - "actor_type": "human", - "actor": "Sam Rogers", - "reviewed_at": "2026-09-24T02:36:37Z", + "actor_type": "agent", + "actor": "Claude (PubLedge SB226 Summary receipt succession)", + "reviewed_at": "2026-10-11T22:52:26Z", "decision": "source-consistency-reviewed", - "human_approved": true, - "scope": "Human review and approval by Sam Rogers, attested in the Claude Code session on 2026-09-23, of source-consistency corrections prepared by an agent (Claude). Renews last_verified to 2026-09-23 on that basis. Agent preparation scope: Add SB 226 sponsors and its 63I-2-213 repeal-date amendment with the two-thirds effective-date alternative; narrow the safe-harbor scope to 13-75-103; replace the three 404 section anchor URLs with the chapter URL; relabel the report row as the SB 149 annual OAIP duty; drop the unsupported four-bill package note; mark introduction and signing rows unconfirmed; set modified. Agent source-consistency correction only; does not renew last_verified, Verified rows, legal status or legal currentness.", - "packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733" + "scope": "SB226 instrument Summary text unit only, against immutable retained 2025 enrolled SB 226. Agent self-review, not independent or human acceptance. No last_verified, Verified, effective-date, legal-status or currentness renewal; the superseded human review is not borrowed for the changed text.", + "packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c" }, "unresolved": [ "enacted (2025-03-25) and the Introduced month (2025-02) are not in the enrolled copy and the le.utah.gov SB0226 status table is not retained; rows are marked unconfirmed and the enacted field is unchanged.", "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ], "evidence": { - "sb226_sponsors": { + "sb226_on_request": { "official_url": "https://le.utah.gov/Session/2025/bills/enrolled/SB0226.pdf", "snapshot_path": "data/admission/sources/utah-sb226/SB0226-enrolled.txt", "snapshot_sha256": "088cb7315787b8f1a2c999ab3cdf9527b10eae034d032c7912ad6530441f08d7", @@ -4030,13 +4311,13 @@ "issuing_body": "Utah State Legislature", "document_type": "enacted legislation", "version": "2025 General Session enrolled copy", - "locator": "Enrolled copy p1 header", - "excerpt": "Chief Sponsor: Kirk A. Cullimore\n House Sponsor: Jefferson Moss", + "locator": "Section 3, Utah Code 13-75-103(1), printed lines 98-105", + "excerpt": "98 (1)(a) A supplier that uses generative artificial intelligence to interact with an individual\n 99 in connection with a consumer transaction shall disclose to the individual that the\n100 individual is interacting with generative artificial intelligence and not a human, if the\n101 individual asks or otherwise prompts the supplier about whether artificial intelligence\n102 is being used.\n103 (b) The individual's prompt or question under Subsection (1)(a) must be a clear and\n104 unambiguous request to determine whether the interaction is with a human or with\n105 artificial intelligence.", "identity_excerpts": [ "Artificial Intelligence Consumer Protection Amendments" ] }, - "sb226_sections": { + "sb226_regulated_duty": { "official_url": "https://le.utah.gov/Session/2025/bills/enrolled/SB0226.pdf", "snapshot_path": "data/admission/sources/utah-sb226/SB0226-enrolled.txt", "snapshot_sha256": "088cb7315787b8f1a2c999ab3cdf9527b10eae034d032c7912ad6530441f08d7", @@ -4050,13 +4331,13 @@ "issuing_body": "Utah State Legislature", "document_type": "enacted legislation", "version": "2025 General Session enrolled copy", - "locator": "Utah Code Sections Affected, p1-2 lines 27-30", - "excerpt": "13-75-102 (Effective 05/07/25), Utah Code Annotated 1953\n29 13-75-103 (Effective 05/07/25), Utah Code Annotated 1953\n30 13-75-104 (Effective 05/07/25), Utah Code Annotated 1953", + "locator": "Section 3, Utah Code 13-75-103(2)-(3), printed lines 106-115", + "excerpt": "106 (2) An individual providing services in a regulated occupation shall:\n107 (a) prominently disclose when an individual receiving services is interacting with\n108 generative artificial intelligence in the provision of regulated services if the use of\n109 generative artificial intelligence constitutes a high-risk artificial intelligence\n110 interaction; and\n111 (b) comply with all requirements of the regulated occupation when providing services\n112 through generative artificial intelligence.\n113 (3) A disclosure required under Subsection (2) shall be provided:\n114 (a) verbally at the start of a verbal interaction; and\n115 (b) in writing before the start of a written interaction.", "identity_excerpts": [ "Artificial Intelligence Consumer Protection Amendments" ] }, - "sb226_safe_harbor": { + "sb226_high_risk": { "official_url": "https://le.utah.gov/Session/2025/bills/enrolled/SB0226.pdf", "snapshot_path": "data/admission/sources/utah-sb226/SB0226-enrolled.txt", "snapshot_sha256": "088cb7315787b8f1a2c999ab3cdf9527b10eae034d032c7912ad6530441f08d7", @@ -4070,13 +4351,13 @@ "issuing_body": "Utah State Legislature", "document_type": "enacted legislation", "version": "2025 General Session enrolled copy", - "locator": "Section 4, Utah Code 13-75-104(1), p4 lines 118-119", - "excerpt": "(1) A person is not subject to an enforcement action for violating Section 13-75-103 if the", + "locator": "Section 1, Utah Code 13-75-101(5), printed lines 54-67", + "excerpt": "54 (5) \"High-risk artificial intelligence interaction\" means an interaction with generative\n55 artificial intelligence that involves:\n56 (a) the collection of sensitive personal information, including:\n57 (i) health data;\n58 (ii) financial data; or\n59 (iii) biometric data;\n60 (b) the provision of personalized recommendations, advice, or information that could\n61 reasonably be relied upon to make significant personal decisions, including the\n\n -2-\n\f Enrolled Copy S.B. 226\n\n\n62 provision of:\n63 (i) financial advice or services;\n64 (ii) legal advice or services;\n65 (iii) medical advice or services; or\n66 (iv) mental health advice or services; or\n67 (c) other applications as defined by division rule.", "identity_excerpts": [ "Artificial Intelligence Consumer Protection Amendments" ] }, - "sb226_repeal": { + "sb226_regulated_occupation": { "official_url": "https://le.utah.gov/Session/2025/bills/enrolled/SB0226.pdf", "snapshot_path": "data/admission/sources/utah-sb226/SB0226-enrolled.txt", "snapshot_sha256": "088cb7315787b8f1a2c999ab3cdf9527b10eae034d032c7912ad6530441f08d7", @@ -4090,13 +4371,13 @@ "issuing_body": "Utah State Legislature", "document_type": "enacted legislation", "version": "2025 General Session enrolled copy", - "locator": "Section 7, Utah Code 63I-2-213(5), p6 lines 181-182", - "excerpt": "(5) Title 13, Chapter 72, Artificial Intelligence Policy Act, is repealed [May 1, 2025] July 1,", + "locator": "Section 1, Utah Code 13-75-101(8), printed lines 75-78", + "excerpt": "75 (8) \"Regulated occupation\" means an occupation that:\n76 (a) is regulated by the Department of Commerce; and\n77 (b) requires an individual to obtain a license or state certification to practice the\n78 occupation.", "identity_excerpts": [ "Artificial Intelligence Consumer Protection Amendments" ] }, - "sb226_effective": { + "sb226_safe_harbor_forms": { "official_url": "https://le.utah.gov/Session/2025/bills/enrolled/SB0226.pdf", "snapshot_path": "data/admission/sources/utah-sb226/SB0226-enrolled.txt", "snapshot_sha256": "088cb7315787b8f1a2c999ab3cdf9527b10eae034d032c7912ad6530441f08d7", @@ -4110,13 +4391,13 @@ "issuing_body": "Utah State Legislature", "document_type": "enacted legislation", "version": "2025 General Session enrolled copy", - "locator": "Section 9, Effective Date, p6 lines 188-191", - "excerpt": "(a) except as provided in Subsection (2)(b), May 7, 2025; or\n191 (b) if approved by two-thirds of all members elected to each house:", + "locator": "Section 4, Utah Code 13-75-104(1), printed lines 118-126", + "excerpt": "118 (1) A person is not subject to an enforcement action for violating Section 13-75-103 if the\n119 person's generative artificial intelligence clearly and conspicuously discloses:\n120 (a) at the outset of any interaction with an individual in connection with:\n121 (i) a consumer transaction; or\n122 (ii) the provision of regulated services; and\n123 (b) throughout the interaction that it:\n124 (i) is generative artificial intelligence;\n125 (ii) is not human; or\n126 (iii) is an artificial intelligence assistant.", "identity_excerpts": [ "Artificial Intelligence Consumer Protection Amendments" ] }, - "sb226_civil": { + "sb226_scope": { "official_url": "https://le.utah.gov/Session/2025/bills/enrolled/SB0226.pdf", "snapshot_path": "data/admission/sources/utah-sb226/SB0226-enrolled.txt", "snapshot_sha256": "088cb7315787b8f1a2c999ab3cdf9527b10eae034d032c7912ad6530441f08d7", @@ -4130,140 +4411,94 @@ "issuing_body": "Utah State Legislature", "document_type": "enacted legislation", "version": "2025 General Session enrolled copy", - "locator": "Section 2, Utah Code 13-75-102, p3 lines 90-92", - "excerpt": "13-75-102 (Effective 05/07/25). Liability for violation of consumer protection law.", + "locator": "Section 6, Utah Code 13-75-106, printed lines 164-168", + "excerpt": "164 Section 6. Section 13-75-106 is enacted to read:\n165 13-75-106 (Effective 05/07/25). Scope.\n166 This chapter does not displace any other remedy or right authorized under:\n167 (1) the laws of this state; or\n168 (2) federal law.", "identity_excerpts": [ "Artificial Intelligence Consumer Protection Amendments" ] }, - "sb149_report": { - "official_url": "https://le.utah.gov/Session/2024/bills/enrolled/SB0149.pdf", - "snapshot_path": "data/admission/sources/utah-sb149/SB0149-enrolled.txt", - "snapshot_sha256": "0a85408fb06d18d8a6fd3ce2db74c19e86c17c84d9c375daecb5a0b3eece8d86", + "sb226_civil_scope": { + "official_url": "https://le.utah.gov/Session/2025/bills/enrolled/SB0226.pdf", + "snapshot_path": "data/admission/sources/utah-sb226/SB0226-enrolled.txt", + "snapshot_sha256": "088cb7315787b8f1a2c999ab3cdf9527b10eae034d032c7912ad6530441f08d7", "original": { - "path": "data/admission/sources/utah-sb149/SB0149-enrolled.pdf", - "sha256": "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" + "path": "data/admission/sources/utah-sb226/SB0226-enrolled.pdf", + "sha256": "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8" }, "acquisition": "retained_snapshot", - "document_id": "Utah SB 149 (2024)", - "document_title": "Enrolled Copy S.B. 149 Artificial Intelligence Amendments", + "document_id": "Utah SB 226 (2025)", + "document_title": "Enrolled Copy S.B. 226 Artificial Intelligence Consumer Protection Amendments", "issuing_body": "Utah State Legislature", "document_type": "enacted legislation", - "version": "2024 General Session enrolled copy", - "locator": "Section 5, Utah Code 13-70-201(3)(d), p14 line 465", - "excerpt": "(d) report annually, before November 30, to the Business and Labor Interim Committee", + "version": "2025 General Session enrolled copy", + "locator": "Section 2, Utah Code 13-75-102, printed lines 90-95", + "excerpt": "90 13-75-102 (Effective 05/07/25). Liability for violation of consumer protection law.\n91 It is not a defense to the violation of any statute administered and enforced by the\n92 division under Section 13-2-1 that generative artificial intelligence:\n93 (1) made the violative statement;\n94 (2) undertook the violative act; or\n95 (3) was used in furtherance of the violation.", "identity_excerpts": [ - "ARTIFICIAL INTELLIGENCE AMENDMENTS" - ] - } - }, - "units": { - "metadata:last_verified": { - "before_sha256": "e690a9db34a506022ddcf5d28c9159f07399430eedcb1db905f601ca73e1a743", - "after_sha256": "203550de69fd32247aa59c67343c1ec7437181af7576b6b4a0750aca2b15d62b", - "candidate_content": "2026-09-23", - "reason": "Human reviewer renews verification after reviewing the corrected record against its retained sources.", - "qualifications": { - "scope": "Whole-record source-consistency review against the retained sources cited in this receipt.", - "exceptions": "Items listed as unresolved remain unverified; review does not certify legal currentness beyond the cited sources.", - "time": "Reviewed 2026-09-23." - }, - "evidence": [ - "sb226_sponsors" - ] - }, - "metadata:modified": { - "before_sha256": "e690a9db34a506022ddcf5d28c9159f07399430eedcb1db905f601ca73e1a743", - "after_sha256": "203550de69fd32247aa59c67343c1ec7437181af7576b6b4a0750aca2b15d62b", - "candidate_content": "2026-09-23", - "reason": "Record the date of this bounded source-backed correction without renewing legal currentness.", - "qualifications": { - "scope": "This record edit only.", - "exceptions": "No last_verified, legal status or currentness renewal is accepted by this review.", - "time": "Correction reviewed September 24, 2026 UTC against retained sources." - }, - "evidence": [ - "sb226_sponsors" + "Artificial Intelligence Consumer Protection Amendments" ] }, - "metadata:statute_anchors": { - "before_sha256": "7d7ce0db7b4b15d9c30fb055cc2f0f49a11b3c2b8606c3e7ed26a13d16f4ab24", - "after_sha256": "8b9915dad1742faad90fee8eec2b1cbf86bec8454106ed23ddaec03b549bd5de", - "candidate_content": [ - { - "cite": "Utah Code Title 13, Chapter 75 (Artificial Intelligence Consumer Protection Act)", - "url": "https://le.utah.gov/xcode/Title13/Chapter75/13-75.html" - }, - { - "cite": "Utah Code §13-75-102 (civil AI-assisted-violation liability)", - "url": "https://le.utah.gov/xcode/Title13/Chapter75/13-75.html" - }, - { - "cite": "Utah Code §13-75-103 (disclosure requirements)", - "url": "https://le.utah.gov/xcode/Title13/Chapter75/13-75.html" - }, - { - "cite": "Utah Code §13-75-104 (disclosure safe harbor)", - "url": "https://le.utah.gov/xcode/Title13/Chapter75/13-75.html" - } - ], - "reason": "Point the three section anchors at the Chapter 75 page because the section URLs returned 404; the cited sections are unchanged and appear in the enrolled bill.", - "qualifications": { - "scope": "Anchor URLs only; citations unchanged.", - "exceptions": "URL reachability is from the 2026-09-24 url_checks, not a retained snapshot.", - "time": "Checked 2026-09-24." + "sb226_repeal": { + "official_url": "https://le.utah.gov/Session/2025/bills/enrolled/SB0226.pdf", + "snapshot_path": "data/admission/sources/utah-sb226/SB0226-enrolled.txt", + "snapshot_sha256": "088cb7315787b8f1a2c999ab3cdf9527b10eae034d032c7912ad6530441f08d7", + "original": { + "path": "data/admission/sources/utah-sb226/SB0226-enrolled.pdf", + "sha256": "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8" }, - "evidence": [ - "sb226_sections" + "acquisition": "retained_snapshot", + "document_id": "Utah SB 226 (2025)", + "document_title": "Enrolled Copy S.B. 226 Artificial Intelligence Consumer Protection Amendments", + "issuing_body": "Utah State Legislature", + "document_type": "enacted legislation", + "version": "2025 General Session enrolled copy", + "locator": "Section 7, Utah Code 63I-2-213(5), p6 lines 181-182", + "excerpt": "(5) Title 13, Chapter 72, Artificial Intelligence Policy Act, is repealed [May 1, 2025] July 1,", + "identity_excerpts": [ + "Artificial Intelligence Consumer Protection Amendments" ] }, - "section:Timeline/text": { - "before_sha256": "ea6e9ca331903aa90b963285665dbb6d83c213ab474e7bafa9387d490420dc2a", - "after_sha256": "29ccde23fabd81b5fc5a3fb6506de1a60c4d2d4d936ddc88e99dd122a66ceb24", - "candidate_content": "| Milestone | Date | Notes |\n|-----------|------|-------|\n| Introduced | 2025-02 | 2025 General Session (month unconfirmed: not in the enrolled copy) |\n| Governor Signed | 2025-03-25 | Unconfirmed: not in the enrolled copy; bill status page not retained |\n| Effective | 2025-05-07 | Chapter 75 and §13-2-12 repeal; the §63I-2-213 amendment took effect this date or on governor approval if passed by two-thirds of each house (vote not confirmed) |\n| Annual OAIP report due | 2025-11-30 | Before Nov 30, to Business & Labor Interim Committee; duty set by SB 149 (§13-70-201(3)(d)), not SB 226; filing history unverified |\n\n---", - "reason": "Replace the unsupported four-bill package note with the Chapter 75 effective date and the two-thirds alternative for the 63I-2-213 amendment; relabel the report row as the annual OAIP report due under SB 149; mark introduction and signing rows unconfirmed.", - "qualifications": { - "scope": "SB 226 Timeline rows.", - "exceptions": "Signing, introduction, vote and report filing remain unverified.", - "time": "SB 226 effective May 7, 2025; SB 149 report duty from 2024." + "sb226_effective": { + "official_url": "https://le.utah.gov/Session/2025/bills/enrolled/SB0226.pdf", + "snapshot_path": "data/admission/sources/utah-sb226/SB0226-enrolled.txt", + "snapshot_sha256": "088cb7315787b8f1a2c999ab3cdf9527b10eae034d032c7912ad6530441f08d7", + "original": { + "path": "data/admission/sources/utah-sb226/SB0226-enrolled.pdf", + "sha256": "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8" }, - "evidence": [ - "sb226_effective", - "sb149_report" + "acquisition": "retained_snapshot", + "document_id": "Utah SB 226 (2025)", + "document_title": "Enrolled Copy S.B. 226 Artificial Intelligence Consumer Protection Amendments", + "issuing_body": "Utah State Legislature", + "document_type": "enacted legislation", + "version": "2025 General Session enrolled copy", + "locator": "Section 9, Effective Date, p6 lines 188-191", + "excerpt": "(a) except as provided in Subsection (2)(b), May 7, 2025; or\n191 (b) if approved by two-thirds of all members elected to each house:", + "identity_excerpts": [ + "Artificial Intelligence Consumer Protection Amendments" ] - }, + } + }, + "units": { "section:Summary/text": { - "before_sha256": "ae7be6e41fc99ec5a55191378e9b874d2babd2e849ee081f3656cf2984da9915", - "after_sha256": "0e758e31d80f165f53b33e1db60de126783036dc96d69f8fcb3f76646e3f34be", - "candidate_content": "SB 226 relocated and narrowed Utah's generative AI disclosure framework. The original §13-2-12 disclosure requirement (enacted by SB 149 in 2024) was repealed and re-enacted as a new Chapter 75 with substantive changes:\n\n- **Narrower trigger.** The 2024 on-request standard was rewritten to require a consumer's \"clear and unambiguous\" request for AI disclosure (§13-75-103(1)).\n- **New safe harbor.** Providing a clear and conspicuous disclosure at the outset of consumer interactions, and throughout, eliminates enforcement exposure for violating §13-75-103 (§13-75-104).\n- **High-risk-occupation proactive tier.** For \"high-risk AI interactions\" (§13-75-101(5)) — sensitive data collection or personalized advice in finance, legal, medicine, or mental health — disclosure must be proactive: verbal at the start of oral exchanges, written before written exchanges (§13-75-103(2)-(3)).\n- **Civil AI-assisted-violation liability.** §13-75-102 codifies the civil mirror of §76-2-107: \"not a defense\" that GenAI made the violative statement or was used in furtherance of the violation.\n- **Chapter 72 repeal date.** SB 226 §7 also amended §63I-2-213(5) to move the Chapter 72 (Artificial Intelligence Policy Act) repeal date from May 1, 2025 to July 1, 2027, the same amendment SB 332 made. That amendment took effect May 7, 2025, or on governor approval if passed by two-thirds of each house; the vote is not confirmed here.", - "reason": "Narrow the safe harbor to 13-75-103 violations and add the 63I-2-213(5) repeal-date amendment with its special effective date.", + "before_sha256": "0e758e31d80f165f53b33e1db60de126783036dc96d69f8fcb3f76646e3f34be", + "after_sha256": "96f6fa0674c0e739df304f154a4699b6a088beb27d49822a374057d6d26a6205", + "candidate_content": "SB 226 relocated and narrowed Utah's generative AI disclosure framework. The original §13-2-12 disclosure requirement (enacted by SB 149 in 2024) was repealed and re-enacted as a new Chapter 75 with substantive changes:\n\n- **Narrower trigger.** A supplier that uses generative AI to interact with an individual in connection with a consumer transaction must disclose that the individual is interacting with generative AI and not a human if the individual asks or otherwise prompts the supplier about whether AI is being used. The prompt or question must be a \"clear and unambiguous\" request to determine whether the interaction is with a human or with AI (§13-75-103(1)).\n- **New safe harbor.** A person is not subject to an enforcement action for violating §13-75-103 if its generative AI clearly and conspicuously discloses, at the outset of any interaction in connection with a consumer transaction or the provision of regulated services and throughout the interaction, that it is generative AI, is not human, or is an AI assistant (§13-75-104(1)). These are alternative safe-harbor forms, not the on-request content of §13-75-103(1). Chapter 75 does not displace other state or federal remedies (§13-75-106).\n- **High-risk regulated-services tier.** An individual providing services in a regulated occupation (one regulated by the Department of Commerce that requires a license or state certification, §13-75-101(8)) must prominently disclose generative AI use in the provision of regulated services when that use is a \"high-risk artificial intelligence interaction,\" and must comply with all requirements of the occupation when providing services through generative AI (§13-75-103(2)). A high-risk interaction involves collection of sensitive personal information, including health, financial or biometric data; personalized recommendations, advice or information that could reasonably be relied upon to make significant personal decisions, including financial, legal, medical or mental health advice or services; or other applications defined by division rule (§13-75-101(5)). The disclosure is given verbally at the start of a verbal interaction and in writing before the start of a written interaction (§13-75-103(3)).\n- **Civil AI-assisted-violation liability.** §13-75-102 codifies the civil mirror of §76-2-107: for a violation of any statute administered and enforced by the division under §13-2-1, it is not a defense that generative AI made the violative statement, undertook the violative act, or was used in furtherance of the violation. It does not itself establish the elements of the underlying violation.\n- **Chapter 72 repeal date.** SB 226 §7 also amended §63I-2-213(5) to move the Chapter 72 (Artificial Intelligence Policy Act) repeal date from May 1, 2025 to July 1, 2027, the same amendment SB 332 made. That amendment took effect May 7, 2025, or on governor approval if passed by two-thirds of each house; the vote is not confirmed here.\n\nThese section references describe the retained 2025 enrolled SB 226, not independently validated current codification.", + "reason": "Carry the complete retained statutory content into the Summary: the conjunctive GenAI-and-not-human on-request content, the safe-harbor alternatives and regulated-services branch, the individual regulated-occupation actor without a supplier condition, the complete high-risk definition with its significance criterion and division-rule branch, prominence and occupational-compliance duties, channel-specific timing, and the underlying-violation boundary of 13-75-102 (Foundation SB226 comparison U02, U03.a2, U03.b, U04.a-d).", "qualifications": { - "scope": "Utah SB 226 enrolled provisions only.", - "exceptions": "Two-thirds vote not confirmed.", - "time": "SB 226 enrolled 2025; reviewed September 24, 2026 UTC." + "scope": "Retained 2025 enrolled SB 226 sections 1-4, 6, 7 and 9 only; the Summary text unit. Sponsors, Timeline, Talking Point, Sources, metadata, last_verified and every other unit keep the superseded human review unchanged.", + "exceptions": "Listed high-risk categories are inclusive examples. Current division rules, incorporated 13-11-3 supplier and consumer-transaction definitions, 13-2-1 scope and live codification are not retained or reviewed. Safe-harbor alternatives remain distinct from the on-request conjunction.", + "time": "Retained 2025 enrolled version only. The agent review timestamp is not a retrieval, currentness or verification date; last_verified 2026-09-23 remains the superseded human review." }, "evidence": [ - "sb226_safe_harbor", + "sb226_on_request", + "sb226_regulated_duty", + "sb226_high_risk", + "sb226_regulated_occupation", + "sb226_safe_harbor_forms", + "sb226_scope", + "sb226_civil_scope", "sb226_repeal", - "sb226_effective", - "sb226_civil" - ] - }, - "metadata:sponsors": { - "before_sha256": null, - "after_sha256": "2532ac224784054772f614fa9a20df45da591a64dda335844da6985c798614cf", - "candidate_content": [ - "Sen. Kirk A. Cullimore (Senate sponsor)", - "Rep. Jefferson Moss (House floor sponsor)" - ], - "reason": "Add sponsors printed on the enrolled copy: Chief Sponsor Kirk A. Cullimore, House Sponsor Jefferson Moss.", - "qualifications": { - "scope": "Sponsor names and chamber roles from the enrolled header.", - "exceptions": "Format matches the SB 149 and SB 332 records.", - "time": "SB 226 enrolled 2025." - }, - "evidence": [ - "sb226_sponsors" + "sb226_effective" ] } } diff --git a/data/admission/sources/README.md b/data/admission/sources/README.md index e9c04b5d..f2fd11f9 100644 --- a/data/admission/sources/README.md +++ b/data/admission/sources/README.md @@ -3,3 +3,7 @@ Store exact retained primary source bytes under this directory using a new path for each document version. A UTF-8 review snapshot may accompany the original bytes; the admission receipt binds both. Do not invent retrieval or transport history. Use `retained_snapshot` when only retained bytes and their actual source identity are known. Use `primary_retrieval` only when exact successful HTTP metadata and original bytes were retained at retrieval time. + +## Receipt succession + +Accepted receipts in `data/admission/receipts.json` are immutable. To change a record that already has a receipt, prepare a successor with `node scripts/prepare-source-admission.js --file PATH --supersede`. The successor embeds the earlier receipt verbatim under `supersedes.receipt`, binds to the record state that receipt admitted, reviews only the units changed since, and carries forward every earlier unresolved item. Unchanged units, including a human-renewed `last_verified`, stay under the earlier review; an agent successor still cannot renew Verified. `check:admission` against a base commit fails if an accepted receipt was rewritten instead of superseded. diff --git a/data/examples/instruments/us-ut-legislature-statute-2025-sb226.md b/data/examples/instruments/us-ut-legislature-statute-2025-sb226.md index 1f731c66..b609f3e5 100644 --- a/data/examples/instruments/us-ut-legislature-statute-2025-sb226.md +++ b/data/examples/instruments/us-ut-legislature-statute-2025-sb226.md @@ -62,12 +62,14 @@ modified: 2026-09-23 SB 226 relocated and narrowed Utah's generative AI disclosure framework. The original §13-2-12 disclosure requirement (enacted by SB 149 in 2024) was repealed and re-enacted as a new Chapter 75 with substantive changes: -- **Narrower trigger.** The 2024 on-request standard was rewritten to require a consumer's "clear and unambiguous" request for AI disclosure (§13-75-103(1)). -- **New safe harbor.** Providing a clear and conspicuous disclosure at the outset of consumer interactions, and throughout, eliminates enforcement exposure for violating §13-75-103 (§13-75-104). -- **High-risk-occupation proactive tier.** For "high-risk AI interactions" (§13-75-101(5)) — sensitive data collection or personalized advice in finance, legal, medicine, or mental health — disclosure must be proactive: verbal at the start of oral exchanges, written before written exchanges (§13-75-103(2)-(3)). -- **Civil AI-assisted-violation liability.** §13-75-102 codifies the civil mirror of §76-2-107: "not a defense" that GenAI made the violative statement or was used in furtherance of the violation. +- **Narrower trigger.** A supplier that uses generative AI to interact with an individual in connection with a consumer transaction must disclose that the individual is interacting with generative AI and not a human if the individual asks or otherwise prompts the supplier about whether AI is being used. The prompt or question must be a "clear and unambiguous" request to determine whether the interaction is with a human or with AI (§13-75-103(1)). +- **New safe harbor.** A person is not subject to an enforcement action for violating §13-75-103 if its generative AI clearly and conspicuously discloses, at the outset of any interaction in connection with a consumer transaction or the provision of regulated services and throughout the interaction, that it is generative AI, is not human, or is an AI assistant (§13-75-104(1)). These are alternative safe-harbor forms, not the on-request content of §13-75-103(1). Chapter 75 does not displace other state or federal remedies (§13-75-106). +- **High-risk regulated-services tier.** An individual providing services in a regulated occupation (one regulated by the Department of Commerce that requires a license or state certification, §13-75-101(8)) must prominently disclose generative AI use in the provision of regulated services when that use is a "high-risk artificial intelligence interaction," and must comply with all requirements of the occupation when providing services through generative AI (§13-75-103(2)). A high-risk interaction involves collection of sensitive personal information, including health, financial or biometric data; personalized recommendations, advice or information that could reasonably be relied upon to make significant personal decisions, including financial, legal, medical or mental health advice or services; or other applications defined by division rule (§13-75-101(5)). The disclosure is given verbally at the start of a verbal interaction and in writing before the start of a written interaction (§13-75-103(3)). +- **Civil AI-assisted-violation liability.** §13-75-102 codifies the civil mirror of §76-2-107: for a violation of any statute administered and enforced by the division under §13-2-1, it is not a defense that generative AI made the violative statement, undertook the violative act, or was used in furtherance of the violation. It does not itself establish the elements of the underlying violation. - **Chapter 72 repeal date.** SB 226 §7 also amended §63I-2-213(5) to move the Chapter 72 (Artificial Intelligence Policy Act) repeal date from May 1, 2025 to July 1, 2027, the same amendment SB 332 made. That amendment took effect May 7, 2025, or on governor approval if passed by two-thirds of each house; the vote is not confirmed here. +These section references describe the retained 2025 enrolled SB 226, not independently validated current codification. + ### Talking Point > "SB 226 (2025) narrowed the original Utah on-request disclosure to require a 'clear and unambiguous' consumer prompt, added an outset+throughout safe harbor, and re-sited the civil mirror of the 'AI did it' defense at §13-75-102." diff --git a/docs/MANIFEST.yaml b/docs/MANIFEST.yaml index 4ee49d15..a1f5194d 100644 --- a/docs/MANIFEST.yaml +++ b/docs/MANIFEST.yaml @@ -193,7 +193,7 @@ files: - path: data/examples/instruments/us-ut-legislature-statute-2025-sb226.md role: instrument - hash: sha256:9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0 + hash: sha256:e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb note: data/examples/instruments/us-ut-legislature-statute-2025-sb226.md - path: data/examples/instruments/us-ut-legislature-statute-2025-sb332.md @@ -433,7 +433,7 @@ files: - path: CHANGELOG.md role: protocol - hash: sha256:98f17b9e5d32be9ce450dc2ea08aaae0896474cd2902df914d82d036d8ef90cf + hash: sha256:5c82713637e50b390f4d129f76960fe90926f50c59ddab8508d4c10eda12db9b note: CHANGELOG.md - path: CONTRIBUTING.md @@ -558,12 +558,12 @@ files: - path: scripts/check-source-admission.js role: tooling - hash: sha256:72aff0b1b51b4f90062298dd3a0e055f8ab1128c775478941d90b540239b4221 + hash: sha256:76a0e7590074fbe66084d92bbe3933fca6987f67fb2b611e7bacfbb2304db755 note: Source admission gate and EAL-compatible report - path: scripts/lib/source-admission.js role: tooling - hash: sha256:a58ce91920f115db9b69e7e47eaf497385e622e855de535455852b51c73b1b4f + hash: sha256:9d055d9310be2a708493e9214cc2c44cc61c0790f11096614c417ee568c3dbc8 note: Source admission digest and evidence policy - path: scripts/lib/api-projection.js @@ -578,7 +578,7 @@ files: - path: scripts/prepare-source-admission.js role: tooling - hash: sha256:f1287f2196bac855ae2b84c6f939e64e4e786ccadab16e69e23c01f436711dc6 + hash: sha256:a0b2780a88a9584ea5ea78600957d4521e6c000f5fcad0890c727bfa40da5f8e note: Pending admission packet generator - path: scripts/eval-mcp-rpc-framing.js @@ -598,7 +598,7 @@ files: - path: scripts/build.js role: tooling - hash: sha256:0ea9b3d271f36829c75e01943da3956143aa47fb581083894b171ae4067bcf96 + hash: sha256:08e3d69e730eb8edceefdebb1dfbaf94a522981a56cd8a2ee4e52d409cc18f71 note: scripts/build.js - path: scripts/check-production-search.mjs @@ -1038,7 +1038,7 @@ files: - path: tests/source-admission.test.js role: code - hash: sha256:e4fcbb61cf703c1dbcaf9b10c01feb50f548dfc3ac797b5ec3c717aeec3af5aa + hash: sha256:646f30d589ec1961dcc0f3377985c9dba1be6be2c0b0a66538135ba664632ac8 note: Source admission policy and producer-gate regressions - path: tests/publication-state.test.js @@ -1168,7 +1168,7 @@ files: - path: tests/sb226-r1.test.js role: code - hash: sha256:ba4f4636bad329be363c84d09c840cfe62a3fd89ec107025bddff21056a41c38 + hash: sha256:8f90a6fcb138808b652fe69ebf86e50e7a5c18c46f098155112f6726af1141d8 note: SB226 R1 retained-source and admission regressions - path: ops/evidence/sb226-r1-native-delta-2026-10-02.diff @@ -1185,3 +1185,11 @@ files: role: evidence hash: sha256:6d6bbc43b88d1ca9510466460e092bd6fd9484d3344919e810fc5d8259f09322 note: Scoped SB226 R1 owner repair receipt; instrument Summary remains gated + - path: ops/evidence/sb226-summary-succession-2026-10-11.md + role: evidence + hash: sha256:a26aa0c653c9c4f6ee4e89009914928e15ba15a3c567dda37cee3a865c3d5b86 + note: SB226 instrument Summary correction under agent receipt succession + - path: tests/sb226-summary-succession.test.js + role: code + hash: sha256:e16c21f3bfaabd8c89c5ba26cb159cff98451e0f5bb4bf0bb49a54679f55aeda + note: SB226 Summary successor embeds the human receipt and changes one unit diff --git a/docs/api/v1/of/determinations.json b/docs/api/v1/of/determinations.json index 63631bab..7e61e236 100644 --- a/docs/api/v1/of/determinations.json +++ b/docs/api/v1/of/determinations.json @@ -591,18 +591,20 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ], "pub:source_review_state": "declared", "pub:evidence_inputs": [ { "kind": "instrument", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "canonical_unit": null, - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "admission_status": "reviewed-changes", - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" @@ -613,7 +615,9 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ] } ] diff --git a/docs/api/v1/of/instruments.json b/docs/api/v1/of/instruments.json index 69b7ed2c..74fc3a9b 100644 --- a/docs/api/v1/of/instruments.json +++ b/docs/api/v1/of/instruments.json @@ -764,18 +764,20 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ], "pub:source_review_state": "declared", "pub:evidence_inputs": [ { "kind": "instrument", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "canonical_unit": null, - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "admission_status": "reviewed-changes", - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" @@ -786,7 +788,9 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ] } ] diff --git a/docs/api/v1/of/obligations.json b/docs/api/v1/of/obligations.json index 0e6a0da0..3f4db7ee 100644 --- a/docs/api/v1/of/obligations.json +++ b/docs/api/v1/of/obligations.json @@ -418,6 +418,8 @@ "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed.", "These Chapter75 locators are 2025 enrolled-version only. Coordinator retained publisher observations identify a Chapter75 subject/locator mismatch. Chapter77 is an unverified candidate only, with no retained index evidence and no validated bridge; the current-codification bridge and current SB226 status are not validated in this repair.", "Current division rules defining other high-risk applications or acceptable disclosure forms and methods have not been retained or reviewed.", "The incorporated 13-11-3 supplier and consumer-transaction definitions are not retained here; no new controlled-role equivalence is inferred.", @@ -429,11 +431,11 @@ { "kind": "instrument", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "canonical_unit": null, - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "admission_status": "reviewed-changes", - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" @@ -444,7 +446,9 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ] }, { @@ -531,6 +535,8 @@ "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed.", "These Chapter75 locators are 2025 enrolled-version only. Coordinator retained publisher observations identify a Chapter75 subject/locator mismatch. Chapter77 is an unverified candidate only, with no retained index evidence and no validated bridge; the current-codification bridge and current SB226 status are not validated in this repair.", "Current division rules defining other high-risk applications or acceptable disclosure forms and methods have not been retained or reviewed.", "The incorporated 13-11-3 supplier and consumer-transaction definitions are not retained here; no new controlled-role equivalence is inferred.", @@ -542,11 +548,11 @@ { "kind": "instrument", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "canonical_unit": null, - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "admission_status": "reviewed-changes", - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" @@ -557,7 +563,9 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ] }, { @@ -645,6 +653,8 @@ "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed.", "This agent review does not renew last_verified or authenticate human currentness review." ], "pub:source_review_state": "known-and-unknown", @@ -652,11 +662,11 @@ { "kind": "instrument", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "canonical_unit": null, - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "admission_status": "reviewed-changes", - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" @@ -667,7 +677,9 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ] }, { diff --git a/docs/api/v1/of/records/sb226-disclosure-and-ai-defense-ai-defense-elimination.json b/docs/api/v1/of/records/sb226-disclosure-and-ai-defense-ai-defense-elimination.json index d0e2909b..85ea3f64 100644 --- a/docs/api/v1/of/records/sb226-disclosure-and-ai-defense-ai-defense-elimination.json +++ b/docs/api/v1/of/records/sb226-disclosure-and-ai-defense-ai-defense-elimination.json @@ -49,6 +49,8 @@ "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed.", "This agent review does not renew last_verified or authenticate human currentness review." ], "pub:source_review_state": "known-and-unknown", @@ -56,11 +58,11 @@ { "kind": "instrument", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "canonical_unit": null, - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "admission_status": "reviewed-changes", - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" @@ -71,7 +73,9 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ] }, { diff --git a/docs/api/v1/of/records/sb226-disclosure-and-ai-defense-disclose-genai-high-risk-proactive.json b/docs/api/v1/of/records/sb226-disclosure-and-ai-defense-disclose-genai-high-risk-proactive.json index 907fb42e..e0ec4aef 100644 --- a/docs/api/v1/of/records/sb226-disclosure-and-ai-defense-disclose-genai-high-risk-proactive.json +++ b/docs/api/v1/of/records/sb226-disclosure-and-ai-defense-disclose-genai-high-risk-proactive.json @@ -48,6 +48,8 @@ "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed.", "These Chapter75 locators are 2025 enrolled-version only. Coordinator retained publisher observations identify a Chapter75 subject/locator mismatch. Chapter77 is an unverified candidate only, with no retained index evidence and no validated bridge; the current-codification bridge and current SB226 status are not validated in this repair.", "Current division rules defining other high-risk applications or acceptable disclosure forms and methods have not been retained or reviewed.", "The incorporated 13-11-3 supplier and consumer-transaction definitions are not retained here; no new controlled-role equivalence is inferred.", @@ -59,11 +61,11 @@ { "kind": "instrument", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "canonical_unit": null, - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "admission_status": "reviewed-changes", - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" @@ -74,7 +76,9 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ] }, { diff --git a/docs/api/v1/of/records/sb226-disclosure-and-ai-defense-disclose-genai-on-request.json b/docs/api/v1/of/records/sb226-disclosure-and-ai-defense-disclose-genai-on-request.json index a10216bd..8cf3ad10 100644 --- a/docs/api/v1/of/records/sb226-disclosure-and-ai-defense-disclose-genai-on-request.json +++ b/docs/api/v1/of/records/sb226-disclosure-and-ai-defense-disclose-genai-on-request.json @@ -48,6 +48,8 @@ "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed.", "These Chapter75 locators are 2025 enrolled-version only. Coordinator retained publisher observations identify a Chapter75 subject/locator mismatch. Chapter77 is an unverified candidate only, with no retained index evidence and no validated bridge; the current-codification bridge and current SB226 status are not validated in this repair.", "Current division rules defining other high-risk applications or acceptable disclosure forms and methods have not been retained or reviewed.", "The incorporated 13-11-3 supplier and consumer-transaction definitions are not retained here; no new controlled-role equivalence is inferred.", @@ -59,11 +61,11 @@ { "kind": "instrument", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "canonical_unit": null, - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "admission_status": "reviewed-changes", - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" @@ -74,7 +76,9 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ] }, { diff --git a/docs/api/v1/of/records/sb226-disclosure-and-ai-defense.json b/docs/api/v1/of/records/sb226-disclosure-and-ai-defense.json index 6db6f92a..d9bf46cb 100644 --- a/docs/api/v1/of/records/sb226-disclosure-and-ai-defense.json +++ b/docs/api/v1/of/records/sb226-disclosure-and-ai-defense.json @@ -41,18 +41,20 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ], "pub:source_review_state": "known-and-unknown", "pub:evidence_inputs": [ { "kind": "instrument", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "canonical_unit": null, - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "admission_status": "reviewed-changes", - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" @@ -63,7 +65,9 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ] }, { diff --git a/docs/api/v1/of/records/us-ut-legislature-statute-2025-sb226-issuance.json b/docs/api/v1/of/records/us-ut-legislature-statute-2025-sb226-issuance.json index 9091241b..875716e8 100644 --- a/docs/api/v1/of/records/us-ut-legislature-statute-2025-sb226-issuance.json +++ b/docs/api/v1/of/records/us-ut-legislature-statute-2025-sb226-issuance.json @@ -37,18 +37,20 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ], "pub:source_review_state": "declared", "pub:evidence_inputs": [ { "kind": "instrument", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "canonical_unit": null, - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "admission_status": "reviewed-changes", - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" @@ -59,7 +61,9 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ] } ] diff --git a/docs/api/v1/of/records/us-ut-legislature-statute-2025-sb226.json b/docs/api/v1/of/records/us-ut-legislature-statute-2025-sb226.json index fce226cd..f9e7c6f1 100644 --- a/docs/api/v1/of/records/us-ut-legislature-statute-2025-sb226.json +++ b/docs/api/v1/of/records/us-ut-legislature-statute-2025-sb226.json @@ -52,18 +52,20 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ], "pub:source_review_state": "declared", "pub:evidence_inputs": [ { "kind": "instrument", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "canonical_unit": null, - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "admission_status": "reviewed-changes", - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" @@ -74,7 +76,9 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ] } ] diff --git a/docs/api/v1/of/terms.json b/docs/api/v1/of/terms.json index e03b099e..530266b7 100644 --- a/docs/api/v1/of/terms.json +++ b/docs/api/v1/of/terms.json @@ -235,18 +235,20 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ], "pub:source_review_state": "known-and-unknown", "pub:evidence_inputs": [ { "kind": "instrument", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "canonical_unit": null, - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "admission_status": "reviewed-changes", - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" @@ -257,7 +259,9 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ] }, { diff --git a/docs/data/examples/instruments/us-ut-legislature-statute-2025-sb226.md b/docs/data/examples/instruments/us-ut-legislature-statute-2025-sb226.md index 1f731c66..b609f3e5 100644 --- a/docs/data/examples/instruments/us-ut-legislature-statute-2025-sb226.md +++ b/docs/data/examples/instruments/us-ut-legislature-statute-2025-sb226.md @@ -62,12 +62,14 @@ modified: 2026-09-23 SB 226 relocated and narrowed Utah's generative AI disclosure framework. The original §13-2-12 disclosure requirement (enacted by SB 149 in 2024) was repealed and re-enacted as a new Chapter 75 with substantive changes: -- **Narrower trigger.** The 2024 on-request standard was rewritten to require a consumer's "clear and unambiguous" request for AI disclosure (§13-75-103(1)). -- **New safe harbor.** Providing a clear and conspicuous disclosure at the outset of consumer interactions, and throughout, eliminates enforcement exposure for violating §13-75-103 (§13-75-104). -- **High-risk-occupation proactive tier.** For "high-risk AI interactions" (§13-75-101(5)) — sensitive data collection or personalized advice in finance, legal, medicine, or mental health — disclosure must be proactive: verbal at the start of oral exchanges, written before written exchanges (§13-75-103(2)-(3)). -- **Civil AI-assisted-violation liability.** §13-75-102 codifies the civil mirror of §76-2-107: "not a defense" that GenAI made the violative statement or was used in furtherance of the violation. +- **Narrower trigger.** A supplier that uses generative AI to interact with an individual in connection with a consumer transaction must disclose that the individual is interacting with generative AI and not a human if the individual asks or otherwise prompts the supplier about whether AI is being used. The prompt or question must be a "clear and unambiguous" request to determine whether the interaction is with a human or with AI (§13-75-103(1)). +- **New safe harbor.** A person is not subject to an enforcement action for violating §13-75-103 if its generative AI clearly and conspicuously discloses, at the outset of any interaction in connection with a consumer transaction or the provision of regulated services and throughout the interaction, that it is generative AI, is not human, or is an AI assistant (§13-75-104(1)). These are alternative safe-harbor forms, not the on-request content of §13-75-103(1). Chapter 75 does not displace other state or federal remedies (§13-75-106). +- **High-risk regulated-services tier.** An individual providing services in a regulated occupation (one regulated by the Department of Commerce that requires a license or state certification, §13-75-101(8)) must prominently disclose generative AI use in the provision of regulated services when that use is a "high-risk artificial intelligence interaction," and must comply with all requirements of the occupation when providing services through generative AI (§13-75-103(2)). A high-risk interaction involves collection of sensitive personal information, including health, financial or biometric data; personalized recommendations, advice or information that could reasonably be relied upon to make significant personal decisions, including financial, legal, medical or mental health advice or services; or other applications defined by division rule (§13-75-101(5)). The disclosure is given verbally at the start of a verbal interaction and in writing before the start of a written interaction (§13-75-103(3)). +- **Civil AI-assisted-violation liability.** §13-75-102 codifies the civil mirror of §76-2-107: for a violation of any statute administered and enforced by the division under §13-2-1, it is not a defense that generative AI made the violative statement, undertook the violative act, or was used in furtherance of the violation. It does not itself establish the elements of the underlying violation. - **Chapter 72 repeal date.** SB 226 §7 also amended §63I-2-213(5) to move the Chapter 72 (Artificial Intelligence Policy Act) repeal date from May 1, 2025 to July 1, 2027, the same amendment SB 332 made. That amendment took effect May 7, 2025, or on governor approval if passed by two-thirds of each house; the vote is not confirmed here. +These section references describe the retained 2025 enrolled SB 226, not independently validated current codification. + ### Talking Point > "SB 226 (2025) narrowed the original Utah on-request disclosure to require a 'clear and unambiguous' consumer prompt, added an outset+throughout safe harbor, and re-sited the civil mirror of the 'AI did it' defense at §13-75-102." diff --git a/docs/determination/us-ut-legislature-statute-2025-sb226-issuance.json b/docs/determination/us-ut-legislature-statute-2025-sb226-issuance.json index 9091241b..875716e8 100644 --- a/docs/determination/us-ut-legislature-statute-2025-sb226-issuance.json +++ b/docs/determination/us-ut-legislature-statute-2025-sb226-issuance.json @@ -37,18 +37,20 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ], "pub:source_review_state": "declared", "pub:evidence_inputs": [ { "kind": "instrument", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "canonical_unit": null, - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "admission_status": "reviewed-changes", - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" @@ -59,7 +61,9 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ] } ] diff --git a/docs/instrument/us-ut-legislature-statute-2025-sb226.json b/docs/instrument/us-ut-legislature-statute-2025-sb226.json index fce226cd..f9e7c6f1 100644 --- a/docs/instrument/us-ut-legislature-statute-2025-sb226.json +++ b/docs/instrument/us-ut-legislature-statute-2025-sb226.json @@ -52,18 +52,20 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ], "pub:source_review_state": "declared", "pub:evidence_inputs": [ { "kind": "instrument", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "canonical_unit": null, - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "admission_status": "reviewed-changes", - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" @@ -74,7 +76,9 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ] } ] diff --git a/docs/obligation/sb226-disclosure-and-ai-defense-ai-defense-elimination.json b/docs/obligation/sb226-disclosure-and-ai-defense-ai-defense-elimination.json index d0e2909b..85ea3f64 100644 --- a/docs/obligation/sb226-disclosure-and-ai-defense-ai-defense-elimination.json +++ b/docs/obligation/sb226-disclosure-and-ai-defense-ai-defense-elimination.json @@ -49,6 +49,8 @@ "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed.", "This agent review does not renew last_verified or authenticate human currentness review." ], "pub:source_review_state": "known-and-unknown", @@ -56,11 +58,11 @@ { "kind": "instrument", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "canonical_unit": null, - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "admission_status": "reviewed-changes", - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" @@ -71,7 +73,9 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ] }, { diff --git a/docs/obligation/sb226-disclosure-and-ai-defense-disclose-genai-high-risk-proactive.json b/docs/obligation/sb226-disclosure-and-ai-defense-disclose-genai-high-risk-proactive.json index 907fb42e..e0ec4aef 100644 --- a/docs/obligation/sb226-disclosure-and-ai-defense-disclose-genai-high-risk-proactive.json +++ b/docs/obligation/sb226-disclosure-and-ai-defense-disclose-genai-high-risk-proactive.json @@ -48,6 +48,8 @@ "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed.", "These Chapter75 locators are 2025 enrolled-version only. Coordinator retained publisher observations identify a Chapter75 subject/locator mismatch. Chapter77 is an unverified candidate only, with no retained index evidence and no validated bridge; the current-codification bridge and current SB226 status are not validated in this repair.", "Current division rules defining other high-risk applications or acceptable disclosure forms and methods have not been retained or reviewed.", "The incorporated 13-11-3 supplier and consumer-transaction definitions are not retained here; no new controlled-role equivalence is inferred.", @@ -59,11 +61,11 @@ { "kind": "instrument", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "canonical_unit": null, - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "admission_status": "reviewed-changes", - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" @@ -74,7 +76,9 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ] }, { diff --git a/docs/obligation/sb226-disclosure-and-ai-defense-disclose-genai-on-request.json b/docs/obligation/sb226-disclosure-and-ai-defense-disclose-genai-on-request.json index a10216bd..8cf3ad10 100644 --- a/docs/obligation/sb226-disclosure-and-ai-defense-disclose-genai-on-request.json +++ b/docs/obligation/sb226-disclosure-and-ai-defense-disclose-genai-on-request.json @@ -48,6 +48,8 @@ "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed.", "These Chapter75 locators are 2025 enrolled-version only. Coordinator retained publisher observations identify a Chapter75 subject/locator mismatch. Chapter77 is an unverified candidate only, with no retained index evidence and no validated bridge; the current-codification bridge and current SB226 status are not validated in this repair.", "Current division rules defining other high-risk applications or acceptable disclosure forms and methods have not been retained or reviewed.", "The incorporated 13-11-3 supplier and consumer-transaction definitions are not retained here; no new controlled-role equivalence is inferred.", @@ -59,11 +61,11 @@ { "kind": "instrument", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "canonical_unit": null, - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "admission_status": "reviewed-changes", - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" @@ -74,7 +76,9 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ] }, { diff --git a/docs/term/sb226-disclosure-and-ai-defense.json b/docs/term/sb226-disclosure-and-ai-defense.json index 6db6f92a..d9bf46cb 100644 --- a/docs/term/sb226-disclosure-and-ai-defense.json +++ b/docs/term/sb226-disclosure-and-ai-defense.json @@ -41,18 +41,20 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ], "pub:source_review_state": "known-and-unknown", "pub:evidence_inputs": [ { "kind": "instrument", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "canonical_unit": null, - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "admission_status": "reviewed-changes", - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" @@ -63,7 +65,9 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ] }, { diff --git a/ops/evidence/sb226-summary-succession-2026-10-11.md b/ops/evidence/sb226-summary-succession-2026-10-11.md new file mode 100644 index 00000000..0e505c96 --- /dev/null +++ b/ops/evidence/sb226-summary-succession-2026-10-11.md @@ -0,0 +1,41 @@ +# SB226 instrument Summary under receipt succession (2026-10-11) + +Scope: the `section:Summary/text` unit of `data/examples/instruments/us-ut-legislature-statute-2025-sb226.md`, and the admission contract change that lets an agent correct it without rewriting or borrowing the 2026-09-24 human review. Stacked on the SB226 R1 definition candidate (PR #21, `f1f5eab2`). + +## Authority + +Sam Rogers chose receipt succession on 2026-10-11 over a fresh human review or leaving the Summary unchanged. This note records an agent self-review against retained evidence, not human acceptance, current-law certification, or a renewed verification date. + +## Contract change + +- `scripts/lib/source-admission.js`: a receipt may carry `supersedes: { packet_sha256, reason, receipt }`. The embedded receipt is validated recursively against the legacy baseline, must reproduce its own admitted record hash from its unit hashes, and must match the pinned packet digest. The successor binds to that admitted state, reviews only units changed since, and must carry forward every earlier unresolved item. The Verified rule is unchanged: an agent successor cannot renew `last_verified` or Verified rows. +- `scripts/check-source-admission.js`: against a base commit, an accepted receipt must remain byte-for-byte present, either unchanged or embedded in the current receipt's lineage. A rewritten receipt fails. +- `scripts/prepare-source-admission.js --supersede` prepares a successor packet; preparing a plain packet for a record that already has a receipt is refused. +- `scripts/build.js`: Obligation-First evidence inputs read unit reviews through the lineage, so unchanged units keep their earlier review and evidence. +- Admission accounting counts every unit review in a lineage: 62 records, 42 legacy-unreviewed, 20 with reviewed changes, 124 unit reviews (123 before, plus this one). + +## Native delta + +One unit changed. Every other unit, including `last_verified: 2026-09-23`, Sponsors, Timeline, Talking Point, and Sources, is identical to the state the human receipt admitted. The Summary now carries, from retained 2025 enrolled SB 226 (PDF SHA-256 `279184eb...07c60e8`, text `088cb731...7d08d7`): + +- §13-75-103(1), printed lines 98-105: supplier, consumer transaction, asks or otherwise prompts, clear and unambiguous request, and the conjunctive GenAI-and-not-human content. +- §13-75-104(1), lines 118-126: section 103-only relief, consumer transaction or regulated services, outset and throughout, and the three alternative forms; §13-75-106, lines 164-168: other remedies preserved. +- §13-75-103(2)-(3), lines 106-115, with §13-75-101(8), lines 75-78: the individual regulated-occupation actor without a supplier condition, prominence, occupational compliance, and channel-specific timing. +- §13-75-101(5), lines 54-67: the complete high-risk definition, including the significance criterion and the division-rule branch. +- §13-75-102, lines 90-95: the underlying-violation boundary. + +These correspond to Foundation SB226 comparison rows U02, U03.a2, U03.b, and U04.a-d. + +## Successor receipt + +- Packet SHA-256 `f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c`, actor type `agent`, no `human_approved`. +- Embedded human receipt digest `477433cdc9aa83a53073e06246dc52f2914874b80d326b8001ddeb27fa3ccd6b` (packet `4ac77cfc...1733`), unchanged. +- Unresolved: the five earlier items plus two new ones (2025 enrolled locators only, with the 2026-10-02 Chapter 75 locator mismatch; division rules and incorporated §§13-11-3 and 13-2-1 not retained). + +## Obligation-First fingerprint + +The guarded owner writer was run after inspection. Only `provenance_claims` changed, for six SB226 records: the instrument, its issuance determination, its term, and its three obligations. Changed fields: instrument evidence-input `native_file_sha256`, `canonical_sha256`, `review_packet_sha256`, and unresolved counts (+2). Retained primary hashes, identity, scope, relationships, dates, and every other record are unchanged. + +## Not done + +No `last_verified`, Verified, effective-date, or legal-status renewal. No current-codification bridge, new source acquisition, mapping promotion, R3 civil/criminal change, or HB 452 work. The paired review with EveryAILaw draft PR 534 and the Obligation First consumer-answer contract remains open. diff --git a/scripts/build.js b/scripts/build.js index b6858e05..57051454 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -2202,20 +2202,23 @@ function build() { const containers = loadContainers(containerDir); const authorities = loadDir(authorityDir); const mappingIndex = loadMappingIndex(mappingPath); + const sourceAdmission = require('./lib/source-admission'); const admissionReceipts = JSON.parse(fs.readFileSync(path.join(ROOT, 'data/admission/receipts.json'), 'utf8')); const evidenceInput = (filename, kind, unitKey = null) => { const bytes = fs.readFileSync(path.join(ROOT, filename)); - const snapshot = require('./lib/source-admission').nativeSnapshot(filename, bytes); + const snapshot = sourceAdmission.nativeSnapshot(filename, bytes); const state = admission.emitted[filename]; if (!state) throw new Error(`Missing source admission state for ${filename}`); const receipt = admissionReceipts.records[filename]; - const unitReview = unitKey ? receipt?.units?.[unitKey] : null; + // Successor receipts leave unchanged units under their predecessor's review. + const unitReviews = receipt ? sourceAdmission.effectiveUnitReviews(receipt) : {}; + const unitReview = unitKey ? unitReviews[unitKey] : null; const reviewed = unitKey ? Boolean(unitReview) : state.admission_status === 'reviewed-changes'; - const evidenceRefs = unitKey ? (unitReview?.evidence || []) : Object.values(receipt?.units || {}).flatMap(unit => unit.evidence || []); - const retainedPrimary = reviewed ? [...new Set(evidenceRefs.flatMap(reference => { - const evidence = typeof reference === 'string' ? receipt?.evidence?.[reference] : reference; + const evidenceRefs = unitKey ? (unitReview ? [unitReview] : []) : Object.values(unitReviews); + const retainedPrimary = reviewed ? [...new Set(evidenceRefs.flatMap(({ review, receipt: owner }) => (review.evidence || []).flatMap(reference => { + const evidence = typeof reference === 'string' ? owner.evidence?.[reference] : reference; return evidence?.original?.sha256 ? [evidence.original.sha256] : []; - }))].sort() : null; + })))].sort() : null; return { kind, native_path: filename, diff --git a/scripts/check-source-admission.js b/scripts/check-source-admission.js index 6b450250..f3ba4a01 100644 --- a/scripts/check-source-admission.js +++ b/scripts/check-source-admission.js @@ -56,9 +56,19 @@ function assertForEmission(options = {}) { return result; } +// Accepted receipts are immutable: a later review must embed the base receipt +// verbatim through supersedes rather than rewrite or replace it. function retainPriorReceipts(result, admissions, prior) { - for (const filename of Object.keys(prior?.records || {})) { - if (!admissions.records[filename]) result.errors.push(`${filename}: previously reviewed record lost its receipt`); + for (const [filename, accepted] of Object.entries(prior?.records || {})) { + const receipt = admissions.records[filename]; + if (!receipt) { + result.errors.push(`${filename}: previously reviewed record lost its receipt`); + continue; + } + const acceptedDigest = admission.digest(accepted); + if (!admission.receiptLineage(receipt).some(entry => admission.digest(entry) === acceptedDigest)) { + result.errors.push(`${filename}: previously accepted receipt was rewritten instead of superseded`); + } } result.status = result.errors.length ? 'failed' : 'passed'; return result; diff --git a/scripts/lib/source-admission.js b/scripts/lib/source-admission.js index bc2a1f40..72e8507c 100644 --- a/scripts/lib/source-admission.js +++ b/scripts/lib/source-admission.js @@ -154,6 +154,108 @@ function isIssuanceEvidence(evidence) { const identityShowsIssuance = /\b(?:issued|executed|signed|enacted|official notice|order|decision|determination|agreement)\b/.test(identity); return eligibleType && identityShowsIssuance; } +// A receipt is reviewed against a base state: the frozen legacy record, or for a +// successor receipt the exact record state its embedded predecessor admitted. +// Successors embed the predecessor verbatim, so an earlier human review stays +// immutable and keeps covering every unit the successor does not change. +function legacyState(previous) { + return { sha256: previous?.sha256 || null, units: { ...(previous?.units || {}) } }; +} +function receiptLineage(receipt) { + const lineage = []; + for (let current = receipt; current; current = current.supersedes?.receipt) lineage.unshift(current); + return lineage; +} +// Units still covered by some review in the lineage, newest review winning. +function effectiveUnitReviews(receipt) { + const units = {}; + for (const entry of receiptLineage(receipt)) { + for (const [key, review] of Object.entries(entry.units || {})) { + if (review?.after_sha256 === null) delete units[key]; + else units[key] = { review, receipt: entry }; + } + } + return units; +} +function reviewReceipt(receipt, base, target, { read, now, metadata = null }) { + requireValue(receipt.record_sha256 === target.sha256, 'Receipt is stale for current record'); + requireValue(receipt.baseline_sha256 === base.sha256, 'Wrong historical input binding'); + requireValue(receipt.whole_record?.before_sha256 === base.sha256 && receipt.whole_record?.after_sha256 === target.sha256, 'Whole-record before/after binding is stale'); + requireValue(receipt.review?.packet_sha256 === packetDigest(receipt), 'Review packet changed after acceptance'); + requireValue(['agent', 'human'].includes(receipt.review?.actor_type), 'Explicit reviewer type required'); + nonempty(receipt.review.actor, 'review.actor'); + requireValue(validTimestamp(receipt.review.reviewed_at), 'Invalid review timestamp'); + requireValue(Date.parse(receipt.review.reviewed_at) <= now.getTime(), 'Review timestamp cannot be in the future'); + requireValue(receipt.review.decision === 'source-consistency-reviewed', 'Pending/rejected review cannot admit a record'); + nonempty(receipt.review.scope, 'review.scope'); + requireValue(Array.isArray(receipt.unresolved), 'Unresolved conflicts must be explicit'); + requireValue(receipt.units && typeof receipt.units === 'object' && !Array.isArray(receipt.units), 'Unit reviews required'); + const changed = [...new Set([...Object.keys(base.units), ...Object.keys(target.units)])].filter(key => (base.units[key] || null) !== (target.units[key] || null)); + requireValue(changed.length > 0, 'Receipt cannot relabel unchanged legacy information as reviewed'); + const usedEvidence = new Set(); + const reviewedEvidence = []; + for (const key of changed) { + const review = receipt.units[key]; + requireValue(review, `Unreviewed changed unit: ${key}`); + requireValue(review.before_sha256 === (base.units[key] || null) && review.after_sha256 === (target.units[key] || null), `Stale unit review: ${key}`); + // Unit hashes are digests of unit content, so this binds the displayed text. + const displayed = review.after_sha256 === null ? review.candidate_content === null : digest(review.candidate_content) === review.after_sha256; + requireValue(Object.hasOwn(review, 'candidate_content') && displayed, `Review displays stale candidate content: ${key}`); + nonempty(review.reason, 'unit reason'); + for (const qualifier of ['scope', 'exceptions', 'time']) nonempty(review.qualifications?.[qualifier], `unit qualifications.${qualifier}`); + requireValue(Array.isArray(review.evidence) && review.evidence.length > 0, `Missing supporting evidence: ${key}`); + for (const reference of review.evidence) { + const evidence = typeof reference === 'string' ? receipt.evidence?.[reference] : reference; + if (typeof reference === 'string') usedEvidence.add(reference); + validateEvidence(evidence, read, now); + reviewedEvidence.push(evidence); + } + if (isVerifiedUnit(key)) requireValue(receipt.review.actor_type === 'human', 'Agent source consistency review cannot renew Verified'); + } + for (const key of Object.keys(receipt.units)) requireValue(changed.includes(key), `Extraneous or stale unit acceptance: ${key}`); + for (const key of Object.keys(receipt.evidence || {})) requireValue(usedEvidence.has(key), `Unreferenced evidence in review packet: ${key}`); + if (metadata) { + const issuanceClaimChanged = changed.some(key => [ + 'metadata:source', 'metadata:editorial_status', 'metadata:status', 'metadata:issuance_event', 'metadata:enacted' + ].includes(key)); + const claimsCurrentIssuance = metadata.source === 'authority-issued' && + (metadata.editorial_status === 'published' || metadata.status === 'enforcing'); + if (issuanceClaimChanged && claimsCurrentIssuance) { + requireValue(reviewedEvidence.some(isIssuanceEvidence), 'Authority-issued publication/enforcement claims require an issued agreement, enactment, official order, or official authority instrument; proposals, drafts, complaints, and press coverage are insufficient'); + } + if (issuanceClaimChanged && metadata.source === 'publedge-original-draft') { + requireValue(metadata.status === 'proposed' && !metadata.issuance_event && !metadata.enacted, 'PubLedge original drafts must remain proposed without issuance_event or enacted until authority sign-off changes the source'); + } + } + requireValue(!receipt.review.human_approved || receipt.review.actor_type === 'human', 'Agent cannot assert human approval'); + return changed.length; +} +// Validates an embedded predecessor chain and returns the record state it admitted. +// Predecessor content is not on disk, so each unit is checked against its own +// displayed candidate content and the whole record against its unit hashes. +function admittedState(receipt, previous, options) { + const base = receipt.supersedes ? successorBase(receipt, previous, options) : legacyState(previous); + const units = { ...base.units }; + for (const [key, review] of Object.entries(receipt.units || {})) { + if (review?.after_sha256 === null) delete units[key]; + else units[key] = review?.after_sha256; + } + const sha256 = digest(units); + requireValue(receipt.record_sha256 === sha256, 'Superseded receipt does not reproduce its admitted record'); + reviewReceipt(receipt, base, { sha256, units }, options); + return { sha256, units }; +} +function successorBase(receipt, previous, options) { + const prior = receipt.supersedes.receipt; + requireValue(prior && typeof prior === 'object' && !Array.isArray(prior), 'Superseded receipt must be embedded verbatim'); + requireValue(receipt.supersedes.packet_sha256 === prior.review?.packet_sha256, 'Superseded packet binding is stale'); + nonempty(receipt.supersedes.reason, 'supersedes.reason'); + const base = admittedState(prior, previous, options); + for (const item of prior.unresolved || []) { + requireValue((receipt.unresolved || []).includes(item), 'Successor must carry forward every unresolved item of the superseded receipt'); + } + return base; +} function validateAdmission({ current, legacy, admissions, read, now = new Date() }) { requireValue(legacy.version === 1 && admissions.version === 1, 'Unknown admission contract version'); requireValue(legacy.status === 'legacy-unreviewed', 'Historical corpus must remain explicitly legacy-unreviewed'); @@ -174,53 +276,12 @@ function validateAdmission({ current, legacy, admissions, read, now = new Date() return; } requireValue(receipt, 'Changed/new source information requires an admission receipt'); - requireValue(receipt.record_sha256 === snapshot.sha256, 'Receipt is stale for current record'); - requireValue(receipt.baseline_sha256 === (previous?.sha256 || null), 'Wrong historical input binding'); - requireValue(receipt.whole_record?.before_sha256 === (previous?.sha256 || null) && receipt.whole_record?.after_sha256 === snapshot.sha256, 'Whole-record before/after binding is stale'); - requireValue(receipt.review?.packet_sha256 === packetDigest(receipt), 'Review packet changed after acceptance'); - requireValue(['agent', 'human'].includes(receipt.review?.actor_type), 'Explicit reviewer type required'); - nonempty(receipt.review.actor, 'review.actor'); - requireValue(validTimestamp(receipt.review.reviewed_at), 'Invalid review timestamp'); - requireValue(Date.parse(receipt.review.reviewed_at) <= now.getTime(), 'Review timestamp cannot be in the future'); - requireValue(receipt.review.decision === 'source-consistency-reviewed', 'Pending/rejected review cannot admit a record'); - nonempty(receipt.review.scope, 'review.scope'); - requireValue(Array.isArray(receipt.unresolved), 'Unresolved conflicts must be explicit'); - requireValue(receipt.units && typeof receipt.units === 'object' && !Array.isArray(receipt.units), 'Unit reviews required'); - const changed = [...new Set([...Object.keys(previous?.units || {}), ...Object.keys(snapshot.units)])].filter(key => previous?.units[key] !== snapshot.units[key]?.sha256); - requireValue(changed.length > 0, 'Receipt cannot relabel unchanged legacy information as reviewed'); - const usedEvidence = new Set(); - const reviewedEvidence = []; - for (const key of changed) { - const review = receipt.units[key]; - requireValue(review, `Unreviewed changed unit: ${key}`); - requireValue(review.before_sha256 === (previous?.units[key] || null) && review.after_sha256 === (snapshot.units[key]?.sha256 || null), `Stale unit review: ${key}`); - requireValue(Object.hasOwn(review, 'candidate_content') && digest(review.candidate_content) === digest(snapshot.units[key]?.content ?? null), `Review displays stale candidate content: ${key}`); - nonempty(review.reason, 'unit reason'); - for (const qualifier of ['scope', 'exceptions', 'time']) nonempty(review.qualifications?.[qualifier], `unit qualifications.${qualifier}`); - requireValue(Array.isArray(review.evidence) && review.evidence.length > 0, `Missing supporting evidence: ${key}`); - for (const reference of review.evidence) { - const evidence = typeof reference === 'string' ? receipt.evidence?.[reference] : reference; - if (typeof reference === 'string') usedEvidence.add(reference); - validateEvidence(evidence, read, now); - reviewedEvidence.push(evidence); - } - if (isVerifiedUnit(key)) requireValue(receipt.review.actor_type === 'human', 'Agent source consistency review cannot renew Verified'); - changedUnits++; - } - for (const key of Object.keys(receipt.units)) requireValue(changed.includes(key), `Extraneous or stale unit acceptance: ${key}`); - for (const key of Object.keys(receipt.evidence || {})) requireValue(usedEvidence.has(key), `Unreferenced evidence in review packet: ${key}`); - const issuanceClaimChanged = changed.some(key => [ - 'metadata:source', 'metadata:editorial_status', 'metadata:status', 'metadata:issuance_event', 'metadata:enacted' - ].includes(key)); - const claimsCurrentIssuance = snapshot.metadata.source === 'authority-issued' && - (snapshot.metadata.editorial_status === 'published' || snapshot.metadata.status === 'enforcing'); - if (issuanceClaimChanged && claimsCurrentIssuance) { - requireValue(reviewedEvidence.some(isIssuanceEvidence), 'Authority-issued publication/enforcement claims require an issued agreement, enactment, official order, or official authority instrument; proposals, drafts, complaints, and press coverage are insufficient'); - } - if (issuanceClaimChanged && snapshot.metadata.source === 'publedge-original-draft') { - requireValue(snapshot.metadata.status === 'proposed' && !snapshot.metadata.issuance_event && !snapshot.metadata.enacted, 'PubLedge original drafts must remain proposed without issuance_event or enacted until authority sign-off changes the source'); - } - requireValue(!receipt.review.human_approved || receipt.review.actor_type === 'human', 'Agent cannot assert human approval'); + const options = { read, now }; + const base = receipt.supersedes ? successorBase(receipt, previous, options) : legacyState(previous); + const target = { sha256: snapshot.sha256, units: unitHashes(snapshot) }; + reviewReceipt(receipt, base, target, { ...options, metadata: snapshot.metadata }); + // Count every unit review in the lineage, including superseded ones. + changedUnits += receiptLineage(receipt).reduce((total, entry) => total + Object.keys(entry.units).length, 0); reviewedCount++; emitted[filename] = { record_sha256: snapshot.sha256, admission_status: 'reviewed-changes', review_packet_sha256: receipt.review.packet_sha256 }; }); @@ -249,4 +310,4 @@ function validateRuntimeSeal({ current, legacy, admissions }) { return { status: errors.length ? 'failed' : 'passed', errors }; } -module.exports = { hash, digest, safePath, readRegular, markdownSnapshot, nativeSnapshot, unitHashes, protectedPath, packetDigest, validateEvidence, validateAdmission, validateRuntimeSeal, isIssuanceEvidence }; +module.exports = { hash, digest, safePath, readRegular, markdownSnapshot, nativeSnapshot, unitHashes, protectedPath, packetDigest, validateEvidence, validateAdmission, validateRuntimeSeal, isIssuanceEvidence, receiptLineage, effectiveUnitReviews, admittedState, legacyState }; diff --git a/scripts/prepare-source-admission.js b/scripts/prepare-source-admission.js index 89dc08b4..f5766b8f 100644 --- a/scripts/prepare-source-admission.js +++ b/scripts/prepare-source-admission.js @@ -5,23 +5,34 @@ const path = require('node:path'); const admission = require('./lib/source-admission'); -function prepare(filename, { root = path.join(__dirname, '..') } = {}) { +// With supersede, the packet reviews only units changed since the existing +// receipt, which it embeds verbatim so the earlier review stays immutable. +function prepare(filename, { root = path.join(__dirname, '..'), supersede = false } = {}) { if (!admission.protectedPath(filename)) throw new Error('Choose a protected native source path'); const legacy = JSON.parse(admission.readRegular(root, 'data/admission/legacy.json')); const snapshot = admission.nativeSnapshot(filename, admission.readRegular(root, filename)); - const previous = legacy.records[filename]; - const changed = [...new Set([...Object.keys(previous?.units || {}), ...Object.keys(snapshot.units)])] - .filter(key => previous?.units[key] !== snapshot.units[key]?.sha256); - if (!changed.length) throw new Error('No substantive changes; unchanged legacy information is not accepted by this workflow'); + const existing = JSON.parse(admission.readRegular(root, 'data/admission/receipts.json')).records[filename]; + let base; + if (supersede) { + if (!existing) throw new Error('No existing receipt to supersede'); + base = admission.admittedState(existing, legacy.records[filename], { read: file => admission.readRegular(root, file), now: new Date() }); + } else { + if (existing) throw new Error('Record already has a receipt; prepare a successor with --supersede'); + base = admission.legacyState(legacy.records[filename]); + } + const changed = [...new Set([...Object.keys(base.units), ...Object.keys(snapshot.units)])] + .filter(key => (base.units[key] || null) !== (snapshot.units[key]?.sha256 || null)); + if (!changed.length) throw new Error('No substantive changes; unchanged information is not accepted by this workflow'); return { record_sha256: snapshot.sha256, - baseline_sha256: previous?.sha256 || null, - whole_record: { before_sha256: previous?.sha256 || null, after_sha256: snapshot.sha256 }, + baseline_sha256: base.sha256, + whole_record: { before_sha256: base.sha256, after_sha256: snapshot.sha256 }, + ...(supersede ? { supersedes: { packet_sha256: existing.review.packet_sha256, reason: '', receipt: existing } } : {}), review: { actor_type: 'agent', actor: '', reviewed_at: '', decision: 'pending', scope: '', packet_sha256: null }, - unresolved: [], + unresolved: supersede ? [...(existing.unresolved || [])] : [], evidence: {}, units: Object.fromEntries(changed.map(key => [key, { - before_sha256: previous?.units[key] || null, + before_sha256: base.units[key] || null, after_sha256: snapshot.units[key]?.sha256 || null, candidate_content: snapshot.units[key]?.content ?? null, reason: '', @@ -34,8 +45,10 @@ function prepare(filename, { root = path.join(__dirname, '..') } = {}) { if (require.main === module) { try { const args = process.argv.slice(2); - if (args.length !== 2 || args[0] !== '--file') throw new Error('Usage: prepare-source-admission.js --file data/examples/instruments/record.md'); - console.log(JSON.stringify(prepare(args[1]), null, 2)); + const supersede = args.includes('--supersede'); + const rest = args.filter(arg => arg !== '--supersede'); + if (rest.length !== 2 || rest[0] !== '--file') throw new Error('Usage: prepare-source-admission.js --file data/examples/instruments/record.md [--supersede]'); + console.log(JSON.stringify(prepare(rest[1], { supersede }), null, 2)); } catch (error) { console.error(error.message); process.exitCode = 1; diff --git a/tests/fixtures/of-contract-fingerprint.json b/tests/fixtures/of-contract-fingerprint.json index 3bf4ed03..0c4eca98 100644 --- a/tests/fixtures/of-contract-fingerprint.json +++ b/tests/fixtures/of-contract-fingerprint.json @@ -3003,22 +3003,24 @@ "pub:evidence_inputs": [ { "admission_status": "reviewed-changes", - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "canonical_unit": null, "kind": "instrument", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" ], - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "unresolved": [ "enacted (2025-03-25) and the Introduced month (2025-02) are not in the enrolled copy and the le.utah.gov SB0226 status table is not retained; rows are marked unconfirmed and the enacted field is unchanged.", "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ], "unresolved_review_state": "declared" } @@ -3029,7 +3031,9 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ], "source": "https://le.utah.gov/~2025/bills/static/SB0226.html", "source_citation": "Utah SB 226 (2025 General Session)", @@ -3556,22 +3560,24 @@ "pub:evidence_inputs": [ { "admission_status": "reviewed-changes", - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "canonical_unit": null, "kind": "instrument", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" ], - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "unresolved": [ "enacted (2025-03-25) and the Introduced month (2025-02) are not in the enrolled copy and the le.utah.gov SB0226 status table is not retained; rows are marked unconfirmed and the enacted field is unchanged.", "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ], "unresolved_review_state": "declared" } @@ -3582,7 +3588,9 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ], "source": "https://le.utah.gov/~2025/bills/static/SB0226.html", "source_citation": "Utah SB 226 (2025 General Session)", @@ -6542,22 +6550,24 @@ "pub:evidence_inputs": [ { "admission_status": "reviewed-changes", - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "canonical_unit": null, "kind": "instrument", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" ], - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "unresolved": [ "enacted (2025-03-25) and the Introduced month (2025-02) are not in the enrolled copy and the le.utah.gov SB0226 status table is not retained; rows are marked unconfirmed and the enacted field is unchanged.", "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ], "unresolved_review_state": "declared" }, @@ -6598,6 +6608,8 @@ "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed.", "This agent review does not renew last_verified or authenticate human currentness review." ], "source": "https://le.utah.gov/~2025/bills/static/SB0226.html", @@ -6613,22 +6625,24 @@ "pub:evidence_inputs": [ { "admission_status": "reviewed-changes", - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "canonical_unit": null, "kind": "instrument", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" ], - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "unresolved": [ "enacted (2025-03-25) and the Introduced month (2025-02) are not in the enrolled copy and the le.utah.gov SB0226 status table is not retained; rows are marked unconfirmed and the enacted field is unchanged.", "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ], "unresolved_review_state": "declared" }, @@ -6672,6 +6686,8 @@ "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed.", "These Chapter75 locators are 2025 enrolled-version only. Coordinator retained publisher observations identify a Chapter75 subject/locator mismatch. Chapter77 is an unverified candidate only, with no retained index evidence and no validated bridge; the current-codification bridge and current SB226 status are not validated in this repair.", "Current division rules defining other high-risk applications or acceptable disclosure forms and methods have not been retained or reviewed.", "The incorporated 13-11-3 supplier and consumer-transaction definitions are not retained here; no new controlled-role equivalence is inferred.", @@ -6691,22 +6707,24 @@ "pub:evidence_inputs": [ { "admission_status": "reviewed-changes", - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "canonical_unit": null, "kind": "instrument", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" ], - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "unresolved": [ "enacted (2025-03-25) and the Introduced month (2025-02) are not in the enrolled copy and the le.utah.gov SB0226 status table is not retained; rows are marked unconfirmed and the enacted field is unchanged.", "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ], "unresolved_review_state": "declared" }, @@ -6750,6 +6768,8 @@ "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed.", "These Chapter75 locators are 2025 enrolled-version only. Coordinator retained publisher observations identify a Chapter75 subject/locator mismatch. Chapter77 is an unverified candidate only, with no retained index evidence and no validated bridge; the current-codification bridge and current SB226 status are not validated in this repair.", "Current division rules defining other high-risk applications or acceptable disclosure forms and methods have not been retained or reviewed.", "The incorporated 13-11-3 supplier and consumer-transaction definitions are not retained here; no new controlled-role equivalence is inferred.", @@ -8462,22 +8482,24 @@ "pub:evidence_inputs": [ { "admission_status": "reviewed-changes", - "canonical_sha256": "50b4e7a0685706064d5b50d211ba997047c14518a371a7ee1c859a4ccbe8e530", + "canonical_sha256": "b5693470fc5d6d1f9432b62f1d9da837e2c19e73371be45c3c8e6f6800fc1f89", "canonical_unit": null, "kind": "instrument", - "native_file_sha256": "9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0", + "native_file_sha256": "e0aa554d1054baf56ca817da2031b2355f67c08e80a22bee5dc0ccb0cb19e8eb", "native_path": "data/examples/instruments/us-ut-legislature-statute-2025-sb226.md", "retained_primary_sha256": [ "279184eb1ee69adb7c9ada3e29763f9766b0705c87770b6330c13bada07c60e8", "bfa2cca6c0a5a1f6e8c7ab123127d7c0263ef8f5f5a582672c8185af6c865835" ], - "review_packet_sha256": "4ac77cfcca432ea01bcba7273922a36be25970b9c78729c8cd6241f6c3ee1733", + "review_packet_sha256": "f57211556ad903c24f2b1860a03218bbbb66c58cef9fd29652819c29fde47c9c", "unresolved": [ "enacted (2025-03-25) and the Introduced month (2025-02) are not in the enrolled copy and the le.utah.gov SB0226 status table is not retained; rows are marked unconfirmed and the enacted field is unchanged.", "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ], "unresolved_review_state": "declared" }, @@ -8500,7 +8522,9 @@ "Whether SB 226 passed each house by two-thirds (so its 63I-2-213 amendment took effect on governor approval rather than May 7, 2025) is not confirmed.", "The 404 status of the 13-75-S102/S103/S104 URLs and HTTP 200 for 13-75.html come from ops/evidence/utah-overdue-dispositions-2026-09-23.json url_checks, not a retained snapshot; a human should confirm the current le.utah.gov section URL pattern.", "Whether an OAIP annual report was filed for 2024 or 2025 is unverified.", - "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it." + "amends (us-ut-legislature-statute-2024-sb149) is unchanged; SB 226 repeals 13-2-12, which SB 149 enacted, so the source does not contradict it.", + "The corrected Summary uses 2025 enrolled locators only. Coordinator publisher observations of 2026-10-02 found a Chapter 75 subject/locator mismatch; current codification of the Chapter 75 sections is not validated.", + "Current division rules under 13-75-101(5)(c) and 13-75-104(2), and the incorporated 13-11-3 and 13-2-1 provisions, are not retained or reviewed." ], "source": "https://le.utah.gov/~2025/bills/static/SB0226.html", "source_citation": "Utah SB 226 (2025 General Session)", diff --git a/tests/sb226-r1.test.js b/tests/sb226-r1.test.js index ec0ecc69..b543f011 100644 --- a/tests/sb226-r1.test.js +++ b/tests/sb226-r1.test.js @@ -51,8 +51,8 @@ test('SB226 R1 native IDs, metadata, mapping and R3 civil/criminal content are u assert.match(text, /retained 2025 enrolled SB 226 only, not independently validated current codification/); assert.doesNotMatch(text, /§13-77-/); } + // The SB226 instrument Summary moved later under receipt succession; see sb226-summary-succession.test.js. const preserved = { - 'data/examples/instruments/us-ut-legislature-statute-2025-sb226.md': '9cb602b984427da4e4f0bdc1ba9f56458de93a54911769c20584ce105b1c6cf0', 'data/examples/mapping/index.yml': 'b2bd75074c27efe6713cd7bdc7c0f5504225ce58f5767b822771f1768201c19f', 'data/examples/obligations/ai-defense-elimination.md': 'a55e45923f6c446174676808c25e74c677631fb8550f520ee92ba2786eb08151' }; @@ -101,8 +101,8 @@ test('SB226 R1 native safe harbor retains alternatives, full timing and section1 }); test('SB226 R1 admission binds exactly the new agent-reviewed units without rewriting prior receipts', () => { + // The SB226 instrument receipt is embedded verbatim by its successor; see sb226-summary-succession.test.js. const preservedReceipts = { - 'data/examples/instruments/us-ut-legislature-statute-2025-sb226.md': '477433cdc9aa83a53073e06246dc52f2914874b80d326b8001ddeb27fa3ccd6b', 'data/examples/mapping/index.yml': '0bd582f2ad5ddc22e117ed8fe463db2005702f26336f5ce749dd0284b4bb3c64', 'data/examples/obligations/ai-defense-elimination.md': '468b8029d06d02225a297094b0dcc40becb5c4a139fe4416a5676bac8700f1a3' }; diff --git a/tests/sb226-summary-succession.test.js b/tests/sb226-summary-succession.test.js new file mode 100644 index 00000000..d78486fb --- /dev/null +++ b/tests/sb226-summary-succession.test.js @@ -0,0 +1,62 @@ +'use strict'; + +const test = require('node:test'); +const assert = require('node:assert/strict'); +const path = require('node:path'); +const admission = require('../scripts/lib/source-admission'); +const admissionCheck = require('../scripts/check-source-admission'); +const { parseFrontmatter } = require('../scripts/lib/parse'); + +const ROOT = path.join(__dirname, '..'); +const FILE = 'data/examples/instruments/us-ut-legislature-statute-2025-sb226.md'; +const read = filename => admission.readRegular(ROOT, filename); +const receipts = JSON.parse(read('data/admission/receipts.json')); +const legacy = JSON.parse(read('data/admission/legacy.json')); +const text = read(FILE).toString('utf8'); +const receipt = receipts.records[FILE]; +// The 2026-09-24 human-reviewed receipt as accepted on main before succession. +const HUMAN_RECEIPT_DIGEST = '477433cdc9aa83a53073e06246dc52f2914874b80d326b8001ddeb27fa3ccd6b'; + +test('SB226 Summary successor embeds the human-reviewed receipt verbatim', () => { + const prior = receipt.supersedes.receipt; + assert.equal(admission.digest(prior), HUMAN_RECEIPT_DIGEST); + assert.equal(prior.review.actor_type, 'human'); + assert.equal(prior.review.human_approved, true); + assert.equal(receipt.supersedes.packet_sha256, prior.review.packet_sha256); + for (const item of prior.unresolved) assert.ok(receipt.unresolved.includes(item), item); +}); + +test('SB226 Summary successor is agent-only and changes the Summary text unit alone', () => { + assert.equal(receipt.review.actor_type, 'agent'); + assert.equal(Object.hasOwn(receipt.review, 'human_approved'), false); + assert.deepEqual(Object.keys(receipt.units), ['section:Summary/text']); + const admitted = admission.admittedState(receipt.supersedes.receipt, legacy.records[FILE], { read, now: new Date() }); + const current = admission.nativeSnapshot(FILE, read(FILE)); + assert.equal(receipt.baseline_sha256, admitted.sha256); + for (const [key, sha] of Object.entries(admission.unitHashes(current))) { + if (key !== 'section:Summary/text') assert.equal(sha, admitted.units[key], key); + } + assert.equal(parseFrontmatter(text).frontmatter.last_verified, '2026-09-23'); + const effective = admission.effectiveUnitReviews(receipt); + assert.equal(effective['metadata:last_verified'].receipt.review.actor_type, 'human'); + assert.equal(effective['section:Summary/text'].receipt.review.actor_type, 'agent'); + const result = admissionCheck.runCurrent({ root: ROOT }); + assert.equal(result.status, 'passed', result.errors.join('\n')); +}); + +test('SB226 Summary carries the retained statutory content the comparison found missing', () => { + const summary = text.split('## Summary\n\n')[1].split('\n### ')[0]; + assert.match(summary, /interacting with generative AI and not a human if the individual asks or otherwise prompts/); + assert.match(summary, /is generative AI, is not human, or is an AI assistant/); + assert.match(summary, /alternative safe-harbor forms, not the on-request content/); + assert.match(summary, /consumer transaction or the provision of regulated services/); + assert.match(summary, /An individual providing services in a regulated occupation/); + assert.doesNotMatch(summary, /supplier in a regulated occupation/); + assert.match(summary, /prominently disclose/); + assert.match(summary, /comply with all requirements of the occupation/); + assert.match(summary, /reasonably be relied upon to make significant personal decisions/); + assert.match(summary, /other applications defined by division rule/); + assert.match(summary, /verbally at the start of a verbal interaction and in writing before the start of a written interaction/); + assert.match(summary, /does not itself establish the elements of the underlying violation/); + assert.match(summary, /retained 2025 enrolled SB 226, not independently validated current codification/); +}); diff --git a/tests/source-admission.test.js b/tests/source-admission.test.js index 03ed5ffc..6e4997ee 100644 --- a/tests/source-admission.test.js +++ b/tests/source-admission.test.js @@ -473,3 +473,109 @@ test('a PubLedge original draft cites itself as source and its own section as lo assert.equal(emitted.source_locator, 'First-Session Disclosure (§13-72a-203)'); assert.deepEqual(emitted.anchors, ['https://everyailaw.com/term/utah-sb149-chatbot-disclosure.json'], 'the interpreted statute stays linked through the anchor'); }); + +const MID = AFTER.replace('| Verified | 2026-01-01 |', '| Verified | 2026-09-09 |'); +const FINAL = MID.replace('Providers must comply, subject to the stated exception.', 'Providers in Section 8 must comply, subject to the stated exception.'); + +function unitReview(base, target, key, reason) { + return { + before_sha256: base.units[key] || null, + after_sha256: target.units[key].sha256, + candidate_content: target.units[key].content, + reason, + qualifications: { scope: 'Providers in Section 8', exceptions: 'The stated exception remains', time: 'January 1, 2027' }, + evidence: ['notice'] + }; +} + +// Human review renews Verified; an agent successor later edits only the body text. +function successionFixture() { + const data = fixture(); + const legacyUnits = data.legacy.records[FILE].units; + const legacySha = data.legacy.records[FILE].sha256; + const mid = admission.markdownSnapshot(MID); + const final = admission.markdownSnapshot(FINAL); + const evidence = data.admissions.records[FILE].evidence; + const prior = { + record_sha256: mid.sha256, + baseline_sha256: legacySha, + whole_record: { before_sha256: legacySha, after_sha256: mid.sha256 }, + review: { actor_type: 'human', actor: 'test-human', reviewed_at: '2026-09-09T12:00:00Z', decision: 'source-consistency-reviewed', human_approved: true, scope: 'Scope correction and Verified renewal' }, + unresolved: ['Current applicability remains outside this fixture'], + evidence: structuredClone(evidence), + units: { + 'section:Duty/property:Scope': unitReview({ units: legacyUnits }, mid, 'section:Duty/property:Scope', 'Remove unsupported universal scope'), + 'section:Duty/property:Verified': unitReview({ units: legacyUnits }, mid, 'section:Duty/property:Verified', 'Human renewal') + } + }; + prior.review.packet_sha256 = admission.packetDigest(prior); + const midUnits = admission.unitHashes(mid); + const successor = { + record_sha256: final.sha256, + baseline_sha256: mid.sha256, + whole_record: { before_sha256: mid.sha256, after_sha256: final.sha256 }, + supersedes: { packet_sha256: prior.review.packet_sha256, reason: 'Body text correction after the human review', receipt: prior }, + review: { actor_type: 'agent', actor: 'test-reviewer', reviewed_at: '2026-09-10T12:00:00Z', decision: 'source-consistency-reviewed', scope: 'Body text only' }, + unresolved: ['Current applicability remains outside this fixture'], + evidence: structuredClone(evidence), + units: { 'section:Duty/text': unitReview({ units: midUnits }, final, 'section:Duty/text', 'Carry the Section 8 boundary into the body') } + }; + successor.review.packet_sha256 = admission.packetDigest(successor); + data.current[FILE] = final; + data.admissions.records[FILE] = successor; + data.now = new Date('2026-09-10T13:00:00Z'); + return { data, prior, successor }; +} +const reseal = receipt => { receipt.review.packet_sha256 = admission.packetDigest(receipt); }; + +test('an agent successor reviews only its own changes and keeps the human review of untouched units', () => { + const { data, prior } = successionFixture(); + const result = admission.validateAdmission(data); + assert.equal(result.status, 'passed', result.errors.join('\n')); + assert.equal(result.changed_units_reviewed, 3, 'two superseded unit reviews plus one successor review'); + const effective = admission.effectiveUnitReviews(data.admissions.records[FILE]); + assert.deepEqual(Object.keys(effective).sort(), ['section:Duty/property:Scope', 'section:Duty/property:Verified', 'section:Duty/text']); + assert.equal(effective['section:Duty/property:Verified'].receipt, prior); + assert.equal(effective['section:Duty/text'].receipt.review.actor_type, 'agent'); +}); + +test('an agent successor still cannot renew Verified', () => { + const { data, successor } = successionFixture(); + const renewed = admission.markdownSnapshot(FINAL.replace('| Verified | 2026-09-09 |', '| Verified | 2026-09-10 |')); + const midUnits = admission.unitHashes(admission.markdownSnapshot(MID)); + successor.record_sha256 = renewed.sha256; + successor.whole_record.after_sha256 = renewed.sha256; + successor.units['section:Duty/text'] = unitReview({ units: midUnits }, renewed, 'section:Duty/text', 'Body'); + successor.units['section:Duty/property:Verified'] = unitReview({ units: midUnits }, renewed, 'section:Duty/property:Verified', 'Attempted renewal'); + reseal(successor); + data.current[FILE] = renewed; + assert.match(admission.validateAdmission(data).errors.join('\n'), /cannot renew Verified/); +}); + +test('a successor must embed the superseded receipt verbatim and carry its unresolved items', () => { + const tampered = successionFixture(); + tampered.successor.supersedes.receipt.review.scope = 'Rewritten history'; + reseal(tampered.successor); + assert.match(admission.validateAdmission(tampered.data).errors.join('\n'), /Superseded packet binding is stale|Review packet changed/); + const dropped = successionFixture(); + dropped.successor.unresolved = []; + reseal(dropped.successor); + assert.match(admission.validateAdmission(dropped.data).errors.join('\n'), /carry forward every unresolved item/); + const unbound = successionFixture(); + unbound.successor.baseline_sha256 = unbound.data.legacy.records[FILE].sha256; + reseal(unbound.successor); + assert.match(admission.validateAdmission(unbound.data).errors.join('\n'), /Wrong historical input binding/); +}); + +test('history comparison rejects a rewritten receipt and accepts a successor that embeds it', () => { + const { prior, successor } = successionFixture(); + const rewritten = structuredClone(prior); + rewritten.review.actor = 'someone-else'; + const failed = { status: 'passed', errors: [] }; + admissionCheck.retainPriorReceipts(failed, { records: { [FILE]: rewritten } }, { records: { [FILE]: prior } }); + assert.equal(failed.status, 'failed'); + assert.match(failed.errors.join('\n'), /rewritten instead of superseded/); + const passed = { status: 'passed', errors: [] }; + admissionCheck.retainPriorReceipts(passed, { records: { [FILE]: successor } }, { records: { [FILE]: prior } }); + assert.equal(passed.status, 'passed', passed.errors.join('\n')); +});