{
  "$schema": "https://alexanarch.org/api/schemas/index.schema.json",
  "$id": "https://alexanarch.org/api/index.json",
  "title": "Alexanarch Protocol Index",
  "purpose": "Central machine-readable catalog of all Alexanarch protocols, schemas, and data registries. Single source of truth — every other document (AGENTS.md, DEPOSIT-FLOW.md, scripts, workflows) MUST pull from this index, not duplicate it. If this file disagrees with any other surface, this file wins and the other surface is wrong.",
  "index_version": "v1.0",
  "last_updated": "2026-06-23",
  "operator_directive": {
    "for_new_instances": [
      "STOP before any action.",
      "1. Fetch this file (GET https://alexanarch.org/api/index.json).",
      "2. For every protocol governing your intended action, fetch its canonical_path and verify content_sha256 matches what's listed here. If hashes disagree: the protocol was modified out-of-band; do not proceed; flag and ask.",
      "3. Run `python3 scripts/bootstrap_familiarization.py` to produce a familiarization receipt. The receipt records what versions and hashes you operated against.",
      "4. Include the receipt in any commit message, deposit body, or PR you create. Workflows MECHANICALLY ENFORCE this — missing receipt = rejected.",
      "5. If you are about to MODIFY a protocol JSON or a schema: do NOT hand-edit. Use `python3 scripts/protocol_update.py --protocol <name> --description '...'`. This tool atomically bumps version, recomputes hash, updates this index, and propagates to dependent docs.",
      "6. Hand-editing a protocol without running the update tool is the single largest source of regressions in this infrastructure. Every prior 'instance made autonomous changes without familiarization' incident was an instance skipping step 1.",
      "7. STANDING DIRECTIVE (post-729dfd9): Before ANY str_replace, create_file, or other overwrite of an existing file, run `python3 scripts/pre_overwrite.py <path>`. This appends a structural-inventory receipt to /data/pre-overwrite-receipts.log AND surfaces role-aware warnings (in particular, an unmissable red alert if the target is a static_fallback whose canonical primary lives elsewhere). The 729dfd9 commit overwrote /s/wiki/ and /s/graph/ static fallbacks without realizing the canonical primaries at /wiki/ and /graph/ existed. This protocol prevents recurrence at the file-system level rather than as a discipline that has to hold across instances.",
      "8. CREATE operations are exempt from #7 — if the target file does not yet exist, pre_overwrite.py exits silently and no receipt is needed. The check only fires on overwrites."
    ],
    "for_workflows": "Two workflows act on this index. (1) mint-axn.yml triggers on issues opened/reopened with a [DEPOSIT] title prefix — no maintainer label required. It runs bootstrap_familiarization.py --strict against this index, then validates the issue body against api/deposit-protocol.json via scripts/validate_deposit.py --strict. On pass, scripts/mint_deposit.py sanitizes user input (URL scheme allowlist {http,https,doi} plus explicit blocklist for slashless javascript:/data:/vbscript:/file:/about:/blob: payloads; BIDI override stripping; control character stripping; length caps), constructs the canonical text file, derives the AXN via scripts/axn_lib.py from the file's SHA-256 (canonical bytes = artifact, not issue envelope), writes the deposit, and re-validates the new entry. After regenerate_surfaces.py and a final full-registry validation pass, the workflow opens a PR with GitHub native auto-merge enabled (SQUASH). No direct push to main. (2) validate-registry.yml is the PR gate: it re-runs the full validation chain (bootstrap, registry --strict, derived-surface consistency invariants) on the PR's head before merge is permitted. Self-serve depositing — depositors do not require maintainer review; validation IS the gate. Both workflows fail closed (no commit, no merge) on any verification failure. The mint workflow comments back to the issue with rule IDs on failure; depositors close/reopen the issue to retry after fixing.",
    "for_extension": "Adding a new protocol means: (a) write the protocol JSON in /api/, (b) add a new entry under `protocols` here, (c) compute content_sha256 of the new file, (d) add it to this file with all its referenced_by and enforced_by lists, (e) run `scripts/protocol_update.py --verify-index` to confirm everything reconciles."
  },
  "protocols": {
    "deposit": {
      "name": "Alexanarch Deposit Protocol",
      "current_version": "alexanarch-deposit-protocol/v1",
      "schema_version": "2026-06-22-axn-v2",
      "canonical_path": "/api/deposit-protocol.json",
      "content_sha256": "02b12a034099302e6b31ed2651caa3e4db3308b4397ed4b27bbd0eba9f5a6ef2",
      "governs": "What a deposit is, what fields it requires, how it's submitted (Path A auto-mint, Path B canonical rich), how it's validated, what enrichment runs.",
      "depends_on": [
        "axn",
        "validation"
      ],
      "referenced_by": [
        "AGENTS.md",
        "DEPOSIT-FLOW.md",
        "DEPOSIT-GUIDE.md",
        ".github/ISSUE_TEMPLATE/deposit.yml",
        "/api/deposit-schema.json"
      ],
      "enforced_by": [
        ".github/workflows/mint-axn.yml",
        ".github/workflows/validate-registry.yml",
        "scripts/validate_deposit.py"
      ],
      "last_updated": "2026-06-22"
    },
    "axn": {
      "name": "AXN Identifier Protocol",
      "current_version": "axn/v2",
      "schema_version": "2026-06-22-axn-v2",
      "canonical_path": "/api/axn-protocol.json",
      "content_sha256": "fc44e9537f23ce626a08c04a23818ed58d1bf35f1a901daaa5e84be754c72ad9",
      "governs": "AXN format, AXN_GLYPHS table (256 entries), CLUSTERS table (256 entries), generation algorithm, legacy resolution (v1 → v2), substrate-chosen glyph preservation in glyphic_canary, recognition-vs-identity principle.",
      "depends_on": [],
      "referenced_by": [
        "scripts/axn_lib.py",
        ".github/workflows/mint-axn.yml",
        "/api/deposit-protocol.json",
        "AGENTS.md",
        "DEPOSIT-FLOW.md"
      ],
      "enforced_by": [
        "scripts/validate_deposit.py",
        ".github/workflows/validate-registry.yml"
      ],
      "canonical_implementations": {
        "python": "scripts/axn_lib.py"
      },
      "last_updated": "2026-06-22"
    },
    "enrichment": {
      "name": "enrichment",
      "current_version": "enrichment/v1",
      "canonical_path": "/api/enrichment-protocol.json",
      "content_sha256": "fb6734aec43fbc6c4cab20c244ebadd5ce3a8f8b4ebcbc6a10366815bfcd0e62",
      "governs": "Three-stage enrichment pipeline (mint-time / reading-pass / build-time) + canonical citation extraction mechanism with five via types",
      "depends_on": [
        "axn",
        "deposit"
      ],
      "referenced_by": [
        "scripts/citation_extractor.py",
        "scripts/regenerate_surfaces.py",
        "consolidate.py",
        "read_pass.py",
        "wire_deposit.py",
        "scholia_generator.py",
        "AGENTS.md",
        "/api/deposit-protocol.json"
      ],
      "enforced_by": [
        ".github/workflows/validate-registry.yml"
      ],
      "last_updated": "2026-06-22"
    },
    "lifecycle": {
      "name": "Alexanarch Lifecycle Protocol",
      "current_version": "alexanarch-lifecycle-protocol/v1.0",
      "schema_version": "2026-06-23-v1",
      "canonical_path": "/api/lifecycle-protocol.json",
      "content_sha256": "42fb844476df669150898bc91695cfc802e09abbdf70a3df3d6f6e2b7177385e",
      "governs": "Status vocabulary (ACTIVE/SUPERSEDED/WITHDRAWN/DRAFT_PENDING) and version-chain data model for deposits. Specifies how supersession, draft state, and series membership are recorded and rendered. Invariants: at most one ACTIVE in a supersession series; sequential series may have many ACTIVE entries; bidirectional consistency between predecessor and superseded_by fields.",
      "referenced_by": [
        "/api/deposit-schema.json (optional version-chain fields)",
        "/wire_deposit.py (record-page version banner + history block)",
        "/scripts/regenerate_surfaces.py (browse-card version chip + status badge)",
        "/index.html (Recent Deposits JS — supersession styling)"
      ],
      "enforced_by": [
        "Manual data-entry until mint-workflow integration lands",
        "validate-registry CI invariants (bidirectional consistency check — TODO)"
      ],
      "added": "2026-06-23",
      "added_in_session": "versioning-protocol-rollout"
    }
  },
  "schemas": {
    "deposit_entry": {
      "name": "Deposit Entry Schema",
      "canonical_path": "/api/schemas/deposit-entry.schema.json",
      "content_sha256": "3b65aac46d6f75b3ede6edcdf3cca66e4e75bef4dd20fb9af283ebba7684577a",
      "validates": "Individual entries in /data/registry.json deposits array.",
      "used_by": [
        "scripts/validate_deposit.py",
        ".github/workflows/validate-registry.yml"
      ],
      "last_updated": "2026-06-22"
    },
    "deposit_submission": {
      "name": "Deposit Submission Schema (Issue Body Template)",
      "canonical_path": "/api/deposit-schema.json",
      "content_sha256": "885befef99a0eeb3cff072ec1be82f14cea627ee845045d8dd440439169c7e64",
      "validates": "GitHub Issue bodies submitted as [DEPOSIT] for Path A auto-mint.",
      "used_by": [
        ".github/workflows/mint-axn.yml",
        ".github/ISSUE_TEMPLATE/deposit.yml"
      ],
      "last_updated": "2026-06-22"
    }
  },
  "registries": {
    "deposits": {
      "name": "Deposit Registry (the AXN registry)",
      "canonical_path": "/data/registry.json",
      "purpose": "Canonical list of every deposit. Drives home-page Recent Deposits, browse page, sitemap, chunks. THE source of truth — all other surfaces are derived.",
      "current_count": 885,
      "validates_against": [
        "/api/schemas/deposit-entry.schema.json"
      ],
      "regenerated_by_change": "scripts/regenerate_surfaces.py must run after every change. Mint workflow does this automatically; manual edits must do it explicitly.",
      "last_updated": "2026-06-22"
    },
    "entities": {
      "name": "Entity / Concept Index",
      "canonical_path": "/data/entity-index.json",
      "purpose": "Concepts defined or referenced by deposits. Updated by reading-pass enrichment.",
      "owner_scripts": [
        "read_pass.py",
        "consolidate.py",
        "wire_deposit.py"
      ]
    },
    "dois": {
      "name": "DOI Resolution Index",
      "canonical_path": "/data/doi-resolution-index.json",
      "purpose": "Maps legacy Zenodo DOIs (post-termination) to current AXN identifiers on alexanarch.org."
    },
    "lexical_overlay": {
      "canonical_path": "/data/lexical-overlay.json",
      "role": "derived_enrichment",
      "derived_from": [
        "/data/lexical-minting-registry.json",
        "/data/entity-index.json",
        "/data/semantic-addresses.json"
      ],
      "generated_by": "scripts/build_lexical_overlay.py",
      "current_count": 7045,
      "description": "Per-LMR-term engagement overlay. 7,045 of 12,032 LMR terms are also in entity-index (the engaged set); 255 of those are also semantic-address targets. The overlay surfaces both bridges so /lexical/ can show engagement state and query-test status per term."
    },
    "overwrite_receipts": {
      "canonical_path": "/data/pre-overwrite-receipts.log",
      "role": "audit_log",
      "format": "JSONL (append-only, one receipt per line)",
      "schema": "{ts (ISO8601), actor (instance|regenerate_surfaces|...), instance_id, path (abs), web_path, sha256, size_bytes, line_count, is_binary, role, section, entry_name, companion_to, primary_companion, reason}",
      "description": "Audit log of every file overwrite event (or planned overwrite for which a receipt was issued). Two sources of receipts: (1) scripts/pre_overwrite.py — issued manually before any instance-initiated overwrite; (2) scripts/overwrite_guard.issue_auto_receipt() — issued automatically by canonical regenerator paths. The log is the structural complement to the discipline of running pre_overwrite.py before any ad-hoc edit. Workplan item 8.13 (standing directive after the 729dfd9 failure)."
    }
  },
  "derived_surfaces": {
    "browse_html": {
      "canonical_path": "/s/browse/index.html",
      "derived_from": "/data/registry.json",
      "regenerated_by": "scripts/regenerate_surfaces.py"
    },
    "browse_index_json": {
      "canonical_path": "/data/browse-index.json",
      "derived_from": "/data/registry.json",
      "regenerated_by": "scripts/regenerate_surfaces.py"
    },
    "chunks": {
      "canonical_path": "/data/chunks/registry/",
      "index_file": "/data/chunks/registry/_index.json",
      "derived_from": "/data/registry.json",
      "regenerated_by": "scripts/regenerate_surfaces.py",
      "purpose": "~1MB chunks of registry for streaming readers"
    },
    "sitemap": {
      "canonical_path": "/sitemap.xml",
      "derived_from": "/data/registry.json + static URL list",
      "regenerated_by": "scripts/regenerate_surfaces.py"
    },
    "sha256sums": {
      "canonical_path": "/SHA256SUMS.txt",
      "derived_from": "/data/registry.json hash fields",
      "regenerated_by": "scripts/regenerate_surfaces.py"
    },
    "record_pages": {
      "canonical_path_pattern": "/s/records/<deposit_number>/index.html",
      "derived_from": "/data/registry.json + /data/texts/AXN-<HEX>-text.md",
      "regenerated_by": "wire_deposit.py(N)"
    },
    "wiki_html": {
      "canonical_path": "/s/wiki/index.html",
      "derived_from": "/data/registry.json wiki_article fields + /data/entity-index.json defined_in + reference_count fields",
      "regenerated_by": "scripts/regenerate_surfaces.py (regenerate_wiki)",
      "shows": "auto-projected wiki entries for every deposit with non-empty wiki_article; canonical v2 AXN; Defines list from entity-index; reference-count summary",
      "role": "static_fallback",
      "note": "Static crawler-readable projection. The primary surface is the dynamic /wiki/ page (see wiki_dynamic)."
    },
    "graph_html": {
      "canonical_path": "/s/graph/index.html",
      "derived_from": "/data/entity-index.json entity_triples + /data/citation-graph.json edges",
      "regenerated_by": "scripts/regenerate_surfaces.py (regenerate_graph)",
      "shows": "concept relations (subject-predicate-object with evidence_status badges) + deposit citation edges (capped at 1500 + 500 respectively for page size)",
      "role": "static_fallback",
      "note": "Static crawler-readable projection. The primary surface is the dynamic /graph/ page (see graph_dynamic)."
    },
    "wiki_dynamic": {
      "canonical_path": "/wiki/index.html",
      "role": "primary",
      "type": "dynamic_js",
      "reads": [
        "/data/registry.json",
        "/data/entity-index.json"
      ],
      "features": "auto-linking of entity names, AXNs, and references_concepts (Phase C) within article text; search; Defines + References + reference-count footer per article"
    },
    "graph_dynamic": {
      "canonical_path": "/graph/index.html",
      "role": "primary",
      "type": "dynamic_js",
      "reads": [
        "/data/registry.json",
        "/data/entity-index.json"
      ],
      "features": "entity cards grouped by subject; type filter chips computed at run time; search; Phase C reference_count + defined_in_deposit overlay per card"
    },
    "lexical": {
      "canonical_path": "/lexical/index.html",
      "role": "primary",
      "type": "dynamic_js",
      "reads": [
        "/data/lexical-minting-registry.json"
      ],
      "features": "paginated alphabetical view of 12,032 minted terms; search; per-term type and defining-deposit link; alpha jump bar"
    },
    "citations": {
      "canonical_path": "/citations/index.html",
      "role": "primary",
      "type": "dynamic_js",
      "reads": [
        "/data/citation-graph.json",
        "/data/registry.json"
      ],
      "features": "paginated citation edges grouped by source deposit; via-type filter chips with counts; search; AXN-resolved target links"
    },
    "datasets": {
      "canonical_path": "/datasets/index.html",
      "role": "primary",
      "derived_from": "Static catalog of /data/*.json + /api/*.json files; small live overlay reading /api/index.json for current protocol versions and deposit count",
      "shows": "Human-readable catalog of every machine-readable dataset in the corpus: primary registries (with consuming-surface links), derived surfaces, protocols/schemas, supporting datasets, per-deposit text bodies, and scripts. Single navigation entry point for the data layer.",
      "companion_to": "/api/index.json"
    },
    "captures": {
      "canonical_path": "/captures/index.html",
      "role": "primary",
      "derived_from": "/data/EA-WG-CAPTURES-01-v8.3.json",
      "shows": "176 AI Overview captures with composition-layer match status (mt). Section filter (9 sections, Frameworks 82 + Heteronyms 29 + ...), status filter (ADOPTION/EXACT MATCH/BROAD MATCH/ZERO RESULT/ZERO INDEX/WOUND GAUGE/unrated), search across query/slug/description, paginated 25 per page. Each card: section, date, query, status chip (color-coded), source format, description (≤380 chars), Screenshot link to godkinggoogle.vercel.app/captures/#slug, As address forward-ref to /addresses/?q=, Re-run search link when search_url is present.",
      "companion_to": "/records/?id=3"
    },
    "addresses": {
      "canonical_path": "/addresses/index.html",
      "role": "primary",
      "derived_from": "/data/semantic-addresses.json",
      "shows": "1,964 canonical queries (semantic addresses) with four-class observation status (observed_address 111, subjunctive 1,748, unrated 83, verified_non_address 22). Four filter dimensions: observation_class, type (single_concept/unmatched/compressed_argument/multi_concept/site_query/diagnostic_test), source (mm-main-capture/mm-rf-battery/mm-termindex/mm-mint/mm-rf-reception/cha-workplan-870), entity-bridge (all/bound-to-entity/unmatched/quoted). Each card: canonical query (with quote indicator), class chip, type chip, refers_to chips → /graph/?search=, battery_membership chips, mint metadata, termindex tier/count, sources list, observations[] (up to 3 with date/status/format/screenshot/excerpt), actions (re-run on Google, view in captures). Deep links: ?q= (search) and ?class= (class filter). Paginated 25/page.",
      "companion_to": "/captures/"
    },
    "resolve": {
      "canonical_path": "/resolve/index.html",
      "role": "primary",
      "derived_from": "/data/doi-resolution-index.json",
      "shows": "1,817 legacy CHA DOI → sovereign-successor mappings. Accepts ?doi= URL param (with full URL or just suffix; auto-normalizes); surfaces a focused resolution card with AXN, status, title, blog/registry mirrors, record link. Browse view paginated 25/page with two filter dimensions: status (RECOVERED 422 / RECOVERED_UNLINKED 402 / 410_GONE 993) and match_type (NONE/version_doi_title_match/no_registry_match/heteronym_creator_search/title_match_score_*). Search across DOI suffix / title / sovereign_id / AXN. Per-entry card: legacy DOI, status chip (color-coded), title, AXN/id/date/mapping_type meta, note, actions row (Record, Blog mirror, Registry mirror, Resolve deep link). For unknown DOIs the focused view degrades gracefully with a DataCite API link.",
      "companion_to": "/records/?id=868"
    }
  },
  "scripts": {
    "bootstrap_familiarization": {
      "canonical_path": "scripts/bootstrap_familiarization.py",
      "purpose": "What new instances run FIRST. Verifies content-hashes of every protocol/schema listed in this index. Produces a familiarization receipt to attach to commits.",
      "invocation": "python3 scripts/bootstrap_familiarization.py [--receipt-file RECEIPT.txt]"
    },
    "protocol_update": {
      "canonical_path": "scripts/protocol_update.py",
      "purpose": "Atomic protocol update. Modifying a protocol means: edit JSON, then run this tool, which bumps version, recomputes content_sha256, updates this index, appends change_log, and propagates version strings to dependent docs. NEVER hand-edit protocol JSONs without running this.",
      "invocation": "python3 scripts/protocol_update.py --protocol <name> --description '...'"
    },
    "axn_lib": {
      "canonical_path": "scripts/axn_lib.py",
      "purpose": "Canonical Python AXN generation. AXN_GLYPHS and CLUSTERS tables, axn_glyph_from_hash(), axn_clusters_from_hash(), derive_axn(). Imported by validate_deposit.py and backfill_axn_compliance.py."
    },
    "validate_deposit": {
      "canonical_path": "scripts/validate_deposit.py",
      "purpose": "Validates issue bodies, single registry entries, or full registry against the deposit and axn protocols. Used by mint-axn.yml and validate-registry.yml CI workflows."
    },
    "regenerate_surfaces": {
      "canonical_path": "scripts/regenerate_surfaces.py",
      "purpose": "Idempotent regeneration of all derived surfaces from /data/registry.json. Run after every registry change."
    },
    "backfill_axn_compliance": {
      "canonical_path": "scripts/backfill_axn_compliance.py",
      "purpose": "One-shot historical: brings non-v2 AXNs to v2 compliance. Used 2026-06-22 for the 13 v1 deposits. Idempotent."
    },
    "citation_extractor": {
      "canonical_path": "scripts/citation_extractor.py",
      "purpose": "Extracts citation edges from deposit texts. Five via types: axn_reference, axn_hex_reference, ea_id_reference, deposit_number_reference, doi_resolution. Idempotent — re-running produces the same result."
    },
    "concept_backlink": {
      "canonical_path": "scripts/concept_backlink.py",
      "purpose": "Bidirectional concept-deposit indexing. Scans data/texts/AXN-*-text.md for each concept in entity-index; writes referenced_in[] (with reference_count) onto each concept and references_concepts[] onto each registry deposit. Idempotent. Phase C of data-structure interlinking workplan."
    },
    "build_lexical_overlay": {
      "canonical_path": "scripts/build_lexical_overlay.py",
      "purpose": "Build data/lexical-overlay.json — a derived enrichment file mapping each LMR term to its entity-index engagement state (engagement_type, reference_count, entity_triples_count, classified, type, defined_in) and any semantic-address bridge (address_count + observation-class distribution). Consumed by /lexical/ in parallel with LMR."
    },
    "pre_overwrite": {
      "canonical_path": "scripts/pre_overwrite.py",
      "purpose": "Standing-directive guard against the 729dfd9 failure pattern. CLI tool an instance MUST run before any ad-hoc file overwrite: produces a structural inventory receipt (sha256, size, role lookup in api/index.json, companion warnings for static_fallback surfaces), appends to data/pre-overwrite-receipts.log. The act of running it surfaces role-aware metadata that the instance might have missed — for static_fallback surfaces, an unmissable red-bordered warning points at the canonical primary. Receipts are JSONL append-only with {ts, actor, instance_id, path, web_path, sha256, size, role, companion_to, reason}.",
      "required_before": "Any str_replace/create_file/edit on an existing file by an instance (Claude/TACHYON).",
      "invocation": "python3 scripts/pre_overwrite.py <path> [--reason \"...\"] [--instance \"TACHYON ...\"]"
    },
    "overwrite_guard": {
      "canonical_path": "scripts/overwrite_guard.py",
      "purpose": "Importable module for auto-flow write paths. Exposes issue_auto_receipt(path, actor) for canonical regenerators to self-receipt every write (full audit trail) and require_receipt(path) for paths that should HARD-FAIL absent a fresh matching receipt. Also exposes find_recent_receipts() and tail_receipts() for diagnostics. Used by scripts/regenerate_surfaces.py — every regenerator write since this commit appends an audit entry.",
      "invocation": "from overwrite_guard import issue_auto_receipt, require_receipt  (in scripts/)"
    }
  },
  "instance_familiarization_log": {
    "purpose": "Audit trail of which agents operated against which protocol versions. Every familiarization receipt is also recorded here.",
    "log_location": "/data/instance-familiarization.log",
    "log_format": "JSONL, one receipt per line: {timestamp, instance_label, registry_version, protocol_versions_read: {name: version}, content_sha256_verified: {name: sha}, action_summary}",
    "writer": "scripts/bootstrap_familiarization.py with --append-log flag"
  },
  "ci_enforcement": {
    "mint_workflow": {
      "path": ".github/workflows/mint-axn.yml",
      "fires_on": "New GitHub Issue with [DEPOSIT] title prefix",
      "validates": "Issue body against deposit-protocol.json and deposit-schema.json. Rejects with rule IDs on failure."
    },
    "validate_workflow": {
      "path": ".github/workflows/validate-registry.yml",
      "fires_on": "Push/PR touching /data/registry.json, /api/, scripts/, or /data/texts/",
      "validates": "Full registry against all protocols + consistency invariants. Comments on PR with specific rule IDs. Blocks merge on failure."
    }
  },
  "change_log": [
    {
      "index_version": "v1.0",
      "date": "2026-06-22",
      "changes": [
        "Established /api/index.json as the central protocol registry.",
        "Split AXN identifier protocol out of deposit-protocol.json into /api/axn-protocol.json.",
        "Added /api/schemas/deposit-entry.schema.json as the formal JSON Schema for deposit entries.",
        "Documented the operator_directive — what new instances must do before any action.",
        "Bound bootstrap_familiarization.py and protocol_update.py as the two scripts that mediate all protocol interaction."
      ]
    },
    {
      "index_version": "v1.0",
      "date": "2026-06-22",
      "changes": [
        "Added new protocol 'enrichment' at /api/enrichment-protocol.json: Initial protocol creation — formalizes the enrichment pipeline that was previously implicit across multiple scripts"
      ]
    },
    {
      "index_version": "v1.0",
      "date": "2026-06-22",
      "changes": [
        "Updated protocol 'enrichment': Filled referenced_by/enforced_by lists"
      ]
    },
    {
      "index_version": "v1.0",
      "date": "2026-06-22",
      "changes": [
        "Updated protocol 'enrichment': Phase C complete: concept↔deposit bidirectional indexing landed. Each entity-index concept now carries referenced_in[] and reference_count fields; each registry deposit now carries references_concepts[] and references_concept_count. 24,777 raw matches across 7,076 concepts × 865 texts; 2,120 concepts have ≥1 reference beyond defined_in; 846 deposits link to ≥1 concept. Top-referenced: Lee Sharks (709), Semantic Economy (492), Crimson Hexagonal Archive (478)."
      ]
    },
    {
      "index_version": "v1.0",
      "date": "2026-06-23",
      "changes": [
        "operator_directive.for_workflows rewritten to reflect §6.2.1 step-3 rebuild architecture: self-serve depositing (no maintainer label gate), explicit sanitization layer in scripts/mint_deposit.py, canonical bytes redefined as the deposited text file (audit §6 fix), PR-creating with GitHub auto-merge as commit path (audit §23.1 PR + required-checks recommendation preserved), validate-registry.yml as the PR gate. Previous directive described the disabled workflow's behavior."
      ]
    }
  ],
  "state": {
    "canonical_path": "/data/state.json",
    "description": "Canonical generated source for all displayed counts. Read this rather than hand-maintaining counts here.",
    "content_sha256": "196fdb907df4b96e905f543602cd9df773d2ff8ff2015c77393c4a5cbf4496d2"
  }
}
