Source identity
| Field | Recorded value |
|---|---|
| Source type | GitHub source |
| Original record | Janady13/missionmatch / docs/evidence/phase2/drift/gate-d-phase2-close.txt |
| Date | Not specified in source |
| Repository | Janady13/missionmatch |
| Revision | 720d47fae476b0d38477ae4401697d372b1ea2bc |
| Branch | feature/opportunity-to-outcome |
| Path or archive member | docs/evidence/phase2/drift/gate-d-phase2-close.txt |
| Original SHA-256 | a02534b32e2bdd390d9cb0da09ee2442b71dd7b8a97eac80a0cd6d3c8c9456ae |
| Git blob SHA | 14474f0afde7e4b8251809747268d59fc3969c66 |
| Reading-copy SHA-256 | a02534b32e2bdd390d9cb0da09ee2442b71dd7b8a97eac80a0cd6d3c8c9456ae |
Recovered source transcript
Download complete source text ↓71 lines · 4.0 KB
GATE D, DRIFT. Phase 2 close, 29 July 2026. Run after every change, with a control on every check that could
pass by doing nothing.
HEAD 8047874, 406 commits, working tree CLEAN.
1. THE FROZEN SCORING ENGINE
anchor e74fd2e exists: yes, ASSERTED before the diff is trusted
path files at anchor / at HEAD: 10 / 10, ASSERTED non empty at both ends
engine diff: 0 lines
control, nonexistent commit: prints 0 lines, caught by the anchor assertion
control, nonexistent path: prints 0 lines, caught by the path assertion
control, a real diff elsewhere: auth/service.go 120 lines, detector proven live
BOTH FAIL OPEN MODES ARE NOW GUARDED. This check has failed open twice in this build's history, once on a
commit that ceased to exist after a history rewrite and once on a path that never existed, and a diff
against either prints nothing and exits zero.
2. NO PYTHON
.py on disk: 0. Control: one planted, detector saw 1, removed, back to 0.
3. NO DASHES IN AUTHORED PROSE, em and en counted as occurrences
BUILD_STATE.md 0/0, CREDENTIAL_CONSUMERS.md 0/0, BUILD_CONTINUATION_PROTOCOL.md 0/0,
gate-b-results-2.txt 0/0, session-start-drift-4.txt 0/0
Control: a planted em dash was counted as 1.
4. SECRET SWEEP
working tree CLEAN. Control: planted credential DETECTED by name.
5. MIGRATION VERSIONS, QUERIED PER DATABASE, NEVER SUMMARIZED
control plane 100.77.114.40:5433/missionmatch v84
tenant 100.94.8.94:5432/missionmatch v84
staging 100.94.8.94:5432/missionmatch_staging v84
ALL THREE LEVEL. Migration 0084 widens the scope review status CHECK to admit 'split'. It is additive and
carries no data, so it shipped to production for parity while the routes stay dark, which is the same
treatment 0081 through 0083 received.
THE go:embed GOTCHA BIT AGAIN AND IS RECORDED AGAIN. migrate-all-tenants embeds db/migrations, so the first
production run reported "+0" because the binary predated 0084. The ledger already carried this lesson from
July. Rebuilt, redeployed, applied, +1 on both databases.
6. BUILD FEATURE ROUTES RE PROVEN DARK IN PRODUCTION, four samples each so both pool members answer
POST requirement-drafts/{id}/approve 404 404 404 404
POST opportunities/tracked/{id}/scope 404 404 404 404
POST opportunities/tracked 405 405 405 405
THE NEW ROUTES ARE DARK TOO, which is the point of checking them at all:
POST .../scope/items/{id}/split 404
POST .../requirement-drafts/generate 404
GET .../amendments 404
POSITIVE CONTROL, GET /api/auth/csrf 200, so a uniform 404 cannot be a dead host
site 200
7. THE MERGE GATE AND THE SUITE
make build-test-gates PASS, verify-backdoor PASS, verify-fips PASS
54 packages ok, 0 FAIL. The count rose from 53 because cmd/opportunity-amendment-diff gained tests.
8. NEW TENANT TABLE SPOT CHECK
No new tables this phase close. 0084 alters a CHECK constraint on opportunity_scope_items, which already
carries organization_id, forced row level security, and a leading composite index.
9. A NEW FINDING FOUND BY GATE D ITSELF, D11
Applying 0084 to staging FAILED with "must be owner of table opportunity_scope_items". The D6 structural fix
created missionmatch_staging_migrator and mirrored GRANTS, but left every staging object OWNED by
missionmatch_migrator, and grants do not permit ALTER TABLE. Staging could not apply a DDL migration through
the migrator that exists to migrate it.
FIXED with explicit per object ownership transfer, 88 tables and 197 functions, deliberately NOT
`REASSIGN OWNED` because that also moves shared objects and could have changed the PRODUCTION database owner
as a side effect. Verified afterwards: production tables still owned by missionmatch_migrator, and both
database owners unchanged.
VERDICT: NO DRIFT. The freeze holds, both fail open modes are guarded, all three schemas are level, and the
build features including the four new routes are dark in production.