Add versioned metric graph authority, owned browser evidence, paginated and all-tab traversal, deterministic sampling policies, and analyst-facing run inspection. Provision the DEV/PREPROD/PROD Superset, Gitea and million-row ClickHouse lab; retain reproducible lifecycle evidence and explicit incomplete-traversal limits.
31 KiB
#region ProductionAcceptance.Matrix043050 [C:5] [TYPE ADR] [SEMANTICS production,acceptance,gates,scenario,baseline,execution,monitor,automation,analytics,mcp]
@BRIEF Unified conjunctive production acceptance matrix for the current 037/038/044/045/046/047/050 scenario-testing chain after the 2026-09-17/18 amendments and live canaries.
@RELATION DEPENDS_ON -> [SupersetBaselineEngine.Spec]
@RELATION DEPENDS_ON -> [BaselineEngine.ReferenceUrl]
@RELATION DEPENDS_ON -> [DashboardScenarioModel.Spec]
@RELATION DEPENDS_ON -> [ScenarioExecution.Spec]
@RELATION DEPENDS_ON -> [ScenarioRunMonitor.Spec]
@RELATION DEPENDS_ON -> [ScenarioAutomation.Spec]
@RELATION DEPENDS_ON -> [ScenarioAnalytics.Spec]
@RELATION DEPENDS_ON -> [McpInterface.Spec]
@RATIONALE Prior acceptance rows were fragmented across seven feature packages and WORKSTATE; a single conjunctive table is required so a local unit PASS cannot be mistaken for production GO while a live, safety or operations gate remains OPEN.
@REJECTED Taking the newest historical checklist status per package was rejected — many older [x] rows predate drift amendments, zero-human policy, evidence tiering and current live findings.
@INVARIANT Production GO requires every P0 row CLOSED and every P1 row either CLOSED or explicitly accepted by a signed release decision; CLOSED requires retained executable evidence, never prose or schema shape alone.
1. Status vocabulary
| State | Meaning |
|---|---|
CLOSED |
Falsifiable verifier executed against the current contract; retained command/output or live evidence is linked. |
PARTIAL |
Implementation/evidence exists but at least one named acceptance vector remains open. |
OPEN |
Missing implementation or missing executable proof. |
BLOCKED |
Cannot execute until an external prerequisite/decision exists. |
DEFERRED |
Explicit post-GA item; it cannot hide a P0 requirement. |
GO rule: GO ⇔ all P0=CLOSED ∧ all accepted P1 have signed disposition ∧ full suites/migrations/semantic audit green on the release commit ∧ no unresolved critical security or reconciliation finding.
2. Unified matrix
| Gate | Priority | Owner spec/task | Falsifiable acceptance | Current evidence | State |
|---|---|---|---|---|---|
G-BSL-CATALOG |
P0 | 037 T082–T084 | Catalog CAS, one head under concurrent approval, server-owned capture bytes, rebaseline/supersede/retire/publish failure reconcile without duplicate revision. | 2026-09-21 core CLOSED: catalog_revision_log.py append-only JSONL CAS log — duplicate baseline/coordinate rejection, stale If-Match typed conflict, thread-race single-head proof, retire/invalidate append-only (history byte-identical), publish_failed→reconcile on the same revision; 8/8 test_catalog_revision_log.py. Wiring CLOSED 2026-09-22: catalog_revision_wiring.py builds the server-owned projection and approvals.consume_approval appends through materialization._commit_with_catalog_compensation under the same catalog lock (failed DB commit restores catalog AND log bytes — no phantom revision); publication_worker mirrors the settle onto the digest-matched head (PUBLISH_REVISION_LOG_MISMATCH on a wrong bound log, PUBLISH_REVISION_LOG_ABSENT traced when the deployment binds none); 10 test_catalog_revision_wiring.py + 3 test_publication_worker.py. |
CLOSED |
G-BSL-REFERENCE-URL |
P0 | 037 T091; 050 T052 | New metric/visual/scenario-derived baseline starts from a same-dashboard URL; active native filters are parsed and frozen; candidate→publication→run pin retains reference identity; scheduled replay never re-fetches short-link state; different dashboard and unverified legacy entries fail closed. | 2026-09-24 uncommitted: URL preview parses permalink and native filter key, runs bounded chart-data queries and maps metric coordinates to charts; both supplied ss-dev dashboard 10 URLs returned 10/10 metric coordinates, one native filter and no coordinate errors against the live stand. A different-dashboard permalink is rejected. REST/MCP preview and capture surfaces exist; URL source is stored with metric candidate/revision/pin and unverified legacy entries fail closed. 2026-09-25: selected metric batch defers candidate commits to the route transaction; second-coordinate failure rolls back earlier drafts (2 focused atomicity tests). Generic screenshot metadata is caller-writable, so visual approval stays fail-closed until server-owned URL-bound visual capture exists (2 trust-boundary tests). The exact native_filters_key=A4_rwhfQta0 link was rechecked live via configured ss-dev client: dashboard 10, platform=3DS, 10/10 metrics executed and 6 distinct formulas suggested (including SUM(Global_Sales) on Games and count on Publishers With Most Titles). A transient systemd-resolved feature-state failure was repaired with resolvectl reset-server-features; the backend repeated 10/10 without DNS override. The ordinary local database has no dashboard 10 scenario/release. A separate isolated Compose fixture with a test-only synthetic release proved browser URL entry → active filter/chart-attributed preview → six draft captures; Chromium 2/2 also proved a different-dashboard field error. Isolated DB inspection verified one AgentRun, six candidates, six capture executions, exact URL SHA-256 and normalized platform IN ["3DS"]. The project was removed after the run; screenshots/traces are under /tmp/reference-url-e2e-*.png and /tmp/reference-url-playwright-results/. A subsequent isolated Chromium 2/2 pass joined URL capture to human source-check/reasoned approval: one chart 96/dataset 20 metric entered the local catalog, and its revision retained verified URL bytes/hash plus platform=3DS. At the time of that 2026-09-25 fixture, the revision state was materialized with no Git receipt; later isolated wiring proof is recorded below. The run exposed and fixed synthetic fixture SemVer and catalog/revision schema oneOf versus both authoritative IDs. Open: real dashboard release/production Gitea publication, live MCP calls (ss-dev returned 502; the earlier unauthenticated ss-prod request redirected to login; later authenticated read-only dashboard 11 resolution passed), visual/scenario-transform URL capture, participant UX acceptance and release-commit verification. Isolated Git receipt/pin/scheduled replay wiring is proven under commit 354c6684. |
PARTIAL |
G-BSL-DERIVED |
P0 | 037 T085–T090; 038 T068/T070 | Bounded transform output creates scenario_transform candidate from server artifact; curated ≤50 gating coordinates; operator approval; observatory entry cannot reach PASS; period stale→blocked→candidate. |
2026-09-21 all offline axes CLOSED: T086 scenario_transform_provenance.py (8/8); T087 baseline_selection.py facts-only ≤50 proposal + CAS review (8/8); T088 observatory tier excluded from pin + smuggle-guard (11/11); T068 transform_dsl.py bounded DSL derivation over declared refs — byte-stable canonical decimals, depth/row bounds, no SQL/Python/network (12/12). 2026-09-22 wave 4 — period lifecycle offline CLOSED: baseline_staleness.py detects a closed period that is not the launch-declared reporting_period, resolve_baseline_pin blocks typed (BaselinePeriodStale=BASELINE_STALE) pre-I/O, facts-only proposal with automatic_rebaseline=false (8/8 test_baseline_stale_lifecycle.py). 2026-09-23 launch-receipt CLOSED (wave 5 Phase B): BaselineEngine.BaselineStaleness.LaunchReceipt emits the durable baseline_stale receipt on a separate committed session after the caller rollback — wired once per transport (REST scenario_runs.py 422 + MCP tools_scenario.py blocked, 050 T044 parity kept; answers byte-identical to the pre-receipt contract); idempotency key collapses REST+MCP double calls to one row; emission failure never masks the block (6 vectors test_start_run_period_receipt.py, parity matrix 17 green). 2026-09-23 offline transform capture wired: bounded_transform stores canonical JSON output bytes in DraftStorage and returns ref/digest/MIME/length; walker registers the active ScenarioArtifact bound to run, logical step and attempt, and T086 provenance accepts that artifact while rejecting forged hash/value/ref. Focused suite 50/50 plus independent executor→bytes→register→candidate bridge 1/1 passed. Remaining: live run/candidate canary; ./run.sh --skip-install is blocked during database preparation because host TCP connections to the healthy Docker PostgreSQL on port 5432 close unexpectedly, so /api/ready never starts. |
PARTIAL (offline transform artifact wiring closed; live run open) |
G-SCENARIO-AUTHOR |
P0 | 038 T063–T070 | Typed action/evaluation ops; no embedded metric truth; no new HumanStep; disabled actions reject before I/O; TransformSpec/DecisionPolicy schemas deterministic. | 534d488f,f123210b,d29959f6,a59f5e3c,87a90f6f; unit suites green. Row corrected 2026-09-22: the earlier "Transform/best-of-N open" wording was stale — T068 transform_dsl.py (12/12) and T069 evaluation_aggregation.py (best-of-N strict majority, no quiet PASS) closed them per WORKSTATE 2026-09-21. Remaining: live scheduled zero-human run (tracked under G-LLM-SECURITY/G-E2E-EVALUATION). |
PARTIAL (offline schema/op axes closed) |
G-BROWSER-CORE |
P0 | 044 T047/T048 | Live Superset browser actions: open/wait/refresh + assert_dom/inspect_filter_options/navigate_tabs/wait_for_selector; owned durable evidence; no fabricated PASS. | readonly-canary-20260918T125144Z* 3/3; 125451Z* 4/4; unit 811. |
CLOSED |
G-BROWSER-FILTERS |
P0 | 044 T048 / CHK038 | Live search_text, set, clear, date-picker; inspect state before/after; chart-data response; clear checkpoint replay. |
2026-09-25 live URL-bound canary: filters-canary-20260925T191720Z.json against ss-dev dashboard 11 with native_filters_key=CIcbBivwWiM: inspect → Country=Canada → 5 charts settled → inspect selected state → clear → 6 charts settled → inspect cleared state; checkpoint replay retained; shutdown leftover_sessions=0, task_destroyed_warnings=[]. Browser transport fixed global Sec-Fetch-* headers and Ant Design label→control resolution. Date vector remains BLOCKED: no date filter on this stand; search is structurally N/A for the selected control. |
PARTIAL (date prerequisite external) |
G-BROWSER-CROSS-DASH |
P1 | 044 T055 | navigate_dashboard driver, filter reset, new checkpoint segment, old checkpoint rejected, cross-dashboard fixture. | Registry disabled: pending driver. | OPEN |
G-E2E-EVALUATION |
P0 | 038 T069; 044 T043/T046/T051 | Browser→artifact→baseline comparison→bound immutable AgentEvaluation→pinned DecisionPolicy→terminal PASS/FAIL/inconclusive; scheduled zero-human real-LLM run; no evidence-free PASS. | 2026-09-21 live chain proven: canary v5 live-canary-v5-binding-20260921T164034Z.json — browser open → 8 durable artifacts → real-LLM evaluation persisted (ce4685e7…) → walker binds it into the compare decision (evaluation_input + agent_evaluation_ids) → policy resolves honestly. 2026-09-25 multimodal capability re-proven: configured Omniroute deepseek-flash accepted a live canary PNG in an OpenAI image_url message and returned IMAGE_CANARY_OK with HTTP 200 (gateway route reported gpt-5.6-sol); the former blanket “text-only fallback / vision route unavailable” note is stale. Remaining: full v5 rerun with this provider, terminal policy PASS proof, and scheduled zero-human real-LLM/injection proof. |
PARTIAL (chain proven; full terminal/scheduled proof open) |
G-LLM-SECURITY |
P0 | 038 AGSCN-FR-022; 044 SCEX-FR-035 | Evidence-as-data; zero tools; strict output; prompt/evidence injection cannot force PASS; malformed/low-confidence/disagreement→non-pass. | Code-token op guard 87a90f6f. Offline CLOSED 2026-09-22 (wave 4): prompt carries evidence_handling.evidence_is_data=true (injected text stays in the data section, never in instructions); strict verdict-enum + confidence-range coercion; findings for an undeclared criterion dropped → inconclusive + EVALUATION_FINDING_UNSUPPORTED; provider text cannot establish baseline_pin/spec/template identity; compromised-double canary cannot resolve to a policy passed; submit seam exposes no tool channel; 7 test_llm_injection_offline.py. Residual (live): LLM-INJ-001 live scheduled zero-human real-LLM proof. |
PARTIAL (offline closed; live proof open) |
G-PROVIDER-SHUTDOWN |
P0 | 044 T052 / SCEX-FR-037 | After canary and soak: zero pending Playwright Connection.run, page/context/browser tasks; shutdown bounded. |
2026-09-18: close_all_sessions+stop() bounded drain; unit leak-negative 3/3; live canaries readonly-canary-20260918T{174659,184343}Z: 0 destroy warnings, thread dead, 0 leftover sessions. |
CLOSED |
G-MUTATION-RECON |
P0 | 044 T053 / SCEX-FR-038 | Provider post_rows equals independent pinned SQL readback; mismatch→reconciliation_required/blocked; restore independently verified. | 2026-09-18: same-session fresh-client_id readback in transport PASS path + receipt proof; mismatch→reconciliation_required (unit); live mutation canary readonly-canary-20260918T184343Z: readback_ok=true ×2, failures=[]; 82.75/82.74 root-caused as lifecycle skew (mid-step post-SELECT vs post-restore), both values correct. |
CLOSED |
G-EVIDENCE-TIER |
P1 | 044 T054; 046 T025 | hot_runs=2, holds, TranscodeReceipt source→target digest, verify-before-delete, lossless/lossy marker, lossy pixel refusal, idempotent sweep. |
Contract only; backend absent (TranscodeReceipt/hot_runs not in backend/src). UI tier badge (tier_hot/tier_cold/untiered) is contract-declared but not implemented — it would bind an API field the backend does not emit. |
OPEN (blocked on backend) |
G-ARTIFACT-CONTENT |
P0 | 044 T044 | Auth/ACL/status/headers/digest/MIME/length/expired/corrupt/traversal/range. | 2026-09-17 live artifact canary 11/11. | CLOSED |
G-CAPACITY-FAULTS |
P0 | 044 T045 | Startup/readiness/deadline/cancel/drain/quarantine/reconcile/late-response fault matrix. | 2026-09-17 live fault canary 16/16. | CLOSED |
G-MONITOR |
P1 | 045 RUNMON-FR-015..017 | Launch gates usable; legacy checkpoint read; new runs no waiting-human; tiered evidence markers; reload/reconnect. | UI unit/build proven (frontend 3425 vitest + build green on 2026-09-23). 2026-09-23 reload/reconnect offline CLOSED: L1 vectors — a fresh model recovers waiting_human from the server with exactly one checkpoint step (a reload never appends a second), and rebinding closes the previous EventSource while named listeners never stack. Tiering absent (blocked on G-EVIDENCE-TIER). |
PARTIAL (reload/reconnect closed; tiering absent) |
G-SCHEDULER-CORE |
P0 | 046 T019/T020 | REST/MCP automation parity, ownership, disabled/legacy HumanStep rejection, idempotent crash/replay/concurrent due events. | T019/T020 closed with existing tests. | CLOSED |
G-NOTIFICATIONS |
P0 | 046 T022; 047 T026 | Failed/inconclusive run, queue created, case opened/disposition, stale baseline each produce durable notification receipt within declared SLA/channel. | 2026-09-22: notify.py fail-closed emit vs durable domains (durable rejects human), channel/sla payload, idempotent receipts; 047 wiring for queue_created/case_opened/case_dispositioned; terminal receipts + dedicated baseline_stale. 8 focused tests (6 gate vectors), tests/services/dashboard_testing 1313 green. |
CLOSED |
G-DLQ-SOAK |
P0 | 046 T023/T024/T026 | N identical infra failures→quarantine; recovery; queue-depth/capacity SLO; 72h soak + 3 restarts + 5/15/50-tab canaries, zero duplicates. | 2026-09-22 offline CLOSED: poisoned_store.py durable JSONL identical-failure counter (flock, append+fsync, CAS epoch; no migration) + poisoned.py N=3 quarantine/no-retry, one blocked DLQ notification, operator CAS unquarantine; 13 policy + 2 API tests. 2026-09-23 operator recovery UI CLOSED: AutomationQuarantineModel + QuarantinePanel on the automation route — quarantine list (error/identical count/CAS version), confirm-release echoing the displayed version, 409 STALE_QUARANTINE_VERSION → reload+notice, 404 NOT_QUARANTINED → reload+notice; 11 frontend tests + updated page mock. 2026-09-23 retry-dispatcher wiring CLOSED (wave 5 Phase A): automation/retry_policy.py closed allowlist of retryable infra codes (fail-closed, prefix matching rejected) + MAX_ATTEMPTS=3 bound to the quarantine threshold; execution/retry_dispatcher.py failed→queued CAS re-queue (durable identical-failure counter is the attempt authority — ScenarioRun has no attempt column, D11 migrations frozen) skipping quarantined pairs and the ceiling; terminal accounting in terminal_effects.py — one terminal failure = one counter record (automation sources + allowlisted codes only; passed automation runs reset the streak, operator CAS still exclusively clears quarantine); quarantine gate in dispatch_runs.py skips stale queued rows of quarantined pairs until operator release; scheduler tick composes retry→dispatch; 10 test vectors (CAS exactly-once, N=3 quarantine, distinct-code reset, content/manual exclusion, gate+release, ceiling, notification epoch). Residual (live): 72h soak with 3 restart storms, 5/15/50-tab canaries. |
PARTIAL (offline + recovery UI + retry wiring closed; soak live) |
G-INVESTIGATION-MCP |
P0 | 047 T022/T023 | MCP queue/get/note/proposal bounded, RBAC/owner, service writes denied, proposal never closes case. | 23414f9a,5eea72bc; 73 green. |
CLOSED |
G-INVESTIGATION-UI |
P1 | 047 T024/T025/T027 | queued+in_case findability, case index, linked runs/evidence/i18n, browser queue→case→disposition. | e7925d0e,c9e6e642,9acd9bad presentation slice: grouped queue, business summary, evidence cards, collapsed technical refs; 13 focused tests. 2026-09-24 uncommitted follow-up: deterministic isolated seed + Chromium queue→correct case→linked run/evidence→resolved→stale CAS, 1 passed/0 skipped; trace/screenshot retained in frontend/test-results/; UI POST fix with 10 focused tests, lint/build green. |
CLOSED for scoped UI/E2E implementation; release-commit regression remains G-FULL-REGRESSION |
G-INVESTIGATION-ATOMIC |
P0 | 047 T019–T021/T028 | PostgreSQL concurrency: one active episode/case; stale CAS rollback; exact-context comparability; immutable evidence. | 2026-09-22: analytics/locking.py (pg_advisory_xact_lock per fingerprint) + set_disposition savepoint (zero partial projection); analytics/context.py exact-context comparability with typed mismatch/ineligible; 22 unit + 7 Testcontainers PG16 race vectors (tests/integration/test_scenario_investigation_concurrency.py). |
CLOSED |
G-MCP-PARITY |
P0 | 050 T044/T047/T048/T051 | REST/MCP error/auth/lifecycle parity, catalog/visibility mirrors, service cannot decide human gates; all prerequisites externally reachable. | 2026-09-22: shared classify_start_error consumed by REST and MCP removes the transport-dependent error vocabulary; tests/test_mcp_rest_error_parity.py 17-vector matrix (env/baseline codes/idempotency/conflict/disabled action/disabled automation/investigation RBAC/unauthenticated + service-principal human-gate denial + MCP no-bypass on case ACL). Live external chain proven earlier. |
CLOSED |
G-MCP-TEST-PACK-PROFILE |
P1 | 050 T029a; 038 ServerOwnedPipeline | External MCP profile preview derives server-owned case coverage/metric coordinates/filter applicability; digest-CAS selector and coordinate choices re-inspect context; unresolved context/baseline never mint save handles or become runnable. | 2026-09-29 accepted T029a amendments add durable owner-scoped CAS/idempotency state, server-owned eligibility receipt binding, receipt-bound bootstrap admission, environment allow-list validation, and a linear/idempotent Alembic chain. Working-tree continuation fixes sequential CAS/receipt forwarding, adds profile-session registration and catalog 2.7.0, scopes metric blockers, and treats unbound runtime parameters as 038/044 warnings. 2026-09-30 executed: two named regressions 2/2; targeted MCP/registry selection 217 passed with one HTTP initialize test stalled/deselected; initial-scenario E2E and bootstrap replay pass after fixture correction. A new isolated in-process MCP selector-only fixture proves profile CAS → graph-free eligible registration → current bootstrap and stale-fingerprint rejection before writes; its Superset inspection is mocked. Ruff, compileall, diff-check and prior AXIOM verification pass. Promotion E2E stalled after sandbox exploration. Domain context, exact published-entry/filter binding, runnable baseline_ref, proven fresh external profile→bootstrap E2E, PostgreSQL and release gates remain open. | PARTIAL / NO-GO |
G-MCP-BASELINE-SELECTION |
P1 | 050 T049 | Agent proposes bounded curated baseline scope; operator review handle; server capture; observatory non-gating. | Server-side facts-only selection exists (services/dashboard_testing/baseline_selection.py + T087 tests) but no MCP tool; the operator review UI is contract-declared and not implemented (the service has no HTTP/MCP surface to bind). |
OPEN (blocked on the MCP/HTTP surface) |
G-MCP-EXPLORATION |
P1 | 050 T050 | Read-only exploration_step in isolated workspace with CAS/receipts; reuses 044 session; no raw code or second Playwright stack. | Fixed one-shot exploration exists; interactive operation absent. | OPEN |
G-STORAGE-BUDGET |
P1 | 044/046 tiering | Measured hot/cold artifact volume and quota alarms meet the approved retention budget for 20-table dashboards. | Estimates only; no telemetry-based acceptance. | OPEN |
G-SECURITY-OPS |
P0 | 044/046/050 | Local provider perimeter, artifact ACL, secret-redaction, key expiry/rotation, PII retention policy, no credentials in evidence. | Artifact ACL/provenance proven. 2026-09-23 offline axes CLOSED (wave 5 Phase C): C.1 key rotation contract proven executable (test_rotation_reencrypt_roundtrip: old-key ciphertext unreadable under new key, readable after re-encrypt, legacy values reported not converted) + Core.EncryptionKey.KeyAge fail-closed age verdict from the .env mtime (unknown age → warning age_unknown, exceeded interval → age_exceeded, EXPLORE-traced; no key material in verdicts); C.2 evidence redaction at the single write boundary — ScenarioExecution.EvaluationAdapter.Raw redacts every string leaf via the plugin RedactionService (per-leaf, not serialized-string regex which corrupts JSON; findings/structure preserved — test_persist_raw_response_redacts_credentials_and_pii); C.3 scheduled retention now classifies registered raw VLM responses at 7d, screenshots/artifacts at 30d, discovers expired ScenarioArtifact rows, commits durable deletion receipts before the existing hold-aware delete/verify-absent sweep, and holds open investigation cases. scenario_evidence_retention_days controls only explicitly classified scenario_evidence rows (default 90d; no current producer emits this class). scenario_evidence_archive_target is declared but unused; no live archive is claimed. G-STORAGE-BUDGET remains a separate P1 tiering/budget gate. Residual: live perimeter exercise (rotation drill on a stand, PII sweep against live evidence) and live retention exercise. |
PARTIAL (offline retention wired; live drill open) |
G-BA-UX-READINESS |
P0 | 039 T085–T088; 045 T023–T026; 047 T029–T033; 046 T027/T028 | Five business analysts complete seven scripted workflows: scenario setup/coverage, baseline review, launch, result/evidence interpretation, investigation/disposition, schedule operations, history/filter behavior. Every task scores ≥4/5; ≥80% task steps need no moderator; no false approval/PASS/case closure; keyboard-only plus named screen-reader controls; evidence tied to release commit. | OPEN, interim expert review 2026-09-24: pre-redesign scores: prepare test 2/5, baseline 1/5, launch 2/5, result/evidence 2/5, investigation/disposition 1/5, schedules 3/5, history/filter 2/5; mean 1.9/5. Uncommitted queue/case slice has deterministic isolated Chromium proof. The uncommitted baseline-review slice has owner-scoped candidate/approved overview, verified source, reasoned gate and publication, current/stale comparison and recovery; seeded isolated Chromium 1/1 passed. Scoped provisional expert baseline score 4/5, not a participant score; period-change/curated-selection UX remains. No five-analyst scores, keyboard/screen-reader acceptance, no-help evidence or tested release commit exist. | OPEN |
G-DR-ROLLBACK |
P1 | cross-cutting | Restore DB + baseline Git + evidence store; migration rollback/roll-forward runbook; recovery RTO/RPO exercise. | No unified exercise. | OPEN |
G-FULL-REGRESSION |
P0 | release | Full backend pytest, frontend vitest/lint/build, ruff, compileall, PostgreSQL Alembic heads/upgrade/check, isolated browser E2E on release commit. | Scoped runs green; no current full-suite release gate after 2026-09-18 changes. | OPEN |
G-SEMANTIC-HEALTH |
P0 | release | Axiom verify/rebuild: 0 parse warnings; no new naked critical blocks/unresolved critical relations; docs/nav rebuilt. | Pending after current spec/code amendments. | OPEN |
G-RELEASE-SIGNOFF |
P0 | release owner | All P0 CLOSED, P1 dispositions signed, unified matrix frozen with evidence refs and commit; NO-GO→GO recorded. | Product remains NO-GO. | OPEN |
Latest isolated metric checkpoint (2026-10-01)
The real Docker DEV/PREPROD/PROD/Gitea pipeline now proves a separate supported M01 metric intent through URL-reviewed baseline publication, fresh external MCP owner/CAS resolution, v2 graph/receipt registration and current bootstrap. Manual 16350 PASS → mutated 16351 FAIL → restored 16350 PASS and an independent scheduled PASS retain the exact approved pin and both required durable producer/comparison steps. Cron is disabled after observation. See the independent result audit and implementation checkpoint.
This supersedes the local numeric execution gap in the earlier selector-only
notes. It does not close the full G-MCP-TEST-PACK-PROFILE/reference-URL gate:
legacy checklist capabilities, visual/derived capture, participant acceptance,
external dashboard 11 release and complete release-commit proof remain separate.
The general matrix remains NO-GO; no P0 or P1 signed disposition is inferred
from this bounded local flow.
T029a published-entry boundary checkpoint (2026-09-30)
An unconnected fail-closed selector now identifies one exact approved metric
entry inside a receipt-bound 037 published resolver pin by chart, dataset,
result key, effective filter hash, reference-source identity and expected
release ID/version/commit. It recomputes the 037 per-entry digests and rejects
malformed filter payloads with a typed error. The earlier 037 resolver now
returns BASELINE_EVIDENCE_UNAVAILABLE for malformed filter/provenance fields
before dereference. Independent INV1–7 review found
matched anchors, zero naked functions or parse warnings, valid relations,
142 selector lines and 399 resolver lines with no Ruff C901 issue. Ruff,
compileall and diff-check passed;
no behavioral tests were added or run for this selector-only continuation. The
later staged resolution persists a server-owned effective filter snapshot, but
has no graph/receipt coordinate binding; it cannot yet clear needs_baseline
or mint an eligible baseline-backed handle. G-MCP-TEST-PACK-PROFILE remains
PARTIAL / NO-GO; the release state is unchanged.
Mapping audit addendum (2026-09-30): a unique comparison step and direct metric
predecessor are not enough to bind a selected profile coordinate; the compiled
producer has no typed coordinate identity. No explicit graph ref or receipt
binding is admitted until the server-issued coordinate→producer contract and
fresh-context validator are implemented. The staged CAS selection remains
inert and preview_only.
Operational release gate update (2026-09-30): authenticated read-only Superset
lookup resolved /superset/dashboard/sales/ to dashboard 11. The current
local ss-tools ledger contains no deployment or DashboardRelease for it. Git
release configuration exposes DEV and PROD (ss-prod) but no unique
PREPROD stage. create_release requires a successful validated PREPROD
deployment; publish requires its named release and a human ss-tools session.
The earlier SS_STAND_STAGE=PREPROD canary setting only classified test policy.
No dashboard release, baseline candidate or scheduled replay was produced.
G-BSL-REFERENCE-URL and G-MCP-TEST-PACK-PROFILE stay PARTIAL; overall NO-GO.
Live native-filter alias follow-up (2026-09-30)
The dashboard 11 reference-discovery 422 was traced to Superset emitting
filter_timegrain while the query-model parser and effective-state allowlist
only recognized filter_time_grain. Both now canonicalize the confirmed alias
to TIME_GRAIN. Read-only live resolution of permalink Ez3n5bWxa9d passed
with 10 charts, 1 dataset and the active time-grain filter scoped to 10 charts.
This closes the reported parser boundary only; it does not close
G-BSL-REFERENCE-URL, prove chart-data execution/candidate capture, or change
the overall NO-GO state.
Live MCP check (2026-09-30): user-approved isolated HTTP/SSE human OAuth attempt started the test project and seeded its local dashboard 10 fixture. Environment registration stopped before MCP preview because an unauthenticated ss-dev health path returned HTTP/2 502 from Caddy (DNS resolved). No candidate was created; the isolated project and volume were removed. A local human OAuth→MCP HTTP/SSE regression stalled before a result and was interrupted after ~20s. This does not close the gate; live MCP calls remain unproven. See the attempt record.
ss-prod follow-up: the Superset host is reachable, but the supplied dashboard
slug URL redirects to /login/. The available local E2E environment has no
ss-prod credential and the running isolated backend has no configured
environment entry. No filter state or candidate was read or written. Continue
after an ss-prod test credential is configured locally.
3. Release sequence
- Close P0 runtime safety first:
G-PROVIDER-SHUTDOWN,G-MUTATION-RECON,G-BROWSER-FILTERS. - Close correctness truth chain: TransformSpec + curated/observatory baseline + E2E evaluation (
G-BSL-DERIVED,G-E2E-EVALUATION,G-LLM-SECURITY). - Close operations: notifications, DLQ/soak, atomic investigation, MCP parity.
- Close
G-BA-UX-READINESS: every critical analyst task ≥4/5 with retained browser and participant evidence. - Run full regression, migration and semantic health on one release commit.
- Freeze this matrix; obtain release-owner signoff.
4. Matrix maintenance rule
Any future spec amendment that adds a production invariant MUST add/update one row here in the same commit. A row state may move to CLOSED only when its owner package traceability links retained executable evidence; WORKSTATE narrative alone is insufficient.
#endregion ProductionAcceptance.Matrix043050