onto-mcp 0.4.12 → 0.4.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.onto/authority/core-lexicon.yaml +1 -1
- package/.onto/authority/supported-models.yaml +137 -0
- package/.onto/domains/accounting-kr/competency_qs.md +153 -153
- package/.onto/processes/reconstruct/obligation-coverage-ledger.yaml +842 -0
- package/.onto/processes/reconstruct/obligation-coverage-recorded.yaml +225 -0
- package/.onto/processes/reconstruct/ontology-seeding-and-maturation-design.md +93 -54
- package/.onto/processes/reconstruct/reconstruct-contract-registry.yaml +169 -8
- package/.onto/processes/reconstruct/reconstruct-execution-ux-contract.md +72 -1
- package/.onto/processes/reconstruct/source-profiles/spreadsheet.md +35 -0
- package/.onto/processes/review/productized-live-path.md +9 -5
- package/.onto/processes/review/prompt-execution-runner-contract.md +32 -8
- package/.onto/processes/review/review-target-profile-contract.md +47 -4
- package/.onto/processes/shared/pipeline-execution-ledger-contract.md +11 -0
- package/.onto/processes/shared/target-material-kind-contract.md +1 -1
- package/README.md +64 -1
- package/dist/cli.js +11 -1
- package/dist/core-api/reconstruct-api.js +575 -24
- package/dist/core-api/review-api.js +70 -5
- package/dist/core-api/review-progress.js +7 -0
- package/dist/core-api/runtime-observation.js +7 -0
- package/dist/core-runtime/artifact-io.js +75 -3
- package/dist/core-runtime/cli/claude-code-review-unit-executor.js +19 -8
- package/dist/core-runtime/cli/materialize-review-prompt-packets.js +68 -14
- package/dist/core-runtime/cli/prepare-review-session.js +34 -1
- package/dist/core-runtime/cli/render-review-final-output.js +2 -1
- package/dist/core-runtime/cli/run-review-prompt-execution.js +758 -48
- package/dist/core-runtime/cli/run-seats.js +18 -0
- package/dist/core-runtime/cli/runtime-submit-context.js +10 -2
- package/dist/core-runtime/cli/unit-resubmit.js +269 -0
- package/dist/core-runtime/cli/worker-structured-output.js +80 -2
- package/dist/core-runtime/discovery/host-detection.js +71 -22
- package/dist/core-runtime/discovery/review-cert-assemble.js +208 -0
- package/dist/core-runtime/discovery/review-cert-record.js +442 -0
- package/dist/core-runtime/discovery/review-execution-units.js +22 -0
- package/dist/core-runtime/discovery/seat-inventory.js +167 -0
- package/dist/core-runtime/discovery/settings-chain.js +311 -52
- package/dist/core-runtime/discovery/supported-models.js +282 -29
- package/dist/core-runtime/discovery/synthesize-cert-assemble.js +197 -0
- package/dist/core-runtime/discovery/synthesize-cert-capsule.js +399 -0
- package/dist/core-runtime/discovery/synthesize-cert-judge.js +340 -0
- package/dist/core-runtime/discovery/synthesize-cert-loop.js +234 -0
- package/dist/core-runtime/discovery/synthesize-cert-mutation.js +117 -0
- package/dist/core-runtime/discovery/synthesize-cert-packet.js +182 -0
- package/dist/core-runtime/discovery/synthesize-cert-record.js +831 -0
- package/dist/core-runtime/discovery/synthesize-cert-sampler.js +336 -0
- package/dist/core-runtime/effort-calibration-ingest.js +135 -0
- package/dist/core-runtime/llm/dispatch-breaker.js +412 -0
- package/dist/core-runtime/llm/dispatch-fallback-adapter-capabilities.js +33 -0
- package/dist/core-runtime/llm/llm-caller.js +188 -47
- package/dist/core-runtime/llm/mock-llm-realization.js +35 -4
- package/dist/core-runtime/llm/model-switcher.js +1 -1
- package/dist/core-runtime/llm/openai-responses-incomplete-error.js +46 -0
- package/dist/core-runtime/llm/sealed-dispatch-capability.js +359 -0
- package/dist/core-runtime/llm/structured-dispatch-error.js +15 -0
- package/dist/core-runtime/onboard/claude-profile-scan.js +65 -0
- package/dist/core-runtime/onboard/cli-host.js +5 -2
- package/dist/core-runtime/onboard/configure-provider.js +33 -1
- package/dist/core-runtime/onboard/host-target.js +28 -3
- package/dist/core-runtime/onboard/register.js +54 -12
- package/dist/core-runtime/pipeline-execution-ledger.js +10 -0
- package/dist/core-runtime/reconstruct/artifact-types.js +35 -0
- package/dist/core-runtime/reconstruct/claim-projection-validation.js +17 -0
- package/dist/core-runtime/reconstruct/competency-projection-contract.js +63 -0
- package/dist/core-runtime/reconstruct/comprehension-artifact.js +321 -0
- package/dist/core-runtime/reconstruct/comprehension-reduce.js +367 -0
- package/dist/core-runtime/reconstruct/comprehension-semantic-map.js +771 -0
- package/dist/core-runtime/reconstruct/contract-registry.js +20 -0
- package/dist/core-runtime/reconstruct/dispatch-fallback-artifacts.js +640 -0
- package/dist/core-runtime/reconstruct/execution-telemetry.js +83 -9
- package/dist/core-runtime/reconstruct/final-output-sections.js +89 -0
- package/dist/core-runtime/reconstruct/governing-snapshot.js +36 -1
- package/dist/core-runtime/reconstruct/leaf-reader.js +305 -0
- package/dist/core-runtime/reconstruct/llm-dispatch-failure.js +270 -0
- package/dist/core-runtime/reconstruct/llm-touch-fingerprint.js +94 -0
- package/dist/core-runtime/reconstruct/material-admission-validation.js +18 -0
- package/dist/core-runtime/reconstruct/material-profile-validation.js +14 -0
- package/dist/core-runtime/reconstruct/materialize-preparation.js +304 -18
- package/dist/core-runtime/reconstruct/maturation-validation.js +1231 -53
- package/dist/core-runtime/reconstruct/mock-llm-realization.js +107 -3
- package/dist/core-runtime/reconstruct/obligation-assertion.js +18 -0
- package/dist/core-runtime/reconstruct/ontology-seed-validation.js +27 -0
- package/dist/core-runtime/reconstruct/output-budget.js +6 -0
- package/dist/core-runtime/reconstruct/pipeline-execution-ledger.js +87 -3
- package/dist/core-runtime/reconstruct/post-seed-validation.js +118 -5
- package/dist/core-runtime/reconstruct/purpose-authority-validation.js +117 -2
- package/dist/core-runtime/reconstruct/record.js +42 -0
- package/dist/core-runtime/reconstruct/registry-verification-validation.js +16 -0
- package/dist/core-runtime/reconstruct/run-control-validation.js +1011 -34
- package/dist/core-runtime/reconstruct/run.js +5198 -536
- package/dist/core-runtime/reconstruct/seed-authoring-readiness-validation.js +54 -3
- package/dist/core-runtime/reconstruct/semantic-quality-gate.js +105 -2
- package/dist/core-runtime/reconstruct/source-observation-delta-validation.js +41 -0
- package/dist/core-runtime/reconstruct/source-observations.js +166 -0
- package/dist/core-runtime/reconstruct/source-safety-validation.js +71 -183
- package/dist/core-runtime/reconstruct/source-scout-pack-validation.js +37 -1
- package/dist/core-runtime/reconstruct/terminal-validation.js +132 -2
- package/dist/core-runtime/review/continuation-plan.js +12 -5
- package/dist/core-runtime/review/issue-artifact-runtime.js +4 -1
- package/dist/core-runtime/review/materializers.js +100 -11
- package/dist/core-runtime/review/nesting-batch.js +6 -2
- package/dist/core-runtime/review/obligation-shardability.js +138 -0
- package/dist/core-runtime/review/pipeline-execution-ledger.js +42 -2
- package/dist/core-runtime/review/review-artifact-utils.js +217 -5
- package/dist/core-runtime/review/review-execution-steps.js +32 -8
- package/dist/core-runtime/review/review-progress-contract.js +8 -0
- package/dist/core-runtime/review/review-prompt-budget.js +97 -0
- package/dist/core-runtime/review/semantic-quality-gate.js +33 -7
- package/dist/core-runtime/review/spreadsheet-review-disposition.js +94 -0
- package/dist/core-runtime/route-identity.js +182 -0
- package/dist/core-runtime/spreadsheet-header-escalation.js +204 -0
- package/dist/core-runtime/spreadsheet-structure-observer.js +2689 -0
- package/dist/core-runtime/target-material-kind.js +58 -0
- package/dist/mcp/server.js +12 -5
- package/dist/tui/app.js +167 -0
- package/dist/tui/data/event-follower.js +116 -0
- package/dist/tui/data/node-detail.js +42 -0
- package/dist/tui/data/projection-poll.js +26 -0
- package/dist/tui/data/session-discovery.js +65 -0
- package/dist/tui/index.js +108 -0
- package/dist/tui/screens/log.js +25 -0
- package/dist/tui/screens/node-detail.js +17 -0
- package/dist/tui/screens/session-selector.js +26 -0
- package/dist/tui/screens/workflow-tree.js +90 -0
- package/dist/tui/view-model/reconstruct-adapter.js +162 -0
- package/dist/tui/view-model/review-adapter.js +270 -0
- package/dist/tui/view-model/tree-view-model.js +19 -0
- package/package.json +18 -3
- package/settings.example.json +77 -16
|
@@ -0,0 +1,842 @@
|
|
|
1
|
+
# Obligation-coverage PENDING ledger (G(a) / INV-OBLIGATION-COVERAGE-1).
|
|
2
|
+
# Generated; the parked backlog of active (validator_id, obligation_id) pairs not yet RECORDED
|
|
3
|
+
# (no asserted_obligation_ids instrumentation in this slice). The ratchet proves this legacy set
|
|
4
|
+
# is monotone non-increasing.
|
|
5
|
+
#
|
|
6
|
+
# tier — what the pending status means for THIS pair:
|
|
7
|
+
# flat : a flat obligation not yet instrumented for recording.
|
|
8
|
+
# activation_gated_dormant : a conditional obligation whose runtime is genuinely unwired
|
|
9
|
+
# (its enforcement is dormant; activation_condition unmet).
|
|
10
|
+
# enforced_pending_instrumentation: the pair IS live-enforced today, but its asserted_obligation_ids
|
|
11
|
+
# RECORDING is deferred to a later slice (see the row's `note`).
|
|
12
|
+
# Parked ≠ unwired for this tier — only the recording is pending.
|
|
13
|
+
#
|
|
14
|
+
# Some `flat` rows carry a `note` from a per-validator enforcement AUDIT explaining why they remain
|
|
15
|
+
# parked (no distinct enforcement site located, or enforcement overlaps an already-recorded
|
|
16
|
+
# obligation) — a surfaced declared≠wired finding, not merely "not yet stamped". The honest rule for
|
|
17
|
+
# RECORDING a pair is that an enforcement-binding test proves a violating input trips a real violation;
|
|
18
|
+
# pairs that fail that bar stay parked rather than being laundered into recorded.
|
|
19
|
+
pending:
|
|
20
|
+
- validator_id: actionability-matrix-validator
|
|
21
|
+
obligation_id: reject_matrix_rows_without_baseline_row_or_applicable_validated_expansion_ref
|
|
22
|
+
coverage_status: pending
|
|
23
|
+
tier: flat
|
|
24
|
+
note: "slice-3 audit (2026-06-22): the validator strictly requires exactly one resolvable baseline_row_ref per row (the strict check is recorded under baseline-actionability-matrix-validator/reject_matrix_rows_without_baseline_row_ref); the 'OR applicable validated expansion ref' ALTERNATIVE in this current-mode name is NOT implemented — no path admits an expansion-only row. Recording deferred pending that alternative being built or the name reconciled with the strict check."
|
|
25
|
+
- validator_id: actionability-matrix-validator
|
|
26
|
+
obligation_id: require_blocker_and_high_rows_to_be_l4_limitation_backed_or_continuation_blocking
|
|
27
|
+
coverage_status: pending
|
|
28
|
+
tier: flat
|
|
29
|
+
note: "slice-3 audit (2026-06-22): NO enforcement found in validateActionabilityMatrix — there is no check that blocker/high materiality rows are L4, limitation_backed, or continuation-blocking. A surfaced declared≠wired gap; may be enforced by maturation-continuation-decision-validator / actionable-ontology-validator (owner decision: add here, or re-attribute in the registry)."
|
|
30
|
+
- validator_id: actionability-matrix-validator
|
|
31
|
+
obligation_id: support_zero_delta_baseline_only_matrix_when_no_maturation_deltas_exist
|
|
32
|
+
coverage_status: pending
|
|
33
|
+
tier: flat
|
|
34
|
+
note: "slice-3 audit (2026-06-22): a 'support' (non-rejection) obligation — satisfied by the ABSENCE of a violation when a matrix mirrors the baseline with no deltas, so there is no bindable violation code to anchor a recording. Stays parked (recording would require an explicit affirmative check)."
|
|
35
|
+
- validator_id: actionability-matrix-validator
|
|
36
|
+
obligation_id: validate_maturity_level_against_supporting_refs_blocking_questions_and_limitations
|
|
37
|
+
coverage_status: pending
|
|
38
|
+
tier: flat
|
|
39
|
+
note: "slice-3 audit (2026-06-22): enforcement is DISTRIBUTED across regions already owned by other recorded obligations — the member_readiness gate (limitations), the maturity-upgrade citation (supporting_refs; recorded as validate_matrix_rows_derive_from_validated_baseline_and_any_applicable_validated_deltas), and the blocking-question validation (recorded as validate_blocking_question_refs_against_validated_question_frontier). No distinct owner region; recording deferred pending a decision on whether this is a composite obligation or maps to the member_readiness gate specifically."
|
|
40
|
+
- validator_id: actionable-ontology-validator
|
|
41
|
+
obligation_id: reject_actionable_ready_when_material_blocker_or_high_question_remains
|
|
42
|
+
coverage_status: pending
|
|
43
|
+
tier: flat
|
|
44
|
+
note: "slice-17 audit (2026-06-23): DELEGATED/NOT_FOUND in this validator. validateActionableOntology directly rejects actionable_ready when final re-question convergence is unproven (recorded separately as reject_actionable_ready_until_final_requestion_convergence_is_proven) and requires the claim to match the continuation decision_state, but it never directly checks that no material blocker/high QUESTION remains open — that closure is enforced by validateMaturationContinuationDecision / the convergence ledger (both required valid here via prior_validation_invalid). Recording deferred pending a direct remaining-blocker/high-question check here, or re-attribution to the continuation-decision validator."
|
|
45
|
+
- validator_id: actionable-ontology-validator
|
|
46
|
+
obligation_id: require_static_kinetic_dynamic_surfaces_to_be_closed_or_limitation_excluded
|
|
47
|
+
coverage_status: pending
|
|
48
|
+
tier: flat
|
|
49
|
+
note: "slice-17 audit (2026-06-23): NOT_FOUND for the named per-surface scope. The validator checks per-ROW closure (included projected rows must have matrixRow.member_readiness == closed, ~4996) and full per-row coverage (every matrix row projected exactly once, ~5024), but there is no per-SURFACE check that each of static_surface / kinetic_surface / dynamic_surface is independently closed-or-limitation-excluded (contract: design §Actionability Matrix ~533 'each surface must be independently closed'; continuation-state table ~1116). Surface-level maturity is validated upstream by the actionability-matrix validator, not rechecked here. Recording deferred pending a per-surface closed-or-excluded check (or re-attribution to the matrix validator)."
|
|
50
|
+
- validator_id: actionable-ontology-validator
|
|
51
|
+
obligation_id: validate_applicable_proof_authorities_before_projecting_runtime_query_visualization_or_graph_claims
|
|
52
|
+
coverage_status: pending
|
|
53
|
+
tier: flat
|
|
54
|
+
note: "slice-17 audit (2026-06-23): BLANKET-REJECT, not a proof-authority validation. The code rejects ANY downstream_claims value != not_claimed (invalid_enum ~4947-4955), so the active projection can never claim query/visualization/graph-exploration proof. Contract (design ~896-901) says actionable-ontology-validation 'rechecks the same proof authority before projecting' — i.e. it should VALIDATE the applicable proof authority when a downstream surface is claimed, but no proof-authority recheck is implemented (the gate forbids the claim outright rather than validating it). Recording deferred pending real proof-authority rechecking (this is the deferred-capability sibling of the convergence ready-gate)."
|
|
55
|
+
- validator_id: answer-support-ledger-validator
|
|
56
|
+
obligation_id: require_contradictions_to_be_recorded_and_bounded
|
|
57
|
+
coverage_status: pending
|
|
58
|
+
tier: flat
|
|
59
|
+
note: "slice-21 audit (2026-06-23): DELEGATED. validateAnswerSupportLedger never reads contradiction_refs. The contract clause (Answer Support Rules: contradictions must prevent answer-claim validation unless the claim records how the contradiction is bounded) is enforced downstream in validateMaturationAnswerClaims (contradictory-cluster -> limitation_refs check), not in this validator. Recording deferred to the answer-claims validator that owns the bounded check."
|
|
60
|
+
- validator_id: answer-support-ledger-validator
|
|
61
|
+
obligation_id: require_frontier_triggered_evidence_to_resolve_to_valid_lineage_index_validation
|
|
62
|
+
coverage_status: pending
|
|
63
|
+
tier: flat
|
|
64
|
+
note: "slice-21 audit (2026-06-23): PARTIAL. The valid-lineage-index-validation requirement is an UNSCOPED global precondition (fires when a lineage index validation is present-and-invalid, or when lineage-marked evidence lacks one) rather than scoped to the obligation's frontier_triggered discriminator (membership in the lineage index added_observation_ids). The frontier_triggered scope is read only for the re-entry obligation (recorded); there is no dedicated frontier-triggered-scoped lineage-index-validation enforcement here. Recording deferred."
|
|
65
|
+
- validator_id: answer-support-ledger-validator
|
|
66
|
+
obligation_id: validate_external_or_runtime_authority_support_mode
|
|
67
|
+
coverage_status: pending
|
|
68
|
+
tier: flat
|
|
69
|
+
note: "slice-21 audit (2026-06-23): PARTIAL. runtime_proof is presence-only (proof_refs non-empty; the contract's validated query/test/formula/execution/artifact proof that demonstrates the answer is not checked) and authority_response checks response_status == provided but delegates answers-a-closure-frontier-authority-request to maturation-authority-response validation. No distinct name-matching enforcement of the support-mode authority beyond presence/status. Recording deferred."
|
|
70
|
+
- validator_id: answer-support-ledger-validator
|
|
71
|
+
obligation_id: validate_support_mode_required_refs
|
|
72
|
+
coverage_status: pending
|
|
73
|
+
tier: flat
|
|
74
|
+
note: "slice-21 audit (2026-06-23): AMBIGUOUS/overlapping. The generic required-refs-per-support-mode check is distributed across the per-mode support_mode_missing_authority guards and overlaps the modes owned by validate_user_confirmation_support_mode (user_confirmation) and validate_external_or_runtime_authority_support_mode (runtime_proof/authority_response); only direct_authority's evidence_refs guard is un-owned, but the generic obligation name is not 1:1 with that single mode and cannot be bound non-overlappingly without laundering the others. Recording deferred (would need a dedicated direct-authority-required-refs obligation or a single generic violation code)."
|
|
75
|
+
- validator_id: answer-support-ledger-validator
|
|
76
|
+
obligation_id: validate_user_confirmation_support_mode
|
|
77
|
+
coverage_status: pending
|
|
78
|
+
tier: flat
|
|
79
|
+
note: "slice-21 R1 audit (2026-06-23, codex P2): PARTIAL / presence-only. The user_confirmation branch only requires user_confirmation_refs to be non-empty AND a globally-valid purpose-confirmation-validation; it never resolves the cited refs to the confirmation authority, so an arbitrary ref (e.g. ghost-confirmation) passes whenever any valid purpose-confirmation exists. Contrast authority_response, which resolves authority_response_refs to provided responses. Recording deferred pending ref-resolution of user_confirmation_refs against the confirmation authority (WIRE candidate)."
|
|
80
|
+
- validator_id: baseline-actionability-matrix-validator
|
|
81
|
+
obligation_id: preserve_frontier_seed_state_before_question_frontier_authoring
|
|
82
|
+
coverage_status: pending
|
|
83
|
+
tier: flat
|
|
84
|
+
note: "slice-3 audit (2026-06-22): a defensive (non-mutation) obligation — satisfied by the ABSENCE of post-frontier inputs in baseline mode, with no bindable violation code. Stays parked."
|
|
85
|
+
- validator_id: baseline-actionability-matrix-validator
|
|
86
|
+
obligation_id: support_zero_delta_baseline_only_matrix_before_maturation_deltas_exist
|
|
87
|
+
coverage_status: pending
|
|
88
|
+
tier: flat
|
|
89
|
+
note: "slice-3 audit (2026-06-22): a 'support' (non-rejection) obligation with no bindable violation code (the baseline-mode sibling of the current-mode support rule). Stays parked."
|
|
90
|
+
- validator_id: candidate-disposition-validator
|
|
91
|
+
obligation_id: require_deferred_or_source_gap_disposition_to_cite_limitation_or_frontier
|
|
92
|
+
coverage_status: pending
|
|
93
|
+
tier: flat
|
|
94
|
+
note: "slice-20 audit (2026-06-23): NOT_FOUND — validateCandidateDisposition never inspects whether a deferred/source_gap disposition cites a limitation or frontier. It checks disposition_id against the registry and requires rationale+evidence, but has no deferred/source_gap-specific limitation/frontier-citation check. Owner: wire the deferred-disposition limitation/frontier requirement."
|
|
95
|
+
- validator_id: candidate-disposition-validator
|
|
96
|
+
obligation_id: require_exactly_one_disposition_for_each_salient_candidate
|
|
97
|
+
coverage_status: pending
|
|
98
|
+
tier: flat
|
|
99
|
+
note: "slice-20 audit (2026-06-23): AMBIGUOUS (salience-blind) — the validator enforces exactly-one disposition for EVERY candidate (duplicate_disposition + missing_candidate_disposition), a SUPERSET of the obligation's salient scope, but never reads the `salience` field (ReconstructCandidateInventoryCandidate.salience is a real high/medium/low field, and the contract scopes this to HIGH-salience candidates). Because the validator is salience-blind, it does not validate the obligation's scope discriminator; the named scope has no dedicated enforcer. Recording deferred pending a salience-aware check (or a contract decision to make the requirement salience-agnostic)."
|
|
100
|
+
- validator_id: candidate-disposition-validator
|
|
101
|
+
obligation_id: require_high_salience_non_rejected_candidates_to_carry_surface_and_purpose_element_refs
|
|
102
|
+
coverage_status: pending
|
|
103
|
+
tier: flat
|
|
104
|
+
note: "slice-20 audit (2026-06-23): NOT_FOUND — the validator never inspects candidate salience, actionability_surface_refs, or purpose_element_refs, so it cannot require high-salience non-rejected candidates to carry surface+purpose-element refs."
|
|
105
|
+
- validator_id: candidate-disposition-validator
|
|
106
|
+
obligation_id: validate_candidate_actionability_surface_refs_against_registry_surface_values
|
|
107
|
+
coverage_status: pending
|
|
108
|
+
tier: flat
|
|
109
|
+
note: "slice-20 audit (2026-06-23): NOT_FOUND — the validator never inspects actionability_surface_refs nor validates them against any registry surface catalog. (registryCandidateKindIds/registryCandidateDispositionIds are read, but no surface-value catalog is consulted.)"
|
|
110
|
+
- validator_id: candidate-disposition-validator
|
|
111
|
+
obligation_id: validate_candidate_purpose_element_refs_against_selected_purpose_frame
|
|
112
|
+
coverage_status: pending
|
|
113
|
+
tier: activation_gated_dormant
|
|
114
|
+
note: "slice-20 audit (2026-06-23): NOT_FOUND + activation_gated_dormant — registry marks this conditional on activation_condition source_purpose_candidate_runtime_is_implemented, and validateCandidateDisposition takes no purpose-frame input (no source-purpose-candidates-validation arg), so it never validates purpose_element_refs against a selected purpose frame. Stays dormant until that runtime + input wiring exist."
|
|
115
|
+
- validator_id: claim-projection-validator
|
|
116
|
+
obligation_id: validate_broader_operated_system_release_health_and_incident_governance_are_bounded
|
|
117
|
+
coverage_status: pending
|
|
118
|
+
tier: flat
|
|
119
|
+
note: "slice-23 audit (2026-06-23): PARTIAL. The name requires BOTH operated_system_release_health AND incident governance to be bounded, but the gate (~913-923, broader_governance_scope_unbounded) only validates governance_scope.operated_system_release_health; the sibling field governance_scope.rollback_quota_incident_governance is never validated anywhere in the validator. Recording deferred pending the gate also bounding rollback_quota_incident_governance."
|
|
120
|
+
- validator_id: claim-projection-validator
|
|
121
|
+
obligation_id: validate_material_kind_support_profile_supported_requires_valid_target_material_profile_validation
|
|
122
|
+
coverage_status: pending
|
|
123
|
+
tier: flat
|
|
124
|
+
note: "slice-23 audit (2026-06-23): GATED + INDIRECT. The validity requirement is enforced only as a side-effect: materialKindSupportMemberRows/materialKindSupportProjectionStatus downgrade support to unsupported/blocked when target_material_profile_validation.validation_status != valid (~178/207), and the member-row lineage match (~755-772) compares support_claim. There is no dedicated 'if profile_supported && validation invalid -> violation' check, and the whole block is gated on the optional `args.targetMaterialProfile && args.targetMaterialProfileValidation` (~706) which the validator has no internal guarantee receives. Recording deferred pending a direct, ungated validity check."
|
|
125
|
+
- validator_id: claim-projection-validator
|
|
126
|
+
obligation_id: validate_member_capability_rows_preserve_target_ref_profile_snapshot_definition_hash_source_refs_validation_ref_readiness_effect_and_next_action
|
|
127
|
+
coverage_status: pending
|
|
128
|
+
tier: flat
|
|
129
|
+
note: "slice-23 audit (2026-06-23): GATED on optional authority args. The field-by-field preservation check (~755-772, member_capability_lineage_mismatch) is comprehensive and name-matching but only fires inside the `if (args.targetMaterialProfile && args.targetMaterialProfileValidation)` block (~706); both are optional args with no internal guarantee they are supplied (slice-18/22 caller-supplied-optional principle). Recording deferred pending an internal guarantee the target-profile authority is always present (or a conditional-stamp + self-test design)."
|
|
130
|
+
- validator_id: claim-projection-validator
|
|
131
|
+
obligation_id: require_blocked_projection_to_have_limitation_or_recovery_refs
|
|
132
|
+
coverage_status: pending
|
|
133
|
+
tier: flat
|
|
134
|
+
note: "slice-23 R1 audit (2026-06-23, codex P2): subset of named scope. The unconditional guard (~924-934, blocked_projection_missing_recovery_ref) keys only on claim_level=='blocked', but material_kind_support rows express blocked via machine_status=='blocked' while keeping claim_level=='not_applicable'. Their blocked-recovery check (~893-912) is gated on the optional requiredValidationStatuses arg, so when it is absent a blocked material-support row can drop its limitation refs and pass. Recording deferred pending the unconditional check also covering material_kind_support machine_status=='blocked'."
|
|
135
|
+
- validator_id: claim-projection-validator
|
|
136
|
+
obligation_id: require_each_projection_row_to_cite_runtime_validation_authorities
|
|
137
|
+
coverage_status: pending
|
|
138
|
+
tier: flat
|
|
139
|
+
note: "slice-23 R1 audit (2026-06-23, codex P2): presence-only proxy. The unconditional check (~861-867, required_validation_ref_missing) only requires required_validation_refs to be non-empty; arbitrary strings (e.g. ghost-validation.yaml) pass. Whether the refs are the ACTUAL runtime validation authorities is checked only when the optional expectedRequiredValidationRefs is supplied (~868-892), which the validator does not internally derive. Recording deferred pending a mandatory/derived authority-set match (cf. slice-21 user_confirmation presence-only park)."
|
|
140
|
+
- validator_id: claim-projection-validator
|
|
141
|
+
obligation_id: validate_all_public_and_downstream_projection_surfaces_are_present
|
|
142
|
+
coverage_status: pending
|
|
143
|
+
tier: flat
|
|
144
|
+
note: "slice-23 R1 audit (2026-06-23, codex P2): presence-only, not one-per-surface. The check (~949-956, missing_required_surface) verifies each PROJECTION_SURFACE appears at least once, but the contract (design ~1172) requires every status/result/API/MCP/handoff/material-kind-support claim to consume ONE pre-publication projection row. A duplicate surface (two rows, unique ids) passes the presence check. The one-row-per-surface guarantee is enforced only via the gated expectedClaimProjection derived-match. Recording deferred pending an unconditional one-row-per-surface check."
|
|
145
|
+
- validator_id: claim-projection-validator
|
|
146
|
+
obligation_id: validate_claim_level_decision_state_and_actionability_claim_alignment
|
|
147
|
+
coverage_status: pending
|
|
148
|
+
tier: flat
|
|
149
|
+
note: "slice-23 R1 audit (2026-06-23, codex P2): one-directional. The unconditional checks (~829-860) enforce decision_state=>actionability_claim (actionable_ready=>ready, actionable_limited=>limited) and claim_level actionable_ready=>actionable_ready decision, but NOT the reverse: a row with decision_state=='continue', claim_level=='maturation_in_progress', actionability_claim=='ready' is accepted. Full alignment is enforced only via the gated expectedClaimProjection derived-match. Recording deferred pending bidirectional alignment (actionability_claim=='ready' requires actionable_ready decision_state)."
|
|
150
|
+
- validator_id: competency-question-assessment-validator
|
|
151
|
+
obligation_id: validate_answer_status_against_active_answerability_contract
|
|
152
|
+
coverage_status: pending
|
|
153
|
+
tier: flat
|
|
154
|
+
note: "slice-12 audit (2026-06-22): AMBIGUOUS — structure-only, content judgment is blind. The validator checks answer_status enum validity (invalid_enum) + per-status STRUCTURAL requirements (answerable→evidence_refs + required_seed_refs; unsupported/deferred→missing_source_or_confirmation), but never verifies the answer_status reflects actual answerability from evidence CONTENT — that judgment is the content-blind host-LLM assessment step (see contract-runtime-gap-ledger silent-defect #1), not validated here. The per-status structural rules are real but the name (\"active answerability contract\") implies the content/answerability semantics the validator does not check. Recording deferred pending content-aware answerability validation or name reconciliation."
|
|
155
|
+
- validator_id: competency-question-assessment-validator
|
|
156
|
+
obligation_id: validate_answerability_trace_refs_close_against_seed_evidence_limitations_and_proofs
|
|
157
|
+
coverage_status: pending
|
|
158
|
+
tier: flat
|
|
159
|
+
note: "slice-12 audit (2026-06-22): NOT_FOUND for the named arms. The assessment artifact has no answerability_trace_refs, limitation_refs, or proof_refs fields. The validator closes evidence_refs (unknown_observation_ref) and required_seed_refs (recorded separately as validate_required_seed_refs_close_against_question_seed_refs) and linked_claim_ids against the question, but NEVER against limitations or proofs (proofs are separate query/visualization/graph-exploration-proofs artifacts). Of the four named arms (seed, evidence, limitations, proofs) only seed+evidence are closed, and there is no trace_refs field. Recording deferred pending limitation/proof closure (or name reconciliation; the seed arm is already covered)."
|
|
160
|
+
- validator_id: competency-questions-validator
|
|
161
|
+
obligation_id: emit_required_evidence_scope_runtime_projection
|
|
162
|
+
coverage_status: pending
|
|
163
|
+
tier: flat
|
|
164
|
+
note: "slice-27 audit (2026-06-23): PROJECTION_ONLY — the validator derives derivedRequiredEvidenceScope(question) per question and emits it to required_evidence_scope_projection[] in the return (post-seed-validation.ts ~1451), with NO violation. A value derived/exposed in the output with no breaching binding is unrecordable (slice-24 projection-only kind); the consumer that acts on the projection would own any enforcement."
|
|
165
|
+
- validator_id: competency-questions-validator
|
|
166
|
+
obligation_id: enforce_p3_diagnostic_or_claim_based_admission_disposition_rule
|
|
167
|
+
coverage_status: pending
|
|
168
|
+
tier: flat
|
|
169
|
+
note: "slice-27 audit (2026-06-23): NOT_FOUND — the validator has no code enforcing a P3/diagnostic admission-disposition rule (no priority or diagnostic-disposition field is read against the trace-ref membership). The admitted-disposition enforcement that IS wired is the exactly-one-per-admitted-id rule (recorded as enforce_admitted_domain_competency_disposition_rule). No bindable violation for the P3-diagnostic arm; recording deferred pending implementation."
|
|
170
|
+
- validator_id: competency-questions-validator
|
|
171
|
+
obligation_id: validate_classification_level_axis_facet_coverage
|
|
172
|
+
coverage_status: pending
|
|
173
|
+
tier: flat
|
|
174
|
+
note: "slice-27 audit (2026-06-23): NOT_FOUND — the per-question loop never reads a classification_level_axis_facets[] field; no such field exists on the competency-question schema (classification_level_axis_refs[] exists only on ontology-seed.classification_mapping, not on questions). declared≠wired; recording deferred pending the field being added and read."
|
|
175
|
+
- validator_id: competency-questions-validator
|
|
176
|
+
obligation_id: validate_hidden_label_facet_coverage
|
|
177
|
+
coverage_status: pending
|
|
178
|
+
tier: flat
|
|
179
|
+
note: "slice-27 audit (2026-06-23): NOT_FOUND — the per-question loop never reads a hidden_label_facets[] field; the contract (§15) folds hidden-label/search-label policy into terminology coverage (terminology_facets[], recorded as validate_terminology_facet_coverage). No separate hidden_label field exists or is read; recording deferred pending name reconciliation or a dedicated field."
|
|
180
|
+
- validator_id: competency-questions-validator
|
|
181
|
+
obligation_id: validate_query_visualization_graph_contract_refs_when_applicable
|
|
182
|
+
coverage_status: pending
|
|
183
|
+
tier: flat
|
|
184
|
+
note: "slice-27 audit (2026-06-23) + codex #142: PARTIAL/presence-only — the validator resolves PRESENT query_access/visualization/graph_exploration_contract_refs against the registry (unknown_id), but never enforces the '_when_applicable' arm: when a seed makes a query/visualization/graph contract applicable, the matching refs must be present (or limitation-backed), and an empty applicable array is silently accepted. The ref-resolution half is wired but the applicability-presence half is not, so the named scope is not fully enforced. Recording deferred pending the presence check (a behavior change beyond instrumentation)."
|
|
185
|
+
- validator_id: competency-questions-validator
|
|
186
|
+
obligation_id: validate_reasoning_formalism_facet_coverage
|
|
187
|
+
coverage_status: pending
|
|
188
|
+
tier: flat
|
|
189
|
+
note: "slice-27 audit + codex #142 R2: PARTIAL/presence-only — the validator only validateRefArray-resolves the PRESENT reasoning_or_formalism_facets refs against the registry (unknown_id); it never enforces the contract '_coverage' arm (when ontology_handoff_axis_refs includes reasoning_or_formalism_profile, the question must cover or limitation-back the reasoning facets). The conditional facet-presence requirement is unwired, so the named coverage scope is not enforced. Recording deferred pending the per-axis facet-presence check."
|
|
190
|
+
- validator_id: competency-questions-validator
|
|
191
|
+
obligation_id: validate_entity_identity_facet_coverage
|
|
192
|
+
coverage_status: pending
|
|
193
|
+
tier: flat
|
|
194
|
+
note: "slice-27 audit + codex #142 R2: PARTIAL/presence-only — only resolves PRESENT entity_identity_facets refs (unknown_id); never enforces the conditional facet-presence requirement when the entity_identity axis is applicable. Same presence-only gap as the sibling *_facet_coverage obligations. Recording deferred."
|
|
195
|
+
- validator_id: competency-questions-validator
|
|
196
|
+
obligation_id: validate_instance_assertion_facet_coverage
|
|
197
|
+
coverage_status: pending
|
|
198
|
+
tier: flat
|
|
199
|
+
note: "slice-27 audit + codex #142 R2: PARTIAL/presence-only — only resolves PRESENT instance_assertion_facets refs (unknown_id); never enforces the conditional facet-presence requirement when the instance_assertion axis is applicable. Recording deferred."
|
|
200
|
+
- validator_id: competency-questions-validator
|
|
201
|
+
obligation_id: validate_terminology_facet_coverage
|
|
202
|
+
coverage_status: pending
|
|
203
|
+
tier: flat
|
|
204
|
+
note: "slice-27 audit + codex #142 R2: PARTIAL/presence-only — only resolves PRESENT terminology_facets refs (unknown_id); never enforces the conditional facet-presence requirement when the terminology axis is applicable. Recording deferred."
|
|
205
|
+
- validator_id: competency-questions-validator
|
|
206
|
+
obligation_id: validate_relation_type_facet_coverage
|
|
207
|
+
coverage_status: pending
|
|
208
|
+
tier: flat
|
|
209
|
+
note: "slice-27 audit + codex #142 R2: PARTIAL/presence-only — only resolves PRESENT relation_type_facets refs (unknown_id); never enforces the conditional facet-presence requirement when the relation_typing axis is applicable. Recording deferred."
|
|
210
|
+
- validator_id: competency-questions-validator
|
|
211
|
+
obligation_id: validate_classification_facet_coverage
|
|
212
|
+
coverage_status: pending
|
|
213
|
+
tier: flat
|
|
214
|
+
note: "slice-27 audit + codex #142 R2: PARTIAL/presence-only — only resolves PRESENT classification_facets refs (unknown_id); never enforces the conditional facet-presence requirement when the classification axis is applicable. Recording deferred."
|
|
215
|
+
- validator_id: competency-questions-validator
|
|
216
|
+
obligation_id: validate_constraint_facet_coverage
|
|
217
|
+
coverage_status: pending
|
|
218
|
+
tier: flat
|
|
219
|
+
note: "slice-27 audit + codex #142 R2: PARTIAL/presence-only — only resolves PRESENT constraint_facets refs (unknown_id); never enforces the conditional facet-presence requirement when the constraints axis is applicable. Recording deferred."
|
|
220
|
+
- validator_id: competency-questions-validator
|
|
221
|
+
obligation_id: validate_modeling_concern_facet_coverage
|
|
222
|
+
coverage_status: pending
|
|
223
|
+
tier: flat
|
|
224
|
+
note: "slice-27 audit + codex #142 R2: PARTIAL — the per-question modeling_concern_facets check is presence-only (resolves present refs, unknown_id), and the post-loop required-concern coverage check (requiredModelingConcerns must be covered) populates coveredModelingConcerns from ANY question regardless of lifecycle_status, so an inactive/unsupported question counts as coverage (same inactive-coverage gap codex flagged for the required-axis obligation). Neither arm fully enforces the named coverage scope. Recording deferred."
|
|
225
|
+
- validator_id: competency-questions-validator
|
|
226
|
+
obligation_id: validate_required_ontology_handoff_axis_coverage_or_limitation_backed_disposition
|
|
227
|
+
coverage_status: pending
|
|
228
|
+
tier: flat
|
|
229
|
+
note: "slice-27 audit + codex #142 R2: PARTIAL — coveredOntologyHandoffAxes is populated from EVERY question's ontology_handoff_axis_refs before any lifecycle/disposition filtering, so a required axis mentioned only by an inactive (lifecycle_status=unsupported_candidate) or non-limitation-backed question still satisfies the post-loop coverage check. The obligation requires representation by an ACTIVE question OR an unsupported/deferred limitation-backed disposition; that active/limitation-backed filter is unwired. Recording deferred."
|
|
230
|
+
- validator_id: failure-classification-validator
|
|
231
|
+
obligation_id: classify_missing_or_failed_active_validation_artifact_as_required_gate_failure
|
|
232
|
+
coverage_status: pending
|
|
233
|
+
tier: flat
|
|
234
|
+
note: "slice-13 audit (2026-06-22, codex PR #123): UNWIRED ON THIS VALIDATOR (not a re-attribution). The obligation is registered on failure-classification-validator and design.md:3275-3280 says failure-classification VALIDATION must consume the failed-gate validation artifacts (and per the failure_classification_gate required_when predicate, runtime-halt / unresolved-work evidence such as reconstruct-metrics.yaml, not only missing/failed validations). But validateFailureClassification (post-seed-validation.ts) takes only failure_classification + competency-question-assessment + seed-confirmation-validation and validates authored rows structurally (duplicate_id / failure_kind invalid_enum / question_id+claim_id unknown_id / rationale_missing — none a registered obligation); it never reads the gate validation artifacts to detect missing/failed/halted state and classify them as required-gate failures. Backlog: wire this consumption INTO this validator; the AUTHORITATIVE input set is the registry record's input_authority_refs + dynamic_input_authority_rule + the gate's required_when predicate (do not rely on this note's prose as the spec — read the registry). Recording deferred."
|
|
235
|
+
- validator_id: failure-classification-validator
|
|
236
|
+
obligation_id: classify_missing_or_failed_promoted_maturation_validation_artifact_as_required_gate_failure
|
|
237
|
+
coverage_status: pending
|
|
238
|
+
tier: flat
|
|
239
|
+
note: "slice-13 audit (2026-06-22, codex PR #123): UNWIRED ON THIS VALIDATOR. The registry binds the promoted/requested validations to this validator via conditional_input_authority_refs + the dynamic_input_authority_rule, but validateFailureClassification receives none of them and performs no promoted-gate missing/failed classification. Backlog: wire INTO this validator over the registry-declared promoted-authority set (the registry's conditional_input_authority_refs/dynamic rule is the authoritative list — do not enumerate from this note). Recording deferred."
|
|
240
|
+
- validator_id: failure-classification-validator
|
|
241
|
+
obligation_id: derive_planned_gate_failure_inputs_from_registry_gate_catalogs_not_hand_maintained_lists
|
|
242
|
+
coverage_status: pending
|
|
243
|
+
tier: flat
|
|
244
|
+
note: "slice-13 audit (2026-06-22, codex PR #123): UNWIRED ON THIS VALIDATOR. The registry's dynamic_input_authority_rule explicitly assigns THIS validator to 'consume every validation_artifact_ref from validation_gate_catalog and planned_validation_gate_catalog whose required_when is true … hand-maintained conditional_input_authority_refs are non-authoritative cache hints only' (design.md:2336-2340). validateFailureClassification never receives the registry/catalogs and does no required_when-driven derivation. Backlog: wire the catalog-driven derivation INTO this validator. Recording deferred."
|
|
245
|
+
- validator_id: failure-classification-validator
|
|
246
|
+
obligation_id: validate_failure_trigger_against_active_runtime_validation_authorities
|
|
247
|
+
coverage_status: pending
|
|
248
|
+
tier: flat
|
|
249
|
+
note: "slice-13 audit (2026-06-22, codex PR #123): AMBIGUOUS — name broader than code. The validator resolves failure.question_id against the competency-question-assessment and failure.claim_id against the seed-confirmation-validation (unknown_id) — the failure's SUBJECT refs, not its TRIGGER (the missing/failed gate validation artifact the contract names). The registry declares the active runtime VALIDATION-artifact authorities for this validator (a subset of input_authority_refs — NOT the authored failure-classification.yaml, run-manifest, or registry metadata refs); the function reads only two of them. Backlog: wire a trigger check over the registry-declared active validation-artifact authorities (read the registry for the exact refs). Recording deferred."
|
|
250
|
+
- validator_id: failure-classification-validator
|
|
251
|
+
obligation_id: validate_failure_trigger_against_promoted_planned_validation_authorities
|
|
252
|
+
coverage_status: pending
|
|
253
|
+
tier: flat
|
|
254
|
+
note: "slice-13 audit (2026-06-22, codex PR #123): UNWIRED ON THIS VALIDATOR over the promoted/requested authority set. validateFailureClassification receives none of the promoted-planned validation authorities. Backlog: wire the trigger check over the AUTHORITATIVE promoted-authority set = the registry record's conditional_input_authority_refs whose consumed_for lists this obligation, resolved via the dynamic_input_authority_rule (read the registry for the exact refs — this note deliberately does not enumerate them, since the registry is the SSOT and a prose list drifts). Recording deferred."
|
|
255
|
+
- validator_id: handoff-decision-validator
|
|
256
|
+
obligation_id: consume_all_requested_or_promoted_planned_gate_statuses_emitted_by_runtime
|
|
257
|
+
coverage_status: pending
|
|
258
|
+
tier: flat
|
|
259
|
+
note: "slice-19 audit (2026-06-23): NOT_FOUND — depends on planned_validation_gate_catalog, which is declared in the registry YAML but NEVER loaded into the runtime ReconstructContractRegistry (the loader does not parse it; grep: zero references to planned_validation_gate_catalog in src/core-runtime/reconstruct). projectGateStatusesOnce iterates contractRegistry.validation_gate_catalog (active gates) only, so requested/promoted planned gate statuses are never consumed. This is a genuine declared-but-unwired surfacing (owner: load planned gates into the registry, or re-scope the obligation)."
|
|
260
|
+
- validator_id: handoff-decision-validator
|
|
261
|
+
obligation_id: derive_terminal_planned_gate_inputs_from_registry_gate_catalogs_not_hand_maintained_lists
|
|
262
|
+
coverage_status: pending
|
|
263
|
+
tier: flat
|
|
264
|
+
note: "slice-19 audit (2026-06-23): NOT_FOUND — same root cause as consume-planned: planned_validation_gate_catalog is never loaded, so terminal planned gate inputs are not derived from any registry catalog. The active gate projection derives from validation_gate_catalog, but the planned-gate derivation this obligation names does not exist in the runtime."
|
|
265
|
+
- validator_id: handoff-decision-validator
|
|
266
|
+
obligation_id: do_not_require_failure_or_revision_artifacts_for_clean_stop_decisions
|
|
267
|
+
coverage_status: pending
|
|
268
|
+
tier: flat
|
|
269
|
+
note: "slice-19 audit (2026-06-23): defensive NEGATIVE obligation — the validator does not require failure-classification/revision-proposal artifacts for a clean stop (those gates are conditional via registry required_when predicates, skipped when not_applicable). There is no positive bindable violation for 'do not require' (a clean stop simply clears); the property is delegated to the registry predicate catalog, not a distinct enforcer in validateHandoffDecision. Recording deferred (no non-vacuous breaching binding)."
|
|
270
|
+
- validator_id: handoff-decision-validator
|
|
271
|
+
obligation_id: project_missing_required_promoted_or_requested_planned_gate_validation_artifact_as_blocked
|
|
272
|
+
coverage_status: pending
|
|
273
|
+
tier: flat
|
|
274
|
+
note: "slice-19 audit (2026-06-23): NOT_FOUND — depends on planned_validation_gate_catalog (never loaded). Missing planned gate validation artifacts are never consulted or projected as blocked; only missing ACTIVE artifacts are (recorded as project_missing_active_validation_artifact_as_blocked)."
|
|
275
|
+
- validator_id: handoff-decision-validator
|
|
276
|
+
obligation_id: validate_accepted_maturation_execution_minimum_output_gates_are_terminal_projected
|
|
277
|
+
coverage_status: pending
|
|
278
|
+
tier: flat
|
|
279
|
+
note: "slice-19 audit (2026-06-23): AMBIGUOUS — no distinct 'accepted maturation execution minimum output gates' selection exists. projectGateStatusesOnce terminal-projects ALL applicable active gates from validation_gate_catalog, but there is no maturation-minimum filter or maturation-context gate selection naming this obligation, and the planned/maturation gates it implies are unloaded. No name-matching enforcer."
|
|
280
|
+
- validator_id: handoff-decision-validator
|
|
281
|
+
obligation_id: validate_failure_classification_covers_failed_or_missing_requested_planned_gates
|
|
282
|
+
coverage_status: pending
|
|
283
|
+
tier: flat
|
|
284
|
+
note: "slice-19 audit (2026-06-23): NOT_FOUND — depends on planned_validation_gate_catalog (never loaded). The validator consumes failureClassificationValidation only as metadata (material_failure_count) and for predicate evaluation; it never validates that failure classification COVERS failed/missing planned gates."
|
|
285
|
+
- validator_id: material-admission-ledger-validator
|
|
286
|
+
obligation_id: validate_phase_scoped_input_kind_disposition_and_snapshot_refs
|
|
287
|
+
coverage_status: pending
|
|
288
|
+
tier: flat
|
|
289
|
+
note: "slice-15 audit (2026-06-23): AMBIGUOUS — multi-facet name, one facet unenforced. The name binds THREE facets: phase-scoped input_kind, phase-scoped disposition, and snapshot_refs. Two are enforced — phase→input_kind (invalid_phase_input_kind: pre_seed_purpose_element→purpose_adequacy_element, pre_seed_material_value→material_value, post_cq_domain_competency→domain_competency_question) and input_kind→snapshot_ref (missing_snapshot_ref per input_kind). But the DISPOSITION facet is NOT enforced: the code only validates disposition against the global enum (invalid_enum), never restricting disposition VALUES by input_kind/admission_phase. The contract (ontology-seeding-and-maturation-design.md §Material value and domain competency admission, the admit-when table) restricts dispositions per input_kind (material_value ⊆ {admitted_material, trace_audit_only, out_of_scope, deferred_authority, rejected_ambiguous}; domain_competency_question ⊆ {required_blocking, supporting_material, diagnostic_only, deferred_product_decision, out_of_scope}), so e.g. a material_value row carrying required_blocking passes uncaught. Recording deferred pending a per-input_kind disposition allow-set check (or the name reconciled to drop the disposition facet)."
|
|
290
|
+
- validator_id: maturation-answer-claims-validator
|
|
291
|
+
obligation_id: require_partial_answers_to_have_limitation_or_frontier_refs
|
|
292
|
+
coverage_status: pending
|
|
293
|
+
tier: flat
|
|
294
|
+
note: "slice-4 audit (2026-06-22): validateMaturationAnswerClaims enforces 'partially_answered → limitation_refs' (missing_required_ref), but the 'OR frontier' alternative is unrepresentable — ReconstructMaturationAnswerClaim has no frontier_refs field. Name/artifact mismatch; recording deferred pending the frontier alternative being added or the name reconciled with the limitation-only check."
|
|
295
|
+
- validator_id: maturation-answer-claims-validator
|
|
296
|
+
obligation_id: validate_answer_claim_surface_dimension_and_purpose_element_refs
|
|
297
|
+
coverage_status: pending
|
|
298
|
+
tier: flat
|
|
299
|
+
note: "slice-4 audit (2026-06-22): all three ref arrays are presence-validated (missing_required_coverage) and target_surface_refs are resolved against the question (conflicting_state), but target_dimension_refs and purpose_element_refs are NOT resolved against the question — only presence-checked. Recording deferred pending dimension/purpose resolution checks or an owner decision (partial enforcement)."
|
|
300
|
+
- validator_id: maturation-answer-claims-validator
|
|
301
|
+
obligation_id: validate_support_mode_against_valid_evidence_cluster_or_authority
|
|
302
|
+
coverage_status: pending
|
|
303
|
+
tier: flat
|
|
304
|
+
note: "slice-4 audit (2026-06-22): support_mode is validated against evidence clusters (invalid_enum, conflicting_state on cluster-mode mismatch, support_mode_missing_authority when no cluster is cited), but the 'OR authority' alternative branch is not implemented — there is no validation path against an authority artifact. Recording deferred pending the authority branch or name reconciliation."
|
|
305
|
+
- validator_id: maturation-authority-response-validator
|
|
306
|
+
obligation_id: preserve_unavailable_or_rejected_authority_as_blocked_or_limitation_state
|
|
307
|
+
coverage_status: pending
|
|
308
|
+
tier: flat
|
|
309
|
+
note: "slice-14 audit (2026-06-22): NOT_FOUND in validateMaturationAuthorityResponse (maturation-validation.ts). unavailable/deferred responses are only COUNTED into unavailable_response_count (return field); no violation fires when an unavailable/rejected/deferred/contradicted response fails to be preserved as a blocked/limitation state (no limitation_refs requirement). Preserving the gap as blocked/limitation is a downstream continuation/closure-decision consumer's job. Recording deferred pending a validator-side preservation check."
|
|
310
|
+
- validator_id: maturation-authority-response-validator
|
|
311
|
+
obligation_id: reject_authority_response_that_claims_source_support_without_source_observation_refs
|
|
312
|
+
coverage_status: pending
|
|
313
|
+
tier: flat
|
|
314
|
+
note: "slice-14 audit (2026-06-22, codex PR #124): a substring PROXY, not resolution. The only check is supporting_refs.some(ref => ref.includes('source-observations')) (support_mode_missing_authority) — it never loads source-observations.yaml or resolves observation ids, and a misleading ref such as 'not-source-observations' satisfies the substring while citing no real source observation. A breaching input (claims source support, no real source-observation ref) escapes, so this is not contract-complete. Recording deferred pending resolution against source-observations.yaml."
|
|
315
|
+
- validator_id: maturation-authority-response-validator
|
|
316
|
+
obligation_id: validate_authority_identity_and_snapshot_refs_are_recorded
|
|
317
|
+
coverage_status: pending
|
|
318
|
+
tier: flat
|
|
319
|
+
note: "slice-14 audit (2026-06-22): AMBIGUOUS — only the identity arm is enforced. The validator requires authority_identity.authority_id/label/role to be non-empty (missing_required_ref), but never checks authority_snapshot_ref or authority_version_or_timestamp are recorded. Name says 'identity AND snapshot refs'; the snapshot arm is unenforced. Recording deferred pending a snapshot-ref recorded check."
|
|
320
|
+
- validator_id: maturation-authority-response-validator
|
|
321
|
+
obligation_id: validate_authority_response_refs_against_maturation_closure_frontier_authority_requests
|
|
322
|
+
coverage_status: pending
|
|
323
|
+
tier: flat
|
|
324
|
+
note: "slice-14 audit (2026-06-22, codex PR #124): the validator does resolve authority_request_ref against maturationClosureFrontier.authority_requests (unknown_id) + kind match (conflicting_state), but recording it is unsafe on two counts. (1) The validator record under-declares its inputs — it lists maturation-authority-response.yaml + maturation-closure-frontier-VALIDATION.yaml + registry, but NOT maturation-closure-frontier.yaml, the artifact whose authority_requests the check needs; a registry-driven consumer would not provide it (declared≠wired). (2) No cross-artifact binding: the validator resolves against whichever frontier the caller passes and never checks response.closure_frontier_ref or frontier-validation.maturation_closure_frontier_ref name that same frontier, so a reused authority-response from another frontier validates against a mismatched frontier with matching ids (same class as the #100 matrix cross-artifact-binding follow-up). Recording deferred pending the frontier-artifact input declaration + response↔frontier↔frontier-validation binding."
|
|
325
|
+
- validator_id: maturation-authority-response-validator
|
|
326
|
+
obligation_id: validate_authority_response_status_and_scope
|
|
327
|
+
coverage_status: pending
|
|
328
|
+
tier: flat
|
|
329
|
+
note: "slice-14 audit (2026-06-22): AMBIGUOUS — name broader than code. The only status-specific enforcement is response_status=='provided' requiring supporting_refs or response_source_ref (missing_required_ref); the other statuses (unavailable/rejected/deferred/contradicted) carry no status validation, and there is no explicit 'scope' check (the authority_kind match belongs to validate_authority_response_refs_against_maturation_closure_frontier_authority_requests). Recording deferred pending full status/scope validation."
|
|
330
|
+
- validator_id: maturation-baseline-validator
|
|
331
|
+
obligation_id: preserve_immutable_source_seed_and_validation_refs_used_to_compute_baseline
|
|
332
|
+
coverage_status: pending
|
|
333
|
+
tier: flat
|
|
334
|
+
note: "slice-2 audit (2026-06-22): validateMaturationBaseline copies the source seed/validation refs into its validation artifact but enforces no immutability/tamper check on them — no distinct enforcement site located. Recording deferred pending an added enforcement check or an owner decision (the obligation may be enforced by a downstream validator and mis-attributed here)."
|
|
335
|
+
- validator_id: maturation-baseline-validator
|
|
336
|
+
obligation_id: validate_baseline_rows_cover_static_kinetic_dynamic_surfaces_and_maturity_dimensions
|
|
337
|
+
coverage_status: pending
|
|
338
|
+
tier: flat
|
|
339
|
+
note: "slice-2 audit (2026-06-22): no enforcement site DISTINCT from the already-recorded required-element tuple coverage (validate_baseline_rows_cover_selected_purpose_frame_required_elements) was located; the per-row surface/dimension checks validate present-row validity, not full static/kinetic/dynamic surface coverage. Recording deferred pending a distinct site or an owner decision to fold this into the recorded coverage obligation."
|
|
340
|
+
- validator_id: maturation-baseline-validator
|
|
341
|
+
obligation_id: validate_baseline_rows_trace_to_seed_refs_limitations_or_validated_assessment_gaps
|
|
342
|
+
coverage_status: pending
|
|
343
|
+
tier: flat
|
|
344
|
+
note: "slice-2 audit (2026-06-22): validateMaturationBaseline validates purpose_element_ref resolution but enforces no per-row trace-to-seed_refs/limitations/validated-assessment-gaps check — no distinct enforcement site located. Recording deferred pending an added enforcement check or an owner decision."
|
|
345
|
+
- validator_id: maturation-closure-frontier-validator
|
|
346
|
+
obligation_id: reject_duplicate_or_already_observed_source_requests
|
|
347
|
+
coverage_status: pending
|
|
348
|
+
tier: flat
|
|
349
|
+
note: "slice-25 R1 audit (2026-06-23, codex P2): PARTIAL. The validator de-dupes source_request_id and rejects already-observed refs, but two requests with DISTINCT ids targeting the same unobserved requested_source_ref both enter accepted_source_request_ids. In a real run that passes validation and then the re-entry observer throws on the second accepted id (run.ts ~9870-9884). Contract (design ~1372-1373) requires rejecting duplicate source requests (same target). Recording deferred pending same-target-ref duplicate rejection."
|
|
350
|
+
- validator_id: maturation-closure-frontier-validator
|
|
351
|
+
obligation_id: reject_unsupported_material_refs
|
|
352
|
+
coverage_status: pending
|
|
353
|
+
tier: flat
|
|
354
|
+
note: "slice-25 R1 audit (2026-06-23, codex P2): PARTIAL. The validator treats ANY inventory row as supported and only rejects a missing row; rows with exists:false, scan_status:skipped, or a non-concrete kind still validate and are accepted. The runtime then builds a detection and buildReconstructSourceObservation returns null for non-existent/non-concrete refs, throwing (materialize-preparation.ts ~434-436; run.ts ~9908-9911). Recording deferred pending rejection of skipped/non-existent/non-concrete inventory entries."
|
|
355
|
+
- validator_id: maturation-closure-frontier-validator
|
|
356
|
+
obligation_id: validate_closure_frontier_question_refs_against_material_unanswered_questions
|
|
357
|
+
coverage_status: pending
|
|
358
|
+
tier: flat
|
|
359
|
+
note: "slice-25 R1 audit (2026-06-23, codex P2): PARTIAL + declared≠wired. (a) An empty source-request question_refs array fires no violation, so a request resolves to zero material questions and still validates. (b) The check reads questions/materialQuestions from the maturation-question-frontier ARTIFACT, but the registry input_authority_refs (registry ~2613-2619) declares only maturation-question-frontier-validation.yaml, not the artifact — a registry-driven consumer cannot supply it (slice-14 pattern). Recording deferred pending non-empty-refs enforcement + the frontier artifact declared as an input."
|
|
360
|
+
- validator_id: maturation-closure-frontier-validator
|
|
361
|
+
obligation_id: validate_closure_frontier_source_requests_preserve_member_and_cross_material_lineage
|
|
362
|
+
coverage_status: pending
|
|
363
|
+
tier: flat
|
|
364
|
+
note: "slice-25 R1 audit (2026-06-23, codex P2): dead discriminator. The mixed-lineage check fires only when an individual source request has target_material_kind === 'mixed', but real mixed targets are an aggregate detection while inventory units / source requests carry concrete per-ref kinds (materialize-preparation.ts ~46-56, ~729-732) that exclude 'mixed'. A mixed target requesting a concrete member source (e.g. code) with empty lineage validates anyway. Contract (design ~1374-1376) requires lineage for mixed-material source requests. Recording deferred pending enforcement keyed on the real (aggregate) mixed-target signal or the target profile."
|
|
365
|
+
- validator_id: maturation-closure-frontier-validator
|
|
366
|
+
obligation_id: validate_authority_request_question_refs_against_material_unanswered_questions
|
|
367
|
+
coverage_status: pending
|
|
368
|
+
tier: flat
|
|
369
|
+
note: "slice-25 R1 audit (2026-06-23, codex P2): PARTIAL + declared≠wired. Same two issues as the source-request question_refs obligation: an empty authority-request question_refs array fires no violation, and the materiality check reads the maturation-question-frontier ARTIFACT which the registry does not declare as an input authority (registry ~2613-2619). Recording deferred pending non-empty-refs enforcement + the frontier artifact declared as an input."
|
|
370
|
+
- validator_id: maturation-closure-frontier-validator
|
|
371
|
+
obligation_id: validate_authority_request_blocking_semantics_against_question_materiality
|
|
372
|
+
coverage_status: pending
|
|
373
|
+
tier: flat
|
|
374
|
+
note: "slice-25 R1 audit (2026-06-23, codex P2): declared≠wired. The blocker-must-block check reads question.materiality from the maturation-question-frontier ARTIFACT, but the registry input_authority_refs (registry ~2613-2619) declares only maturation-question-frontier-validation.yaml, not the artifact — a registry-driven consumer cannot reproduce the check (slice-14 pattern). Recording deferred pending the frontier artifact declared as an input authority."
|
|
375
|
+
- validator_id: maturation-closure-frontier-validator
|
|
376
|
+
obligation_id: reject_duplicate_authority_requests_for_same_question_authority_kind_and_scope
|
|
377
|
+
coverage_status: pending
|
|
378
|
+
tier: flat
|
|
379
|
+
note: "slice-25 R1 audit (2026-06-23, codex P2): scope-too-coarse. The dedupe keys on the ENTIRE sorted question_refs array, so a request covering [q1,q2] and another covering [q1] with the same authority kind and scope both validate even though they duplicate the same (question, kind, scope) for q1. Contract (design ~1379-1380) is per-question. Recording deferred pending per-question dedupe."
|
|
380
|
+
- validator_id: maturation-continuation-decision-validator
|
|
381
|
+
obligation_id: validate_continuation_state_against_validated_actionability_matrix_and_frontier_state
|
|
382
|
+
coverage_status: pending
|
|
383
|
+
tier: flat
|
|
384
|
+
note: "slice-22 audit (2026-06-23): AMBIGUOUS. The name is broad ('continuation_state against validated matrix AND frontier_state') and its intent is split across three non-overlapping enforcement regions with no single block that matches it 1:1: the blanket prior-validation loop (requires all 8 upstream validations valid, of which matrix/question-frontier/closure-frontier are three), the claim_scope partition recompute (decision included/excluded refs must equal the matrix closed/non-closed rows — overlaps the actionable_limited row-scope obligation), and the material-open-rows gate (overlaps reject_actionable_ready_when_material_blocker_or_high_row_remains_unclosed). Recording deferred (would need splitting into narrower obligations e.g. require_prior_validation_status_valid / validate_claim_scope_partition_against_matrix, or absorbing into the existing recorded gates)."
|
|
385
|
+
- validator_id: maturation-continuation-decision-validator
|
|
386
|
+
obligation_id: validate_continue_ask_user_or_blocked_state_against_available_next_authority
|
|
387
|
+
coverage_status: pending
|
|
388
|
+
tier: flat
|
|
389
|
+
note: "slice-22 audit (2026-06-23): PARTIAL. The validator enforces continue (requires >=1 next_frontier_ref) and ask_user (requires >=1 authority_request_ref), but the named `blocked` state has NO enforcement against next-authority availability. Contract (design ~1539: deferred_external_authority projects ask_user/blocked/limitation depending on availability) expects blocked to be validated against unavailability, but no such check exists. Recording deferred pending a `blocked`-state enforcer."
|
|
390
|
+
- validator_id: maturation-continuation-decision-validator
|
|
391
|
+
obligation_id: bind_revision_proposal_validation_to_consumed_revision_proposal
|
|
392
|
+
coverage_status: pending
|
|
393
|
+
tier: flat
|
|
394
|
+
note: "slice-22 R1 audit (2026-06-23, codex P2): caller-supplied-optional-arg gate. The binding check (revisionProposalValidation.revision_proposal_ref must match the consumed proposal) only runs when the caller supplies the optional `revisionProposalRef`; the validator has no internal guarantee it is provided, so for direct/pure calls the obligation is advertised but the check is inert. Same disposition as slice-18 expectedRegistrySha256 (run-control slice-10 principle). Recording deferred pending an internal guarantee that the consumed proposal ref is always present."
|
|
395
|
+
- validator_id: maturation-continuation-decision-validator
|
|
396
|
+
obligation_id: reject_actionable_ready_when_material_blocker_or_high_row_remains_unclosed
|
|
397
|
+
coverage_status: pending
|
|
398
|
+
tier: flat
|
|
399
|
+
note: "slice-22 R1 audit (2026-06-23, codex P2): subset of named scope. The gate builds materialOpenRows from blocker/high rows with member_readiness=='frontier_required' only, but the obligation names 'unclosed' which also covers 'limitation_backed' (a distinct non-closed member_readiness value). A hand-edited actionable_ready decision with a limitation_backed blocker/high row therefore bypasses the gate. Recording deferred pending the gate covering all non-closed material rows (frontier_required + limitation_backed)."
|
|
400
|
+
- validator_id: maturation-continuation-decision-validator
|
|
401
|
+
obligation_id: validate_limitation_refs_and_row_scope_for_actionable_limited_state
|
|
402
|
+
coverage_status: pending
|
|
403
|
+
tier: flat
|
|
404
|
+
note: "slice-22 R2 audit (2026-06-23, codex P2): name-broader-than-code. The validator firmly enforces the row_scope facet (actionable_limited requires >=1 included_row_ref) but the limitation-ref facet is only a weak presence check (requires excluded_row_refs OR limitation_refs to be non-empty). An actionable_limited decision that excludes a limitation_backed matrix row but DROPS that row's limitation_refs still passes (satisfied by the excluded row alone). Only candidate-limitation and revision-blocker preservation are enforced (separate obligations); per-row limitation_backed limitation_refs are not preserved. Recording deferred pending row-level limitation-ref preservation."
|
|
405
|
+
- validator_id: maturation-convergence-ledger-validator
|
|
406
|
+
obligation_id: preserve_remaining_frontier_refs_without_ready_projection
|
|
407
|
+
coverage_status: pending
|
|
408
|
+
tier: flat
|
|
409
|
+
note: "slice-16 audit (2026-06-23): AMBIGUOUS — composite name, only the resolution sub-check is enforced. The code validates remaining_frontier_refs resolve to frontier questions (unknown_id, maturation-validation.ts ~3874) = the FIRST clause of contract bullet (h) (design §convergence-ledger must-prove). But the 'without ready projection' framing references the ready-projection terminal gate that contract (h) explicitly DEFERS ('becomes a stronger terminal projection gate WHEN actionable ontology projection is implemented'); this validator has no ready-projection logic and no enforcer ties remaining-frontier preservation to a ready gate. A breaching input binds only the resolution check, not the composite. Recording deferred pending the ready-projection gate, or re-attribution as a plain resolve-remaining-frontier-refs obligation."
|
|
410
|
+
- validator_id: maturation-convergence-ledger-validator
|
|
411
|
+
obligation_id: reject_actionable_ready_until_final_requestion_convergence_is_proven
|
|
412
|
+
coverage_status: pending
|
|
413
|
+
tier: flat
|
|
414
|
+
note: "slice-16 audit (2026-06-23): NOT_FOUND in this validator — DEFERRED gate. The convergence validator only REPORTS final_requestion_pass_status (it surfaces it on the output) and checks the pass-status/new-material-ref consistency; it never gates an actionable_ready projection. Contract bullet (h) states the ready gate 'becomes a stronger terminal projection gate WHEN actionable ontology projection is implemented' — i.e. rejecting actionable_ready until convergence is proven is owned by the actionable-ontology / continuation-decision projection, not here. Recording deferred pending that projection."
|
|
415
|
+
- validator_id: maturation-convergence-ledger-validator
|
|
416
|
+
obligation_id: reject_trace_audit_or_authority_request_rows_as_positive_semantic_support
|
|
417
|
+
coverage_status: pending
|
|
418
|
+
tier: flat
|
|
419
|
+
note: "slice-16 audit (2026-06-23): AMBIGUOUS — no name-matching positive-support enforcer. The closure-disposition enum has no 'authority_request' value (closest: deferred_external_authority), and the validator never rejects trace_audit_only or deferred rows from being counted as positive semantic support. The nearest check (conflicting_state ~3839) forbids trace_audit_only rows from citing expansions or closing blocker/high questions = contract bullet (d), a DIFFERENT rule. positiveSupportRefs (~3799) is computed and consumed only by the answered_no_semantic_change branch, not by a trace/authority exclusion gate. Recording deferred pending an explicit positive-support exclusion check (or name reconciliation against the trace_audit_only rule that IS enforced)."
|
|
420
|
+
- validator_id: maturation-convergence-ledger-validator
|
|
421
|
+
obligation_id: require_every_blocker_or_high_question_to_have_answer_expansion_blocked_or_frontier_closure
|
|
422
|
+
coverage_status: pending
|
|
423
|
+
tier: flat
|
|
424
|
+
note: "slice-16 audit (2026-06-23, codex PR #127): PARK — the recorded enforcer would be a weak proxy. Contract bullet (a) requires every blocker/high question to be closed, CARRIED FORWARD, or blocked WITH REFS. The code (missing_required_coverage, maturation-validation.ts ~3763) only checks the question id appears in some closure_rows[].question_refs: it (1) rejects the contract-permitted carried-forward-via-remaining_frontier_refs path, and (2) accepts a dummy out_of_scope/low closure row with no refs as 'closure' — it never validates the permitted dispositions or refs. Recording would let G10 treat the full closed/carried-forward/blocked-with-refs contract as covered. Recording deferred pending a check that validates the permitted closure dispositions + refs (and accepts carry-forward)."
|
|
425
|
+
- validator_id: maturation-convergence-ledger-validator
|
|
426
|
+
obligation_id: validate_each_source_observation_delta_row_has_convergence_closure_disposition
|
|
427
|
+
coverage_status: pending
|
|
428
|
+
tier: flat
|
|
429
|
+
note: "slice-16 audit (2026-06-23, codex PR #127): PARK — two gaps. (1) The closure-coverage enforcer (missing_required_coverage ~3710) is INSIDE the per-round loop; a source-observation-delta artifact with delta rows but an empty rounds[] array enforces nothing, so a stamp gated only on sourceObservationDelta presence would launder the zero-round shape. (2) Contract bullet (g) requires each consumed delta row to appear in exactly one source_observation_closure_rows[] row WITH A DISPOSITION, but the source-closure branch never reads sourceClosure.closure_disposition — a missing/out-of-enum disposition still passes. Recording deferred pending (a) gating on a reached source-delta round and (b) validating the closure_disposition field."
|
|
430
|
+
- validator_id: maturation-convergence-ledger-validator
|
|
431
|
+
obligation_id: validate_prior_maturation_validations_are_valid
|
|
432
|
+
coverage_status: pending
|
|
433
|
+
tier: flat
|
|
434
|
+
note: "slice-16 audit (2026-06-23, codex PR #127): PARK — incomplete prior-validation scope. The code checks the validation_status of the question-frontier, actionability-matrix, answer-support, answer-claims, and ontology-expansion validations (prior_validation_invalid ~3500-3538). But the registry declares rounds/<round-id>/source-observation-delta-validation.yaml as an input authority for delta-backed rounds, and this validator never receives or checks that validation artifact's status — an invalid source-observation-delta validation can be referenced while the obligation claims prior validations were proven. (Separately, actionability-matrix-validation is checked by code but NOT declared in the registry input_authority_refs — an inverse declared≠wired the owner may reconcile.) Recording deferred pending the source-delta validation status being added to the gate (or recording gated to non-delta runs)."
|
|
435
|
+
- validator_id: maturation-question-frontier-validator
|
|
436
|
+
obligation_id: validate_authority_need_rows_are_first_class_and_scope_to_questions
|
|
437
|
+
coverage_status: pending
|
|
438
|
+
tier: flat
|
|
439
|
+
note: "slice-6 audit (2026-06-22): validateMaturationQuestionFrontier reads question.authority_need only as part of the blocker/high closure check (recorded as require_blocker_and_high_questions_...); there is NO independent enforcement that authority_need rows are first-class or scoped to questions (authority_scope / expected_response_kind / blocking semantics are not validated here). A surfaced declared≠wired gap (may be enforced by maturation-closure-frontier-validator). Recording deferred."
|
|
440
|
+
- validator_id: maturation-question-frontier-validator
|
|
441
|
+
obligation_id: validate_competency_question_assessment_and_domain_trace_refs
|
|
442
|
+
coverage_status: pending
|
|
443
|
+
tier: flat
|
|
444
|
+
note: "slice-6 audit (2026-06-22): NO enforcement found — competency_question_refs / competency_assessment_refs / domain_competency_trace_refs are not accessed or resolved in validateMaturationQuestionFrontier. A surfaced declared≠wired gap. Recording deferred pending an added check or registry re-attribution."
|
|
445
|
+
- validator_id: maturation-question-frontier-validator
|
|
446
|
+
obligation_id: validate_question_materiality_surface_dimension_and_answer_status_enums
|
|
447
|
+
coverage_status: pending
|
|
448
|
+
tier: flat
|
|
449
|
+
note: "slice-6 audit (2026-06-22): materiality (invalid_enum) and surface/dimension non-emptiness (missing_required_coverage) ARE enforced, but the named answer_status enum clause is NOT — question.current_answer_status is never validated as an enum here. Partial; recording deferred pending the answer_status check or name reconciliation."
|
|
450
|
+
- validator_id: maturation-question-frontier-validator
|
|
451
|
+
obligation_id: validate_question_refs_against_baseline_seed_and_limitation_authorities
|
|
452
|
+
coverage_status: pending
|
|
453
|
+
tier: flat
|
|
454
|
+
note: "slice-6 audit (2026-06-22): baseline_row_refs ARE resolved against the maturation baseline (unknown_id) and purpose_element preservation is checked, but the named SEED and LIMITATION authority clauses are NOT enforced — seed_ref_refs are not accessed and limitation_refs are only checked for non-emptiness (as part of the closure obligation), never resolved against an authority. Partial; recording deferred."
|
|
455
|
+
- validator_id: ontology-expansion-validator
|
|
456
|
+
obligation_id: prevent_in_place_seed_authority_rewrite
|
|
457
|
+
coverage_status: pending
|
|
458
|
+
tier: flat
|
|
459
|
+
note: "slice-9 audit (2026-06-22, codex PR #119 finding): the contract clause is unscoped ('no expansion rewrites seed authority in place'), but the check only rejects refs whose path.basename(ref) === 'ontology-seed.yaml' (seed_authority_rewrite_attempt). target_seed_or_ontology_refs are LLM-authored free strings with no normalization (run.ts stringArray), so an anchored ref such as 'ontology-seed.yaml#semantic_layer/object-new' or 'ontology-seed.yaml:semantic_layer' has a different basename and bypasses the check while still naming the seed authority in place — narrower than the contract. Recording deferred pending a broadened seed-target match + enforcement binding (a dedicated hardening change, out of Track A recording scope)."
|
|
460
|
+
- validator_id: ontology-expansion-validator
|
|
461
|
+
obligation_id: validate_expansion_evidence_refs_against_valid_answer_support_ledger_or_seed_authority
|
|
462
|
+
coverage_status: pending
|
|
463
|
+
tier: flat
|
|
464
|
+
note: "slice-9 audit (2026-06-22): expansion evidence_refs ARE validated (unknown_id when not carried from cited answer claims; missing_required_ref when add/refine drops carried evidence), but against a PROXY — the cited answer claims' carried supporting_evidence_refs — not against the answer-support-ledger artifact or seed authority the name names. Neither is resolved in this validator. Partial/proxy; recording deferred pending direct ledger/seed-authority resolution or name reconciliation."
|
|
465
|
+
- validator_id: ontology-seed-validator
|
|
466
|
+
obligation_id: require_mixed_purpose_frame_projection_elements_to_preserve_member_source_and_cross_material_lineage_or_limitation
|
|
467
|
+
coverage_status: pending
|
|
468
|
+
tier: flat
|
|
469
|
+
note: "slice-26 audit (2026-06-23): NOT_FOUND in validateOntologySeed — the function never reads the named member-lineage fields (member_scope_refs / member_target_material_kind / member_source_refs / cross_material_ref_refs) on purpose_adequacy_frame.required_elements, and never discriminates on a `mixed` target. The mixed-target authority (target-material-profile-validation.yaml) is a registry-declared input_authority_ref but is NOT in this validator's function signature (declared≠wired). The analogous mixed-lineage enforcement is RECORDED on source-purpose-candidates-validator (require_mixed_purpose_frame_elements_to_carry_...). Recording deferred until the fields are read here."
|
|
470
|
+
- validator_id: ontology-seed-validator
|
|
471
|
+
obligation_id: validate_dynamic_boundaries_have_unique_ids_and_close_target_refs
|
|
472
|
+
coverage_status: pending
|
|
473
|
+
tier: flat
|
|
474
|
+
note: "slice-26 audit (2026-06-23): NOT_FOUND — validateOntologySeed never reads dynamic_layer.dynamic_boundaries[]; no uniqueness, boundary_kind enum, target_ref resolution, evidence_refs, or limitation_refs check exists for boundary rows. No bindable violation. Recording deferred pending implementation of dynamic-boundary validation."
|
|
475
|
+
- validator_id: ontology-seed-validator
|
|
476
|
+
obligation_id: validate_purpose_adequacy_frame_projection_equivalence_against_selected_validated_frame
|
|
477
|
+
coverage_status: pending
|
|
478
|
+
tier: activation_gated_dormant
|
|
479
|
+
note: "slice-26 audit (2026-06-23): activation_gated_dormant — gated on source_purpose_candidate_runtime_is_implemented; its conditional input (source-purpose-candidates-validation.yaml) is not received by validateOntologySeed's signature. No active enforcement; PARK until the source-purpose-candidate runtime is wired."
|
|
480
|
+
- validator_id: ontology-seed-validator
|
|
481
|
+
obligation_id: validate_required_element_closure_status_consistent_with_seed_evidence_and_limitation_refs
|
|
482
|
+
coverage_status: pending
|
|
483
|
+
tier: flat
|
|
484
|
+
note: "slice-26 audit (2026-06-23): PARTIAL — the validator enforces a PROXY (each required_element must cite seed_ref_refs OR limitation_refs, and those refs are resolved) but never reads the named `closure_status` field, so it cannot enforce the contract's status-specific consistency (modeled ⇒ seed+evidence; limitation_backed/frontier_required ⇒ limitation refs). Scope-discriminator (closure_status) unread → PARK."
|
|
485
|
+
- validator_id: ontology-seed-validator
|
|
486
|
+
obligation_id: validate_required_element_surface_dimension_closure
|
|
487
|
+
coverage_status: pending
|
|
488
|
+
tier: flat
|
|
489
|
+
note: "slice-26 audit (2026-06-23): NOT_FOUND — the required_elements loop reads element_id/element_kind/description/seed_ref_refs/limitation_refs/evidence_refs but never the named actionability_surface_refs[] or maturity_dimension_refs[] fields, so the surface/dimension closure enum-resolution the contract (operational-ontology-seed-contract §5.2) requires is unenforced. No bindable violation. PARK."
|
|
490
|
+
- validator_id: ontology-seed-validator
|
|
491
|
+
obligation_id: validate_seed_purpose_confirmation_projection_against_purpose_confirmation_validation
|
|
492
|
+
coverage_status: pending
|
|
493
|
+
tier: activation_gated_dormant
|
|
494
|
+
note: "slice-26 audit (2026-06-23): activation_gated_dormant — gated on purpose_confirmation_runtime_is_implemented; its conditional input (purpose-confirmation-validation.yaml) is not received by validateOntologySeed's signature. No active enforcement; PARK until the purpose-confirmation runtime is wired."
|
|
495
|
+
- validator_id: ontology-seed-validator
|
|
496
|
+
obligation_id: validate_seed_purpose_projection_equivalence_against_selected_source_purpose_candidate
|
|
497
|
+
coverage_status: pending
|
|
498
|
+
tier: activation_gated_dormant
|
|
499
|
+
note: "slice-26 audit (2026-06-23): activation_gated_dormant — gated on source_purpose_candidate_runtime_is_implemented; its conditional input (source-purpose-candidates-validation.yaml) is not received by validateOntologySeed's signature. No active enforcement; PARK until the source-purpose-candidate runtime is wired."
|
|
500
|
+
# slice-28 audit (2026-06-23; codex #143 R1): validateReconstructRunManifest delegates all 27
|
|
501
|
+
# governing_snapshot obligations to validateReconstructRunGoverningSnapshot, which rebuilds the
|
|
502
|
+
# EXPECTED snapshot from live authority and enforces each recorded snapshot field via ONE stableJson
|
|
503
|
+
# equality (subject_id = governing_snapshot.<field>; stamped at the checks loop, past the early-returns).
|
|
504
|
+
# RECORDED only the 4 reference-standard / pattern-catalog ID + VERSION obligations that map 1:1 to a
|
|
505
|
+
# NON-shared per-field equality whose authority-projection embodies the named scope (selected ids ==
|
|
506
|
+
# registry ids → resolve; version/snapshot map has an entry per selected id → recorded). The 23 below
|
|
507
|
+
# stay PARKED: most share a per-field equality with 2-6 sibling obligations (no isolated breaching
|
|
508
|
+
# binding), the "allowed/supported/contains-required-fields" constraints are enforced at snapshot-build
|
|
509
|
+
# time (the recorded-vs-rebuild equality passes if the authority itself omits a field), the canonical-URI
|
|
510
|
+
# obligation names a registry canonical_uri_policy the rebuild never reads (it uses a fixed URN
|
|
511
|
+
# convention; codex #143 R1 Finding 2), and a few named quantities are not compared snapshot fields at
|
|
512
|
+
# all (NOT_FOUND).
|
|
513
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
514
|
+
obligation_id: active_contract_hashes_match_active_contract_refs
|
|
515
|
+
coverage_status: pending
|
|
516
|
+
tier: flat
|
|
517
|
+
note: "slice-28 audit (2026-06-23): PARK (shared-field). Enforced only via the single governing_snapshot.active_contracts stableJson equality (the rebuild computes each contract sha256 from its ref via sha256File), a field shared by obls active_contract_migration_status_values_are_allowed / active_contract_snapshots_contain_version_policy_required_fields / active_contract_snapshots_match_active_contract_refs_by_contract_id_and_ref — no isolated per-obligation breaching binding for the hashes-match-refs facet. DEFER to the registry input_authority_refs for the authoritative input set."
|
|
518
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
519
|
+
obligation_id: active_contract_migration_status_values_are_allowed
|
|
520
|
+
coverage_status: pending
|
|
521
|
+
tier: flat
|
|
522
|
+
note: "slice-28 audit (2026-06-23): PARK. The 'values are allowed' allow-list is enforced at snapshot-build time, not by the recorded-vs-rebuild equality (which only requires recorded.active_contracts to byte-equal the rebuild); the active_contracts field is also shared with obls 1/3/4 — not bindable in isolation."
|
|
523
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
524
|
+
obligation_id: active_contract_snapshots_contain_version_policy_required_fields
|
|
525
|
+
coverage_status: pending
|
|
526
|
+
tier: flat
|
|
527
|
+
note: "slice-28 audit (2026-06-23): PARK. 'contains version-policy required fields' is a build-time schema property; the equality passes if the rebuilt authority itself omits a field, so it does not independently enforce field presence. active_contracts field shared with obls 1/2/4."
|
|
528
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
529
|
+
obligation_id: active_contract_snapshots_match_active_contract_refs_by_contract_id_and_ref
|
|
530
|
+
coverage_status: pending
|
|
531
|
+
tier: flat
|
|
532
|
+
note: "slice-28 audit (2026-06-23): PARK (shared-field). Enforced via the governing_snapshot.active_contracts equality shared with obls 1/2/3; no isolated breaching binding for the contract_id+ref match facet."
|
|
533
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
534
|
+
obligation_id: admitted_domain_competency_snapshots_contain_version_policy_required_fields
|
|
535
|
+
coverage_status: pending
|
|
536
|
+
tier: flat
|
|
537
|
+
note: "slice-28 audit (2026-06-23): PARK. 'contains version-policy required fields' is a build-time schema property (equality passes if the authority omits a field); the governing_snapshot.admitted_domain_competency_snapshots field is also shared with split_merged_replaced_competency_ids_close_against_admitted_domain_competency_snapshot."
|
|
538
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
539
|
+
obligation_id: competency_id_migration_mappings_contain_required_policy_fields
|
|
540
|
+
coverage_status: pending
|
|
541
|
+
tier: flat
|
|
542
|
+
note: "slice-28 audit (2026-06-23): PARK. Field-isolated on governing_snapshot.competency_id_migration_mappings, but 'contains required policy fields' is an internal-schema property guaranteed at snapshot build (buildAdmittedDomainSnapshots), not by the recorded-vs-rebuild equality, which passes if the authority itself omits a field."
|
|
543
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
544
|
+
obligation_id: competency_id_migration_status_values_are_allowed
|
|
545
|
+
coverage_status: pending
|
|
546
|
+
tier: flat
|
|
547
|
+
note: "slice-28 audit (2026-06-23): PARK. The competency-id migration-status allow-list is enforced at snapshot-build time, not by the recorded-vs-rebuild equality of the competency_id_migration_mappings field (which only requires byte-equality to the rebuild)."
|
|
548
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
549
|
+
obligation_id: governed_seed_fields_close_against_selected_reference_and_pattern_refs
|
|
550
|
+
coverage_status: pending
|
|
551
|
+
tier: flat
|
|
552
|
+
note: "slice-28 audit (2026-06-23): PARK (NOT_FOUND). Governed seed fields are not a governing_snapshot compared field; validateReconstructRunGoverningSnapshot performs no seed-vs-reference/pattern closure. The closure named here is not inspected by this validator."
|
|
553
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
554
|
+
obligation_id: non_null_selected_source_profile_definition_refs_match_definition_sha256
|
|
555
|
+
coverage_status: pending
|
|
556
|
+
tier: flat
|
|
557
|
+
note: "slice-28 audit (2026-06-23): PARK (shared-field). The governing_snapshot.selected_source_profiles equality is shared by obls 9/12/23/24/25/26 (six source-profile obligations) and carries no isolated breaching binding for the definition_ref↔definition_sha256 match facet."
|
|
558
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
559
|
+
obligation_id: p2_and_p3_competencies_remain_priority_metadata_until_explicit_downstream_promotion_policy_exists
|
|
560
|
+
coverage_status: pending
|
|
561
|
+
tier: flat
|
|
562
|
+
note: "slice-28 audit (2026-06-23): PARK (AMBIGUOUS). Field-isolated on governing_snapshot.admitted_competency_priorities, but the equality only compares recorded priorities to the rebuild; it does not enforce the named non-promotion TEMPORAL policy (p2/p3 remain priority metadata until an explicit downstream promotion policy exists). No bindable violation for the policy clause."
|
|
563
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
564
|
+
obligation_id: previous_competency_ids_resolve_to_current_id_or_explicit_replacement_disposition
|
|
565
|
+
coverage_status: pending
|
|
566
|
+
tier: flat
|
|
567
|
+
note: "slice-28 audit (2026-06-23): PARK (NOT_FOUND). Previous competency ids and their current-id/replacement disposition are not a compared governing_snapshot field; the rebuild does not resolve previous→current ids, so the named resolution is not inspected here."
|
|
568
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
569
|
+
obligation_id: previous_source_profile_snapshots_validate_old_to_current_profile_mappings
|
|
570
|
+
coverage_status: pending
|
|
571
|
+
tier: flat
|
|
572
|
+
note: "slice-28 audit (2026-06-23): PARK (shared-field). The old→current profile-mapping validation is not a distinct check; the governing_snapshot.selected_source_profiles equality (shared with obls 9/23/24/25/26) is the only enforcement, with no isolated binding."
|
|
573
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
574
|
+
obligation_id: required_admitted_competency_ids_derive_all_p1_from_admitted_domain_competency_snapshot
|
|
575
|
+
coverage_status: pending
|
|
576
|
+
tier: flat
|
|
577
|
+
note: "slice-28 audit (2026-06-23): PARK. The p1-derivation is a build property (the rebuild flattens required_admitted_competency_ids from the snapshots); the governing_snapshot.required_admitted_competency_ids equality only compares the resulting id set and is shared with required_admitted_competency_ids_match_admitted_domain_competency_snapshot — no isolated binding for the derive-all-p1 facet."
|
|
578
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
579
|
+
obligation_id: required_admitted_competency_ids_match_admitted_domain_competency_snapshot
|
|
580
|
+
coverage_status: pending
|
|
581
|
+
tier: flat
|
|
582
|
+
note: "slice-28 audit (2026-06-23): PARK (shared-field). Enforced via the governing_snapshot.required_admitted_competency_ids equality shared with required_admitted_competency_ids_derive_all_p1_from_admitted_domain_competency_snapshot; no isolated per-obligation breaching binding."
|
|
583
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
584
|
+
obligation_id: selected_pattern_catalog_canonical_uris_satisfy_reference_pattern_catalog_registry_policy
|
|
585
|
+
coverage_status: pending
|
|
586
|
+
tier: flat
|
|
587
|
+
note: "slice-28 audit (2026-06-23, codex #143 R1 P2): PARK (name-broader-than-code, policy not read). The field-isolated governing_snapshot.selected_pattern_catalog_canonical_uris equality compares the recorded URIs against a rebuild that derives each URI from a FIXED URN convention of the pattern_catalog_ref_id (selectedPatternCatalogCanonicalUri) and never reads the registry's declared canonical_uri_policy. The registry policy (reconstruct-contract-registry.yaml: canonical_uri_policy=selected_run_manifest_value_required + canonical_uri_validation_rule) explicitly says the registry does NOT compare against a symbolic URI literal and requires the run-manifest-recorded value bound to ref_id+version_or_snapshot_id — the opposite of what the code enforces. So 'satisfy registry policy' is not enforced here; PARK until a policy-reading check exists."
|
|
588
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
589
|
+
obligation_id: selected_reference_and_pattern_migration_status_is_supported
|
|
590
|
+
coverage_status: pending
|
|
591
|
+
tier: flat
|
|
592
|
+
note: "slice-28 audit (2026-06-23): PARK (NOT_FOUND). Reference/pattern migration status is not a distinct compared field — governing_snapshot.migration_status_values holds only source_profile + contract value sets — and 'is supported' is a build-time policy, not enforced by the recorded-vs-rebuild equality."
|
|
593
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
594
|
+
obligation_id: selected_registry_hash_matches_reconstruct_contract_registry
|
|
595
|
+
coverage_status: pending
|
|
596
|
+
tier: flat
|
|
597
|
+
note: "slice-28 audit (2026-06-23): PARK (AMBIGUOUS, mode-dependent). The dedicated registry_sha256 early-return (governing-snapshot.ts ~836) is not isolatable: a wrong-hash mutation is also caught by the governing_snapshot.registry field equality, and the breach overlaps selected_registry_snapshot_contains_registry_ref_and_hash; in historical_replay mode the hash-match falls back to a presence-only shape check. No single isolated breaching binding."
|
|
598
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
599
|
+
obligation_id: selected_registry_snapshot_contains_registry_ref_and_hash
|
|
600
|
+
coverage_status: pending
|
|
601
|
+
tier: flat
|
|
602
|
+
note: "slice-28 audit (2026-06-23): PARK. In live mode the registry ref+hash presence is enforced only via the governing_snapshot.registry field equality, which overlaps the hash-match early return (obl selected_registry_hash_matches_reconstruct_contract_registry); the dedicated presence shape check runs only in the historical_replay fallback. Not an isolatable live check."
|
|
603
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
604
|
+
obligation_id: selected_source_profile_migration_fields_are_recorded
|
|
605
|
+
coverage_status: pending
|
|
606
|
+
tier: flat
|
|
607
|
+
note: "slice-28 audit (2026-06-23): PARK. 'migration fields are recorded' is a build-time/presence property; enforcement is the governing_snapshot.selected_source_profiles equality shared with obls 9/12/24/25/26 — no isolated binding."
|
|
608
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
609
|
+
obligation_id: selected_source_profile_snapshots_contain_version_policy_required_fields
|
|
610
|
+
coverage_status: pending
|
|
611
|
+
tier: flat
|
|
612
|
+
note: "slice-28 audit (2026-06-23): PARK. 'contains version-policy required fields' is a build-time schema property (equality passes if the authority omits a field); governing_snapshot.selected_source_profiles field shared with obls 9/12/23/25/26."
|
|
613
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
614
|
+
obligation_id: selected_source_profile_snapshots_match_source_profile_records_by_profile_id_and_target_material_kind
|
|
615
|
+
coverage_status: pending
|
|
616
|
+
tier: flat
|
|
617
|
+
note: "slice-28 audit (2026-06-23): PARK (shared-field). Enforced via the governing_snapshot.selected_source_profiles equality shared with obls 9/12/23/24/26; no isolated breaching binding for the profile_id+target_material_kind match facet."
|
|
618
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
619
|
+
obligation_id: source_profile_migration_refs_resolve_to_source_profile_records_or_prior_snapshots
|
|
620
|
+
coverage_status: pending
|
|
621
|
+
tier: flat
|
|
622
|
+
note: "slice-28 audit (2026-06-23): PARK (shared-field). The migration-ref resolution is not a distinct check; the governing_snapshot.selected_source_profiles equality (shared with obls 9/12/23/24/25) is the only enforcement, with no isolated binding."
|
|
623
|
+
- validator_id: pre-handoff-run-manifest-validator
|
|
624
|
+
obligation_id: split_merged_replaced_competency_ids_close_against_admitted_domain_competency_snapshot
|
|
625
|
+
coverage_status: pending
|
|
626
|
+
tier: flat
|
|
627
|
+
note: "slice-28 audit (2026-06-23): PARK (shared-field). Closure of split/merged/replaced competency ids is not a distinct check; the governing_snapshot.admitted_domain_competency_snapshots equality (shared with admitted_domain_competency_snapshots_contain_version_policy_required_fields) is the only enforcement, with no isolated binding."
|
|
628
|
+
- validator_id: purpose-confirmation-validator
|
|
629
|
+
obligation_id: require_revised_confirmation_to_preserve_source_conflict_or_trigger_purpose_discovery_rerun
|
|
630
|
+
coverage_status: pending
|
|
631
|
+
tier: flat
|
|
632
|
+
note: "slice-11 audit (2026-06-22): AMBIGUOUS — two-armed name, only one arm enforced. The rerun arm IS enforced (revised_pending_evidence_check → seed_readiness_effect must_rerun_purpose_discovery + conflicting_state, purpose-authority-validation.ts), but the 'preserve source conflict' arm is never checked: the validator never reads source_conflict_policy (or the confirmation's revised_statement vs source conflict) — only the rerun side-effect of revised_pending_evidence_check is realized. Recording deferred pending a source-conflict-preservation check."
|
|
633
|
+
- validator_id: purpose-confirmation-validator
|
|
634
|
+
obligation_id: validate_confirmation_status_against_source_purpose_candidate_status_and_validation_confirmation_required
|
|
635
|
+
coverage_status: pending
|
|
636
|
+
tier: flat
|
|
637
|
+
note: "slice-11 audit (2026-06-22): AMBIGUOUS — name broader than code. The validator reads sourceValidation.validation_status (conflicting_state when not valid) and sourceValidation.confirmation_required (the gate branch), but never the candidate's own purpose_source_status (explicit_source_declared/convergent_inferred/limitation_backed/unresolved) the name references. Per the contract confirmation_required is the only authoritative gate input, so the candidate-status arm is intentionally not read here — name names a quantity this validator does not inspect. Recording deferred pending name reconciliation (the confirmation_required arm is already recorded via require_confirmation_for_inferred_or_limitation_backed_purpose)."
|
|
638
|
+
- validator_id: reconstruct-run-control-validator
|
|
639
|
+
obligation_id: preserve_post_write_hash_observation_without_claiming_atomic_commit_when_writer_did_not_prove_atomic_rename
|
|
640
|
+
coverage_status: pending
|
|
641
|
+
tier: flat
|
|
642
|
+
note: "slice-10 audit (2026-06-22): NOT_FOUND in validateReconstructRunControl. The contract (design.md §run-control 'committed through an atomic write method or truthfully marked as observed_file_hash') governs commit_method, but the validator's write-transaction block (run-control-validation.ts) never reads commit_method — it checks only artifact_ref/owner_attempt_id presence and committed→committed_hash. Distinguishing atomic_rename from observed_file_hash and preventing an observed-hash transaction from claiming atomic commit is the writer's truthful-marking responsibility (recordReconstructRunControlTransactions), not validated. Recording deferred pending a validator-side commit_method check."
|
|
643
|
+
- validator_id: reconstruct-run-control-validator
|
|
644
|
+
obligation_id: reject_conflicting_request_fingerprints_before_semantic_artifacts_are_consumed
|
|
645
|
+
coverage_status: pending
|
|
646
|
+
tier: flat
|
|
647
|
+
note: "slice-10 audit (2026-06-22): AMBIGUOUS — name broader than the validator's check. The validator rejects request rows already MARKED duplicate_conflict/rejected_conflict (conflicting_request) and is the stage-0 gate consumed before semantic artifacts, but it never compares request_fingerprint values; fingerprint conflict DETECTION lives in the writer (initializeReconstructRunControl). The validator trusts the recorded request_status enum. Recording deferred pending a validator-side fingerprint comparison or name reconciliation."
|
|
648
|
+
- validator_id: reconstruct-run-control-validator
|
|
649
|
+
obligation_id: validate_current_attempt_and_session_root_lock_ownership
|
|
650
|
+
coverage_status: pending
|
|
651
|
+
tier: flat
|
|
652
|
+
note: "slice-10 audit (2026-06-22): AMBIGUOUS — name broader than code. The validator checks presence of an active attempt (active_attempt_missing), presence of a session_root lock (session_lock_missing), and rejects recorded conflicting locks (conflicting_lock), but it never cross-checks the lock row's owner_attempt_id against the current attempt's attempt_id. The named 'ownership' linkage is unverified — concurrency conflicts are trusted via the recorded lock_status enum. Recording deferred pending an owner_attempt_id linkage check."
|
|
653
|
+
- validator_id: reconstruct-run-control-validator
|
|
654
|
+
obligation_id: validate_session_root_request_fingerprint_target_signature_runtime_version_and_idempotency_are_replayable
|
|
655
|
+
coverage_status: pending
|
|
656
|
+
tier: flat
|
|
657
|
+
note: "slice-10 audit (2026-06-22): AMBIGUOUS — compound obligation, only 1 of 5 named quantities validated. Of session_root, request_fingerprint, target signature, runtime version, and idempotency key, the validator validates only session_root (session_root_missing presence + expected-root match); request_fingerprint, target_signature_ref, runtime_version, and idempotency_key_hash are never inspected, and validateReconstructRunControl's signature accepts no expected values for them. Recording deferred pending validation of the remaining four replayable quantities."
|
|
658
|
+
- validator_id: registry-verification-evidence-validator
|
|
659
|
+
obligation_id: validate_registry_snapshot_hash_matches_current_registry_file
|
|
660
|
+
coverage_status: pending
|
|
661
|
+
tier: flat
|
|
662
|
+
note: "slice-18 audit (2026-06-23): AMBIGUOUS — the hash-matches-current-file check (registry_hash_mismatch) is gated on the caller-supplied optional expectedRegistrySha256. validateRegistryVerificationEvidence never derives the on-disk registry hash itself, so it carries no internal 'matches current file' guarantee; the match is enforced only when the caller supplies sha256File(registryPath) (writeRegistryVerificationEvidenceValidationArtifact does so at the production call site, but the validator function does not). Recording deferred pending an internal hash-vs-file derivation. The validator's other 7 obligations are recorded (structural, unconditional). DEFER to the registry record's input_authority_refs for the authoritative input set."
|
|
663
|
+
- validator_id: seed-authoring-readiness-validator
|
|
664
|
+
obligation_id: validate_actor_action_state_scout_rows_do_not_replace_purpose_required_elements
|
|
665
|
+
coverage_status: pending
|
|
666
|
+
tier: flat
|
|
667
|
+
note: "deferred-7 slice-4 audit (2026-06-24): PARK (presence-only + material-source unchecked). The required boundary note 'Actor-action-state scout rows are prioritization evidence, not selected-purpose required elements.' is enforced presence-only (semantic_authority_boundary_missing). closure_row_dangling_required_element rejects closure rows whose required_element_ref is not a selected-purpose element, but never verifies a row's material is purpose-derived rather than scout-derived — a scout-sourced row labeled with a valid required_element_ref passes. 'do not replace' is not fully enforced."
|
|
668
|
+
- validator_id: seed-authoring-readiness-validator
|
|
669
|
+
obligation_id: validate_frontier_required_preserves_exploration_budget_state_without_declaring_source_insufficiency
|
|
670
|
+
coverage_status: pending
|
|
671
|
+
tier: flat
|
|
672
|
+
note: "deferred-7 slice-4 audit (2026-06-24): PARK (compound, only one half enforced). validateSeedAuthoringReadiness recompute-compares source_sufficiency_state (source_sufficiency_state_mismatch), so the 'without declaring source insufficiency' half is enforced; but exploration_budget_state is COPIED from the artifact into the validation output and never compared to the recomputed expected, so the 'preserves exploration_budget_state' half is unenforced. Recording deferred pending an exploration_budget_state comparison."
|
|
673
|
+
- validator_id: seed-authoring-readiness-validator
|
|
674
|
+
obligation_id: validate_only_seed_ready_or_limited_seed_possible_allows_seed_authoring
|
|
675
|
+
coverage_status: pending
|
|
676
|
+
tier: flat
|
|
677
|
+
note: "deferred-7 slice-4 audit (2026-06-24): PARK (DELEGATED). The allow/deny gate is enforced by the sibling assertSeedAuthoringReadinessAllowsSeed (throws unless readiness_classification is seed_ready or limited_seed_possible), NOT by validateSeedAuthoringReadiness — which returns validation_status=valid for frontier_required/blocked classifications (see test 'projects frontier_required without making validation invalid'). asserted_obligation_ids telemetry is on the validator's return, so the delegated gate cannot be recorded here."
|
|
678
|
+
- validator_id: seed-authoring-readiness-validator
|
|
679
|
+
obligation_id: validate_ontology_domain_required_category_rows_only_when_selected_purpose_closure_rows_resolve_to_domain_categories
|
|
680
|
+
coverage_status: pending
|
|
681
|
+
tier: flat
|
|
682
|
+
note: "deferred-7 slice-4 audit (2026-06-24): PARK (asymmetric 'only when'). The validator checks only the expected→actual direction (every recomputed ontology domain category id must be present, ontology_domain_category_missing). It never loops actual→expected to reject spurious/orphan category rows, so domain category rows present when the selected-purpose closure does not resolve to them are not rejected — the 'only when ... resolve to domain categories' direction is unenforced."
|
|
683
|
+
- validator_id: seed-authoring-readiness-validator
|
|
684
|
+
obligation_id: validate_readiness_consumes_pre_seed_source_scout_validation_snapshot
|
|
685
|
+
coverage_status: pending
|
|
686
|
+
tier: flat
|
|
687
|
+
note: "deferred-7 slice-4 audit (2026-06-24, codex #150 R1 P2): PARK (gated-on-optional-arg). The three source_scout_pre_seed_identity_mismatch checks (validation-ref basename + scout_pack_ref basename + concrete pre-seed sibling) are all conditional on args.sourceScoutPackValidationRef / args.sourceScoutPackValidation being present; an absent/null snapshot is handled by the validation-gap mechanism (validationGapSubjects → blocked_validation_gap), not the identity check. An unconditional top-of-function stamp would therefore over-claim pre-seed snapshot consumption for gap-only executions that never consume or verify a snapshot. Recording deferred pending a stamp gated on an actual snapshot-consumption check."
|
|
688
|
+
- validator_id: seed-authoring-readiness-validator
|
|
689
|
+
obligation_id: validate_readiness_projection_uses_validated_input_refs_only
|
|
690
|
+
coverage_status: pending
|
|
691
|
+
tier: flat
|
|
692
|
+
note: "deferred-7 slice-4 audit (2026-06-24): PARK (field never compared + shared mechanism). The closure-row validated_upstream_refs / llm_authority_refs projection fields are populated by the build but never compared in validateSeedAuthoringReadiness (only closure_state and material_admission_row_ref are). The only enforcement that gates on input validation status is the validation-gap mechanism, whose binding is readiness_classification_mismatch — already recorded for validate_blocked_validation_gap_is_projection_not_semantic_decision (no distinct binding for 'uses validated input refs only')."
|
|
693
|
+
- validator_id: seed-authoring-readiness-validator
|
|
694
|
+
obligation_id: validate_selected_purpose_required_elements_have_closure_rows
|
|
695
|
+
coverage_status: pending
|
|
696
|
+
tier: flat
|
|
697
|
+
note: "deferred-7 slice-4 audit (2026-06-24, codex #150 R1 P2): PARK (duplicate-element_id Map collapse). validateSeedAuthoringReadiness keys both expected and actual closure rows by required_element_ref in a Map; if a selected purpose frame contains two required elements with the same element_id (source-purpose validation enforces non-empty element_id but does NOT reject duplicates), the duplicates collapse and a single closure row satisfies both, so closure_row_missing is never raised for the omitted duplicate. 'every selected-purpose required element has a closure row' is not fully enforced. Recording deferred pending duplicate-element_id rejection or per-occurrence coverage."
|
|
698
|
+
- validator_id: source-observation-delta-validator
|
|
699
|
+
obligation_id: validate_delta_frontier_kind_is_supported
|
|
700
|
+
coverage_status: pending
|
|
701
|
+
tier: flat
|
|
702
|
+
note: "slice-5 audit (2026-06-22): normalizeFrontierForDelta validates kind-vs-artifact CONSISTENCY (frontier_kind_mismatch when the frontier artifact does not match the declared source_frontier / maturation_closure_frontier kind), but does NOT validate that the frontier_kind value itself is in a supported enumeration — an unsupported kind branches to the maturation_closure path without an explicit unsupported-kind violation. Recording deferred pending an explicit supported-kind check or name reconciliation."
|
|
703
|
+
- validator_id: source-observation-lineage-index-validator
|
|
704
|
+
obligation_id: require_each_lineage_row_delta_validation_to_be_valid
|
|
705
|
+
coverage_status: pending
|
|
706
|
+
tier: flat
|
|
707
|
+
note: "deferred-7 slice-3 audit (2026-06-23, codex #149 R1 P2): PARK (null-read false-pass). A delta-validation ref pointing at an EXISTING EMPTY/null YAML makes readYamlDocument return null WITHOUT throwing, so the catch (lineage_delta_validation_missing, ~728-734) never fires AND the validity check (~769: `if (deltaValidation && status!=='valid')`) is skipped — the row passes valid with a non-valid/absent delta validation. Not fully enforced until non-object reads are rejected."
|
|
708
|
+
- validator_id: source-observation-lineage-index-validator
|
|
709
|
+
obligation_id: require_each_lineage_row_reentry_validation_to_be_valid
|
|
710
|
+
coverage_status: pending
|
|
711
|
+
tier: flat
|
|
712
|
+
note: "deferred-7 slice-3 audit (2026-06-23, codex #149 R1 P2): PARK (null-read false-pass). Same as the delta-validation obligation: an existing empty/null re-entry-validation YAML returns null without throwing, so lineage_reentry_validation_missing (~742-747) never fires and the `if (reentryValidation && status!=='valid')` check (~817) is skipped. Not fully enforced until non-object reads are rejected."
|
|
713
|
+
- validator_id: source-observation-lineage-index-validator
|
|
714
|
+
obligation_id: validate_each_lineage_added_observation_exists_in_source_observations
|
|
715
|
+
coverage_status: pending
|
|
716
|
+
tier: flat
|
|
717
|
+
note: "deferred-7 slice-3 audit (2026-06-23, codex #149 R1 P2): PARK (caller-supplied authority). The check (~884-890 → lineage_observation_missing) verifies each added id is present in the PASSED sourceObservations object, but never binds that object/ref or session to the delta/re-entry chain's source_observations_ref. A wrong or stale source-observations file containing the same ids therefore passes and is trusted downstream as the validated observations authority. Not fully enforced until the observations authority is bound to the chain."
|
|
718
|
+
- validator_id: source-observation-lineage-index-validator
|
|
719
|
+
obligation_id: validate_each_lineage_added_observation_was_reentered_by_its_validation
|
|
720
|
+
coverage_status: pending
|
|
721
|
+
tier: flat
|
|
722
|
+
note: "deferred-7 slice-3 audit (2026-06-23): PARK (shared violation code). The reentered-membership check (~891-897: reentryValidation && !reentered.has(observationId)) emits the SAME lineage_added_observation_mismatch code as validate_lineage_added_observation_ids_match_delta_added_observation_ids (set-equality, ~862-867). They fire from distinct sites but share one code, so this obligation has no distinct breaching binding (slice-21). It is also subject to the null-read false-pass (an empty re-entry-validation file skips the check). Record deferred pending a dedicated reentered-mismatch code and non-object-read rejection."
|
|
723
|
+
- validator_id: source-observation-lineage-index-validator
|
|
724
|
+
obligation_id: validate_each_lineage_row_delta_ref_is_readable_and_session_matching
|
|
725
|
+
coverage_status: pending
|
|
726
|
+
tier: flat
|
|
727
|
+
note: "deferred-7 slice-3 audit (2026-06-23, codex #149 R1 P2): PARK (null-read false-pass). 'readable' is not enforced: a delta ref pointing at an existing empty/null YAML returns null without throwing, so lineage_delta_missing (~716-720) never fires and the session/round/frontier matches (~748-767, all gated on `if (delta && ...)`) are skipped — an empty-but-present delta file passes. Not fully enforced until non-object reads are rejected."
|
|
728
|
+
- validator_id: source-observation-lineage-index-validator
|
|
729
|
+
obligation_id: validate_lineage_added_observation_ids_match_delta_added_observation_ids
|
|
730
|
+
coverage_status: pending
|
|
731
|
+
tier: flat
|
|
732
|
+
note: "deferred-7 slice-3 audit (2026-06-23, codex #149 R1 P2): PARK (null-read false-pass). The set-equality match (~862-867 → lineage_added_observation_mismatch) is gated on `if (delta)`; an existing empty/null delta YAML returns null without throwing, so the match is skipped and arbitrary added_observation_ids pass. Not fully enforced until non-object reads are rejected."
|
|
733
|
+
- validator_id: source-purpose-candidates-validator
|
|
734
|
+
obligation_id: derive_confirmation_required_from_selected_purpose_source_status
|
|
735
|
+
coverage_status: pending
|
|
736
|
+
tier: flat
|
|
737
|
+
note: "slice-24 audit (2026-06-23): PROJECTION-ONLY. The validator derives confirmation_required (~420-423: selected.purpose_source_status != explicit_source_declared) and emits it in the return object (~434); there is no violation and no breaching input that trips one, so there is no non-vacuous enforcement binding to record. Contract design.md:405 frames it as a derived runtime predicate field, not a check. Recording deferred pending a downstream consumer-validator that gates on it (cf. purpose-confirmation slice-11, which records consuming confirmation_required)."
|
|
738
|
+
- validator_id: source-purpose-candidates-validator
|
|
739
|
+
obligation_id: expose_selected_purpose_candidate_id_and_frame_id_for_seed_projection_equivalence
|
|
740
|
+
coverage_status: pending
|
|
741
|
+
tier: flat
|
|
742
|
+
note: "slice-24 audit (2026-06-23): PROJECTION-ONLY. selected_purpose_candidate_id and selected_purpose_frame_id are computed and emitted in the return object (~420,432-433) with no violation; nothing a breaching input trips. Contract design.md:408 asks that they be 'explicit so seed validation can prove projection equivalence' — the equivalence check belongs to seed validation, not here. Recording deferred to the seed-validation consumer."
|
|
743
|
+
- validator_id: source-purpose-candidates-validator
|
|
744
|
+
obligation_id: require_exactly_one_primary_purpose_candidate_when_selected
|
|
745
|
+
coverage_status: pending
|
|
746
|
+
tier: flat
|
|
747
|
+
note: "slice-24 audit (2026-06-23): superset-blind-to-discriminator (slice-20 pattern). The code enforces exactly-one-primary UNCONDITIONALLY (~173-186: missing_primary_purpose if 0, multiple_primary_purpose if >1), but the contract (design.md:390) scopes the rule to 'exactly one primary candidate WHEN THE PURPOSE IS SELECTED'. The validator never reads the selected/not-selected discriminator and has no dedicated when-selected violation code, so it validates a broader unconditional rule rather than the obligation's named scope. Recording deferred pending a selected-scoped enforcer (or contract re-scoping to unconditional)."
|
|
748
|
+
- validator_id: source-purpose-candidates-validator
|
|
749
|
+
obligation_id: require_purpose_candidate_status_field_to_be_purpose_source_status
|
|
750
|
+
coverage_status: pending
|
|
751
|
+
tier: flat
|
|
752
|
+
note: "slice-24 audit (2026-06-23): PARTIAL. The only enforcement is the artifact-level alias-field rejection (~153-160, alias_field_present: rejects source_purpose_status/inference_status keys). There is no per-candidate check that candidate.purpose_source_status is a valid enum value (PURPOSE_SOURCE_STATUSES), which the obligation name ('candidate status field to be purpose_source_status') implies. Recording deferred pending per-candidate purpose_source_status enum validation."
|
|
753
|
+
- validator_id: source-safety-ledger-validator
|
|
754
|
+
obligation_id: preserve_prompt_context_evidence_support_public_output_replay_and_material_claim_consumption_boundaries
|
|
755
|
+
coverage_status: pending
|
|
756
|
+
tier: flat
|
|
757
|
+
note: "deferred-7 slice-1 audit (2026-06-23): PARK (overlapping). The only enforcement is the per-row intended_consumption enum (invalid_enum, ~520-526) plus the per-observation-per-consumption required-row presence — and that presence check is itself a weak proxy (see validate_every_observation...). There is no independent check that one consumption row may not substitute for another's authority, so this obligation cannot bind a non-overlapping breaching input. Record deferred pending a dedicated no-substitution enforcer."
|
|
758
|
+
- validator_id: source-safety-ledger-validator
|
|
759
|
+
obligation_id: validate_every_observation_has_source_safety_rows_for_each_intended_consumption
|
|
760
|
+
coverage_status: pending
|
|
761
|
+
tier: flat
|
|
762
|
+
note: "deferred-7 slice-1 audit (2026-06-23, codex #147 P1): PARK (weak proxy). The required-row check (requiredSafetyRowIds per observation × INTENDED_CONSUMPTIONS, ~414-420/541-549 → source_observation_safety_row_missing) only proves each source_safety:<observation_id>:<intended_consumption> ID STRING is present; it never binds that ID's consumption suffix to the row's visibility_derivation.intended_consumption — the field deriveSourceSafetyVisibilityTier actually consumes. So with every required ID present, a public_output/material_claim-ID row can carry prompt_context as its derivation consumption and a derived consumption_allowed tier, pass this validator, and mislead downstream consumers that look up the tier by row ID. Record deferred pending an ID-suffix to intended_consumption binding."
|
|
763
|
+
- validator_id: source-scout-pack-post-maturation-validator
|
|
764
|
+
obligation_id: validate_post_maturation_scout_snapshot_is_immutable_audit_authority
|
|
765
|
+
coverage_status: pending
|
|
766
|
+
tier: flat
|
|
767
|
+
note: "deferred-7 slice-5 audit (2026-06-24): PARK (immutability/audit-authority not enforced). The shared validateSourceScoutPack checks INPUT-artifact snapshot hashes (source-observations/safety match current files = freshness) but never pins the snapshot's own content hash nor checks any audit-authority state, so a mutated post-maturation snapshot re-hashed to current inputs passes."
|
|
768
|
+
- validator_id: source-scout-pack-post-maturation-validator
|
|
769
|
+
obligation_id: validate_prompt_visible_rows_have_source_safety_validation_refs
|
|
770
|
+
coverage_status: pending
|
|
771
|
+
tier: flat
|
|
772
|
+
note: "deferred-7 slice-5 audit (2026-06-24): PARK (named per-row field unread). The named per-row field source_safety_ledger_validation_ref is built but never read by validateSourceScoutPack; it checks source_safety_row_id (ledger row) + global validation_status + consumption_allowed tier instead. A prompt-visible row with a valid source_safety_row_id but null/wrong source_safety_ledger_validation_ref passes → the named validation-ref field is unenforced."
|
|
773
|
+
- validator_id: source-scout-pack-post-maturation-validator
|
|
774
|
+
obligation_id: validate_snapshot_lineage_validation_ref_and_hash_match_current_lineage_authority
|
|
775
|
+
coverage_status: pending
|
|
776
|
+
tier: flat
|
|
777
|
+
note: "deferred-7 slice-5 audit (2026-06-24): PARK (slice-3 null-read + caller-authority). source_observation_lineage_index_validation_ref/hash match is checked, but sha256File(null)=null so a null lineage ref + null pack snapshot hash passes without a violation, and the 'current lineage authority' is the caller-supplied ref (not derived from the chain). Lineage validation is a required pre/post input, so the null-pass is a false-pass."
|
|
778
|
+
- validator_id: source-scout-pack-post-maturation-validator
|
|
779
|
+
obligation_id: validate_snapshot_scope_derives_from_target_material_profile_validation
|
|
780
|
+
coverage_status: pending
|
|
781
|
+
tier: flat
|
|
782
|
+
note: "deferred-7 slice-5 audit (2026-06-24): PARK (not derived from validation). scout_scope is copied from the pack; validateSourceScoutPack only checks internal consistency (unsupported_scope_overclaimed: scope_state vs the scout's own target_ref_count/material_kind) and the validation's validation_status=valid. It never recomputes/derives scout_scope from the target-material-profile-validation content (scoutScopeState() exists but is unused in the validator)."
|
|
783
|
+
- validator_id: source-scout-pack-pre-seed-validator
|
|
784
|
+
obligation_id: validate_pre_seed_scout_snapshot_is_immutable_consumed_authority
|
|
785
|
+
coverage_status: pending
|
|
786
|
+
tier: flat
|
|
787
|
+
note: "deferred-7 slice-5 audit (2026-06-24): PARK (immutability/consumed-authority not enforced). The shared validateSourceScoutPack checks INPUT-artifact snapshot hashes (source-observations/safety match current files = freshness) but never pins the snapshot's own content hash nor checks any consumed-authority state, so a mutated pre-seed snapshot re-hashed to current inputs passes."
|
|
788
|
+
- validator_id: source-scout-pack-pre-seed-validator
|
|
789
|
+
obligation_id: validate_prompt_visible_rows_have_source_safety_validation_refs
|
|
790
|
+
coverage_status: pending
|
|
791
|
+
tier: flat
|
|
792
|
+
note: "deferred-7 slice-5 audit (2026-06-24): PARK (named per-row field unread). The named per-row field source_safety_ledger_validation_ref is built but never read by validateSourceScoutPack; it checks source_safety_row_id (ledger row) + global validation_status + consumption_allowed tier instead. A prompt-visible row with a valid source_safety_row_id but null/wrong source_safety_ledger_validation_ref passes → the named validation-ref field is unenforced."
|
|
793
|
+
- validator_id: source-scout-pack-pre-seed-validator
|
|
794
|
+
obligation_id: validate_snapshot_lineage_validation_ref_and_hash_match_current_lineage_authority
|
|
795
|
+
coverage_status: pending
|
|
796
|
+
tier: flat
|
|
797
|
+
note: "deferred-7 slice-5 audit (2026-06-24): PARK (slice-3 null-read + caller-authority). source_observation_lineage_index_validation_ref/hash match is checked, but sha256File(null)=null so a null lineage ref + null pack snapshot hash passes without a violation, and the 'current lineage authority' is the caller-supplied ref (not derived from the chain). Lineage validation is a required pre/post input, so the null-pass is a false-pass."
|
|
798
|
+
- validator_id: source-scout-pack-pre-seed-validator
|
|
799
|
+
obligation_id: validate_snapshot_scope_derives_from_target_material_profile_validation
|
|
800
|
+
coverage_status: pending
|
|
801
|
+
tier: flat
|
|
802
|
+
note: "deferred-7 slice-5 audit (2026-06-24): PARK (not derived from validation). scout_scope is copied from the pack; validateSourceScoutPack only checks internal consistency (unsupported_scope_overclaimed) and the validation's validation_status=valid. It never recomputes/derives scout_scope from the target-material-profile-validation content (scoutScopeState() exists but is unused in the validator)."
|
|
803
|
+
- validator_id: source-scout-pack-validator
|
|
804
|
+
obligation_id: validate_group_and_coverage_refs_resolve
|
|
805
|
+
coverage_status: pending
|
|
806
|
+
tier: flat
|
|
807
|
+
note: "deferred-7 slice-5 audit (2026-06-24): PARK (compound, 'group' half has no enforcement surface). Only coverage_slot→signal_row resolution (coverage_slot_signal_missing) is checked; there is no 'group' structure in the scout-pack artifact (the word appears nowhere in the validator), so the 'group ... refs resolve' half is unenforced."
|
|
808
|
+
- validator_id: source-scout-pack-validator
|
|
809
|
+
obligation_id: validate_prompt_visible_rows_have_source_safety_validation_refs
|
|
810
|
+
coverage_status: pending
|
|
811
|
+
tier: flat
|
|
812
|
+
note: "deferred-7 slice-5 audit (2026-06-24): PARK (named per-row field unread). The named per-row field source_safety_ledger_validation_ref is built but never read by validateSourceScoutPack; it checks source_safety_row_id (ledger row) + global validation_status + consumption_allowed tier instead. A prompt-visible row with a valid source_safety_row_id but null/wrong source_safety_ledger_validation_ref passes → the named validation-ref field is unenforced."
|
|
813
|
+
- validator_id: source-scout-pack-validator
|
|
814
|
+
obligation_id: validate_scout_pack_is_profile_local_and_contains_no_selected_purpose_required_element_refs
|
|
815
|
+
coverage_status: pending
|
|
816
|
+
tier: flat
|
|
817
|
+
note: "deferred-7 slice-5 audit (2026-06-24): PARK (compound, 'profile-local' half unchecked + substring proxy). validateNoSelectedPurposeLeak is a JSON.stringify().includes('purpose_required_element_ref') substring search (no-purpose-leak half, fragile to field-name variants); the 'profile-local' half is never checked by the validator."
|
|
818
|
+
- validator_id: source-scout-pack-validator
|
|
819
|
+
obligation_id: validate_scout_scope_derives_from_target_material_profile_validation
|
|
820
|
+
coverage_status: pending
|
|
821
|
+
tier: flat
|
|
822
|
+
note: "deferred-7 slice-5 audit (2026-06-24): PARK (not derived from validation). scout_scope is copied from the pack; validateSourceScoutPack only checks internal consistency (unsupported_scope_overclaimed) and the validation's validation_status=valid. It never recomputes/derives scout_scope from the target-material-profile-validation content (scoutScopeState() exists but is unused in the validator)."
|
|
823
|
+
- validator_id: target-material-profile-validator
|
|
824
|
+
obligation_id: mixed_targets_preserve_member_to_aggregate_purpose_requirement_mapping_or_limitation
|
|
825
|
+
coverage_status: pending
|
|
826
|
+
tier: flat
|
|
827
|
+
note: "deferred-7 slice-2 audit (2026-06-23): PARK (NOT_FOUND). The mixed branch (~154-178) only checks that the selected profiles include the registry mixed row and one per candidate kind (mixed_candidate_profile_missing); there is no member→aggregate purpose-requirement mapping or limitation check, and ReconstructSelectedSourceProfileRef carries no purpose_requirement / purpose_mapping / limitation_refs field. The named mapping is not inspected here."
|
|
828
|
+
- validator_id: target-material-profile-validator
|
|
829
|
+
obligation_id: mixed_targets_preserve_per_member_selected_profile_id_contract_status_runtime_implementation_status_and_support_state
|
|
830
|
+
coverage_status: pending
|
|
831
|
+
tier: flat
|
|
832
|
+
note: "deferred-7 slice-2 audit (2026-06-23): PARK (PARTIAL, scope + missing facet). contract_status and runtime_implementation_status ARE match-checked against the registry (~241-246 → selected_profile_registry_mismatch), but that check runs for ALL selected profiles, not the named mixed_targets/per_member scope (the validator never gates this on target_material_kind=='mixed'), and the named support_state facet is not a field on ReconstructSelectedSourceProfileRef / ReconstructSourceProfileRecord at all. The mixed-scoped per-member preservation is not the enforced quantity (slice-20 scope-discriminator pattern)."
|
|
833
|
+
- validator_id: target-material-profile-validator
|
|
834
|
+
obligation_id: mixed_targets_preserve_per_member_source_profile_snapshot_ref_definition_hash_and_source_refs
|
|
835
|
+
coverage_status: pending
|
|
836
|
+
tier: flat
|
|
837
|
+
note: "deferred-7 slice-2 audit (2026-06-23): PARK (PARTIAL, scope + missing facet). definition_sha256 and profile_ref ARE match-checked against the registry (~241-246), but unscoped (all selected profiles, not the named mixed scope), and the named source_refs facet is not a field on the selected-profile snapshot (scan_targets exists but is neither source_refs nor a required/matched field). The mixed-scoped per-member preservation is not the enforced quantity."
|
|
838
|
+
- validator_id: target-material-profile-validator
|
|
839
|
+
obligation_id: partial_composite_member_support_limits_aggregate_ready_projection
|
|
840
|
+
coverage_status: pending
|
|
841
|
+
tier: flat
|
|
842
|
+
note: "deferred-7 slice-2 audit (2026-06-23): PARK (NOT_FOUND). support_status is an aggregate field on the target-material-profile artifact, not on the selected members; the validator checks only that a supported/partial/composite aggregate selects ≥1 profile (~180-193 → selected_profile_missing). There is no check that a partial_composite MEMBER's support state downgrades/limits the aggregate ready projection. The member→aggregate support-limiting rule is not inspected here."
|