Sign In

publedge

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

publedge - npm Package Compare versions

Comparing version
0.1.3
to
0.2.1
+1
-0
data/examples/instruments/us-cfpb-ao-2022-001.md

@@ -33,2 +33,3 @@ ---

status: enforcing
editorial_status: published
supersedes: null

@@ -35,0 +36,0 @@ superseded_by: null

@@ -36,2 +36,3 @@ ---

status: enforcing
editorial_status: published
supersedes: null

@@ -38,0 +39,0 @@ superseded_by: null

@@ -43,2 +43,3 @@ ---

status: superseded
editorial_status: published
supersedes: null

@@ -45,0 +46,0 @@ superseded_by: us-co-legislature-statute-2026-sb26-189

@@ -31,2 +31,3 @@ ---

status: enforcing
editorial_status: published
amends: us-co-legislature-statute-2024-sb24-205

@@ -33,0 +34,0 @@ supersedes: null

+7
-5

@@ -40,3 +40,4 @@ ---

- "Sen. Robert Rodriguez (Senate prime sponsor)"
status: enforcing
status: enacted
editorial_status: published
supersedes: us-co-legislature-statute-2024-sb24-205

@@ -47,6 +48,6 @@ superseded_by: null

disclaimer: ""
last_verified: 2026-05-21
last_verified: 2026-07-25
schema: https://publedge.org/schema/instrument.schema.json
created: 2026-05-21
modified: 2026-05-21
modified: 2026-07-25
---

@@ -60,4 +61,5 @@

| Governor Signed | 2026-05-14 | Replaces SB 24-205 in full |
| Rulemaking sections effective | 2026-05-14 | §§6-1-1704(4), 6-1-1705(3), and 6-1-1706(6) took effect on passage |
| Challenge window | 2026-05-14 → 2026-06-11 | 28-day window for further litigation noted in public commentary |
| Effective | 2027-01-01 | Compliance obligations take effect |
| Substantive duties effective | 2027-01-01 | Developer, deployer, consumer-rights, recordkeeping, and cure obligations apply to consequential decisions on or after this date |
| Record-retention horizon | 2030-01-01 | First 3-year retention cycle closes |

@@ -70,3 +72,3 @@ | Cure-period sunset | 2030-01-01 | 60-day cure available until this date per transition provisions |

SB 26-189 narrows and replaces the original Colorado AI Act (SB 24-205) before that statute ever took effect. Rebranded as the Automated Decision-Making Technology (ADMT) Act and codified at C.R.S. §§6-1-1702 through 6-1-1706, the replacement statute drops the duty of reasonable care, the impact-assessment requirement, and most of the developer-liability scheme. What survives is a much narrower disclosure-and-rights regime:
SB 26-189 narrows and replaces the original Colorado AI Act (SB 24-205) before that statute ever took effect. Rebranded as the Automated Decision-Making Technology (ADMT) Act and codified at C.R.S. §§6-1-1702 through 6-1-1706, the replacement statute drops the duty of reasonable care, the impact-assessment requirement, and most of the developer-liability scheme. Its substantive duties apply beginning January 1, 2027; specified rulemaking and administrative provisions took effect on passage. What survives is a much narrower disclosure-and-rights regime:

@@ -73,0 +75,0 @@ - **Developer documentation (§6-1-1702).** Developers must disclose intended uses, training-data categories, known limitations, and human-review instructions to deployers.

@@ -35,2 +35,3 @@ ---

status: enforcing
editorial_status: published
supersedes: null

@@ -37,0 +38,0 @@ superseded_by: null

@@ -39,2 +39,3 @@ ---

status: enforcing
editorial_status: published
supersedes: null

@@ -41,0 +42,0 @@ superseded_by: null

@@ -33,2 +33,3 @@ ---

status: enforcing
editorial_status: published
supersedes: null

@@ -35,0 +36,0 @@ superseded_by: null

@@ -36,2 +36,3 @@ ---

status: enforcing
editorial_status: published
supersedes: null

@@ -38,0 +39,0 @@ superseded_by: null

@@ -37,2 +37,3 @@ ---

status: enforcing
editorial_status: published
amends: us-ut-legislature-statute-2024-sb149

@@ -39,0 +40,0 @@ supersedes: null

@@ -35,2 +35,3 @@ ---

status: enforcing
editorial_status: published
amends: us-ut-legislature-statute-2024-sb149

