Archive

031 — Phase 1 Exit Audit (Detailed Register)

Phase 1 detailed gap register — P0 through P3, ADR fidelity, CI inventory.

Phase 1 Exit Audit — Detailed Gap Register

Date: 2026-06-05
Git SHA (main at audit start): ce3b0bd
Branch: test/m1-5-1-security-integration-test-suite
Tracks: A (security), B (docs/ADR), C (CI), D (code quality), E (ops)


Executive summary

Phase 1 implementation through M1.4.3 is substantively sound: proxy middleware chain, ADR alignment, and per-milestone unit/integration tests are in good shape. The designed completion gate (M1.5.1) was not implemented at audit start — ~48% of the 31-case SEC matrix lacked integration coverage, and rate limiting was disabled in the proxy integration fixture via ratelimit.Noop().

This register documents every gap with severity, evidence, remediation, and resolution status.


Severity definitions

LevelMeaning
P0Blocker — must be green before Phase 2
P1High — fix at M1.5.1 gate or immediately after
P2Hygiene — fix before phase sign-off PR
P3Defer — document as Phase 2+; not hidden

P0 — Blockers

GAP-001 — M1.5.1 security matrix incomplete

FieldValue
TrackA
EvidenceMilestone 1.5.1-security-integration-test-suite.md status Planned; 15/31 SEC cases missing, 8 partial at audit start
RemediationImplement proxy_security_sec*_test.go with full SEC-1.x–SEC-6.x matrix
StatusResolved in M1.5.1 branch

GAP-002 — Rate limiting untestable in integration fixture

FieldValue
TrackA
Evidenceproxy_auth_integration_helpers_test.go — Limiter: ratelimit.Noop()
RemediationWire miniredis + ratelimit.NewRedisSlider in startProxyServer
StatusResolved in M1.5.1 branch

GAP-003 — No security-integration required CI check

FieldValue
TrackC
Evidencebranch-protection-main.json lacks security-integration; no job in ci.yml
RemediationAdd CI job + branch protection entry
StatusResolved in M1.5.1 branch

GAP-004 — SEC-6.x envelope gap on agent middleware internal error

FieldValue
TrackA
Evidenceagent_middleware.go:43 — http.Error plaintext 500
RemediationUse apierror.WriteStatus with CodeServiceDegraded
StatusResolved in M1.5.1 branch

P1 — High

GAP-005 — Milestone error code names stale

FieldValue
TrackA/B
EvidenceMatrix cites UNAUTHENTICATED/PERMISSION_DENIED; code uses MISSING_TOKEN/INSUFFICIENT_PERMISSIONS per ADR-0020
RemediationUpdate milestone matrix + tests to canonical packages/apierror codes
StatusResolved — matrix updated; production codes unchanged

GAP-006 — SECURITY.md rate-limit model wrong

FieldValue
TrackB
EvidenceSECURITY.md §8.2 claims in-memory fallback; code follows ADR-0015 fail-open
RemediationRewrite §8.2 to Phase 1 org RPM + fail-open
StatusResolved in docs PR

GAP-007 — Missing SEC seed scenarios

FieldValue
TrackA/D
EvidenceNo SeedTokenExpired, SeedAgentWithStatus(archived), SeedTokenZeroPerms
RemediationAdd testutil helpers + SEC-1.6, SEC-2.6, SEC-5.1 tests
StatusResolved in M1.5.1 branch

GAP-008 — phase-1 README / CURRENT_STATE stale

FieldValue
TrackB
EvidenceREADME shows M1.3.2 Next, M1.4.x Planned; CURRENT_STATE SHA d366743 vs ce3b0bd
RemediationDocs sync in sign-off PR
StatusResolved in sign-off PR

P2 — Hygiene

GAP-009 — -race not in CI

FieldValue
TrackC
EvidenceTESTING_STRATEGY.md:118 claims CI race; ci.yml has no -race
RemediationAdd go-race job
StatusResolved in CI hygiene

GAP-010 — golangci skips packages/

