{
  "schemaVersion": "2.73",
  "lastModified": "2026-10-04",
  "canonical": "https://yangtsunghann.com/en/data/revalidation-ledger.json",
  "canonicalArtist": {
    "@id": "https://yangtsunghann.com/#artist",
    "name": "Yang Tsung Han",
    "alternateName": "楊宗翰"
  },
  "purpose": "Turns the V2.52 dependency graph into a manageable change-set lifecycle. This file is a static production release-control registry, not a claim of background monitoring or a continuously executing job queue. Change sets and queue items exist only when a change is explicitly recorded.",
  "policy": {
    "staticReleaseRegistryNotBackgroundMonitor": true,
    "noClaimOfContinuousExternalMonitoring": true,
    "everyMaterialChangeMustHaveChangeSet": true,
    "impactMustBeComputedFromDependencyGraph": true,
    "requiredValidatorsMustBeExplicit": true,
    "releaseBlockedWhileRequiredItemsUnresolved": "class_specific",
    "retrievalOnlyFailureDoesNotAutoInvalidateHistoricalTruth": true,
    "resolvedChangeSetMustRegenerateLineageAndDeploymentHashes": true,
    "closedChangeSetBecomesHistoricalAuditRecord": true,
    "cancelledChangeSetMustPreserveCancellationReason": true,
    "noSilentStaleAnswerCarryForward": true,
    "noNumericTruthScore": true,
    "dryRunAuditHistoryRetained": true,
    "claimValueFingerprintRequiredForLineageRegeneration": true,
    "releaseBlockDecisionFollowsChangeClassPolicy": true,
    "nonBlockingOpenItemsRemainTrackedButDoNotBlockRelease": true,
    "blockingChangeClasses": [
      "arbitration_rule_change",
      "canonical_answer_url_change",
      "canonical_claim_value_change",
      "derived_registry_change",
      "entity_identity_change",
      "source_content_change",
      "temporal_snapshot_rollover"
    ],
    "nonBlockingChangeClasses": [
      "answer_copy_only_change",
      "source_availability_or_fetch_change"
    ]
  },
  "lifecycleStates": [
    {
      "state": "detected",
      "meaning": "A material or operational change has been recorded, but impact scope has not yet been finalized.",
      "releaseAllowed": false
    },
    {
      "state": "scoped",
      "meaning": "Changed node(s) and downstream impact have been enumerated from the dependency graph.",
      "releaseAllowed": false
    },
    {
      "state": "queued",
      "meaning": "Required validators have been assigned to affected nodes.",
      "releaseAllowed": false
    },
    {
      "state": "in_revalidation",
      "meaning": "One or more required validators are running or awaiting review.",
      "releaseAllowed": false
    },
    {
      "state": "blocked",
      "meaning": "A required validator failed, evidence is missing, or a canonical decision is unresolved.",
      "releaseAllowed": false
    },
    {
      "state": "resolved",
      "meaning": "Every required downstream node has passed its assigned validation for the change set.",
      "releaseAllowed": true
    },
    {
      "state": "closed",
      "meaning": "The resolved change set has been committed into a clean production baseline.",
      "releaseAllowed": true
    },
    {
      "state": "cancelled",
      "meaning": "The change set was invalid, duplicate, or intentionally abandoned before affecting production.",
      "releaseAllowed": true
    }
  ],
  "priorityPolicy": [
    {
      "priority": "P0",
      "criteria": "Canonical identity/domain corruption, broken official contact, unresolved canonical routing, or a release-blocking contradiction affecting broad site identity.",
      "releaseBlocker": true
    },
    {
      "priority": "P1",
      "criteria": "Material factual change affecting one or more grounded claims, artwork metadata, award facts, current roles, or canonical answer pages.",
      "releaseBlocker": true
    },
    {
      "priority": "P2",
      "criteria": "Retrieval/freshness change, limited external-source availability, or non-critical routing derivative requiring review.",
      "releaseBlocker": false
    },
    {
      "priority": "P3",
      "criteria": "Copy-only or non-factual presentation update with no upstream claim/evidence change.",
      "releaseBlocker": false
    }
  ],
  "validators": [
    {
      "validatorId": "evidence-quality-recheck",
      "appliesTo": [
        "source_content_change",
        "source_availability_or_fetch_change",
        "canonical_claim_value_change",
        "entity_identity_change"
      ],
      "checks": [
        "evidence role",
        "retrieval freshness",
        "source topology",
        "claim-specific source priority"
      ]
    },
    {
      "validatorId": "conflict-arbitration-recheck",
      "appliesTo": [
        "source_content_change",
        "canonical_claim_value_change",
        "entity_identity_change",
        "arbitration_rule_change"
      ],
      "checks": [
        "conflict class",
        "field-domain rule",
        "canonical resolution",
        "historical/source-local preservation"
      ]
    },
    {
      "validatorId": "temporal-state-recheck",
      "appliesTo": [
        "source_content_change",
        "canonical_claim_value_change",
        "entity_identity_change",
        "temporal_snapshot_rollover"
      ],
      "checks": [
        "historical vs current state",
        "snapshot-bound validity",
        "open interval status",
        "missing-end-date non-inference"
      ]
    },
    {
      "validatorId": "lineage-regeneration",
      "appliesTo": [
        "source_content_change",
        "source_availability_or_fetch_change",
        "canonical_claim_value_change",
        "entity_identity_change",
        "arbitration_rule_change",
        "temporal_snapshot_rollover",
        "canonical_answer_url_change",
        "answer_copy_only_change",
        "derived_registry_change"
      ],
      "checks": [
        "stable claimId",
        "sourceIds",
        "quality stage",
        "arbitration stage",
        "temporal stage",
        "lineage SHA-256"
      ]
    },
    {
      "validatorId": "answer-surface-revalidation",
      "appliesTo": [
        "source_content_change",
        "canonical_claim_value_change",
        "entity_identity_change",
        "arbitration_rule_change",
        "temporal_snapshot_rollover",
        "canonical_answer_url_change",
        "answer_copy_only_change"
      ],
      "checks": [
        "registered answer surface",
        "canonical answer URL",
        "present-tense wording",
        "source/claim consistency"
      ]
    },
    {
      "validatorId": "canonical-page-revalidation",
      "appliesTo": [
        "source_content_change",
        "canonical_claim_value_change",
        "entity_identity_change",
        "arbitration_rule_change",
        "temporal_snapshot_rollover",
        "canonical_answer_url_change",
        "answer_copy_only_change"
      ],
      "checks": [
        "visible page content when applicable",
        "canonical",
        "hreflang",
        "internal links",
        "structured-data consistency"
      ]
    },
    {
      "validatorId": "search-index-derivatives-rebuild",
      "appliesTo": [
        "canonical_answer_url_change",
        "entity_identity_change",
        "derived_registry_change"
      ],
      "checks": [
        "sitemap",
        "canonical route registry",
        "hreflang parity",
        "version metadata",
        "deployment manifest"
      ]
    },
    {
      "validatorId": "dependency-closure-check",
      "appliesTo": [
        "source_content_change",
        "source_availability_or_fetch_change",
        "canonical_claim_value_change",
        "entity_identity_change",
        "arbitration_rule_change",
        "temporal_snapshot_rollover",
        "canonical_answer_url_change",
        "answer_copy_only_change",
        "derived_registry_change"
      ],
      "checks": [
        "all required impacted nodes resolved",
        "no stale node remains in change set",
        "no blocked node remains in change set"
      ]
    }
  ],
  "changeClassQueuePolicies": [
    {
      "changeClass": "source_content_change",
      "defaultPriority": "P1",
      "requiredValidators": [
        "evidence-quality-recheck",
        "conflict-arbitration-recheck",
        "temporal-state-recheck",
        "lineage-regeneration",
        "answer-surface-revalidation",
        "canonical-page-revalidation",
        "dependency-closure-check"
      ],
      "releaseBlockerUntilResolved": true,
      "claimState": "requires_revalidation"
    },
    {
      "changeClass": "source_availability_or_fetch_change",
      "defaultPriority": "P2",
      "requiredValidators": [
        "evidence-quality-recheck",
        "lineage-regeneration",
        "dependency-closure-check"
      ],
      "releaseBlockerUntilResolved": false,
      "claimState": "does_not_auto_invalidate_claim_truth"
    },
    {
      "changeClass": "canonical_claim_value_change",
      "defaultPriority": "P1",
      "requiredValidators": [
        "evidence-quality-recheck",
        "conflict-arbitration-recheck",
        "temporal-state-recheck",
        "lineage-regeneration",
        "answer-surface-revalidation",
        "canonical-page-revalidation",
        "dependency-closure-check"
      ],
      "releaseBlockerUntilResolved": true,
      "claimState": "requires_revalidation"
    },
    {
      "changeClass": "entity_identity_change",
      "defaultPriority": "P0",
      "requiredValidators": [
        "evidence-quality-recheck",
        "conflict-arbitration-recheck",
        "temporal-state-recheck",
        "lineage-regeneration",
        "answer-surface-revalidation",
        "canonical-page-revalidation",
        "search-index-derivatives-rebuild",
        "dependency-closure-check"
      ],
      "releaseBlockerUntilResolved": true,
      "claimState": "requires_revalidation"
    },
    {
      "changeClass": "arbitration_rule_change",
      "defaultPriority": "P1",
      "requiredValidators": [
        "conflict-arbitration-recheck",
        "lineage-regeneration",
        "answer-surface-revalidation",
        "canonical-page-revalidation",
        "dependency-closure-check"
      ],
      "releaseBlockerUntilResolved": true,
      "claimState": "revalidate_resolution"
    },
    {
      "changeClass": "temporal_snapshot_rollover",
      "defaultPriority": "P1",
      "requiredValidators": [
        "temporal-state-recheck",
        "lineage-regeneration",
        "answer-surface-revalidation",
        "canonical-page-revalidation",
        "dependency-closure-check"
      ],
      "releaseBlockerUntilResolved": true,
      "claimState": "revalidate_currentness_only"
    },
    {
      "changeClass": "canonical_answer_url_change",
      "defaultPriority": "P1",
      "requiredValidators": [
        "lineage-regeneration",
        "answer-surface-revalidation",
        "canonical-page-revalidation",
        "search-index-derivatives-rebuild",
        "dependency-closure-check"
      ],
      "releaseBlockerUntilResolved": true,
      "claimState": "claim_value_remains_valid"
    },
    {
      "changeClass": "answer_copy_only_change",
      "defaultPriority": "P3",
      "requiredValidators": [
        "lineage-regeneration",
        "answer-surface-revalidation",
        "canonical-page-revalidation",
        "dependency-closure-check"
      ],
      "releaseBlockerUntilResolved": false,
      "claimState": "no_upstream_invalidation"
    },
    {
      "changeClass": "derived_registry_change",
      "defaultPriority": "P2",
      "requiredValidators": [
        "lineage-regeneration",
        "search-index-derivatives-rebuild",
        "dependency-closure-check"
      ],
      "releaseBlockerUntilResolved": true,
      "claimState": "never_treat_derived_registry_as_independent_truth_source"
    }
  ],
  "templates": {
    "changeSet": {
      "changeId": "change:<stable-unique-id>",
      "createdAt": "ISO-8601",
      "createdInBuild": "2026-10-03-v2.53",
      "state": "detected",
      "priority": "P1",
      "changeClass": "<dependency changeClasses.id>",
      "reason": "",
      "changedNodeIds": [],
      "impactComputedFrom": "/data/dependency-propagation.json",
      "impactedNodeIds": [],
      "requiredValidators": [],
      "queueItems": [],
      "resolvedNodeIds": [],
      "unresolvedNodeIds": [],
      "blockedNodeIds": [],
      "releaseBlocked": true,
      "decisionLog": [],
      "closedAt": null
    },
    "queueItem": {
      "queueItemId": "queue:<change-id>:<node-id>:<validator-id>",
      "changeId": "change:<stable-unique-id>",
      "nodeId": "<dependency-node-id>",
      "validatorId": "<validator-id>",
      "priority": "P1",
      "status": "pending",
      "createdAt": "ISO-8601",
      "startedAt": null,
      "completedAt": null,
      "result": null,
      "notes": ""
    }
  },
  "ledger": {
    "baselineBuildId": "2026-10-04-v2.73",
    "baselineAsOf": "2026-10-04",
    "openChangeSets": [],
    "closedChangeSets": [
      {
        "changeId": "dryrun:v2.54:answer-artwork_discovery-06",
        "dryRun": true,
        "executionEnvironment": "offline_build_simulation",
        "changeClass": "canonical_claim_value_change",
        "priority": "P1",
        "targetClaimId": "answer-artwork_discovery-06",
        "state": "closed",
        "releaseBlockerActivated": true,
        "blockedTransitionObserved": true,
        "finding": "V2.53 lineage hash scope excluded claim value.",
        "remediation": "claimValueSha256 added to V2.54 lineage hash scope.",
        "productionFactsChanged": 0,
        "audit": "/en/data/revalidation-dry-run.json",
        "closedAt": "2026-10-03T19:13:14+08:00"
      },
      {
        "changeId": "production:v2.73:bilingual-content-final-pass",
        "dryRun": false,
        "executionEnvironment": "production_build_validation",
        "changeClass": "source_content_change",
        "priority": "P1",
        "targetSurfaces": [
          "exhibitions",
          "bibliography",
          "bilingual_localization"
        ],
        "targetClaimIds": [
          "answer-exhibition_history-21",
          "answer-bibliography_context-37"
        ],
        "state": "closed",
        "releaseBlockerActivated": true,
        "validators": {
          "evidence-quality-recheck": "pass",
          "conflict-arbitration-recheck": "pass_no_rule_change",
          "temporal-state-recheck": "pass",
          "lineage-regeneration": "pass",
          "answer-surface-revalidation": "pass",
          "canonical-page-revalidation": "pass",
          "search-index-derivatives-rebuild": "pass"
        },
        "snapshotSensitiveLineagesRevalidated": 28,
        "productionFactsChanged": 4,
        "canonicalUrlsChanged": 0,
        "audit": "/data/bilingual-content-final-pass.json",
        "closedAt": "2026-10-04"
      }
    ],
    "queue": [],
    "historyRetentionPolicy": "Closed/cancelled change sets remain as audit history; do not delete them merely because production is clean."
  },
  "releaseGateAlgorithm": [
    "Load open change sets.",
    "For each change set, confirm impact was computed from the current dependency graph.",
    "Confirm every impacted required node has validators required by the change-class policy.",
    "If releaseBlockerUntilResolved=true for the change class, fail the release while any required queue item is pending, in progress, failed, or blocked.",
    "If releaseBlockerUntilResolved=false, keep unresolved items visible and auditable without automatically failing the release solely because they remain open.",
    "Never allow a non-blocking classification to suppress a separate P0/P1 blocker created by another change set.",
    "Regenerate lineage fingerprints and deployment checksums after successful material revalidation.",
    "Close a material change set only after its required validation is complete; non-blocking operational items may remain open across releases when explicitly permitted by policy."
  ],
  "summary": {
    "dependencyNodesAvailable": 428,
    "dependencyEdgesAvailable": 701,
    "changeClassesSupported": 9,
    "validatorsRegistered": 8,
    "lifecycleStates": 8,
    "openChangeSets": 0,
    "closedChangeSets": 2,
    "queuedItems": 0,
    "pendingItems": 0,
    "blockedItems": 0,
    "releaseBlocked": false,
    "unresolvedRevalidationItems": 0,
    "backgroundMonitoringClaimed": false,
    "visibleContentChanged": false,
    "dryRunChangeSets": 1,
    "dryRunDefectsFound": 1,
    "dryRunDefectsRemediated": 1,
    "regressionPolicyAmbiguitiesFound": 1,
    "regressionPolicyAmbiguitiesRemediated": 1,
    "classSpecificReleaseBlocking": true,
    "blockingChangeClasses": 7,
    "nonBlockingChangeClasses": 2
  },
  "relatedData": {
    "dependencyPropagation": "/en/data/dependency-propagation.json",
    "claimProvenance": "/en/data/claim-provenance.json",
    "citationGraph": "/en/data/citation-graph.json",
    "evidenceQuality": "/en/data/evidence-quality.json",
    "conflictArbitration": "/en/data/conflict-arbitration.json",
    "temporalTruth": "/en/data/temporal-truth.json",
    "answerCoverage": "/en/data/answer-coverage.json",
    "dataGovernance": "/en/data/data-governance.json",
    "revalidationDryRun": "/en/data/revalidation-dry-run.json",
    "regressionCertification": "/en/data/regression-certification.json",
    "contentUpdatePipeline": "/en/data/content-update-pipeline.json",
    "bilingualContentFinalPass": "/en/data/bilingual-content-final-pass.json"
  },
  "visibleContentChanged": false
}
