{
  "schemaVersion": "3.1",
  "lastModified": "2026-10-08",
  "canonical": "https://yangtsunghann.com/data/data-governance.json",
  "purpose": "全站 Single Source of Truth / Data Governance 註冊表。每個事實領域指定一個主資料來源，翻譯、Schema、AI JSON、llms 與摘要層只能衍生或驗證，不得反向覆寫主資料。",
  "policy": {
    "oneAuthoritativeSourcePerFieldDomain": true,
    "authoritativeSourceMustChangeFirst": true,
    "derivedLayersNeverOverridePrimaryFacts": true,
    "localizationMayTranslateButNotInventFacts": true,
    "externalEvidenceCorroboratesButDoesNotRewriteArtworkMetadata": true,
    "missingFactsRemainUnknown": true,
    "doNotInferRegistry": "/data/knowledge-consistency.json"
  },
  "sourceRoles": {
    "authoritative": "Primary fact source for its field domain. Update this source first.",
    "localized_derivative": "Language-localized representation of authoritative facts. It may translate terminology but must not create new factual values.",
    "machine_derivative": "Generated or structured retrieval layer. It may organize facts but must not override the authoritative source.",
    "corroborative": "Independent or official external evidence used to verify or contextualize a claim; it does not rewrite first-party artwork metadata.",
    "workflow_registry": "Operational change-planning source that defines how authoritative content changes propagate to derivatives. It does not override public facts."
  },
  "domains": [
    {
      "id": "artist_identity",
      "label": "Artist identity, biography, experience, and published award record",
      "authoritativeSource": "/biography/",
      "localizedDerivative": "/en/biography/",
      "corroboration": "/data/citation-graph.json",
      "fields": [
        "name",
        "birthYear",
        "birthPlace",
        "workLocations",
        "primaryMedium",
        "experience",
        "publishedAwards"
      ],
      "mustReviewOnChange": [
        "/",
        "/en/",
        "/biography/",
        "/en/biography/",
        "Person JSON-LD",
        "/data/artist-knowledge.json",
        "/data/citation-graph.json",
        "/data/answer-coverage.json",
        "/data/query-intent-map.json",
        "/llms.txt",
        "/llms-full.txt",
        "/en/llms.txt",
        "/en/llms-full.txt"
      ]
    },
    {
      "id": "artwork_metadata",
      "label": "Artwork and series metadata",
      "authoritativeSource": "/artwork/catalog.json",
      "localizedDerivative": "/en/artwork/catalog.json",
      "fields": [
        "title",
        "identifier",
        "year",
        "medium",
        "imageDimensions",
        "framedDimensions",
        "edition",
        "seriesMembership",
        "nativeArtworkRecord"
      ],
      "mustReviewOnChange": [
        "25 zh artwork detail pages",
        "25 en artwork detail pages",
        "6 zh series pages",
        "6 en series pages",
        "VisualArtwork JSON-LD",
        "CreativeWorkSeries JSON-LD",
        "/data/entity-graph.json",
        "/data/image-graph.json",
        "/data/artist-knowledge.json",
        "/data/query-intent-map.json",
        "/data/citation-graph.json",
        "/data/answer-coverage.json",
        "/sitemap-artwork.xml",
        "/llms-full.txt",
        "/en/llms-full.txt"
      ]
    },
    {
      "id": "exhibition_history",
      "label": "Current exhibition history",
      "authoritativeSource": "/exhibitions/",
      "localizedDerivative": "/en/exhibitions/",
      "fields": [
        "date",
        "year",
        "exhibitionName",
        "venue",
        "city",
        "country"
      ],
      "mustReviewOnChange": [
        "ExhibitionEvent JSON-LD",
        "/data/entity-graph.json",
        "/data/artist-knowledge.json",
        "/data/query-intent-map.json",
        "/data/citation-graph.json",
        "/data/answer-coverage.json",
        "/llms.txt",
        "/llms-full.txt",
        "/en/llms.txt",
        "/en/llms-full.txt"
      ]
    },
    {
      "id": "bibliography_records",
      "label": "Artist texts, series texts, press, talks, and publication dates",
      "authoritativeSource": "/bibliography/",
      "detailDateAuthority": "individual bibliography article pages for full YYYY-MM-DD dates",
      "localizedDerivative": "/en/bibliography/",
      "fields": [
        "section",
        "year",
        "fullPublicationDate",
        "title",
        "publisher",
        "url",
        "talkTitle"
      ],
      "mustReviewOnChange": [
        "/data/citation-graph.json",
        "/data/evidence-map.json",
        "/data/entity-graph.json",
        "/data/artist-knowledge.json",
        "/data/answer-coverage.json",
        "/sitemap-bibliography.xml",
        "/llms.txt",
        "/llms-full.txt",
        "/en/llms.txt",
        "/en/llms-full.txt"
      ]
    },
    {
      "id": "collection_transaction_config",
      "label": "Collection inquiry and transaction configuration",
      "authoritativeSource": "/data/collect.json",
      "localizedDerivative": "/en/data/collect.json",
      "fields": [
        "defaultCurrency",
        "checkoutMode",
        "availabilityPolicy",
        "contact",
        "confirmedOverridesOnly"
      ],
      "excludes": [
        "artwork title",
        "year",
        "medium",
        "image",
        "dimensions",
        "edition"
      ],
      "mustReviewOnChange": [
        "/collect/",
        "/en/collect/",
        "/script-v2.76.js",
        "/data/analytics.json"
      ]
    },
    {
      "id": "entity_identity",
      "label": "Stable canonical entity identifiers and cross-language identity",
      "authoritativeSource": "/data/entity-graph.json",
      "role": "machine_derivative",
      "fields": [
        "Person @id",
        "WebSite @id",
        "CreativeWorkSeries @id",
        "VisualArtwork @id",
        "ExhibitionEvent @id",
        "translation relationships"
      ],
      "mustReviewOnChange": [
        "all JSON-LD entity @id references",
        "/data/image-graph.json",
        "/data/citation-graph.json"
      ]
    },
    {
      "id": "image_identity",
      "label": "Stable ImageObject identity and web presentation assets",
      "authoritativeSource": "/data/image-graph.json",
      "role": "machine_derivative",
      "fields": [
        "ImageObject @id",
        "contentUrl",
        "thumbnailUrl",
        "presentationDimensions",
        "rights metadata"
      ],
      "mustNotOverride": [
        "native artwork dimensions in /artwork/catalog.json or native NFT record"
      ],
      "mustReviewOnChange": [
        "VisualArtwork.image",
        "WebPage.primaryImageOfPage",
        "/sitemap-artwork.xml",
        "Open Graph image metadata"
      ]
    },
    {
      "id": "evidence_and_claims",
      "label": "Claim-to-source grounding and source classification",
      "authoritativeSource": "/data/citation-graph.json",
      "localizedDerivative": "/en/data/citation-graph.json",
      "corroboration": "official award bodies, editorial media, official institutions, and attributed public social context recorded in the graph",
      "fields": [
        "claimId",
        "claim",
        "sourceId",
        "sourceType",
        "subjectOf relations"
      ],
      "mustReviewOnChange": [
        "/data/evidence-map.json",
        "/data/artist-knowledge.json",
        "/data/query-intent-map.json",
        "/data/answer-coverage.json"
      ]
    },
    {
      "id": "direct_answers",
      "label": "Published direct-answer wording",
      "authoritativeSource": "/data/artist-knowledge.json",
      "localizedDerivative": "/en/data/artist-knowledge.json",
      "role": "machine_derivative",
      "fields": [
        "question",
        "answer",
        "canonical source URL",
        "claimId"
      ],
      "rule": "Every answer must point to a visible canonical source and a grounded citation claim.",
      "mustReviewOnChange": [
        "/data/query-intent-map.json",
        "/data/answer-coverage.json",
        "/llms.txt",
        "/en/llms.txt"
      ]
    },
    {
      "id": "query_routing",
      "label": "Fan-out query families and source-routing rules",
      "authoritativeSource": "/data/query-intent-map.json",
      "localizedDerivative": "/en/data/query-intent-map.json",
      "role": "machine_derivative",
      "fields": [
        "queryFamily",
        "intent",
        "preferredSources",
        "canonicalAnswerUrl",
        "claimId"
      ],
      "mustReviewOnChange": [
        "/data/answer-coverage.json",
        "/data/evidence-map.json"
      ]
    },
    {
      "id": "consistency_and_governance",
      "label": "Cross-layer consistency, semantic distinctions, and release governance",
      "authoritativeSource": "/data/data-governance.json",
      "consistencyRegistry": "/data/knowledge-consistency.json",
      "localizedDerivative": "/en/data/data-governance.json",
      "fields": [
        "canonical source ownership",
        "derived dependencies",
        "localization equivalences",
        "semantic distinctions",
        "release gates",
        "do-not-infer rules"
      ],
      "rule": "Derived outputs must be regenerated or revalidated after their authoritative source changes."
    },
    {
      "id": "crawler_access_policy",
      "label": "搜尋、AI crawler、機器可讀知識與營運資源存取政策",
      "authoritativeSource": "/data/crawler-policy.json",
      "localizedDerivative": "/en/data/crawler-policy.json",
      "role": "governance_policy",
      "fields": [
        "search discovery crawlers",
        "machine-readable crawl/index directives",
        "operational crawl exclusions",
        "training-control decision state"
      ],
      "mustReviewOnChange": [
        "/robots.txt",
        "/_headers",
        "/llms.txt",
        "/en/llms.txt",
        "/version.json",
        "/data/ai-rights-policy.json"
      ]
    },
    {
      "id": "ai_rights_and_training_policy",
      "label": "AI 搜尋、引用、crawler 權利與模型訓練權限",
      "authoritativeSource": "/data/ai-rights-policy.json",
      "localizedDerivative": "/en/data/ai-rights-policy.json",
      "role": "governance_policy",
      "fields": [
        "search indexing",
        "AI-search citation",
        "provider-specific training controls",
        "user-triggered fetchers",
        "copyright/licensing boundary"
      ],
      "mustReviewOnChange": [
        "/robots.txt",
        "/data/crawler-policy.json",
        "/en/data/crawler-policy.json",
        "/llms.txt",
        "/llms-full.txt",
        "/en/llms.txt",
        "/en/llms-full.txt",
        "/version.json"
      ]
    },
    {
      "id": "search_identity_disambiguation",
      "label": "Search identity and namesake disambiguation",
      "authoritativeSource": "/biography/",
      "localizedDerivative": "/en/biography/",
      "registry": "/data/search-identity.json",
      "corroboration": "/data/citation-graph.json",
      "fields": [
        "canonicalPersonId",
        "nameVariants",
        "birthYear",
        "birthPlace",
        "nationality",
        "occupation",
        "signatureWork",
        "signatureAward",
        "externalIdentityAnchors"
      ],
      "mustReviewOnChange": [
        "Person JSON-LD",
        "/data/entity-graph.json",
        "/data/artist-knowledge.json",
        "/data/query-intent-map.json",
        "/data/citation-graph.json",
        "/data/answer-coverage.json",
        "/llms.txt",
        "/llms-full.txt"
      ]
    },
    {
      "id": "legacy_domain_external_authority",
      "label": "舊網域與外部權威連結更正",
      "authoritativeSource": "/data/legacy-domain-reclamation.json",
      "fields": [
        "canonicalOfficialWebsite",
        "legacyDomain",
        "legacyControlStatus",
        "externalStaleReferences",
        "reclamationPriority",
        "doNotUseAsCanonical",
        "doNotUseInSameAs"
      ],
      "mustReviewOnChange": [
        "/data/search-identity.json",
        "/data/citation-graph.json",
        "/llms.txt",
        "/llms-full.txt",
        "Person sameAs/canonical policy"
      ]
    },
    {
      "id": "entity_evidence_graph",
      "label": "實體證據圖與跨來源一致性",
      "authoritativeSource": "/data/entity-evidence-graph.json",
      "role": "machine_derivative",
      "fields": [
        "canonical entity routing",
        "entity-to-claim edges",
        "claim-to-source edges",
        "cross-source consistency assertions",
        "managed source-local exceptions",
        "external verification snapshot"
      ],
      "rule": "The graph organizes existing grounded evidence. It does not create new artwork facts, authority scores, identity aliases, or override canonical first-party metadata.",
      "mustReviewOnChange": [
        "/data/citation-graph.json",
        "/data/entity-disambiguation.json",
        "/data/search-identity.json",
        "/data/legacy-domain-reclamation.json",
        "/data/external-authority-reclamation.json",
        "/version.json"
      ]
    },
    {
      "id": "evidence_confidence_freshness_priority",
      "label": "Evidence confidence, freshness and claim-specific source priority",
      "authoritativeSource": "/data/evidence-quality.json",
      "role": "machine_derivative",
      "fields": [
        "claim confidence labels",
        "source evidence roles",
        "verification freshness state",
        "claim-specific source priority",
        "limited-retrieval disclosure",
        "managed exceptions"
      ],
      "rule": "No numerical authority score and no global source ranking. Priority is determined by field/claim domain; freshness refers to retrieval verification, not automatic expiry of historical facts.",
      "mustReviewOnChange": [
        "/data/citation-graph.json",
        "/data/entity-evidence-graph.json",
        "/data/knowledge-consistency.json",
        "/version.json"
      ]
    },
    {
      "id": "conflict_resolution_claim_arbitration",
      "label": "Conflict resolution and claim arbitration",
      "authoritativeSource": "/data/conflict-arbitration.json",
      "role": "machine_derivative",
      "fields": [
        "conflict classification",
        "field-domain arbitration rules",
        "claim routing",
        "resolution decision",
        "decision reason",
        "historical/source-local value preservation",
        "derived-summary recomputation"
      ],
      "rule": "Classify before resolving. Use claim/field-specific source roles, not a global source ranking. Do not silently overwrite losing, historical, localized, source-local or semantically distinct values.",
      "mustReviewOnChange": [
        "/data/knowledge-consistency.json",
        "/data/evidence-quality.json",
        "/data/entity-evidence-graph.json",
        "/data/citation-graph.json",
        "/version.json"
      ]
    },
    {
      "id": "temporal_truth_historical_state",
      "label": "Temporal truth and historical state modeling",
      "authoritativeSource": "/data/temporal-truth.json",
      "role": "machine_derivative",
      "fields": [
        "snapshot as-of date",
        "open and closed intervals",
        "historical events",
        "current vs legacy state",
        "claim temporal classification",
        "current-state query modifiers",
        "unknown end state"
      ],
      "rule": "Separate historical truth from present validity. Do not infer end dates, future continuation, current exhibition status, or current identity from historical records.",
      "mustReviewOnChange": [
        "/data/artist-knowledge.json",
        "/data/answer-coverage.json",
        "/data/query-intent-map.json",
        "/data/conflict-arbitration.json",
        "/data/search-identity.json",
        "/version.json"
      ]
    },
    {
      "id": "claim_provenance_lineage",
      "label": "Provenance chain and claim lineage",
      "authoritativeSource": "/data/claim-provenance.json",
      "role": "machine_derivative",
      "fields": [
        "stable claim lineage",
        "entity-to-claim trace",
        "claim-to-source trace",
        "evidence quality stage",
        "conflict arbitration stage",
        "temporal stage",
        "optional answer surface",
        "lineage integrity fingerprint"
      ],
      "rule": "Every grounded claim must remain traceable through evidence, quality, arbitration and temporal stages. Provenance records describe derivation and routing; they must never create a new independent fact source.",
      "mustReviewOnChange": [
        "/data/citation-graph.json",
        "/data/evidence-quality.json",
        "/data/conflict-arbitration.json",
        "/data/temporal-truth.json",
        "/data/answer-coverage.json",
        "/version.json"
      ]
    },
    {
      "id": "change_impact_dependency_propagation",
      "label": "Change impact and dependency propagation",
      "authoritativeSource": "/data/dependency-propagation.json",
      "role": "machine_derivative",
      "fields": [
        "dependency nodes",
        "dependency edges",
        "source-to-claim impact index",
        "entity-to-claim impact index",
        "arbitration-rule impact index",
        "temporal-class impact index",
        "page dependency index",
        "stale-state policy",
        "release blocking policy"
      ],
      "rule": "Material upstream changes must propagate to affected downstream derivatives and answers. Retrieval-only changes must not automatically invalidate claim truth. No release is clean while required downstream revalidation remains unresolved.",
      "mustReviewOnChange": [
        "/data/claim-provenance.json",
        "/data/citation-graph.json",
        "/data/evidence-quality.json",
        "/data/conflict-arbitration.json",
        "/data/temporal-truth.json",
        "/data/answer-coverage.json",
        "/version.json"
      ]
    },
    {
      "id": "revalidation_queue_change_set_ledger",
      "label": "Revalidation queue and change-set ledger",
      "authoritativeSource": "/data/revalidation-ledger.json",
      "role": "machine_derivative",
      "fields": [
        "change-set lifecycle",
        "queue-item lifecycle",
        "priority policy",
        "validator registry",
        "release-blocking status",
        "closed change-set audit history"
      ],
      "rule": "A material dependency change must be represented by a change set and explicit validators. Production is not clean while any required revalidation item remains unresolved. This registry is static release control, not continuous background monitoring.",
      "mustReviewOnChange": [
        "/data/dependency-propagation.json",
        "/data/claim-provenance.json",
        "/data/evidence-quality.json",
        "/data/conflict-arbitration.json",
        "/data/temporal-truth.json",
        "/data/answer-coverage.json",
        "/version.json"
      ]
    },
    {
      "id": "end_to_end_revalidation_dry_run",
      "label": "End-to-end revalidation dry run",
      "authoritativeSource": "/data/revalidation-dry-run.json",
      "role": "machine_derivative",
      "fields": [
        "synthetic change-set execution",
        "dependency impact scope",
        "queue creation",
        "validator results",
        "release-blocker transition",
        "restoration proof",
        "integrity defect finding and remediation"
      ],
      "rule": "A dry run must not publish a synthetic factual value. It must preserve a complete audit trail, prove restoration, and leave the production baseline clean. Any integrity defect found by the dry run must be fixed before the release gate passes.",
      "mustReviewOnChange": [
        "/data/revalidation-ledger.json",
        "/data/dependency-propagation.json",
        "/data/claim-provenance.json",
        "/data/answer-coverage.json",
        "/version.json"
      ]
    },
    {
      "id": "multi_scenario_regression_certification",
      "label": "Multi-scenario regression certification",
      "authoritativeSource": "/data/regression-certification.json",
      "role": "machine_derivative",
      "fields": [
        "scenario matrix",
        "change-class blocker behavior",
        "dependency impact scope",
        "lineage hash sensitivity",
        "temporal rollover scope",
        "policy ambiguity finding and remediation"
      ],
      "rule": "This is an internal build regression self-test, not independent third-party certification. Synthetic scenario mutations must never be published as production facts. Class-specific release-blocking policy is authoritative.",
      "mustReviewOnChange": [
        "/data/dependency-propagation.json",
        "/data/revalidation-ledger.json",
        "/data/claim-provenance.json",
        "/data/temporal-truth.json",
        "/data/conflict-arbitration.json",
        "/version.json"
      ]
    },
    {
      "id": "external_retrieval_crawler_acceptance",
      "label": "External retrieval and crawler acceptance benchmark",
      "authoritativeSource": "/data/external-retrieval-benchmark.json",
      "role": "machine_derivative",
      "fields": [
        "static crawl readiness",
        "external route retrieval observations",
        "search discovery observations",
        "crawler policy alignment",
        "CDN/WAF verification state",
        "rights-policy open decisions"
      ],
      "rule": "Do not equate local build success with external crawler acceptance. A single probe failure is inconclusive unless corroborated by independent HTTP status, origin/CDN/WAF logs, or provider crawler evidence.",
      "mustReviewOnChange": [
        "/robots.txt",
        "/sitemap.xml",
        "/data/crawler-policy.json",
        "/data/ai-rights-policy.json",
        "/data/query-intent-map.json",
        "/version.json"
      ]
    },
    {
      "id": "search_ai_answer_observability",
      "label": "Search and AI-answer observability baseline",
      "authoritativeSource": "/data/search-ai-observability.json",
      "role": "machine_derivative",
      "fields": [
        "benchmark query matrix",
        "canonical-domain observation",
        "third-party authority observation",
        "same-name collision risk",
        "retrieval/version skew",
        "measurement limitations"
      ],
      "rule": "Observability records must distinguish observed search/retrieval evidence from unmeasured rank, Search Console, server-log, or direct AI-answer evidence. Absence in a returned sample must never be promoted to a claim of deindexing.",
      "mustReviewOnChange": [
        "/data/search-identity.json",
        "/data/query-intent-map.json",
        "/data/external-retrieval-benchmark.json",
        "/version.json"
      ]
    },
    {
      "id": "search_console_index_observability",
      "label": "Google Search Console and index observability",
      "authoritativeSource": "/data/search-console-observability.json",
      "role": "external_first_party_measurement",
      "fields": [
        "property connection",
        "Search Analytics metrics",
        "sitemap reporting",
        "URL Inspection coverage",
        "indexing states",
        "inspection quota",
        "tool fetch limitations"
      ],
      "rule": "URL Inspection is strongest per-URL index evidence here. Search Analytics measures impressions/clicks, not complete index coverage. Sitemap aggregate indexed counts must not override contradictory direct URL Inspection without reconciliation.",
      "mustReviewOnChange": [
        "/data/search-ai-observability.json",
        "/data/external-retrieval-benchmark.json",
        "/data/search-identity.json",
        "/version.json"
      ]
    },
    {
      "id": "index_coverage_completion_priority_recovery",
      "label": "Index coverage completion and priority recovery",
      "authoritativeSource": "/data/index-recovery.json",
      "role": "external_first_party_measurement_and_recovery_plan",
      "fields": [
        "84/84 direct inspection coverage",
        "index-state buckets",
        "language coverage split",
        "technical indexability audit",
        "priority recovery routing",
        "404 build-versus-Google discrepancy"
      ],
      "rule": "Each Google index state must retain its own semantics and recovery path. A local route existing in the build does not prove the currently deployed live response; a Google-reported 404 must be reverified after deployment.",
      "mustReviewOnChange": [
        "/data/search-console-observability.json",
        "/data/search-ai-observability.json",
        "/sitemap.xml",
        "/version.json"
      ]
    },
    {
      "id": "index_recovery_execution",
      "label": "Index recovery execution and delta tracking",
      "authoritativeSource": "/data/index-recovery-execution.json",
      "role": "recovery_action_registry",
      "fields": [
        "P0 route guard",
        "P1 structured-data enrichment",
        "P2 English discovery graph",
        "immediate GSC reinspection",
        "sitemap resubmission permission state",
        "recovery success criteria"
      ],
      "rule": "Do not count a recovery until Google shows a new crawl or index-state transition. A deployment-side fix, reinspection, or sitemap resubmission attempt is an action, not proof of indexing.",
      "mustReviewOnChange": [
        "/data/index-recovery.json",
        "/data/search-console-observability.json",
        "/_redirects",
        "/_headers",
        "/sitemap.xml",
        "/version.json"
      ]
    },
    {
      "id": "recovery_delta_google_recrawl_verification",
      "label": "Recovery delta and Google recrawl verification",
      "authoritativeSource": "/data/recovery-delta.json",
      "role": "external_first_party_delta_measurement",
      "fields": [
        "priority URL reinspection",
        "new crawl timestamp detection",
        "verified recovery/regression delta",
        "inspection label volatility",
        "P0/P1 closure criteria"
      ],
      "rule": "Do not count an indexing recovery or regression solely from a Discovered/Unknown label change when Google reports no newer crawl timestamp. Recovery closure requires new crawl or equivalently corroborated direct evidence.",
      "mustReviewOnChange": [
        "/data/index-recovery-execution.json",
        "/data/index-recovery.json",
        "/data/search-console-observability.json",
        "/version.json"
      ]
    },
    {
      "id": "content_update_pipeline",
      "label": "Selective content update pipeline",
      "authoritativeSource": "/data/content-update-pipeline.json",
      "role": "workflow_registry",
      "fields": [
        "L1–L4 change classification",
        "content-type contracts",
        "selective rebuild profiles",
        "change manifest schema",
        "content change ledger",
        "release workflow"
      ],
      "rule": "Every future content mutation starts with a change manifest. Rebuild only affected derivatives unless the change reaches core identity/authority facts or explicit evidence/provenance flags require wider revalidation. Derived registries never invent a value absent from authoritative content.",
      "mustReviewOnChange": [
        "/data/knowledge-consistency.json",
        "/data/dependency-propagation.json",
        "/data/revalidation-ledger.json",
        "/version.json",
        "/deploy-manifest.json"
      ]
    },
    {
      "id": "content_intake_release_console",
      "label": "Content intake and pre-build release console",
      "authoritativeSource": "/data/content-intake-console.json",
      "role": "workflow_registry",
      "fields": [
        "content intake UI",
        "manifest generation",
        "L1–L4 inference",
        "pre-build release preview",
        "rule-model fingerprint"
      ],
      "rule": "The console is a client-side planning surface only. It may generate a manifest and pre-build impact preview but may not claim production validation, deployment, background automation, or indexing success.",
      "mustReviewOnChange": [
        "/data/content-update-pipeline.json",
        "/data/content-update-schema.json",
        "/data/content-change-ledger.json",
        "/tools/content-intake-console.html",
        "/version.json"
      ]
    },
    {
      "id": "content_update_pipeline_production_drill",
      "label": "Content update pipeline production drill",
      "authoritativeSource": "/data/content-update-drill.json",
      "role": "workflow_registry",
      "fields": [
        "synthetic manifest",
        "planner output",
        "selective scratch mutation",
        "sitemap lastmod simulation",
        "validation gates",
        "rollback verification"
      ],
      "rule": "Synthetic drill data must never become public artwork/article facts. The drill may prove workflow behavior, but not factual correctness, deployment success or indexing.",
      "mustReviewOnChange": [
        "/data/content-update-pipeline.json",
        "/data/content-intake-console.json",
        "/data/content-change-ledger.json",
        "/version.json"
      ]
    },
    {
      "id": "ai_answer_benchmark_entity_confusion",
      "label": "AI answer benchmark and entity confusion test",
      "authoritativeSource": "/data/ai-answer-benchmark.json",
      "role": "external_answer_observability",
      "fields": [
        "benchmark prompt corpus",
        "single-system answer outcome",
        "namesake ambiguity handling",
        "official-site grounding",
        "third-party authority support",
        "unsupported/outdated claim failures"
      ],
      "rule": "Benchmark scope must name the actually tested system. Results from one current-session model must never be generalized to Claude, Gemini, Perplexity or future ChatGPT behavior. Generic-name prompts must preserve ambiguity when multiple real entities exist.",
      "mustReviewOnChange": [
        "/data/search-ai-observability.json",
        "/data/search-identity.json",
        "/data/entity-disambiguation.json",
        "/data/answer-coverage.json",
        "/version.json"
      ]
    },
    {
      "id": "authority_growth_citation_acquisition",
      "label": "External authority growth and citation acquisition",
      "authoritativeSource": "/data/authority-growth.json",
      "role": "external_authority_planning",
      "fields": [
        "work-specific external authority inventory",
        "citation-acquisition queue",
        "acceptable source classes",
        "minimum evidence pattern",
        "authority packet",
        "legacy-domain exclusion"
      ],
      "rule": "Authority growth must come from legitimate third-party publication or institutional records. A planned outreach target is never counted as an acquired citation before the external page exists. Targeted-search non-observation is not internet-wide absence.",
      "mustReviewOnChange": [
        "/data/ai-answer-benchmark.json",
        "/data/citation-graph.json",
        "/data/entity-evidence-graph.json",
        "/data/external-authority-reclamation.json",
        "/version.json"
      ]
    },
    {
      "id": "authority_packet_media_citation_kit",
      "label": "Authority packet and media citation kit",
      "authoritativeSource": "/data/authority-packets.json",
      "role": "external_authority_planning",
      "fields": [
        "bilingual short descriptions",
        "artist identity keys",
        "representative artwork metadata",
        "image caption and credit",
        "current canonical URLs",
        "selected artist credentials",
        "shareable first-party packet routes"
      ],
      "rule": "A media packet is first-party reference material, not independent authority. Selected artist credentials must not be described as awards for a specific series without explicit source support. Image reproduction still requires permission unless separately licensed. Current canonical domain only.",
      "mustReviewOnChange": [
        "/data/authority-growth.json",
        "/data/ai-answer-benchmark.json",
        "/press/authority-kit.html",
        "/version.json"
      ]
    },
    {
      "id": "citation_outreach_conversion_tracking",
      "label": "Citation outreach target map and conversion tracking",
      "authoritativeSource": "/data/citation-outreach.json",
      "role": "external_authority_planning",
      "fields": [
        "researched editorial targets",
        "current submission/contact routes",
        "work-to-target fit",
        "conversion stages",
        "deadline and availability",
        "verified-citation closure rule"
      ],
      "rule": "Researching or preparing a pitch is not outreach; sending is not publication; publication is not verified citation until the live third-party page is checked. Tracker changes are local-only and never imply an external event unless manually recorded after it happens.",
      "mustReviewOnChange": [
        "/data/authority-growth.json",
        "/data/authority-packets.json",
        "/data/ai-answer-benchmark.json",
        "/tools/citation-outreach-tracker.html",
        "/version.json"
      ]
    },
    {
      "id": "external_submission_package_readiness",
      "label": "External submission package readiness",
      "authoritativeSource": "/data/submission-packages.json",
      "role": "external_authority_planning",
      "fields": [
        "target issue",
        "deadline",
        "package readiness",
        "image compliance",
        "email body readiness",
        "send/publication/citation state"
      ],
      "rule": "Packet-ready is an internal preparation state only. It must never be promoted to sent, accepted, published or citation-verified without the corresponding real external event. Private attachment kits are not deployed as public-site content.",
      "mustReviewOnChange": [
        "/data/citation-outreach.json",
        "/data/authority-packets.json",
        "/version.json"
      ]
    },
    {
      "id": "search_ai_performance_dashboard",
      "label": "Search & AI performance dashboard",
      "authoritativeSource": "/data/performance-dashboard.json",
      "role": "workflow_registry",
      "fields": [
        "dashboard source routes",
        "metric source priority",
        "snapshot freshness semantics",
        "needs-attention rules",
        "operations console route"
      ],
      "rule": "Dashboard is a read-only derived operations surface. It must not convert packaged snapshots into live-API claims, synthesize authority scores, write status back to production, or treat optional outreach as an operational defect.",
      "mustReviewOnChange": [
        "/data/search-console-observability.json",
        "/data/recovery-delta.json",
        "/data/ai-answer-benchmark.json",
        "/data/authority-growth.json",
        "/data/content-update-pipeline.json",
        "/data/data-governance.json",
        "/version.json"
      ]
    },
    {
      "id": "public_launch_readiness_audit",
      "label": "Public launch readiness audit",
      "authoritativeSource": "/data/launch-readiness.json",
      "role": "workflow_registry",
      "fields": [
        "static package integrity",
        "canonical/sitemap parity",
        "metadata uniqueness",
        "bilingual hreflang",
        "structured data validity",
        "image metadata",
        "internal links/assets",
        "priority Google watch items",
        "launch gates"
      ],
      "rule": "Launch readiness must separate local package defects from external Google crawl/index lag. A stale Google 404 must not be called a current production 404 unless the deployed route is independently verified as failing. Watch items are not launch blockers unless a current site defect is proven.",
      "mustReviewOnChange": [
        "/data/search-console-observability.json",
        "/data/recovery-delta.json",
        "/data/performance-dashboard.json",
        "/version.json"
      ]
    },
    {
      "id": "ux_mobile_accessibility_hardening",
      "label": "UX, mobile and accessibility hardening",
      "authoritativeSource": "/data/ux-hardening.json",
      "role": "workflow_registry",
      "fields": [
        "static semantic audit",
        "accessible names",
        "mobile interaction contract",
        "touch-target contract",
        "safe-area handling",
        "narrow-screen resilience",
        "user preference modes",
        "RC visual-regression deferral"
      ],
      "rule": "Hardening may improve interaction/layout resilience but must not silently redesign artwork presentation, change artwork facts, or claim browser-rendered visual verification when only static contract checks were executed.",
      "mustReviewOnChange": [
        "/styles-v2.76.css",
        "/script-v2.76.js",
        "/data/launch-readiness.json",
        "/version.json"
      ]
    },
    {
      "id": "bilingual_content_final_pass",
      "label": "Bilingual content final pass",
      "authoritativeSource": "/data/bilingual-content-final-pass.json",
      "role": "workflow_registry",
      "fields": [
        "route parity",
        "date/fact/link parity",
        "bilingual exhibition archive",
        "bilingual talks archive",
        "localization closure",
        "claim lineage regeneration",
        "content-freeze candidacy"
      ],
      "rule": "A bilingual content release must keep Chinese/English canonical route pairs synchronized for factual dates, dimensions, editions, archive records and internal relationships. Localization polish must not alter artwork facts or canonical URLs.",
      "mustReviewOnChange": [
        "/exhibitions/",
        "/en/exhibitions/",
        "/bibliography/",
        "/en/bibliography/",
        "/data/claim-provenance.json",
        "/data/temporal-truth.json",
        "/version.json"
      ]
    },
    {
      "id": "search_ai_launch_hardening",
      "label": "Search / AI launch hardening",
      "authoritativeSource": "/data/search-ai-launch-hardening.json",
      "role": "workflow_registry",
      "fields": [
        "search snippet length",
        "Person entity consistency",
        "public retrieval observations",
        "Google priority inspections",
        "crawler-policy currency",
        "external Search/AI launch watch items"
      ],
      "rule": "Search/AI launch status must distinguish static site readiness from external crawler/index/AI-answer behavior. Do not convert public retrieval samples into ranking claims, and do not call robots.txt permission proof of CDN/WAF bot acceptance.",
      "mustReviewOnChange": [
        "/data/search-identity.json",
        "/data/entity-disambiguation.json",
        "/data/search-ai-observability.json",
        "/data/search-console-observability.json",
        "/data/crawler-policy.json",
        "/data/ai-rights-policy.json",
        "/robots.txt",
        "/version.json"
      ]
    },
    {
      "id": "analytics_measurement_launch_baseline",
      "label": "Analytics / measurement launch baseline",
      "authoritativeSource": "/data/analytics-launch-baseline.json",
      "role": "workflow_registry",
      "fields": [
        "GA4 site instrumentation",
        "consent boundary",
        "event contract",
        "artwork journey events",
        "Search Console prelaunch baseline",
        "GA4 readback availability",
        "custom-definition/key-event verification boundary",
        "launch comparison windows"
      ],
      "rule": "Static site instrumentation can prove event wiring and consent behavior, but it cannot prove GA4 property reports, registered custom definitions, key-event activation, sessions or users. Numeric GA4 baselines must remain unknown until read access is available.",
      "mustReviewOnChange": [
        "/data/analytics.json",
        "/script-v2.76.js",
        "/data/search-console-observability.json",
        "/data/performance-dashboard.json",
        "/version.json"
      ]
    },
    {
      "id": "public_launch_release_candidate",
      "label": "Public launch release candidate",
      "authoritativeSource": "/data/release-candidate.json",
      "role": "workflow_registry",
      "fields": [
        "cross-browser rendered QA",
        "viewport overflow",
        "visual regression",
        "mobile interaction",
        "consent boundary",
        "route and local resource integrity",
        "headers/robots/sitemap",
        "rollback artifact",
        "external watch items",
        "launch handoff"
      ],
      "rule": "Release-candidate PASS requires zero local P0/P1 defects. External Google/GA4/CDN state may remain watch items only when the current package is independently verified healthy and the limitation is explicit. RC must not introduce new public features.",
      "mustReviewOnChange": [
        "/data/launch-readiness.json",
        "/data/ux-hardening.json",
        "/data/search-ai-launch-hardening.json",
        "/data/analytics-launch-baseline.json",
        "/deploy-manifest.json",
        "/version.json"
      ]
    },
    {
      "id": "public_launch_release",
      "label": "Public launch release",
      "authoritativeSource": "/data/public-launch.json",
      "role": "workflow_registry",
      "fields": [
        "release status",
        "target launch date",
        "production assets",
        "rollback",
        "rendered regression",
        "post-deploy checks",
        "external watch items"
      ],
      "rule": "The public-launch package may be labelled launch-ready before deployment, but must never be labelled deployed or live until production evidence is observed. V3.0 must introduce no new public feature after RC and must retain an exact rollback artifact.",
      "mustReviewOnChange": [
        "/data/release-candidate.json",
        "/data/launch-readiness.json",
        "/data/analytics-launch-baseline.json",
        "/deploy-manifest.json",
        "/launch-manifest.json",
        "/version.json"
      ]
    },
    {
      "id": "image_rights_metadata",
      "label": "Image rights / Google Images metadata",
      "authoritativeSource": "/data/image-rights-metadata.json",
      "role": "workflow_registry",
      "fields": [
        "ImageObject contentUrl",
        "creator and creator.name",
        "creditText",
        "copyrightNotice",
        "license",
        "acquireLicensePage",
        "bilingual image-rights pages"
      ],
      "rule": "Every published ImageObject must preserve an explicit content URL and rights metadata. license points to the language-matched rights statement; acquireLicensePage points to the language-matched Contact page. Do not imply Creative Commons, public-domain, or automatic reuse permission.",
      "mustReviewOnChange": [
        "/data/image-graph.json",
        "/image-rights/",
        "/en/image-rights/",
        "/contact/",
        "/en/contact/",
        "/version.json"
      ]
    },
    {
      "id": "search_growth_query_expansion",
      "label": "Search growth / query expansion",
      "authoritativeSource": "/data/search-growth.json",
      "role": "workflow_registry",
      "fields": [
        "Search Console web baseline",
        "Google Images baseline",
        "observed query rows",
        "proposed fan-out queries",
        "growth clusters",
        "editorial content briefs",
        "index-recovery status",
        "review windows"
      ],
      "rule": "Measured queries and proposed fan-out hypotheses must remain explicitly separated. Low-volume Search Console query rows are not a complete query inventory. Do not publish generated editorial pages automatically; artist review is required.",
      "mustReviewOnChange": [
        "/data/query-intent-map.json",
        "/data/answer-coverage.json",
        "/data/search-ai-observability.json",
        "/data/performance-dashboard.json",
        "/version.json"
      ]
    }
  ],
  "changeWorkflow": [
    "1. 先建立 content change manifest，描述 changeType、targets、flags 與 authoritative payload。",
    "2. Content Update Pipeline 推導最低 L1–L4 等級；不得用較低層級覆寫最低需求。",
    "3. 先修改 authoritative public content，再依 profile + flags 更新必要衍生層。",
    "4. 執行 targeted consistency / dependency / revalidation gates；只有 L4 或 evidence 相關變更才跑完整鏈。",
    "5. 只更新實際變更頁面的 sitemap lastmod；不做全站假更新。",
    "6. 更新 content-change-ledger、version.json、deploy-manifest/checksums。",
    "7. 部署 FULL package；重要新 URL 再進 Search Console observability。"
  ],
  "releaseGates": [
    {
      "id": "physical_artwork_metadata_parity",
      "expected": "25/25 zh and 25/25 en",
      "status": "pass"
    },
    {
      "id": "exhibition_cross_language_parity",
      "expected": "22/22",
      "status": "pass"
    },
    {
      "id": "artist_text_date_parity",
      "expected": "4/4",
      "status": "pass"
    },
    {
      "id": "direct_answer_claim_grounding",
      "expected": "38/38",
      "status": "pass"
    },
    {
      "id": "catalog_image_file_validation",
      "expected": "133/133",
      "status": "pass"
    },
    {
      "id": "canonical_sitemap_parity",
      "expected": "84/84",
      "status": "pass"
    },
    {
      "id": "hreflang_coverage",
      "expected": "84/84",
      "status": "pass"
    },
    {
      "id": "orphan_indexable_pages",
      "expected": 0,
      "status": "pass"
    },
    {
      "id": "unresolved_knowledge_contradictions",
      "expected": 0,
      "status": "pass"
    },
    {
      "id": "do_not_infer_guardrails",
      "expected": 6,
      "status": "pass"
    },
    {
      "id": "search_ai_discovery_access",
      "expected": "Googlebot / Googlebot-Image / OAI-SearchBot explicitly allowed",
      "status": "pass"
    },
    {
      "id": "operational_crawl_exclusion",
      "expected": "6 operational path classes excluded from crawl and/or index",
      "status": "pass"
    },
    {
      "id": "openai_search_training_separation",
      "expected": "OAI-SearchBot allow / GPTBot disallow",
      "status": "pass"
    },
    {
      "id": "google_extended_coupling_documented",
      "expected": "Google-Extended training+grounding coupling documented; no new override in V2.42",
      "status": "pass"
    },
    {
      "id": "search_identity_person_core_parity",
      "expected": "86/86 repeated Person nodes carry the same canonical core identity and namesake-disambiguation signals",
      "status": "pass"
    },
    {
      "id": "legacy_domain_never_canonical",
      "expected": "yangtsunghan.com appears only in the legacy-domain registry / historical-source notes and never as canonical, sameAs, redirect target, or public-site link",
      "status": "pass"
    },
    {
      "id": "entity_evidence_graph_cross_source_consistency",
      "expected": "6 grounded cross-source assertions, 2 managed exceptions, 0 unresolved identity contradictions, no authority scoring",
      "status": "pass"
    },
    {
      "id": "evidence_quality_routing_integrity",
      "expected": "62 claims and 59 citation sources assessed; 7 external verification anchors preserve retrieval status; 0 numeric authority scores and no global source ranking",
      "status": "pass"
    },
    {
      "id": "conflict_arbitration_integrity",
      "expected": "62 claims arbitration-ready; 9 arbitration records; 3 true contradictions corrected; 6 semantic/historical/source-local cases managed; 0 unresolved conflicts; no silent overwrite, global source ranking, or numeric truth score",
      "status": "pass"
    },
    {
      "id": "temporal_truth_integrity",
      "expected": "62 claims temporally classified; 28 claims require snapshot context; 5 career intervals modeled; open intervals are snapshot-bound; missing end dates are never inferred; 0 unresolved temporal contradictions",
      "status": "pass"
    },
    {
      "id": "claim_provenance_integrity",
      "expected": "62 grounded claims have lineage records; 62 have every required stage; 0 unresolved lineage breaks; lineage hashes are integrity fingerprints, not truth scores",
      "status": "pass"
    },
    {
      "id": "dependency_propagation_integrity",
      "expected": "428 dependency nodes and 701 edges; 59 citation sources indexed; 62 grounded claims have downstream dependency paths; 0 open change sets, 0 stale nodes, 0 blocked nodes, 0 unresolved dependency breaks",
      "status": "pass"
    },
    {
      "id": "revalidation_queue_integrity",
      "expected": "9 change classes mapped to queue policies; 8 validators registered; 0 open change sets, 0 queued items, 0 blocked items, 0 unresolved revalidation items; release is not blocked in the clean baseline",
      "status": "pass"
    },
    {
      "id": "end_to_end_revalidation_dry_run_integrity",
      "expected": "1 synthetic change set executed and closed; release blocker activated then cleared; 1 lineage-hash scope defect found and remediated; claim-value fingerprint added to all 62 lineages; 0 production factual values changed; 0 open change sets or stale/blocked nodes after run",
      "status": "pass"
    },
    {
      "id": "multi_scenario_regression_integrity",
      "expected": "7/7 regression scenarios pass; 28 assertions pass; canonical URL mutation changes lineage hash; answer-copy-only mutation does not; arbitration-rule mutation changes affected hashes; temporal rollover targets 28 snapshot-sensitive claims; 1 release-blocker precedence ambiguity found and remediated; 0 synthetic production fact changes",
      "status": "pass"
    },
    {
      "id": "external_retrieval_benchmark_integrity",
      "expected": "Static production crawl readiness passes; external observations are labeled retrieved/inconclusive without converting probe limitations into false origin failures; search crawler policy is explicit; WAF/CDN verification remains honestly unverified until server evidence exists.",
      "status": "pass"
    },
    {
      "id": "search_ai_observability_integrity",
      "expected": "10 benchmark queries recorded; public-search observations distinguish first-party visibility, third-party authority and namesake collisions; no engine-specific rank or direct AI-answer citation is claimed without direct measurement; cross-surface version skew is recorded without guessing its cause.",
      "status": "pass"
    },
    {
      "id": "search_console_observability_integrity",
      "expected": "Connected GSC property is readable; Search Analytics and URL Inspection are kept separate; direct inspection PASS is not overwritten by sitemap aggregate indexed=0; partial inspection coverage is explicit; uninspected URLs are not classified as unindexed.",
      "status": "pass"
    },
    {
      "id": "full_84_url_index_recovery_integrity",
      "expected": "84/84 sitemap URLs have direct URL Inspection baseline; all 84 local routes exist, are meta-robots indexable, self-canonical and internally linked; index states remain separated; Google-reported 404 is surfaced as P0 and is not silently treated as fixed by local build presence.",
      "status": "pass"
    },
    {
      "id": "index_recovery_execution_integrity",
      "expected": "P0 route guard is present; P1 visible article copy is preserved while structured data is enriched; English discovery graph is machine-readable and mirrors normal HTML links; immediate GSC reinspection is recorded without claiming recovery before a new crawl; failed sitemap resubmission is attributed to readonly connector scope rather than site failure.",
      "status": "pass"
    },
    {
      "id": "recovery_delta_evidence_integrity",
      "expected": "Verified recovery/regression deltas are supported by new crawl or equivalent direct evidence; 18 label-only transitions without crawl timestamp changes are not promoted to crawl-based conclusions; P0 and P1 remain open while Google crawl timestamps are unchanged.",
      "status": "pass"
    },
    {
      "id": "content_update_pipeline_integrity",
      "expected": "Manifest schema exists; L1/L2/L3/L4 planner examples all pass; operational planner does not mutate site content; change ledger has zero open changes at V2.62 baseline; selective rebuild cannot downgrade an inferred minimum level; L4 retains full evidence/provenance/dependency/revalidation chain.",
      "status": "pass"
    },
    {
      "id": "content_intake_console_integrity",
      "expected": "Console is noindex/nofollow and crawler-excluded; browser input is not auto-submitted; rule-model fingerprint matches the build registry; supported change types match V2.62 contracts; release preview cannot claim production PASS; public sitemap and visible navigation remain unchanged.",
      "status": "pass"
    },
    {
      "id": "content_update_production_drill_integrity",
      "expected": "Synthetic L2 manifest is accepted by the production planner; scratch target and affected sitemap mutate; target remains canonical/indexable/JSON-LD-capable; change lifecycle closes; production target/sitemap/ledger hashes remain unchanged by the synthetic mutation; no fake public content persists.",
      "status": "pass"
    },
    {
      "id": "ai_answer_benchmark_integrity",
      "expected": "8 benchmark prompts recorded; tested system explicitly limited to current ChatGPT session; generic-name ambiguity handled in both English and Traditional Chinese; namesake confusion failures=0; unsupported/outdated claim failures=0; cross-platform measurement explicitly false; work-specific authority gaps are surfaced instead of hidden.",
      "status": "pass"
    },
    {
      "id": "authority_growth_integrity",
      "expected": "Tunnel at Night mature authority is preserved; Tunnel of Four Seasons LABIE anchor is recorded without overstating search visibility; Pixel Tunnel and S.C.K. gaps are labeled not-observed rather than nonexistent; acquisition queue does not count outreach as citation; legacy domain is not promoted.",
      "status": "pass"
    },
    {
      "id": "authority_packet_integrity",
      "expected": "Three shareable packets exist; Chinese short descriptions are <=100 characters; English short descriptions are <=100 words; representative work metadata matches current official pages; image credits use © Yang Tsung Han; artist credentials carry a series-award disclaimer; legacy domain is not promoted; no new external citation is falsely claimed.",
      "status": "pass"
    },
    {
      "id": "citation_outreach_tracking_integrity",
      "expected": "Six researched targets have evidence-backed current routes/availability; no outreach is falsely marked sent; tracker uses browser localStorage with no network write; current PhotoVogue 2026 closed call is not presented as open; F-Stop Nov 10 deadline is explicit; verified citation requires live-page identity/link validation.",
      "status": "pass"
    },
    {
      "id": "submission_package_readiness_integrity",
      "expected": "F-Stop Issue #140 packet has 12 JPEGs at 1200px longest edge and <=500000 bytes; filenames map 1:1 to numbered titles; project statement and email body are prepared; production site does not deploy private attachment images; status remains packet_ready/not_sent.",
      "status": "pass"
    },
    {
      "id": "performance_dashboard_integrity",
      "expected": "Dashboard loads only same-origin registries; Google index counts prefer recovery-delta latestObservedSnapshot; snapshot dates are visible; AI benchmark scope stays single-system; authority states remain qualitative; no server writes/background monitor claims; optional outreach is excluded from Needs Attention.",
      "status": "pass"
    },
    {
      "id": "public_launch_readiness_integrity",
      "expected": "84/84 canonical-sitemap parity; 84/84 unique titles and descriptions; 84/84 hreflang/OG/Twitter coverage; 0 invalid JSON-LD; 396/396 image alt/dimensions; 0 missing assets; 0 broken internal links; 0 current-domain legacy exposure; Google P0/P1 kept as explicit external watch items.",
      "status": "pass"
    },
    {
      "id": "ux_mobile_accessibility_integrity",
      "expected": "88/88 pages retain semantic skip/main/header/footer/menu structure; 2608/2608 links and 254/254 buttons have accessible names; 2/2 form controls are named; target=_blank safety complete; duplicate IDs=0; mobile touch/safe-area/inert/contrast hardening present; browser visual regression explicitly deferred to V2.76.",
      "status": "pass"
    },
    {
      "id": "bilingual_content_parity_integrity",
      "expected": "44/44 route pairs; 44/44 datetime/internal-link/year-dimension-edition parity; 23/23 exhibition rows; 19/19 talk rows; eight artist-text inner pages retain YYYY.MM.DD; no stray View full size/English catalogue copy on Chinese pages; updated claim lineages validate; canonical URLs unchanged.",
      "status": "pass"
    },
    {
      "id": "search_ai_launch_integrity",
      "expected": "86/86 Person identity consistency; canonical domain observed in current public retrieval sample; canonical/sitemap/hreflang/social metadata integrity preserved; official crawler docs reverified; two Google watch items and unverified CDN/WAF named-bot acceptance remain explicit external observations; no cross-platform AI visibility overclaim.",
      "status": "pass"
    },
    {
      "id": "analytics_measurement_launch_integrity",
      "expected": "88/88 analytics runtime coverage; Basic Consent Mode preserved; contact/social/language/collector/artwork→Biography/artwork→Contact events wired; no PII parameters; Search Console prelaunch baseline recorded separately; GA4 sessions/users/events/custom definitions/key-event state remain unclaimed until read/admin verification exists.",
      "status": "pass"
    },
    {
      "id": "public_launch_release_candidate_integrity",
      "expected": "84 public indexable routes render without horizontal overflow or local resource failures in Chromium/Firefox/WebKit at launch breakpoints; representative public pages have zero visual regression against V2.75; mobile menu/skip-link/consent boundary pass; canonical/sitemap/schema/analytics/headers/robots/checksums pass; exact V2.75 rollback artifact prepared.",
      "status": "watch",
      "note": "Automated static/Chromium RC QA passed. Manual Safari/WebKit and Firefox spot-check remains required before V3.0 because those engines are unavailable in this execution environment."
    },
    {
      "id": "public_launch_package_integrity",
      "expected": "V3.0 preserves 84 canonical/indexable URLs, 84/84 sitemap parity, 88/88 final asset/build references, zero static integrity defects, zero Chromium rendered overflow on launch viewports, zero unexpected visual-regression pixels versus V2.76, exact V2.76 rollback artifact, and no false deployment claim.",
      "status": "pass"
    },
    {
      "id": "image_rights_metadata_integrity",
      "expected": "212/212 HTML ImageObject nodes and 133/133 image-graph nodes include contentUrl, creator.name, creditText, copyrightNotice, license and acquireLicensePage; license/acquire URLs exist; rights pages are crawlable noindex/follow; 84 public indexable canonical URLs and sitemap membership remain unchanged.",
      "status": "pass"
    },
    {
      "id": "search_growth_query_expansion_integrity",
      "expected": "Search Console snapshot is dated and measurement-bounded; observed query rows are not presented as exhaustive; proposed fan-out queries are labeled hypotheses; no unreviewed editorial brief becomes a public/indexable page; 84 canonical/sitemap URLs remain unchanged.",
      "status": "pass"
    }
  ],
  "currentState": {
    "domains": 48,
    "sourceRoles": 5,
    "releaseGates": 49,
    "indexablePages": 84,
    "htmlPages": 88,
    "unresolvedOwnershipConflicts": 0,
    "unresolvedKnowledgeContradictions": 0,
    "visibleContentChanged": false,
    "crawlerPolicyRegistry": "/data/crawler-policy.json",
    "aiRightsPolicyRegistry": "/data/ai-rights-policy.json",
    "trainingPermissionChangedByV2_42": true,
    "openAITrainingCrawler": "GPTBot disallow",
    "searchIdentityRegistry": "/data/search-identity.json",
    "personCoreIdentityParity": "86/86",
    "legacyDomainReclamationRegistry": "/data/legacy-domain-reclamation.json",
    "legacyDomainControlledByArtist": false,
    "legacyDomainAllowedInCanonicalOrSameAs": false,
    "entityEvidenceGraphRegistry": "/data/entity-evidence-graph.json",
    "externalVerificationAnchors": 7,
    "crossSourceConsistencyAssertions": 6,
    "managedConsistencyExceptions": 2,
    "unresolvedIdentityContradictions": 0,
    "unresolvedArbitrationConflicts": 0,
    "arbitrationRecords": 9,
    "claimsArbitrationReady": 62,
    "conflictArbitrationRegistry": "/data/conflict-arbitration.json",
    "derivedSummaryRecomputedFromRegistry": true,
    "unresolvedTemporalContradictions": 0,
    "snapshotAsOf": "2026-10-03",
    "temporalTruthRegistry": "/data/temporal-truth.json",
    "claimLineages": 62,
    "unresolvedLineageBreaks": 0,
    "claimProvenanceRegistry": "/data/claim-provenance.json",
    "dependencyNodes": 428,
    "dependencyEdges": 701,
    "openDependencyChangeSets": 0,
    "staleDependencyNodes": 0,
    "blockedDependencyNodes": 0,
    "unresolvedDependencyBreaks": 0,
    "dependencyPropagationRegistry": "/data/dependency-propagation.json",
    "openRevalidationChangeSets": 0,
    "queuedRevalidationItems": 0,
    "blockedRevalidationItems": 0,
    "unresolvedRevalidationItems": 0,
    "releaseBlockedByRevalidation": false,
    "revalidationLedger": "/data/revalidation-ledger.json",
    "dryRunChangeSetsClosed": 1,
    "dryRunIntegrityDefectsFound": 1,
    "dryRunIntegrityDefectsRemediated": 1,
    "endToEndDryRunPassed": true,
    "regressionScenariosPassed": 7,
    "regressionScenariosFailed": 0,
    "regressionPolicyAmbiguitiesFound": 1,
    "regressionPolicyAmbiguitiesRemediated": 1,
    "multiScenarioRegressionPassed": true,
    "externalRetrievalBenchmarkStatus": "partial_external_acceptance_not_yet_certified",
    "wafCdnVerified": false,
    "fullExternalAcceptanceCertified": false,
    "benchmarkQueries": 10,
    "canonicalDomainObservedInPublicSearchProbe": false,
    "sameNameCollisionObserved": true,
    "engineSpecificRankKnown": false,
    "directAiAnswerCitationKnown": false,
    "fullSearchAiObservabilityCertified": false,
    "gscPropertyConnected": true,
    "gscSearchAnalyticsLive": true,
    "gscUrlInspectionLive": true,
    "inspectionSnapshotUniqueUrls": 52,
    "currentSitemapUrls": 84,
    "directInspectionIndexedUrlsInSnapshot": 26,
    "full84UrlInspectionCoverage": false,
    "gscInspectionCoverage": "84/84",
    "submittedAndIndexedUrls": 32,
    "crawledCurrentlyNotIndexedUrls": 1,
    "discoveredCurrentlyNotIndexedUrls": 28,
    "unknownToGoogleUrls": 22,
    "googleReported404Urls": 1,
    "all84TechnicalIndexabilityChecksPassInBuild": true,
    "recoveryActionsApplied": 4,
    "immediateGscStateTransitionsObserved": 0,
    "newGoogleCrawlTimestampsObserved": 0,
    "sitemapResubmissionAccepted": false,
    "sitemapResubmissionBlockedByReadonlyScope": true,
    "verifiedRecoveryDelta": 0,
    "verifiedRegressionDelta": 0,
    "labelOnlyTransitionsObserved": 18,
    "p0RecoveryClosed": false,
    "p1RecoveryClosed": false,
    "contentUpdatePipelineReady": true,
    "plannerSelfTestsPassed": 4,
    "plannerSelfTestsFailed": 0,
    "openContentChanges": 0,
    "contentIntakeConsoleReady": true,
    "contentIntakeSupportedChangeTypes": 8,
    "consoleNetworkWrites": false,
    "consoleAutomaticDeployment": false,
    "contentUpdateProductionDrill": "pass",
    "syntheticDrillProductionFactChanged": false,
    "syntheticDrillRollbackVerified": true,
    "aiAnswerBenchmarkQueries": 8,
    "aiAnswerEntitySafeOrCorrect": 8,
    "aiAnswerNamesakeConfusionFailures": 0,
    "aiAnswerCrossPlatformMeasured": false,
    "authorityGrowthQueueOpen": true,
    "authorityGrowthP0Works": 2,
    "authorityGrowthP1Works": 1,
    "authorityGrowthAcquiredByThisBuild": 0,
    "authorityPacketsReady": 3,
    "pressKitRoute": "/press/authority-kit.html",
    "externalCitationsAcquiredByV267": 0,
    "citationOutreachTargets": 6,
    "citationOutreachSent": 0,
    "citationOutreachPublished": 0,
    "citationOutreachVerified": 0,
    "outreachTrackerNetworkWrites": false,
    "submissionPackagesReady": 1,
    "externalSubmissionsSent": 0,
    "externalPublicationsAcquired": 0,
    "externalCitationsVerified": 0,
    "performanceDashboardReady": true,
    "performanceDashboardRoute": "/tools/performance-dashboard.html",
    "performanceDashboardLiveApi": false,
    "performanceDashboardServerWrites": false,
    "launchTargetDate": "2026-10-10",
    "launchLocalPackageReady": true,
    "launchLocalP0": 0,
    "launchLocalP1": 0,
    "launchExternalGoogleWatchItems": 2,
    "uxHardeningPass": true,
    "uxStaticAccessibilityErrors": 0,
    "uxVisualRegressionExecuted": false,
    "uxVisualRegressionTargetRelease": "V2.76",
    "bilingualRoutePairs": 44,
    "bilingualContentParityPass": true,
    "contentFreezeCandidate": true,
    "contentFreezeActivated": false,
    "snapshotSensitiveLineagesRevalidated": 28,
    "searchAiLaunchHardeningPass": true,
    "canonicalDomainObservedCurrentPublicRetrieval": true,
    "personEntityConsistency": "86/86",
    "searchAiExternalGoogleWatchItems": 2,
    "cdnWafNamedAiBotAcceptanceVerified": false,
    "crossPlatformAiAnswerVisibilityMeasured": false,
    "analyticsSiteInstrumentationPass": true,
    "analyticsMeasurementId": "G-3JDJ45M4KD",
    "analyticsGa4ReadbackAvailable": false,
    "analyticsGa4NumericBaselineClaimed": false,
    "analyticsSearchConsoleBaselineRecorded": true,
    "artworkJourneyMeasurementReady": true,
    "releaseCandidate": "V2.76 RC1",
    "releaseCandidateQaPass": true,
    "featureFreezeActivated": true,
    "contentFreezeDate": "2026-10-09",
    "releaseCandidateAutomatedQaPass": true,
    "releaseCandidateManualBrowserGatePending": true,
    "releaseCandidateRenderedLayoutChecks": 48,
    "releaseCandidateVisualRegressionChecks": 33,
    "releaseCandidateUnexpectedVisualRegressionChangedPixels": 0,
    "releaseCandidateHorizontalOverflowFailures": 0,
    "releaseCandidateCssInteractionFailures": 0,
    "releaseCandidateLayoutBugFixes": 1,
    "publicLaunchVersion": "3.0",
    "publicLaunchReady": true,
    "publicLaunchDeployed": false,
    "publicLaunchRenderedLayoutChecks": 336,
    "publicLaunchUnexpectedVisualPixels": 0,
    "publicLaunchHorizontalScrollFailures": 0,
    "imageRightsPatchVersion": "3.0.1",
    "imageRightsPatchDeployed": false,
    "imageRightsMetadataPass": true,
    "searchGrowthBaselineSettledThrough": "2026-10-05",
    "searchGrowthWebClicks": 7,
    "searchGrowthWebImpressions": 65,
    "searchGrowthImageImpressions": 127,
    "searchGrowthOpenGoogleIndexWatchItems": 0,
    "searchGrowthAutoPublishedPages": 0
  },
  "relatedData": [
    "/data/knowledge-consistency.json",
    "/artwork/catalog.json",
    "/data/entity-graph.json",
    "/data/image-graph.json",
    "/data/citation-graph.json",
    "/data/artist-knowledge.json",
    "/data/query-intent-map.json",
    "/data/answer-coverage.json",
    "/data/collect.json",
    "/data/crawler-policy.json",
    "/data/search-identity.json",
    "/data/legacy-domain-reclamation.json",
    "/data/entity-evidence-graph.json"
  ],
  "aiRightsPolicyRegistry": "/data/ai-rights-policy.json",
  "legacyDomainReclamationRegistry": "/data/legacy-domain-reclamation.json",
  "externalAuthorityReclamationRegistry": "/data/external-authority-reclamation.json",
  "entityDisambiguationRegistry": "/data/entity-disambiguation.json",
  "entityEvidenceGraphRegistry": "/data/entity-evidence-graph.json",
  "evidenceQualityRegistry": "/data/evidence-quality.json",
  "conflictArbitrationRegistry": "/data/conflict-arbitration.json",
  "temporalTruthRegistry": "/data/temporal-truth.json",
  "claimProvenanceRegistry": "/data/claim-provenance.json",
  "dependencyPropagationRegistry": "/data/dependency-propagation.json",
  "revalidationLedger": "/data/revalidation-ledger.json",
  "revalidationDryRun": "/data/revalidation-dry-run.json",
  "regressionCertification": "/data/regression-certification.json",
  "externalRetrievalBenchmark": "/data/external-retrieval-benchmark.json",
  "searchAiObservability": "/data/search-ai-observability.json",
  "searchConsoleObservability": "/data/search-console-observability.json",
  "indexRecovery": "/data/index-recovery.json",
  "indexRecoveryExecution": "/data/index-recovery-execution.json",
  "recoveryDelta": "/data/recovery-delta.json",
  "contentUpdatePipeline": "/data/content-update-pipeline.json",
  "contentChangeLedger": "/data/content-change-ledger.json",
  "contentIntakeConsole": "/data/content-intake-console.json",
  "contentUpdateDrill": "/data/content-update-drill.json",
  "aiAnswerBenchmark": "/data/ai-answer-benchmark.json",
  "authorityGrowth": "/data/authority-growth.json",
  "authorityPackets": "/data/authority-packets.json",
  "citationOutreach": "/data/citation-outreach.json",
  "submissionPackages": "/data/submission-packages.json",
  "performanceDashboard": "/data/performance-dashboard.json",
  "launchReadiness": "/data/launch-readiness.json",
  "uxHardening": "/data/ux-hardening.json",
  "bilingualContentFinalPass": "/data/bilingual-content-final-pass.json",
  "searchAiLaunchHardening": "/data/search-ai-launch-hardening.json",
  "analyticsLaunchBaseline": "/data/analytics-launch-baseline.json",
  "releaseCandidate": "/data/release-candidate.json",
  "publicLaunch": "/data/public-launch.json",
  "imageRightsMetadata": "/data/image-rights-metadata.json",
  "searchGrowth": "/data/search-growth.json"
}