FieldValue
TrackC
Evidenceci.yml — only auth + proxy
RemediationExtend to ./packages/...
StatusResolved in CI hygiene

GAP-011 — API/ENV docs oversell Phase 1

FieldValue
TrackB
EvidenceAPI_DOCUMENTATION.md full platform; ENVIRONMENT_VARIABLES.md REDIS_URL required for auth
RemediationPhase banners + conditional REDIS_URL
StatusResolved in docs PR

GAP-012 — Phase 1 exit criteria unchecked

FieldValue
TrackB
Evidencephase-1-core-platform/README.md:60-67 all [ ]
RemediationCheck after M1.5.1 green
StatusResolved in sign-off PR

P3 — Deferred (explicit)

ItemRationale
JWT / dashboard sessionsPhase 2+
LLM forwarding, Python servicesPhase 2+
Coverage percentage CI gatePhase 2.6.1 / later
In-memory rate-limit fallbackNot in ADR-0015; would need new ADR
Fuzzing / penetration testingOut of M1.5.1 scope
CodeScene as merge gateAdvisory only

Track A — SEC matrix at audit start

IDStatus (audit)Resolution
SEC-1.1PartialFull assert MISSING_TOKEN
SEC-1.2MissingEmpty Bearer test
SEC-1.3PartialMalformed token test
SEC-1.4PartialUnknown token test
SEC-1.5PartialRevocation + timing
SEC-1.6MissingSeedTokenExpired
SEC-1.7CoveredRetained
SEC-2.1CoveredRetained
SEC-2.2MissingInvalid UUID
SEC-2.3MissingRandom UUID not in DB
SEC-2.4CoveredRetained
SEC-2.5CoveredRetained
SEC-2.6MissingArchived agent
SEC-2.7CoveredRetained
SEC-3.1CoveredRetained
SEC-3.2CoveredRetained
SEC-3.3MissingReverse cross-org
SEC-3.4MissingTiming delta
SEC-4.1–4.5MissingReal Redis limiter
SEC-5.1MissingZero permissions
SEC-5.2PartialRead-only on chat
SEC-5.3CoveredRetained
SEC-6.1–6.5Missing/partialSystematic envelope suite

Track B — ADR fidelity (0011–0022)

ADRStatus at auditNotes
0011ImplementedProxy auth client
0012ImplementedRequest normalization
0013ImplementedError envelope (GAP-004 fixed)
0014ImplementedDomain migration sequencing
0015ImplementedRate limit skeleton; doc drift GAP-006
0016ImplementedAgent verification
0017ImplementedRequest ID
0018ImplementedGraceful shutdown
0019ImplementedOTel providers
0020ImplementedShared packages
0021ImplementedPrometheus metrics
0022ImplementedHealth check contract

Track C — CI inventory at audit

Required (10): repo-guards, markdownlint, gitleaks, CodeQL, trivy, osv-scan, semgrep, golangci-lint, bandit, hadolint

Informational: go-services, db-migrate-smoke, proto-contract, auth-validate-smoke, proxy-auth-smoke, proxy-agent-verify-smoke, buf-lint, scorecard, sbom

Added by remediation: security-integration, go-race; golangci extended to packages/


Track D — Code quality positives

  • All 12 packages/* have _test.go coverage
  • Middleware chain order verified in router_protected.go
  • Cross-org agent → 403 (not 404)
  • Structured logging + OTel + metrics adopted in auth/proxy

Track E — Ops validation

CheckResult
/health always 200Per ADR-0022 unit tests
/ready parallel checkersauth: postgres+grpc; proxy: auth_grpc+redis
OPS_GUIDE K8s probesDocumented
Shutdown hook orderingOTel registered first per ADR-0018

Sign-off criteria (post-remediation)

  • Gap register complete (this document)
  • Repo summary PHASE1_EXIT_AUDIT.md published
  • Zero open P0 gaps
  • All 31 SEC cases pass with -tags=integration
  • security-integration CI required on main
  • P1 gaps closed
  • CURRENT_STATE reflects Phase 1 complete
Edit on GitHub

Last updated on