feat(governance): add source-approval + dataset-freeze contract schema (AEG-X-009, gated)

Source governance schema: append-only source_approval table enforcing approval
before ingestion. Dataset manifest hardened to support FROZEN state, requiring
approval timestamps. Boundaries tested (6/6 passing). Server-side resolver
(DapperApprovedModelContextReader) now guards both model and dataset approval.

P2–P6 deferred: Dataset freeze command, maker-checker review, evaluation/proposal
orchestration remain pending human decision package (source allow-list, license/SLA,
metric versions, roles). No source/model seeded per CLAUDE.md governance.

Migrations 0033–0034 idempotency verified fresh/upgrade/re-run on isolated test DB.

AGENTS.md: Maturity (contract-first); Necessity (governance prerequisite).

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-08-07 13:31:34 +09:00
parent 67274cbdb6
commit 3e6f609dda
11 changed files with 651 additions and 0 deletions
@@ -0,0 +1,20 @@
# AEG-X-009 Server-side VersionSet Resolver
## Traceability
- WBS: `AEG-X-009`
- Contract: `src/KArtSell.BuildingBlocks/Versioning/VersionSet.cs`
- Implementation: `src/KArtSell.Modules.ModelOperations/Infrastructure/DapperApprovedModelContextReader.cs`
- Test evidence: `evidence/AEG-X-009/versionset-resolver-boundary.trx`
## Change
The resolver now selects dataset manifests in `APPROVED` or `FROZEN` state only, requires dataset approval fields, and requires model registry approval fields. It continues to load all authoritative VersionSet values from the server-side database; client evidence/version values are not accepted.
## Verification
```text
Model Operations boundary tests: 6/6 passed
```
No dataset/model rows were seeded and no operation request or Shadow Run was created.