@@ -37,0 +38,0 @@ supersedes: null

@@ -36,2 +36,3 @@ ---

status: enforcing
editorial_status: published
amends: us-ut-legislature-statute-2024-sb149

@@ -38,0 +39,0 @@ supersedes: null

@@ -37,2 +37,3 @@ ---

status: enforcing
editorial_status: published
amends: us-ut-legislature-statute-2024-sb149

@@ -39,0 +40,0 @@ supersedes: null

@@ -15,5 +15,2 @@ ---

ref: "https://commerce.utah.gov/ai/learning-lab/"
issuance_event: gist:Determination
enacted: 2026-04-15
effective: 2026-04-15
official_url: https://commerce.utah.gov/ai/learning-lab/

@@ -39,2 +36,3 @@ obligation_kind: [requirement, permission]

status: proposed
editorial_status: draft
supersedes: null

@@ -41,0 +39,0 @@ superseded_by: null

@@ -66,2 +66,3 @@ ---

status: expired
editorial_status: published
supersedes: null

@@ -68,0 +69,0 @@ superseded_by: null

@@ -21,3 +21,3 @@ ---

term_end: 2026-05-31
official_url: https://commerce.utah.gov/ai/agreements/dentacor/
official_url: https://commerce.utah.gov/ai/regulatory-relief/authorized-ai-pilots/dentacor/
publication_citations:

@@ -65,3 +65,4 @@ - "https://commerce.utah.gov/wp-content/uploads/2025/06/Dentacor-Mitigation-Agreement.pdf"

- "Monthly reporting to ai@utah.gov (demographics, efficacy, complaints, adverse events, incidents)"
status: enforcing
status: expired
editorial_status: published
supersedes: null

@@ -74,6 +75,6 @@ superseded_by: null

disclaimer: ""
last_verified: 2026-06-04
last_verified: 2026-07-25
schema: https://publedge.org/schema/instrument.schema.json
created: 2026-04-19
modified: 2026-06-04
modified: 2026-07-25
---

@@ -87,3 +88,3 @@

Dentacor operates mobile dental hygiene clinics serving shelters, recovery programs, and transitional housing. Executed 2025-05-29 (Dentacor CEO Nathan Wilson), 2025-05-30 (OAIP Director Zachary Boyd), and 2025-05-31 (DOPL Director Mark Steinagel). Effective date is the latter signature date. The Agreement is the first RMA directed at scope-of-practice for a non-prescribing health profession in Utah's AI Learning Laboratory.
Dentacor operates mobile dental hygiene clinics serving shelters, recovery programs, and transitional housing. Executed 2025-05-29 (Dentacor CEO Nathan Wilson), 2025-05-30 (OAIP Director Zachary Boyd), and 2025-05-31 (DOPL Director Mark Steinagel). Effective date is the latter signature date. The initial 12-month mitigation period ended May 31, 2026. Section 13 allowed Dentacor to request one extension of up to 12 months, subject to OAIP approval before the initial term expired; no public signed extension instrument was located as of July 25, 2026. OAIP continues to list Dentacor among its authorized pilots, but the public pilot page does not itself amend the signed term. The Agreement is the first RMA directed at scope-of-practice for a non-prescribing health profession in Utah's AI Learning Laboratory.

@@ -136,6 +137,7 @@ ## Question presented

- Failure to meet obligations may nullify the Agreement (§6J).
- The initial mitigation period ended May 31, 2026. Any continued mitigation would require a separately approved extension under Section 13; none was publicly located as of July 25, 2026.
## Sources
- [Agreement page — Utah OAIP](https://commerce.utah.gov/ai/agreements/dentacor/)
- [Authorized pilot page — Utah OAIP](https://commerce.utah.gov/ai/regulatory-relief/authorized-ai-pilots/dentacor/)
- [Signed PDF](https://commerce.utah.gov/wp-content/uploads/2025/06/Dentacor-Mitigation-Agreement.pdf)

@@ -142,0 +144,0 @@ - [Utah Code §58-69 — Dental Practice Act](https://le.utah.gov/xcode/Title58/Chapter69/58-69.html)

@@ -71,2 +71,3 @@ ---

status: enforcing
editorial_status: published
supersedes: null

@@ -73,0 +74,0 @@ superseded_by: null

@@ -76,2 +76,3 @@ ---

status: enacted
editorial_status: published
supersedes: null

@@ -78,0 +79,0 @@ superseded_by: null

@@ -7,4 +7,4 @@ ---

status: draft
lifecycle_status: operative
last_verified: 2026-07-24
lifecycle_status: prospective
last_verified: 2026-07-25
search_terms:

@@ -21,3 +21,3 @@ - admt

Violations of the Colorado ADMT Act are enforced by the Attorney General as deceptive trade practices, with no private right of action. A regulated party may cure an alleged violation within 60 days of notice; the cure route is available through January 1, 2030.
Beginning January 1, 2027, violations of the Colorado ADMT Act are enforced by the Attorney General as deceptive trade practices, with no private right of action. A regulated party may cure an alleged violation within 60 days of notice; the cure route is available through January 1, 2030.

@@ -24,0 +24,0 @@ ## What Counts

@@ -7,4 +7,4 @@ ---

status: draft
lifecycle_status: operative
last_verified: 2026-07-24
lifecycle_status: prospective
last_verified: 2026-07-25
search_terms:

@@ -21,3 +21,3 @@ - admt

Consumers subject to an adverse consequential decision made using covered automated decision-making technology may correct inaccurate personal data used in that decision and may request meaningful human review and reconsideration of the outcome. The deployer must provide both paths.
Beginning January 1, 2027, consumers subject to an adverse consequential decision made using covered automated decision-making technology may correct inaccurate personal data used in that decision and may request meaningful human review and reconsideration of the outcome. The deployer must provide both paths.

@@ -24,0 +24,0 @@ ## What Counts

@@ -7,4 +7,4 @@ ---

status: draft
lifecycle_status: operative
last_verified: 2026-07-24
lifecycle_status: prospective
last_verified: 2026-07-25
search_terms:

@@ -21,3 +21,3 @@ - admt

A deployer of covered automated decision-making technology must retain its compliance documentation for at least three years. The retention floor is what makes the notice, explanation, and review duties auditable by the Attorney General after the fact.
Beginning January 1, 2027, a deployer of covered automated decision-making technology must retain its compliance documentation for at least three years. The retention floor is what makes the notice, explanation, and review duties auditable by the Attorney General after the fact.

@@ -24,0 +24,0 @@ ## What Counts

@@ -7,4 +7,4 @@ ---

status: draft
lifecycle_status: operative
last_verified: 2026-07-24
lifecycle_status: prospective
last_verified: 2026-07-25
search_terms:

@@ -21,3 +21,3 @@ - admt

Before a consequential decision is made using covered automated decision-making technology, the deployer must notify the consumer that an automated system is in use and disclose the purpose and nature of the decision. The notice is pre-decision; a post-hoc disclosure does not satisfy it.
Beginning January 1, 2027, before a consequential decision is made using covered automated decision-making technology, the deployer must notify the consumer that an automated system is in use and disclose the purpose and nature of the decision. The notice is pre-decision; a post-hoc disclosure does not satisfy it.

@@ -24,0 +24,0 @@ ## What Counts

@@ -7,4 +7,4 @@ ---

status: draft
lifecycle_status: operative
last_verified: 2026-07-24
lifecycle_status: prospective
last_verified: 2026-07-25
search_terms:

@@ -21,3 +21,3 @@ - admt

A developer of covered automated decision-making technology must disclose to deployers the technology's intended uses, the categories of data used to train it, its known limitations, and instructions for meaningful human review. The duty runs developer-to-deployer, not developer-to-consumer.
Beginning January 1, 2027, a developer of covered automated decision-making technology must disclose to deployers the technology's intended uses, the categories of data used to train it, its known limitations, and instructions for meaningful human review. The duty runs developer-to-deployer, not developer-to-consumer.

@@ -24,0 +24,0 @@ ## What Counts

@@ -7,4 +7,4 @@ ---

status: draft
lifecycle_status: operative
last_verified: 2026-07-24
lifecycle_status: prospective
last_verified: 2026-07-25
search_terms:

@@ -21,3 +21,3 @@ - admt

Within 30 days of an adverse consequential decision made using covered automated decision-making technology, the deployer must give the consumer a plain-language explanation covering the AI's role in the decision, its degree of contribution, the types of data processed, and the sources of that data.
Beginning January 1, 2027, within 30 days of an adverse consequential decision made using covered automated decision-making technology, the deployer must give the consumer a plain-language explanation covering the AI's role in the decision, its degree of contribution, the types of data processed, and the sources of that data.

@@ -24,0 +24,0 @@ ## What Counts

@@ -7,4 +7,4 @@ ---

status: draft
lifecycle_status: operative
last_verified: 2026-04-21
lifecycle_status: expired
last_verified: 2026-07-25
search_terms:

@@ -20,3 +20,3 @@ - dentacor

During the Dentacor demonstration period, the Utah Division of Professional Licensing (DOPL) forgoes enforcement of unlawful and unprofessional-conduct actions under Utah Code §58-69-5 solely for conduct authorized by the RMA. Enforcement remains in full force for any conduct outside the mitigation scope.
During the Dentacor demonstration period, the Utah Division of Professional Licensing (DOPL) forgave enforcement of unlawful and unprofessional-conduct actions under Utah Code §58-69-5 solely for conduct authorized by the RMA. The initial mitigation period ended May 31, 2026, and no public extension instrument was located as of July 25, 2026.

@@ -23,0 +23,0 @@ ## What Counts

@@ -7,4 +7,4 @@ ---

status: draft
lifecycle_status: operative
last_verified: 2026-04-21
lifecycle_status: expired
last_verified: 2026-07-25
search_terms:

@@ -20,3 +20,3 @@ - dentacor

Licensed Utah dental hygienists employed by Dentacor may diagnose periodontal disease, complete edentulism, and complete anodontia using an AI-assisted radiograph diagnostic tool in place of general dentist supervision. Diagnosis requires concurrence of both the hygienist and the AI system, and is limited to the procedures authorized under the companion permission (scaling and root planing; fitting of full dentures).
During the initial Dentacor RMA term, licensed Utah dental hygienists employed by Dentacor could diagnose periodontal disease, complete edentulism, and complete anodontia using an AI-assisted radiograph diagnostic tool in place of general dentist supervision. The permission required concurrence of both the hygienist and the AI system and expired with the initial mitigation period on May 31, 2026; no public extension instrument was located as of July 25, 2026.

@@ -23,0 +23,0 @@ ## What Counts

@@ -7,4 +7,4 @@ ---

status: draft
lifecycle_status: operative
last_verified: 2026-04-21
lifecycle_status: expired
last_verified: 2026-07-25
search_terms:

@@ -19,3 +19,3 @@ - dentacor

Before performing any RMA-authorized procedure, a Dentacor-employed hygienist must obtain patient informed consent that explicitly discloses the absence of dentist supervision and explains that a hygienist does not have the full training or scope of practice of a dentist.
During the initial Dentacor RMA term, a Dentacor-employed hygienist had to obtain patient informed consent before any RMA-authorized procedure, explicitly disclosing the absence of dentist supervision and the hygienist's narrower training and scope. The requirement expired with the initial mitigation period on May 31, 2026; no public extension instrument was located as of July 25, 2026.

@@ -22,0 +22,0 @@ ## What Counts

@@ -21,2 +21,5 @@ #!/usr/bin/env node

const ROOT = __dirname;
const PACKAGE_VERSION = JSON.parse(
fs.readFileSync(path.join(ROOT, 'package.json'), 'utf-8')
).version;

@@ -531,2 +534,10 @@ // ---------------------------------------------------------------------------

// Dual-era server (MCP spec revision 2026-07-28): a legacy client selects the
// 2024-11-05 semantics via `initialize`; a modern client carries per-request
// `_meta` and is served statelessly. Both eras run concurrently in-process.
const SUPPORTED_PROTOCOL_VERSIONS = ['2026-07-28', '2024-11-05'];
// Static data regenerated on a known cadence — safe to cache for an hour.
const CACHE_TTL_MS = 3600000;
const CACHE_SCOPE = 'public';
function makeResponse(id, result) {

@@ -536,4 +547,6 @@ return JSON.stringify({ jsonrpc: '2.0', id, result });

function makeError(id, code, message) {
return JSON.stringify({ jsonrpc: '2.0', id, error: { code, message } });
function makeError(id, code, message, data) {
const error = { code, message };
if (data !== undefined) error.data = data;
return JSON.stringify({ jsonrpc: '2.0', id, error });
}

@@ -544,9 +557,22 @@

// Modern requests declare their protocol version per request. Unknown
// versions are rejected; requests without `_meta` (legacy handshake or
// bare requests) are served exactly as before.
const requestedVersion = params?._meta?.['io.modelcontextprotocol/protocolVersion'];
if (requestedVersion !== undefined && !SUPPORTED_PROTOCOL_VERSIONS.includes(requestedVersion)) {
return makeError(id, -32022, 'Unsupported protocol version', {
supported: SUPPORTED_PROTOCOL_VERSIONS,
requested: requestedVersion
});
}
if (method === 'initialize') {
const clientVersion = params?.protocolVersion;
return makeResponse(id, {
protocolVersion: '2024-11-05',
resultType: 'complete',
protocolVersion: SUPPORTED_PROTOCOL_VERSIONS.includes(clientVersion) ? clientVersion : '2024-11-05',
capabilities: { tools: {} },
serverInfo: {
name: config.name || 'Knowledge Base MCP',
version: '1.0.0'
version: PACKAGE_VERSION
}

@@ -560,4 +586,27 @@ });

if (method === 'server/discover') {
const result = {
resultType: 'complete',
supportedVersions: SUPPORTED_PROTOCOL_VERSIONS,
capabilities: { tools: {} },
_meta: {
'io.modelcontextprotocol/serverInfo': {
name: config.name || 'Knowledge Base MCP',
version: PACKAGE_VERSION
}
},
ttlMs: CACHE_TTL_MS,
cacheScope: CACHE_SCOPE
};
if (config.description) result.instructions = config.description;
return makeResponse(id, result);
}
if (method === 'tools/list') {
return makeResponse(id, { tools: getToolDefinitions() });
return makeResponse(id, {
resultType: 'complete',
tools: getToolDefinitions(),
ttlMs: CACHE_TTL_MS,
cacheScope: CACHE_SCOPE
});
}

@@ -569,3 +618,3 @@

const result = handleToolCall(toolName, toolArgs);
return makeResponse(id, result);
return makeResponse(id, { resultType: 'complete', ...result });
}

@@ -572,0 +621,0 @@

{
"name": "publedge",
"version": "0.1.3",
"version": "0.2.1",
"mcpName": "io.github.snapsynapse/publedge",

@@ -64,2 +64,4 @@ "description": "MCP server and recordkeeping protocol for fact-specific written interpretations between two parties: JIAs, RMAs, no-action letters, advisory opinions, private letter rulings. Plain markdown, manifest-checked, gist-bound. The verifiable-records layer of the PAICE legal graph.",

"check:of": "node scripts/check-of-version.js",
"check:of-fingerprint": "node scripts/check-of-fingerprint.js",
"verify:ci": "node scripts/verify-ci.js",
"verify": "node scripts/verify.js",

@@ -69,2 +71,4 @@ "evals": "node scripts/evals.js",

"eval:obligation-schema": "node scripts/eval-obligation-schema.js",
"eval:temporal-status": "node scripts/eval-temporal-status.js",
"eval:temporal-status-contract": "node scripts/eval-temporal-status-contract.js",
"eval:record-schema": "node scripts/eval-record-schema.js",

@@ -89,3 +93,4 @@ "eval:schema-parity": "node scripts/eval-schema-parity.js",

"eval:links": "node scripts/eval-links.js",
"eval:verification-exit": "node scripts/eval-verification-exit.js"
"eval:verification-exit": "node scripts/eval-verification-exit.js",
"eval:scheduled-verification": "node scripts/eval-scheduled-verification.js"
},

@@ -92,0 +97,0 @@ "devDependencies": {

@@ -60,2 +60,6 @@ # PubLedge Project Configuration

directory: instruments
editorial_statuses:
- draft
- reviewed
- published
# Status vocabulary — see DEFINITIONS.md for semantics + lifecycle.

@@ -62,0 +66,0 @@ # proposed/enacted/enforcing/phased-enforcement/pending-replacement

---
"@type": "https://w3id.org/semanticarts/ns/ontology/gist/Specification"
title: "PubLedge Protocol"
version: "0.1.3"
version: "0.2.0"
license: "CC-BY-4.0"
created: 2026-04-18
modified: 2026-07-25
modified: 2026-08-04
---

@@ -45,3 +45,3 @@

The act of issuance is itself typed `gist:Determination`. This separates the artifact (the agreement) from the event (the act of agreeing).
The Obligation-First binding represents evidenced issuance as an administrative `of:Determination`. This separates the artifact from the authoritative act that created or published it. An issuance determination targets the instrument, decides no allegation, and is not a substitute for the adjudicative determinations published by AI Incident Law. Proposed or draft instruments do not receive an issuance determination until an official source and issuance date establish that the act occurred.

@@ -77,3 +77,4 @@ The vocabulary mapping is published at `/reference/vocabulary/` and bound machine-readably in `/schema/json/context.jsonld`.

text: "Plain-language clause"
status: draft | reviewed | published | superseded
status: proposed | enacted | enforcing | phased-enforcement | pending-replacement | expired | superseded | withdrawn | terminated
editorial_status: draft | reviewed | published
disclaimer: "Default text or instrument-specific override"

@@ -163,3 +164,3 @@ created: YYYY-MM-DD

The disclaimer is rendered prominently in the page header until `status: published` is reached and the responsible authority has either signed off or expressly declined to do so. Records that move to `published` without authority sign-off must retain a softened disclaimer indicating that the interpretation is the requesting party's good-faith reading, not an official ruling.
The disclaimer is composed from `source` and legal `status`, independently of `editorial_status`. A published demonstration remap remains non-authoritative, and a PubLedge-original draft remains suggested prior art unless authority sign-off changes `source` to `authority-issued`.

@@ -166,0 +167,0 @@ This posture is non-optional. PubLedge exists in part to publish interpretations *before* an authority issues an official version, so that a public conversation has source material to work from.

# PubLedge
[![CI](https://github.com/snapsynapse/publedge/actions/workflows/build.yml/badge.svg)](https://github.com/snapsynapse/publedge/actions/workflows/build.yml)
[![Spec](https://img.shields.io/badge/spec-v0.1.3-blue)](PROTOCOL.md)
[![Spec](https://img.shields.io/badge/spec-v0.2.0-blue)](PROTOCOL.md)
[![Registry](https://img.shields.io/badge/registry-18%20instruments%20%C2%B7%2035%20obligations%20%C2%B7%208%20authorities-informational)](data/examples/instruments/)

@@ -14,3 +14,3 @@ [![Content license: CC BY 4.0](https://img.shields.io/badge/content-CC%20BY%204.0-lightgrey)](LICENSE-CC-BY-4.0)

**Public and maintained. Protocol specification v0.1.3; stable MCP server v0.1.3. Standalone product expansion is parked pending a concrete legal-graph or adopter demand signal.**
**Public and maintained. Protocol specification v0.2.0; stable MCP server v0.2.1. The MCP server is dual-era: MCP spec 2026-07-28 stateless core plus the legacy 2024-11-05 handshake. Standalone product expansion is parked pending a concrete legal-graph or adopter demand signal.**

@@ -54,3 +54,3 @@ ## Who this is for

| `/api/v1/*.json` | Machine manifests: containers, primaries, authorities, mappings, matrix, upcoming, recently-changed |
| `/api/v1/of/*.json` | Obligation-First v0.1 binding records for authorities, instruments, terms, obligations, and determinations |
| `/api/v1/of/*.json` | Obligation-First binding records for authorities, instruments, terms, obligations, and administrative issuance determinations |
| `/calendar.ics` | Enforcement calendar (iCal) |

@@ -148,3 +148,3 @@ | `/feed.xml`, `/atom.xml`, `/feed.json` | RSS 2.0, Atom 1.0, JSON Feed 1.1 |

3. Set `id` to `{jurisdiction}-{authority}-{type}-{YYYY-NNN}` (e.g. `us-ut-oaip-rma-2025-003`). Filename must match: `us-ut-oaip-rma-2025-003.md`.
4. Set `status: draft`. Add parties under `parties:`.
4. Set legal `status: proposed` and `editorial_status: draft`. Add parties under `parties:`.
5. Place file under `data/examples/instruments/`.

@@ -197,3 +197,3 @@ 6. Run `./scripts/validate-hashes.sh --update` to refresh `MANIFEST.yaml`.

| Disclaimer & Source Policy at `/reference/disclaimer/` | done |
| Obligations + mapping curation pass (26 obligations, 14 mappings) | done |
| Obligations + mapping curation pass (35 obligations, 16 mappings) | done |
| JSON-LD on top-level pages (home @graph, ItemList indexes, DefinedTermSet, Dataset) | done |

@@ -200,0 +200,0 @@ | Split sitemap index + 7 section sitemaps | done |