# Snabb feature readiness and flows

Updated **2026-09-11T17:07:56.845313+00:00**. Reviewed application source: [`f5b0708`](https://gitlabb.blazingfast.io/platform/snabb/-/tree/f5b07085937319e91c6b83c289bbe933801f3760).

[Interactive matrix](index.html) · [Complete bundle](https://progress.snabb.run/downloads/snabb-feature-audit-latest.zip) · [CSV](feature-matrix.csv) · [JSON](feature-matrix.json) · [Change log](change-log.json)

Password browser authentication and real Resend delivery are qualified. Source upload/index, truthful run quotes/history, reviewed publication/archive, whole-pipeline retry, document downloads and repository controls have deployed implementations. Their remaining live browser/provider acceptance is stated separately. Durable admission and full production Codex execution remain unavailable.

**How to read this report.** Code, UI, deployment, usability and evidence are separate dimensions. “Done” covers only the named, bounded capability. Counts are inventory totals, not a product completion percentage or a security/scalability certification. Earlier pinned evidence is retained where no new qualification exists; every source link pins its own revision. Ready replicas and passing fixtures do not prove a complete customer journey.

**Publication isolation.** The `progress` branch has its own report pipeline and static deployment. It does not run or trigger the application release pipeline. This report is a dated snapshot, not live service telemetry.

## Current status

| Primary status | Feature slices |
| --- | ---: |
| Fully done within stated scope | 39 |
| Partially done | 34 |
| Implemented; UI gap | 1 |
| Deployed; disabled or blocked | 4 |
| UI or adapter stub | 11 |
| Not implemented | 4 |
| Implemented; qualification incomplete | 13 |
| Implemented; not deployed | 0 |

Total: **106 feature slices**, **8 user/agent flow graphs**.

## Changes since the initial bundle

| Feature | Earlier status → current status | Current finding |
| --- | --- | --- |
| A02 · Native email registration and magic-link login | blocked → partial | Administrator-configured Resend is enabled. The recipient confirmed delivery; a real console browser sign-in request returned 202 and created a fresh 15-minute challenge. Email-link consumption and a new-user registration journey were not exercised by that live check. |
| A07 · Project creation and repository settings | partial → partial | Project creation and repository settings are wired. Source defaults and retention/checkpoint policy now have explicit flows, but the generic project update remains repository-focused and arbitrary field updates are not supported. |
| A10 · Verified source archive upload from browser | ui → unverified | The browser now uploads actual archive bytes, verifies the digest, finalizes the source and publishes its index. Settings accepts a File instead of passing only filename/size. Code, adapter tests and the release are present; a fresh live browser upload-to-first-run journey remains unqualified. |
| A11 · Source index publication and context discovery | ui → unverified | Browser upload now publishes the verified archive index and source selection pins its identity. CLI/API paths remain available. The full fresh browser source/index/agent journey still needs live acceptance. |
| R02 · Run form semantics: source, environment and advanced options | partial → partial | Run admission now carries selected source/ref, environment, leased secrets, label, ephemeral retention, checkpoint and email options. Saved tasks bind their configuration ID; unsupported optimization goals are rejected. The resource/runtime UI remains limited and the complete live option matrix is not qualified. |
| R03 · Run cost quotes and cancellation cost feedback | stub → unverified | The fixed €0.50 quote is replaced by the current billing catalogue and requested resources/duration. Cancellation leaves unknown settlement explicit. Regression tests and deployment are complete; browser quote-to-actual-settlement acceptance remains to be run. |
| R04 · Complete run history and search | partial → unverified | Run history and search now use server pagination, including records beyond the old latest-100 limit. Tests cover 124 visible runs, tenant isolation, sorting and labels. A live large-history browser journey remains unqualified. |
| R06 · Run provenance and environment detail presentation | partial → partial | Run details now use recorded source, environment and region, mask leased secrets, expose unknown cache outcomes and calculate artifact retention from expiry. Some account-member/trigger labels and wider metadata views remain simplified. |
| R10 · Pipeline step retry/resume and GitHub checks UI | stub → partial | Whole-pipeline retry now creates a new run from the original immutable definition, commit and resources, with idempotent receipt recovery. Per-step retry/resume and GitHub check controls remain separate unsupported operations. |
| R12 · SBOM and provenance document downloads | partial → unverified | SBOM and provenance downloads now retrieve the actual build documents, check their stored/browser digests, enforce access and retention, and preserve exact JSON bytes. Tests and deployment are present; a real browser build-to-download journey remains unqualified. |
| R16 · Generic integration and webhook management | stub → partial | Repository-specific integration settings now expose verified identity, GitLab webhook setup/rotation, enable/disable and delivery outcomes. Generic webhooks, notification rules and generic test/connect adapters remain disabled. |
| R17 · GitLab CI project binding and triggers | partial → partial | GitLab project binding and triggers now distinguish equal project IDs on different hosts/projects, validate Tag Push Hook events and recheck authority during admission. PostgreSQL and browser component tests passed; live private-provider browser acceptance remains open. |
| W11 · Browser workspace terminal and checkpoint terminal | ui → unverified | Existing workspace terminals and the checkpoint debug UI use authenticated session-gateway admission. Checkpoint selection, resource/cost ceiling, shell and lease settings are preserved, reload reads the original receipt, and Stop cancels the debug job. Real browser attach/reconnect remains unqualified. |
| W15 · Storage inventory, retention editor and external backup bucket | partial → partial | Storage inventory remains bounded and the generic storage retention/bucket adapters remain disabled. Owners can now edit project artifact retention/checkpoint policy through Settings; checkpoint retention uses observed expiry and cannot revive expired payloads. |
| S07 · Durable multi-turn agent and workspace admission | blocked → blocked | Durable session, interaction and private-workspace components are deployed, but effective durable admission remains disabled. Native single-task execution is separately enabled. Production controller integration and broader durable failure/recovery acceptance remain open. |
| S08 · Full production Codex runner with authenticated tools | blocked → blocked | The standalone Codex adapter, guest, journal and approval/command bridge have local qualification. The full production runner controller is not completed or selectable; an enabled personal ChatGPT connection does not establish full Codex workspace execution. |
| S12 · Agent approve-and-push, take-over and report archive actions | stub → partial | Reviewed Git publication and session archive now have working server/client paths. Publication pins reviewed files/base commit and reconciles an uncertain provider response without another write; archive fences outstanding publication. A synthetic live GitLab provider test passed and cleaned up its branch. Full browser-to-provider acceptance and the separate take-over workflow remain open. |
| S15 · Email agent completion and approval notifications | blocked → unverified | Resend delivery is now enabled and a real test was received. Agent/run notifications use durable outbox records, stable send identity, access rechecks and read/opt-out suppression. Real completion/approval notification delivery was not exercised by the generic test or sign-in request. |
| S17 · Downloaded CLI and VS Code extension distribution | done → done | Public CLI/extension distribution remains available with versioned download metadata and dated checksum/acceptance evidence. The refreshed public observation records the current manifest; distribution does not certify every physical client workflow. |
| G04 · General egress and unified policy enforcement | partial → partial | The Resend incident exposed missing Cilium DNS observation for FQDN allowlists. The deployed DNS policy now makes the existing Resend/GitHub/OAuth destination rules effective, and repository checks cover every Snabb FQDN rule. General cross-entrypoint egress/revocation assurance remains broader than this fix. |
| G08 · Service status, capacity, uptime and incidents display | stub → partial | The hardcoded Operational/100% uptime display is replaced by current worker state, observed region/capacity and explicit unknown 30-day uptime. This is a worker availability snapshot; retained incident history and live status subscriptions are not implemented. |
| O01 · Current application deployment readiness | done → done | The fresh snapshot records 20 application deployments and MinIO at requested readiness. Public readiness endpoints are recorded separately. This is point-in-time health, not uptime or complete workflow qualification. |
| O06 · Latest pipeline and fixed-revision release qualification | partial → done | Pipeline 5394 passed all 30 jobs at d8c9f75, including runtime build, worker/runtime promotion, application deployment and both live canaries. All 20 application deployments are ready at this same revision. New local P1 fixes require their own qualified release. |
| O07 · Main/deployed source reconciliation and remaining branch | done → partial | All 20 application deployments now run the fully qualified d8c9f75 revision. Main f5b0708 adds documentation only. Independent feature branch review and the remaining P1 work continue; the progress branch is intentionally separate. |
| O08 · Accurate product capability and release documentation | partial → partial | The audit now incorporates password and Resend qualification, deployed upload/run/action wiring and current pipeline state. It retains distinct code/UI/deployment/usability/evidence dimensions. Some legacy feature flags, overview values, disabled adapters and old implementation-ledger checkpoints still need reconciliation. |
| A17 · Direct password setup, sign-in and sign-out | not inventoried in the initial bundle → done | One-time password setup, salted scrypt, shared PostgreSQL attempt limits, session revocation and administrator eligibility are deployed. An isolated real browser fixture verified setup/replay rejection, login, secure cookies, sign-out, cross-origin denial and non-admin rejection. |
| G12 · Admin Resend configuration and test delivery | not inventoried in the initial bundle → done | The complete Settings page now binds after insertion. The saved key is write-only in Vault, sender changes require a fresh test, provider failures are safe and specific, uncertain retries survive reload, and a successful new test gets a new identity. Delivery was confirmed by the authorized recipient and enabled with an audit record. |

## Release and live observations

- Observed 20 application deployments plus MinIO. See requested/ready counts and source/image digests in the [deployment snapshot](deployment-snapshot.json).
- All 20 application components run fully qualified `d8c9f75`. The audited `f5b0708` revision adds documentation only. [Fixed release evidence](qualification/fixed-release-2026-09-11.json).
- [Application pipeline 5394](https://gitlabb.blazingfast.io/platform/snabb/-/pipelines/5394) was `success` at 2026-09-11T17:07:56.845313+00:00: 30 succeeded, 0 manual, 0 dependent jobs created. It is not a completed combined rollout. [Job snapshot](pipeline-snapshot.json).
- The earlier full application/runtime pipeline 5361 passed all 30 jobs. The email release has separate core/admin deployment and live delivery evidence. [Password qualification](qualification/password-auth-2026-09-11.json) · [Email qualification](qualification/email-delivery-2026-09-11.json).
- Effective email availability comes from the administrator database configuration. The legacy environment value alone no longer determines it. [Effective methods and allowlisted flags](feature-flags.json).
- Public observations and the download manifest are recorded in [public checks](public-checks.json). The storage-charging observation retains its original timestamp; it was not silently recertified by this refresh.

## Next work

| Priority | Features | Concrete result |
| --- | --- | --- |
| Completed · Fixed release gates | O06, O07 | Pipeline 5394 passed all 30 jobs at d8c9f75; all 20 application deployments are ready at that revision. Subsequent P1 fixes need their own qualified release. The progress pipeline is separate. |
| P1 · Browser onboarding | A01, A02, A03, A10, A11, A17 | Qualify email-link consumption/registration, supported identity methods and browser source upload → index → first run. Password login and real Resend delivery have evidence. |
| P1 · Durable agent execution | S04, S06, S07, S08, S13, S18 | Complete the production durable/Codex controller and authenticated workspace turns; qualify approval, stop, reconnect, checkpoint recovery and usage with personal connections. |
| P1 · Complete action journeys | R10, R12, R16, R17, W11, S12, S15 | Exercise deployed pipeline retry, document downloads, repository integrations, terminal, Git publication/archive and opted-in notifications in live browser/provider flows. |
| P1 · Remaining semantics | A13, A14, R02, R06, R07, G07, G08 | Correct remaining overview/default values and unsupported controls; qualify recorded run options/history and distinguish worker snapshots from uptime/incident history. |
| P1 · Reliability and authority | W17, G02, O03, O05 | Qualify representative failure/recovery, tenant isolation, revocation, sustained fairness and database failover. Complete domain writer ownership. |
| Separate activation | B07, B09 | Stripe and customer storage charging remain separate disabled capabilities requiring their own qualification and activation. |

## Feature matrix

### Access & onboarding

| Feature | Status | Code · UI · deployment | Behavior / remaining gap | Next action | Evidence |
| --- | --- | --- | --- | --- | --- |
| **A01 — Blazingfast SSO sign-in** | Qualification pending | Implemented · Wired or API/client path · Deployed | OIDC/PKCE BFF path is present and deployed. This audit did not complete a real identity-provider login; the prior SSO fix lives partly outside this repository. | Qualify a fresh browser Blazingfast login/callback/logout. Direct password access is a separately qualified alternative (A17). | [server.mjs](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/server/server.mjs#L76) · [SignInPage.tsx](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/features/auth/pages/SignInPage.tsx#L1) · [deployment-snapshot.json](deployment-snapshot.json) |
| **A02 — Native email registration and magic-link login** | Partial | Implemented with gaps · Wired with limitations · Deployed | Administrator-configured Resend is enabled. The recipient confirmed delivery; a real console browser sign-in request returned 202 and created a fresh 15-minute challenge. Email-link consumption and a new-user registration journey were not exercised by that live check. | Qualify receipt → one-use link consumption → session, expiry/replay and new-account registration. | [email-delivery-2026-09-11.json](qualification/email-delivery-2026-09-11.json) · [feature-flags.json](feature-flags.json) · [auth-routes.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/services/control-plane/src/auth-routes.ts#L1) · [SignInPage.tsx](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/features/auth/pages/SignInPage.tsx#L1) |
| **A03 — Passkey sign-in and account passkey management** | Qualification pending | Implemented · Wired or API/client path · Deployed | The undefined-options bug has a schema-checked adapter. Sign-in, listing and removal are wired; fresh physical-device enrollment and authentication were not exercised in this audit. | Qualify enrollment and login on supported browsers/devices, including recovery when no passkey exists. | [passkey.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/passkey.ts#L1) · [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/client.ts#L434) · [SignInPage.tsx](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/features/auth/pages/SignInPage.tsx#L1) |
| **A04 — Scoped API keys and revocation** | Done · bounded scope | Implemented · Wired · Deployed | Live UI creates scoped keys and only returns the secret once. Prior qualification verified project-bound access denial and revocation. | Keep negative scope and revocation checks in release gates. | [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/client.ts#L410) · [end-to-end-2026-09-07.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/end-to-end-2026-09-07.md#L1) · [runtime-rotation-qualification-2026-09-07.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/runtime-rotation-qualification-2026-09-07.md#L1) |
| **A05 — Project roles and invitations** | Partial | Implemented with gaps · Wired with limitations · Deployed | Project role changes, removal and email-addressed invitations exist. Direct-add is disabled; company billing membership is intentionally separate from project execution access. | Make invitation/link delivery explicit and qualify cross-role journeys in the browser. | [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/client.ts#L404) · [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L458) · [billing-company-accounts.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-company-accounts.md#L1) |
| **A06 — Account settings and device sessions** | Partial | Implemented with gaps · Wired with limitations · Deployed | Session interruption preference and device sign-out are wired. Other account update fields reject with feature_disabled; several preference displays are fixed defaults. | Wire supported settings and remove or disable controls that cannot persist. | [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/client.ts#L432) |
| **A07 — Project creation and repository settings** | Partial | Implemented with gaps · Wired with limitations · Deployed | Project creation and repository settings are wired. Source defaults and retention/checkpoint policy now have explicit flows, but the generic project update remains repository-focused and arbitrary field updates are not supported. | Verify the supported project settings in the browser and keep unsupported edits absent. | [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/api/live/client.ts#L290) · [user-agent-flow-completion-2026-09-11.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/user-agent-flow-completion-2026-09-11.md#L1) |
| **A08 — Public Git repository to prepared workspace** | Done · bounded scope | Implemented · CLI/API and workspace UI; full onboarding wizard not qualified · Deployed | Pinned public GitHub/GitLab checkout, frozen npm/pnpm/Yarn setup and saved-workspace recovery passed bounded live fixtures. | Retain these fixtures; private credentials and full browser onboarding have separate rows. | [public-onboarding-qualification-2026-09-07.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/public-onboarding-qualification-2026-09-07.md#L1) · [prepared-environments-qualification-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/prepared-environments-qualification-2026-09-08.md#L1) |
| **A09 — Private GitHub/GitLab onboarding and credential repair** | Partial | Implemented with gaps · Wired with limitations · Deployed | GitHub connection/repository selection and private credential paths exist, but the cited onboarding qualification explicitly excludes private permissions, revocation and secret repair. | Qualify fresh private repositories and actionable permission/revocation repair. | [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/client.ts#L454) · [public-onboarding-qualification-2026-09-07.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/public-onboarding-qualification-2026-09-07.md#L1) |
| **A10 — Verified source archive upload from browser** | Qualification pending | Implemented · Wired · Deployed | The browser now uploads actual archive bytes, verifies the digest, finalizes the source and publishes its index. Settings accepts a File instead of passing only filename/size. Code, adapter tests and the release are present; a fresh live browser upload-to-first-run journey remains unqualified. | Run a fresh browser archive upload, failure recovery and source admission journey. | [source-upload.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/api/live/source-upload.ts#L1) · [SettingsPage.tsx](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/features/settings/pages/SettingsPage.tsx#L1) · [source-publication-archive.test.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/services/control-plane/test/source-publication-archive.test.ts#L1) · [deployment-snapshot.json](deployment-snapshot.json) |
| **A11 — Source index publication and context discovery** | Qualification pending | Implemented · Wired · Deployed | Browser upload now publishes the verified archive index and source selection pins its identity. CLI/API paths remain available. The full fresh browser source/index/agent journey still needs live acceptance. | Verify publication, expired/replaced sources and selection in a real browser. | [source-upload.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/api/live/source-upload.ts#L1) · [ai-sessions.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/api/live/ai-sessions.ts#L227) · [user-agent-flow-completion-2026-09-11.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/user-agent-flow-completion-2026-09-11.md#L1) |
| **A12 — Development manifest and saved verification tasks** | Done · bounded scope | Implemented · Wired · Deployed | Manifest initialization and publishing, saved task edit/run paths and immutable task inputs have implementation and bounded qualification. | Keep exact package-manager pins and preserve source/task identities. | [public-onboarding-qualification-2026-09-07.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/public-onboarding-qualification-2026-09-07.md#L1) · [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L163) · [agent-sessions.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-sessions.md#L1) |
| **A13 — Project overview metrics and uploaded-source display** | UI / adapter stub | Operational path missing at this seam · Screen/adapter exists · Stub deployed | projectDto always returns zero run/spend/cap metrics, no sparkline, no uploaded source and no variables. These values are not measurements. | Map real aggregates and source state; show unavailable rather than zero when absent. | [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/client.ts#L115) |
| **A14 — Project variables editor** | UI / adapter stub | Operational path missing at this seam · Screen/adapter exists · Stub deployed | The variables editor calls projects.addVariable, which always throws; project variables are always mapped to an empty array. Project secrets are a separate working facility. | Choose a persisted variable contract and wire the editor and execution request. | [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/client.ts#L115) · [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/client.ts#L291) · [SettingsPage.tsx](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/features/settings/pages/SettingsPage.tsx#L217) |
| **A15 — Project payer transfer and project deletion UI** | UI / adapter stub | Operational path missing at this seam · Screen/adapter exists · Stub deployed | Both project transfer and delete adapters are disabled. Company payer ownership transfer does exist but does not move projects between payers. | Define archive/delete and cross-payer transfer semantics, then implement reviewed workflows. | [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/client.ts#L289) · [billing-company-accounts.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-company-accounts.md#L1) |
| **A16 — new.snabb.run as a production console** | UI / adapter stub | Operational path missing at this seam · Demo screens; billing links to canonical console · Stub deployed | The published second console builds in mock mode and loadApi selects MockApiClient. Agent live modules are copied there but do not make the deployed demo a live console; billing redirects to the canonical console. | Keep its demo label, or qualify and deploy live mode as a separate product decision. | [Dockerfile](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/snabb-console/Dockerfile#L8) · [provider.tsx](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/snabb-console/src/api/provider.tsx#L58) · [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/snabb-console/src/api/mock/client.ts#L1) · [agent-supervision-qualification-2026-09-09.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-supervision-qualification-2026-09-09.md#L37) · [billing-company-accounts.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-company-accounts.md#L1) |
| **A17 — Direct password setup, sign-in and sign-out** | Done · bounded scope | Implemented · Wired · Deployed | One-time password setup, salted scrypt, shared PostgreSQL attempt limits, session revocation and administrator eligibility are deployed. An isolated real browser fixture verified setup/replay rejection, login, secure cookies, sign-out, cross-origin denial and non-admin rejection. | Retain the regression and operator-controlled setup-token workflow. No administrator password is stored in this report. | [password-auth-2026-09-11.json](qualification/password-auth-2026-09-11.json) · [password-routes.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/services/control-plane/src/password-routes.ts#L1) |

### Billing & companies

| Feature | Status | Code · UI · deployment | Behavior / remaining gap | Next action | Evidence |
| --- | --- | --- | --- | --- | --- |
| **B01 — Shared beta plan catalogue** | Done · bounded scope | Implemented · Wired · Deployed | Trial, Developer, Team and Private beta with zero recurring fees are shared by backend, canonical console, admin and marketing. Public pricing labels matched during this audit. | Keep generated catalogue checks; zero recurring fee does not mean free compute. | [beta-catalogue.json](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/packages/contracts/billing/beta-catalogue.json#L1) · [billing-company-accounts.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-company-accounts.md#L1) · [public-checks.json](public-checks.json) |
| **B02 — Wallet admission, holds, settlement and fractional-cent carry** | Done · bounded scope | Implemented · Wired · Deployed | Reservations, exactly-once settlement, ledger debits and payer-level fractional-cent carry are implemented with transactional and rollout evidence. Historical PER_RUN amounts are preserved. | Continue invariant/replay checks when pricing or reservation semantics change. | [billing-company-accounts.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-company-accounts.md#L1) · [billing-isolation-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-isolation-2026-09-08.md#L1) · [billing-followups-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-followups-2026-09-08.md#L1) · [end-to-end-2026-09-07.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/end-to-end-2026-09-07.md#L1) |
| **B03 — Independent company payers and billing administrators** | Done · bounded scope | Implemented · Wired · Deployed | Company creation is enabled. Separate wallets, account selection, addressed invitations, billing administrators and payer ownership transfer are implemented. Billing roles deliberately do not grant source or execution access. | Retain browser and database membership tests; owners share invitation links manually. | [billing-company-accounts.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-company-accounts.md#L1) · [feature-flags.json](feature-flags.json) |
| **B04 — Company agreements and requested beta plan changes** | Done · bounded scope | Implemented · Canonical billing UI and operator console · Deployed | Admin-configured agreements and reviewed plan requests use the existing beta catalogue. Requests grant no entitlements before administrator approval. | Keep agreement changes visible and stale decisions rejected. | [billing-company-accounts.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-company-accounts.md#L1) |
| **B05 — Billing totals, ledger history and deposit receipts** | Partial | Implemented with gaps · Wired with limitations · Deployed | Authoritative month/holds/carry display and deposit receipts exist. Initial views are bounded to 100 ledger entries, 50 deposits and 50 reservations; full customer history navigation is incomplete. | Add explicit history bounds and server pagination/export for older records. | [billing-company-accounts.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-company-accounts.md#L1) · [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/client.ts#L338) |
| **B06 — Manual deposits and administrator-confirmed reversals** | Done · bounded scope | Implemented · Operator console; customer receipts · Deployed | Manual beta funding and reviewed refund/chargeback decisions are the supported model. Provider state changes create review work rather than silently deducting funds. | Retain human approval, audit evidence and idempotent retry behavior. | [billing-company-accounts.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-company-accounts.md#L1) · [billing-followups-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-followups-2026-09-08.md#L1) · [billing-isolation-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-isolation-2026-09-08.md#L1) |
| **B07 — Stripe checkout, webhook recovery and reconciliation** | Disabled / blocked | Implemented · Present or partially wired · Deployed | Code, reconciliation streams and admin panels are deployed, but Stripe is false in live configuration. Real provider payment/retry/return flows remain unqualified. | Connect approved credentials/webhook, qualify provider test mode, then explicitly enable. | [feature-flags.json](feature-flags.json) · [billing-followups-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-followups-2026-09-08.md#L1) · [billing-company-accounts.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-company-accounts.md#L1) |
| **B08 — Bounded storage and retained-output metering** | Done · bounded scope | Implemented · Billing/operator usage; not a complete storage inventory UI · Deployed | Durable paginated scans, account/hour publication and incomplete-scan refusal are implemented; natural hourly samples and disposable multi-page recovery were qualified. | Monitor accounts that cannot finish a scan within an hour; do not bill partial observations. | [billing-followups-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-followups-2026-09-08.md#L1) · [prepared-environments-qualification-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/prepared-environments-qualification-2026-09-08.md#L1) · [session-output-expiry.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/session-output-expiry.md#L1) |
| **B09 — Customer storage charging** | Disabled / blocked | Implemented · Present or partially wired · Deployed | The current global settings row is absent, which resolves to chargingEnabled=false. Allowance/rate and debit code exist, but charging has not been activated or fully qualified with customer-like test usage. | Qualify allowances, proration, carry, retries and ledger debits before a separate activation. | [storage-settings.json](storage-settings.json) · [storage-policy.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/services/control-plane/src/execution/storage-policy.ts#L23) · [billing-service.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-service.md#L1) · [eight-milestone-delivery.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/eight-milestone-delivery.md#L1) |
| **B10 — Company invitation delivery** | Partial | Implemented with gaps · Wired with limitations · Deployed | Company invite acceptance is implemented via manually shared links; creating an invitation sends no email. This is a delivery convenience gap, not a failure of company authorization. Recurring invoices and a distinct priced Enterprise tier are outside the approved beta model. | Keep link sharing explicit; optionally add invitation-email delivery. Do not treat abandoned paid plan designs as missing requirements. | [billing-company-accounts.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-company-accounts.md#L1) · [feature-flags.json](feature-flags.json) |

### Execution & delivery

| Feature | Status | Code · UI · deployment | Behavior / remaining gap | Next action | Evidence |
| --- | --- | --- | --- | --- | --- |
| **R01 — Isolated jobs on signed Firecracker runtimes** | Done · bounded scope | Implemented · Wired · Deployed | Command execution, timeout and bounded multiworker canaries were qualified; signed runtime catalogs and compatible worker/guest releases are recorded. | Preserve immutable source/runtime admission and per-worker canaries. | [agent-runner-supervisor-release-2026-09-10.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-runner-supervisor-release-2026-09-10.md#L1) · [runtime-rotation-qualification-2026-09-07.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/runtime-rotation-qualification-2026-09-07.md#L1) · [end-to-end-2026-09-07.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/end-to-end-2026-09-07.md#L1) |
| **R02 — Run form semantics: source, environment and advanced options** | Partial | Implemented with gaps · Wired with limitations · Deployed | Run admission now carries selected source/ref, environment, leased secrets, label, ephemeral retention, checkpoint and email options. Saved tasks bind their configuration ID; unsupported optimization goals are rejected. The resource/runtime UI remains limited and the complete live option matrix is not qualified. | Exercise each supported option through browser admission, execution and recorded results. | [ScriptForm.tsx](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/features/runs/components/ScriptForm.tsx#L1) · [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/api/live/client.ts#L341) · [user-agent-flow-completion-2026-09-11.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/user-agent-flow-completion-2026-09-11.md#L1) |
| **R03 — Run cost quotes and cancellation cost feedback** | Qualification pending | Implemented · Wired · Deployed | The fixed €0.50 quote is replaced by the current billing catalogue and requested resources/duration. Cancellation leaves unknown settlement explicit. Regression tests and deployment are complete; browser quote-to-actual-settlement acceptance remains to be run. | Compare displayed reservation and final measured settlement for success, cancellation and failure. | [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/api/live/client.ts#L341) · [ScriptForm.tsx](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/features/runs/components/ScriptForm.tsx#L1) · [user-agent-flow-completion-2026-09-11.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/user-agent-flow-completion-2026-09-11.md#L1) |
| **R04 — Complete run history and search** | Qualification pending | Implemented · Wired · Deployed | Run history and search now use server pagination, including records beyond the old latest-100 limit. Tests cover 124 visible runs, tenant isolation, sorting and labels. A live large-history browser journey remains unqualified. | Verify older pages, filters and reloads against a real account history. | [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/api/live/client.ts#L305) · [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/api/live/resources.ts#L1) · [user-agent-flow-completion-2026-09-11.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/user-agent-flow-completion-2026-09-11.md#L1) |
| **R05 — Run logs, artifact downloads and result verification** | Done · bounded scope | Implemented · Wired · Deployed | Bounded live execution verified artifact bytes/checksums, secret-safe delivery and signed results. Console routes and generated clients expose these paths. | Keep explicit retention/gap and signature status; do not infer completeness from a truncated view. | [end-to-end-2026-09-07.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/end-to-end-2026-09-07.md#L1) · [trusted-test-file-results-qualification-2026-09-09.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/trusted-test-file-results-qualification-2026-09-09.md#L1) · [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/client.ts#L307) |
| **R06 — Run provenance and environment detail presentation** | Partial | Implemented with gaps · Wired with limitations · Deployed | Run details now use recorded source, environment and region, mask leased secrets, expose unknown cache outcomes and calculate artifact retention from expiry. Some account-member/trigger labels and wider metadata views remain simplified. | Qualify browser result details against actual execution receipts and remove remaining synthetic identity labels. | [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/api/live/client.ts#L261) · [user-agent-flow-completion-2026-09-11.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/user-agent-flow-completion-2026-09-11.md#L1) |
| **R07 — Runtime and script-interpreter catalogue** | Partial | Implemented with gaps · Wired with limitations · Deployed | Node 22/24, Python and OCI have current promoted runtime evidence. The live UI also advertises Go, Rust and C/C++, while script admission explicitly allows only Node/Python profiles. | Build runtime/interpreter choices from current capabilities and explain unsupported combinations. | [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/client.ts#L282) · [routes.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/services/control-plane/src/routes.ts#L145) · [agent-runner-supervisor-release-2026-09-10.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-runner-supervisor-release-2026-09-10.md#L46) |
| **R08 — Schedules and schedule estimates** | Partial | Implemented with gaps · Wired with limitations · Deployed | Create/toggle APIs and scheduler are present, but the console estimate returns zero. Long-duration dispatch/failure behavior was not freshly qualified here. | Expose a real estimate or unavailable state and test missed ticks/recovery. | [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L211) · [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L218) · [deployment-snapshot.json](deployment-snapshot.json) |
| **R09 — Pipeline definition, immutable versions and full retained history** | Partial | Implemented with gaps · Wired with limitations · Deployed | YAML validation/save/trigger and retained-history pagination/direct lookup are wired. Pipeline summaries still contain placeholder aggregate timing/cost data. | Replace placeholder aggregates and qualify dispatch/report/publication recovery. | [pipeline-history-drafts.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/pipeline-history-drafts.md#L1) · [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L390) · [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L100) |
| **R10 — Pipeline step retry/resume and GitHub checks UI** | Partial | Implemented with gaps · Wired with limitations · Deployed | Whole-pipeline retry now creates a new run from the original immutable definition, commit and resources, with idempotent receipt recovery. Per-step retry/resume and GitHub check controls remain separate unsupported operations. | Qualify whole-run retry in the live browser and make unsupported step/check operations explicit. | [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/api/live/resources.ts#L409) · [pipeline-retry-postgres.test.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/services/control-plane/test/pipeline-retry-postgres.test.ts#L1) · [user-agent-flow-completion-2026-09-11.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/user-agent-flow-completion-2026-09-11.md#L1) |
| **R11 — OCI builds, verified images and remote BuildKit cache** | Done · bounded scope | Implemented · Wired · Deployed | Cross-worker cold/warm OCI builds produced matching image digests and verified cache import. Savings were measured for one bounded fixture, not a general performance guarantee. | Keep trust-scoped caches, signed results and representative follow-up benchmarks. | [prepared-environments-qualification-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/prepared-environments-qualification-2026-09-08.md#L1) · [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L423) |
| **R12 — SBOM and provenance document downloads** | Qualification pending | Implemented · Wired · Deployed | SBOM and provenance downloads now retrieve the actual build documents, check their stored/browser digests, enforce access and retention, and preserve exact JSON bytes. Tests and deployment are present; a real browser build-to-download journey remains unqualified. | Download and verify both documents from a real retained build; check expired and unauthorized access. | [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/api/live/resources.ts#L470) · [user-agent-flow-completion-2026-09-11.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/user-agent-flow-completion-2026-09-11.md#L1) |
| **R13 — Registry credentials and image lifecycle** | Partial | Implemented with gaps · Wired with limitations · Deployed | Live registry schema, credential creation/revocation and image metadata are wired. This audit did not exercise a fresh authenticated external push/pull or outage drill. | Qualify scoped push/pull, revocation and registry unavailability. | [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L430) · [prepared-environments-qualification-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/prepared-environments-qualification-2026-09-08.md#L1) |
| **R14 — Private previews and signed run HTTP/TCP/UDP access** | Partial | Implemented with gaps · Wired with limitations · Deployed | Create/stop and signed access/exposure operations are wired to deployed services. Usability depends on eligible policy, a running healthy target and the correct image/port. | Qualify browser access, expiry and revocation for each supported protocol. | [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L433) · [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/client.ts#L325) · [routes.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/services/control-plane/src/routes.ts#L3073) · [service-readiness.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/service-readiness.md#L1) |
| **R15 — Team previews, extension, relaunch and live preview events** | UI / adapter stub | Operational path missing at this seam · Screen/adapter exists · Stub deployed | Team visibility is explicitly refused; extend and relaunch throw. The preview event stream is an idle iterator that emits no events. | Implement team proxy policy and lifecycle/event contracts, or remove these UI promises. | [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L439) · [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L440) |
| **R16 — Generic integration and webhook management** | Partial | Implemented with gaps · Wired with limitations · Deployed | Repository-specific integration settings now expose verified identity, GitLab webhook setup/rotation, enable/disable and delivery outcomes. Generic webhooks, notification rules and generic test/connect adapters remain disabled. | Qualify repository-specific setup and delivery in the browser; keep generic unsupported channels clearly separate. | [git-integrations.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/api/live/git-integrations.ts#L1) · [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/api/live/resources.ts#L507) · [user-agent-flow-completion-2026-09-11.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/user-agent-flow-completion-2026-09-11.md#L1) |
| **R17 — GitLab CI project binding and triggers** | Partial | Implemented with gaps · Wired with limitations · Deployed | GitLab project binding and triggers now distinguish equal project IDs on different hosts/projects, validate Tag Push Hook events and recheck authority during admission. PostgreSQL and browser component tests passed; live private-provider browser acceptance remains open. | Exercise private repository setup, actual push/tag delivery, rotation and revocation in the deployed flow. | [git-integrations.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/api/live/git-integrations.ts#L1) · [user-agent-flow-completion-2026-09-11.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/user-agent-flow-completion-2026-09-11.md#L1) |

### Workspaces & sessions

| Feature | Status | Code · UI · deployment | Behavior / remaining gap | Next action | Evidence |
| --- | --- | --- | --- | --- | --- |
| **W01 — Named workspace lifecycle** | Done · bounded scope | Implemented · Wired · Deployed | Create/start/pause/stop/recover and real runtime state mapping are wired with deployed lifecycle and cross-worker qualification. | Keep uncertain transition handling and confirm saved generations before reporting success. | [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L310) · [session-lifecycle-qualification-2026-09-07.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/session-lifecycle-qualification-2026-09-07.md#L1) · [session-failure-recovery.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/session-failure-recovery.md#L1) |
| **W02 — Encrypted checkpoints, archive and recovery** | Done · bounded scope | Implemented · Wired · Deployed | Saved checkpoints, seven-day archive recovery and exact-version deletion have PostgreSQL/MinIO and bounded cross-worker evidence. | Preserve image/key recovery compatibility and shared-reference checks. | [workspace-archive-storage.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/workspace-archive-storage.md#L1) · [end-to-end-2026-09-07.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/end-to-end-2026-09-07.md#L1) · [agent-runner-supervisor-release-2026-09-10.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-runner-supervisor-release-2026-09-10.md#L1) |
| **W03 — Independent data disk and runtime changes** | Done · bounded scope | Implemented · Wired · Deployed | Published checkpoint-backed workspace data survives qualified Node/Python runtime changes and cross-worker recovery. This does not provide replicated live volumes. | Keep compatibility tests for each supported runtime migration. | [independent-workspace-disks.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/independent-workspace-disks.md#L1) · [eight-milestone-delivery.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/eight-milestone-delivery.md#L11) |
| **W04 — Replicated live volumes and survival of uncheckpointed writes** | Not implemented | Not implemented for the stated scope · Absent · No completed capability to deploy | The implemented disk model recovers published checkpoints; it does not guarantee uncheckpointed-write survival under physical host/disk loss. | Design replicated durable storage and failure semantics before promising this guarantee. | [independent-workspace-disks.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/independent-workspace-disks.md#L1) · [eight-milestone-delivery.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/eight-milestone-delivery.md#L11) |
| **W05 — Live revisions and incremental context** | Done · bounded scope | Implemented · CLI/VS Code/API; selected console metadata · Deployed | Fenced encrypted live revisions, bounded reconciliation and context cursors are deployed and qualified for bounded fixtures, with a 4,000-file live limit. | Expose the bound and retain full-rescan fallback; larger-load behavior has a separate row. | [live-workspace-revisions.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/live-workspace-revisions.md#L1) · [workspace-context.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/workspace-context.md#L1) · [eight-milestone-delivery.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/eight-milestone-delivery.md#L7) |
| **W06 — Prepared environments: publish, clone and revoke** | Done · bounded scope | Implemented · Wired · Deployed | Canonical console and downloaded CLI completed real publication, independent clone and revocation; trust/resource checks and cross-worker restore were qualified. | Retain digest-bound recipes and visible revocation reasons. | [prepared-environments-qualification-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/prepared-environments-qualification-2026-09-08.md#L1) |
| **W07 — Private prebuilds and large prepared-environment catalogues** | Partial | Implemented with gaps · Wired with limitations · Deployed | Public-source preparation works, but credential-bearing private prebuild qualification, catalogue pagination beyond 100 rows and representative large-load results remain open. | Qualify secret isolation and add pagination plus measured larger-repository cases. | [prepared-environments-qualification-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/prepared-environments-qualification-2026-09-08.md#L1) |
| **W08 — Fork, three-way comparison and selective file promotion** | Done · bounded scope | Implemented · Wired · Deployed | Saved-version comparison and keep/take file decisions have live qualification, fresh verification, concurrent-target rejection and durable retry evidence. | Keep target preconditions and verify the exact prepared result before publication. | [workspace-file-comparison-qualification-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/workspace-file-comparison-qualification-2026-09-08.md#L1) · [workspace-selective-promotion-qualification-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/workspace-selective-promotion-qualification-2026-09-08.md#L1) |
| **W09 — Inline text diff, custom edits and automatic line merge** | Not implemented | Not implemented for the stated scope · Absent · No completed capability to deploy | Selective promotion chooses saved file versions; inline text diffs, custom conflict editing and automatic line merging are not delivered by that implementation. | Implement bounded text review and explicit merge semantics with fresh verification. | [eight-milestone-delivery.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/eight-milestone-delivery.md#L12) · [workspace-file-comparison-qualification-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/workspace-file-comparison-qualification-2026-09-08.md#L1) · [workspace-selective-promotion-qualification-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/workspace-selective-promotion-qualification-2026-09-08.md#L1) |
| **W10 — Reference handoff versus cross-project workspace sharing** | Partial | Implemented with gaps · Wired with limitations · Deployed | Saved-generation reference handoff is implemented. Cross-project handoff and the general workspace share adapter remain unavailable. | Define authorization and source/secret boundaries for cross-project sharing before enabling it. | [eight-milestone-delivery.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/eight-milestone-delivery.md#L12) · [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L345) |
| **W11 — Browser workspace terminal and checkpoint terminal** | Qualification pending | Implemented · Wired · Deployed | Existing workspace terminals and the checkpoint debug UI use authenticated session-gateway admission. Checkpoint selection, resource/cost ceiling, shell and lease settings are preserved, reload reads the original receipt, and Stop cancels the debug job. Real browser attach/reconnect remains unqualified. | Qualify terminal input/output, reconnect, expiry, cancellation and cross-account denial in a real browser. | [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/api/live/resources.ts#L384) · [checkpoint-browser-postgres.test.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/services/control-plane/test/checkpoint-browser-postgres.test.ts#L1) · [user-agent-flow-completion-2026-09-11.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/user-agent-flow-completion-2026-09-11.md#L1) |
| **W12 — Structured commands, reconnect, cancellation and retained output** | Done · bounded scope | Implemented · CLI/VS Code/API; browser terminal separately unavailable · Deployed | Async command identity, wait/cancel, reconnect and more than 512 acknowledged commands have deployed runtime qualification. Unknown effects are not blindly replayed. | Preserve identities and truthful unknown/gap outcomes across all clients. | [runtime-rotation-qualification-2026-09-07.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/runtime-rotation-qualification-2026-09-07.md#L1) · [session-lifecycle-qualification-2026-09-07.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/session-lifecycle-qualification-2026-09-07.md#L1) · [session-failure-recovery.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/session-failure-recovery.md#L1) |
| **W13 — Named service TCP/HTTP readiness** | Done · bounded scope | Implemented · Wired · Deployed | Configured readiness probes and retained output have deployed bounded qualification; a process start alone is not treated as readiness. | Retain timeout and failed-readiness tests. | [service-readiness.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/service-readiness.md#L1) · [eight-milestone-delivery.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/eight-milestone-delivery.md#L9) |
| **W14 — 90-day output policy and natural production expiry** | Partial | Implemented with gaps · Wired with limitations · Deployed | Retention/accounting and elapsed-deadline fixture reclamation are implemented. Natural seven-day archive deadlines fall on 14–15 September; 90-day output deadlines have not elapsed on this audit date. | Observe scheduled expiry and GC/restore races at real deadlines; do not claim future checks as passed. | [session-output-expiry.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/session-output-expiry.md#L1) · [public-onboarding-qualification-2026-09-07.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/public-onboarding-qualification-2026-09-07.md#L1) · [eight-milestone-delivery.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/eight-milestone-delivery.md#L27) |
| **W15 — Storage inventory, retention editor and external backup bucket** | Partial | Implemented with gaps · Wired with limitations · Deployed | Storage inventory remains bounded and the generic storage retention/bucket adapters remain disabled. Owners can now edit project artifact retention/checkpoint policy through Settings; checkpoint retention uses observed expiry and cannot revive expired payloads. | Qualify the supported project/checkpoint policy editors and separate them from unsupported generic storage/bucket controls. | [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/api/live/resources.ts#L240) · [SettingsPage.tsx](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/features/settings/pages/SettingsPage.tsx#L1) · [checkpoint-browser-postgres.test.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/services/control-plane/test/checkpoint-browser-postgres.test.ts#L1) · [user-agent-flow-completion-2026-09-11.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/user-agent-flow-completion-2026-09-11.md#L1) |
| **W16 — Bounded partition recovery without duplicate effects** | Done · bounded scope | Implemented · Wired · Deployed | A 20-second packet partition and abrupt VM loss during a 120-second worker API partition have live evidence of preserved command identities and settled/released reservations. | Keep these qualified failure cases; broader gateway/scheduler restart combinations, physical and correlated loss require separate qualification. | [session-failure-recovery.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/session-failure-recovery.md#L1) · [runtime-rotation-qualification-2026-09-07.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/runtime-rotation-qualification-2026-09-07.md#L1) |
| **W17 — Physical host/disk loss, multi-day soak and tenant fairness** | Qualification pending | Implemented · Wired or API/client path · Deployed | Existing bounded recovery tests do not establish physical disk/host-loss recovery, correlated failure, multi-day session survival or sustained fairness/latency SLOs. | Run isolated physical-failure and sustained multi-tenant campaigns with p50/p95/p99 and resource-growth evidence. | [eight-milestone-delivery.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/eight-milestone-delivery.md#L24) · [agent-runner-supervisor-release-2026-09-10.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-runner-supervisor-release-2026-09-10.md#L1) · [session-failure-recovery.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/session-failure-recovery.md#L1) |

### Agents

| Feature | Status | Code · UI · deployment | Behavior / remaining gap | Next action | Evidence |
| --- | --- | --- | --- | --- | --- |
| **S01 — Agent API discovery and structured SDK lifecycle** | Done · bounded scope | Implemented · API, CLI and SDKs · Deployed | Published OpenAPI has 190 operations at this snapshot; source contracts, generated JavaScript/Python clients and independent structured lifecycle examples exist. Interactive identity/payment operations are intentionally excluded. | Validate generated contracts against the running API and keep structured error/recovery examples. | [agent-core-v1.json](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/packages/contracts/openapi/agent-core-v1.json#L1) · [agent-sdk.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-sdk.md#L1) · [public-checks.json](public-checks.json) |
| **S02 — Personal BYOK provider settings** | Done · bounded scope | Implemented · Wired · Deployed | OpenAI, Claude, Gemini and custom-compatible configuration is user/account-scoped with write-only Vault credentials and pinned endpoint checks. Saving configuration intentionally makes no paid validation call. | Retain owner isolation and removal fencing; actual provider credentials require user-specific qualification. | [agent-sessions.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-sessions.md#L1) · [ai-providers.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/ai-providers.ts#L1) · [feature-flags.json](feature-flags.json) |
| **S03 — Native agent edit, approvals, tests and source download** | Done · bounded scope | Implemented · Wired · Deployed | Native sessions pin source/provider/model, perform reviewed edits and verification, and save a report and downloadable archive. Fixtures cover approvals, budgets, cleanup and settlement. | Keep source/task prerequisites visible; this scope excludes autonomous Git push and production Codex runner admission. | [agent-sessions.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-sessions.md#L1) · [agent-runner-supervisor-release-2026-09-10.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-runner-supervisor-release-2026-09-10.md#L1) · [agent-suggestion-answer-fix-2026-09-11.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-suggestion-answer-fix-2026-09-11.md#L1) |
| **S04 — Useful source-backed suggestion answer on a real account** | Qualification pending | Implemented · Wired or API/client path · Deployed | The first real ChatGPT request returned an inadequate answer without admitted source. The fix is deployed on both schedulers and console; the corrected useful real-provider workflow was not rerun in the recorded release. | Publish verified source and qualify one authorized real-account suggestion, including rendered answer and usage. | [agent-suggestion-answer-fix-2026-09-11.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-suggestion-answer-fix-2026-09-11.md#L1) · [deployment-snapshot.json](deployment-snapshot.json) |
| **S05 — Model quotas and hard in-flight token/cost ceilings** | Partial | Implemented with gaps · Wired with limitations · Deployed | Budgets and usage are enforced at iteration/request boundaries with unknown-result fencing. They are not a hard cap on provider consumption inside an already running request; provider invoice reconciliation remains unqualified. | Present the boundary clearly and qualify provider errors, throttling, refresh and invoice reconciliation. | [agent-sessions.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-sessions.md#L1) · [agent-chatgpt-connection-release-2026-09-10.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-chatgpt-connection-release-2026-09-10.md#L1) · [agent-runner-supervisor-release-2026-09-10.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-runner-supervisor-release-2026-09-10.md#L1) |
| **S06 — Personal ChatGPT connection and account-backed native execution** | Partial | Implemented with gaps · Wired with limitations · Deployed | Connections and account runs are enabled with dedicated isolated workers. A real account request is documented, but useful corrected source analysis, refresh/rate limits and multi-day qualification remain open. This is the native executor using the account connection. | Finish the source-backed real-account journey and account lifecycle/failure qualification. | [agent-chatgpt-connection-release-2026-09-10.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-chatgpt-connection-release-2026-09-10.md#L1) · [agent-suggestion-answer-fix-2026-09-11.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-suggestion-answer-fix-2026-09-11.md#L1) · [feature-flags.json](feature-flags.json) · [agent-connections.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/agent-connections.ts#L1) |
| **S07 — Durable multi-turn agent and workspace admission** | Disabled / blocked | Implemented with remaining release work · Present or partially wired · Deployed supporting components | Durable session, interaction and private-workspace components are deployed, but effective durable admission remains disabled. Native single-task execution is separately enabled. Production controller integration and broader durable failure/recovery acceptance remain open. | Complete the production durable controller and qualify admission, approvals, cancellation, recovery and usage before enabling. | [feature-flags.json](feature-flags.json) · [durable-agent-sessions.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/durable-agent-sessions.md#L1) · [user-agent-flow-completion-2026-09-11.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/user-agent-flow-completion-2026-09-11.md#L1) |
| **S08 — Full production Codex runner with authenticated tools** | Disabled / blocked | Adapter/guest/bridge implemented; production controller integration incomplete · Present or partially wired · Deployed supporting components | The standalone Codex adapter, guest, journal and approval/command bridge have local qualification. The full production runner controller is not completed or selectable; an enabled personal ChatGPT connection does not establish full Codex workspace execution. | Finish physical workspace/worker controller integration and authenticated tool turns, then qualify reviewed effects, cancellation, recovery and limits. | [durable-agent-sessions.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/durable-agent-sessions.md#L1) · [user-agent-flow-completion-2026-09-11.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/user-agent-flow-completion-2026-09-11.md#L1) |
| **S09 — Exact-payload effect approval and denial** | Done · bounded scope | Implemented · Wired · Deployed | Real approvals bind the currently proposed payload digest and session authority, reject stale decisions and preserve cancellation fences. Approval inbox actions are wired. | Keep approval rechecks at dispatch and do not equate opening a review page with granting approval. | [ai-sessions.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/ai-sessions.ts#L296) · [agent-runner-supervisor-release-2026-09-10.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-runner-supervisor-release-2026-09-10.md#L1) · [agent-sessions.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-sessions.md#L1) |
| **S10 — Pause/resume/stop, guidance and saved activity history** | Done · bounded scope | Implemented · Wired · Deployed | Native controls and interaction messages are wired; bounded replay, snapshots, decimal cursors and refresh behavior are qualified. This does not override disabled durable admission. | Retain fresh-history and lost-response recovery checks across console/CLI. | [ai-sessions.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/ai-sessions.ts#L281) · [agent-supervision-qualification-2026-09-09.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-supervision-qualification-2026-09-09.md#L1) · [agent-suggestion-answer-fix-2026-09-11.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-suggestion-answer-fix-2026-09-11.md#L1) |
| **S11 — Legacy plan approval, per-file decisions and playbooks UI** | UI / adapter stub | Operational path missing at this seam · Screen/adapter exists · Stub deployed | Legacy approvePlan/rejectPlan/decideFile adapters throw and playbooks returns an empty list. Actual exact-action approval is implemented separately and must not be classified as missing. | Remove superseded seams or implement the intended plan/file/playbook workflows consistently. | [ai-sessions.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/ai-sessions.ts#L279) · [ai-sessions.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/ai-sessions.ts#L287) · [ai-sessions.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/ai-sessions.ts#L291) |
| **S12 — Agent approve-and-push, take-over and report archive actions** | Partial | Implemented with gaps · Wired with limitations · Deployed | Reviewed Git publication and session archive now have working server/client paths. Publication pins reviewed files/base commit and reconciles an uncertain provider response without another write; archive fences outstanding publication. A synthetic live GitLab provider test passed and cleaned up its branch. Full browser-to-provider acceptance and the separate take-over workflow remain open. | Qualify browser review → approval → Git branch, recovery and archive with a disposable repository; separately resolve take-over behavior. | [ai-sessions.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/api/live/ai-sessions.ts#L303) · [ai-sessions.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/api/live/ai-sessions.ts#L295) · [git-publication.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/services/control-plane/src/ai/git-publication.ts#L1) · [git-publication-2026-09-11.json](qualification/git-publication-2026-09-11.json) |
| **S13 — Agent private workspace writer handoff and promotion** | Partial | Implemented with gaps · Wired with limitations · Deployed | Private saved-workspace integration and handoff tests exist, but general admission is gated and broader writable/failure/return-handoff qualification remains limited. | Finish owner handoff, reclaim after human changes and live writable-effect qualification before general availability. | [agent-workspace-qualification-2026-09-09.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-workspace-qualification-2026-09-09.md#L1) · [agent-runner-supervisor-release-2026-09-10.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-runner-supervisor-release-2026-09-10.md#L1) |
| **S14 — Durable in-app agent inbox** | Done · bounded scope | Implemented · Wired · Deployed | Persisted inbox/read state and review links have live read qualification and shared console/CLI client handling. Availability does not itself grant durable execution admission. | Keep notification counts, links and pagination aligned with durable records. | [agent-notifications.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/agent-notifications.ts#L1) · [agent-workspace-qualification-2026-09-09.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-workspace-qualification-2026-09-09.md#L71) · [agent-supervision-qualification-2026-09-09.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-supervision-qualification-2026-09-09.md#L1) |
| **S15 — Email agent completion and approval notifications** | Qualification pending | Implemented · Wired · Deployed | Resend delivery is now enabled and a real test was received. Agent/run notifications use durable outbox records, stable send identity, access rechecks and read/opt-out suppression. Real completion/approval notification delivery was not exercised by the generic test or sign-in request. | Qualify an opted-in completion and approval message, link access, retries, opt-out and read suppression. | [email-delivery-2026-09-11.json](qualification/email-delivery-2026-09-11.json) · [email.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/services/control-plane/src/lib/email.ts#L1) · [user-agent-flow-completion-2026-09-11.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/user-agent-flow-completion-2026-09-11.md#L1) |
| **S16 — External agent connection tokens and rotation wizard** | UI gap | Implemented backend/client path · Missing or disabled live UI path · Backend deployed | The agent registry can list/revoke agents, but connectInfo/connect/rotateToken methods are disabled. Scoped API keys are the supported alternative. | Point the wizard to scoped API-key creation/revocation or implement dedicated managed credentials. | [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L448) · [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/client.ts#L410) |
| **S17 — Downloaded CLI and VS Code extension distribution** | Done · bounded scope | Implemented · Published command-line and extension artifacts · Deployed | Public CLI/extension distribution remains available with versioned download metadata and dated checksum/acceptance evidence. The refreshed public observation records the current manifest; distribution does not certify every physical client workflow. | Keep artifact/source checksums current and run the separate real-client acceptance journey. | [public-checks.json](public-checks.json) · [agent-chatgpt-connection-release-2026-09-10.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/agent-chatgpt-connection-release-2026-09-10.md#L1) · [agent-supervision-qualification-2026-09-09.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/agent-supervision-qualification-2026-09-09.md#L1) |
| **S18 — Fresh physical-device and VS Code extension-host acceptance** | Qualification pending | Implemented · Wired or API/client path · Deployed | Browser/client fixtures and downloads are qualified, but real device and extension-host login/recovery acceptance remains a stated release limitation. | Run the full install, login, attach, reconnect and approval journey in actual supported clients. | [agent-runner-supervisor-release-2026-09-10.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-runner-supervisor-release-2026-09-10.md#L1) · [agent-supervision-qualification-2026-09-09.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-supervision-qualification-2026-09-09.md#L1) |

### Test intelligence

| Feature | Status | Code · UI · deployment | Behavior / remaining gap | Next action | Evidence |
| --- | --- | --- | --- | --- | --- |
| **T01 — Source-bound advisory impact and archive explanations** | Done · bounded scope | Implemented · API/CLI/SDK; not a complete console analysis workbench · Deployed | Verified archives, static JS/TS dependencies and runtime evidence produce bounded candidate explanations with explicit full-suite-required semantics. API/CLI/SDK agreement has live evidence. | Keep source identity, deletion lineage and uncovered-input reasons visible. | [archive-backed-test-impact-qualification-2026-09-09.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/archive-backed-test-impact-qualification-2026-09-09.md#L1) · [runtime-test-impact.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/runtime-test-impact.md#L1) · [source-inputs-qualification-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/source-inputs-qualification-2026-09-08.md#L1) |
| **T02 — Smart Run source/runtime admission binding** | Done · bounded scope | Implemented · Wired · Deployed | Admission pins approved source, declared inputs and runtime identities; mismatches/retries and settlement were exercised across workers. | Continue negative binding checks and retain full-suite fallback. | [smart-run-admission-binding-qualification-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/smart-run-admission-binding-qualification-2026-09-08.md#L1) |
| **T03 — Signed isolated Node test-file results** | Done · bounded scope | Implemented · Wired · Deployed | Enforced Node file-process execution and signed pass/fail results have cross-worker evidence. Reported Node test cases retain explicit trust limits. | Keep process-level attestation distinct from trusted individual test-case attribution. | [trusted-test-file-results-qualification-2026-09-09.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/trusted-test-file-results-qualification-2026-09-09.md#L1) · [test-impact-corpus-qualification-2026-09-09.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/test-impact-corpus-qualification-2026-09-09.md#L1) |
| **T04 — Runtime input attribution and directory/hidden-input coverage** | Partial | Implemented with gaps · Wired with limitations · Deployed | Completed isolated Node results contribute signed observation-window file edges. Inotify does not identify the reader; directory membership/absence and hidden inputs are not completely observed. | Implement stronger input observation and broaden correctness fixtures before making sound selection claims. | [runtime-test-impact.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/runtime-test-impact.md#L3) · [runtime-test-impact.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/runtime-test-impact.md#L7) · [runtime-test-impact.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/runtime-test-impact.md#L9) · [source-comparison.json](source-comparison.json) |
| **T05 — Verified test selection and reusable verdicts** | Not implemented | Not implemented for the stated scope · Absent · No completed capability to deploy | Automatic selection and result reuse remain disabled by design. Advisory candidates and a 25-mutation corpus do not establish safe skipping of the full suite. | Prove complete immutable input/coverage rules and invalidation before enabling selection or reuse. | [runtime-test-impact.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/runtime-test-impact.md#L17) · [test-impact-corpus-qualification-2026-09-09.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/test-impact-corpus-qualification-2026-09-09.md#L1) · [eight-milestone-delivery.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/eight-milestone-delivery.md#L13) |
| **T06 — Reuse button and reusable-result revocation UI** | UI / adapter stub | Operational path missing at this seam · Screen/adapter exists · Stub deployed | runs.useResult and storage.revokeReuse are disabled, while reuse-related design interfaces exist. There is no usable verified reuse path behind them. | Hide unsupported actions until T05 is safely implemented. | [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/client.ts#L316) · [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L461) |
| **T07 — Investigations, insights, test quarantine and feedback** | Partial | Implemented with gaps · Wired with limitations · Deployed | Investigation APIs are partially wired, but feedback and quarantine are disabled; entitlement flags and simplified estimates do not prove complete diagnostic behavior. | Qualify the actual investigation/bisect flow and remove unsupported quarantine/feedback controls. | [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L365) · [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L377) · [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/client.ts#L282) |

### Governance & trust

| Feature | Status | Code · UI · deployment | Behavior / remaining gap | Next action | Evidence |
| --- | --- | --- | --- | --- | --- |
| **G01 — Write-only project secrets and provider secret isolation** | Done · bounded scope | Implemented · Wired · Deployed | Project secret create/delete and delivery are implemented and qualified. Reveal is intentionally unavailable; replacement by the same name is the supported rotation path. | Preserve write-only storage; make the replacement workflow clear rather than adding reveal. | [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L459) · [end-to-end-2026-09-07.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/end-to-end-2026-09-07.md#L1) · [agent-sessions.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-sessions.md#L1) |
| **G02 — RBAC, capability scopes and billing-only access** | Partial | Implemented with gaps · Wired with limitations · Deployed | Scoped authorization and billing-role isolation are implemented with negative tests. The whole-platform consistency/tenant-fairness assurance milestone remains broader than those tests. | Complete a cross-entrypoint human/agent/CI permission and revocation matrix. | [billing-isolation-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-isolation-2026-09-08.md#L1) · [billing-company-accounts.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-company-accounts.md#L1) · [agent-core-v1.json](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/packages/contracts/openapi/agent-core-v1.json#L1) · [eight-milestone-delivery.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/eight-milestone-delivery.md#L14) |
| **G03 — Runtime-enforced read-only command profile** | Done · bounded scope | Implemented · Wired · Deployed | Namespace/Landlock enforcement makes source/runtime read-only, removes external network and confines temporary files; unsupported kernels fail closed. Deployed guest support supersedes older pending notes. | Retain synchronous/async escape and writable-command regressions. | [agent-sessions.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-sessions.md#L1) · [agent-runner-supervisor-release-2026-09-10.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/agent-runner-supervisor-release-2026-09-10.md#L1) |
| **G04 — General egress and unified policy enforcement** | Partial | Implemented with gaps · Wired with limitations · Deployed | The Resend incident exposed missing Cilium DNS observation for FQDN allowlists. The deployed DNS policy now makes the existing Resend/GitHub/OAuth destination rules effective, and repository checks cover every Snabb FQDN rule. General cross-entrypoint egress/revocation assurance remains broader than this fix. | Retain DNS policy regression checks and qualify redirect/revocation behavior across execution paths. | [email-delivery-2026-09-11.json](qualification/email-delivery-2026-09-11.json) · [10-guardrails.yaml](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/deploy/snabb/manifests/10-guardrails.yaml#L1) · [test_snabb_network_policies.py](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/scripts/test_snabb_network_policies.py#L1) · [service-route-ownership.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/service-route-ownership.md#L1) |
| **G05 — Policy profile editor and exception requests** | UI / adapter stub | Operational path missing at this seam · Screen/adapter exists · Stub deployed | Session time limits can persist, but editProfile and requestException are disabled. The live feature map advertises several capabilities statically. | Drive controls from actual capability discovery and wire reviewed profile/exception contracts. | [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L453) · [ai-sessions.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/ai-sessions.ts#L309) · [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/client.ts#L282) |
| **G06 — Audit chaining, WORM export and permanent-gap disclosure** | Partial | Implemented with gaps · Wired with limitations · Deployed | Export isolation and acknowledged-gap continuation are implemented. One historical chain gap remains permanently invalid; later valid exports do not repair full-chain integrity. | Keep permanent-gap disclosure and monitoring; never describe the affected chain as fully verified. | [audit-permanent-gap-reconciliation.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/audit-permanent-gap-reconciliation.md#L1) · [audit-export-isolation-2026-09-07.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/audit-export-isolation-2026-09-07.md#L1) |
| **G07 — Console audit history, saved filters, live tail and export semantics** | Partial | Implemented with gaps · Wired with limitations · Deployed | Console auditRows aggregates up to 50 sessions of events. saveFilter only returns an object, savedFilters is empty and tail emits nothing; stats are not a complete daily audit aggregate. | Connect the canonical audit ledger with server pagination, persisted filters and real streaming; label limited exports. | [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L455) · [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L456) |
| **G08 — Service status, capacity, uptime and incidents display** | Partial | Implemented with gaps · Wired with limitations · Deployed | The hardcoded Operational/100% uptime display is replaced by current worker state, observed region/capacity and explicit unknown 30-day uptime. This is a worker availability snapshot; retained incident history and live status subscriptions are not implemented. | Verify degraded/unavailable worker rendering and add uptime/incident history only from retained measurements. | [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/api/live/client.ts#L447) · [user-agent-flow-completion-2026-09-11.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/user-agent-flow-completion-2026-09-11.md#L1) |
| **G09 — Custom alerts, delivery tests and notification rules** | UI / adapter stub | Operational path missing at this seam · Screen/adapter exists · Stub deployed | Budget alert history/acknowledgement works. Custom create/toggle/test-fire and notification-rule adapters are disabled; the feature map already sets some flags false. | Separate usable budget alerts from unavailable custom alert channels. | [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L444) · [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L462) · [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/client.ts#L282) |
| **G10 — Trust portal DPA, reports and account-wide export** | UI / adapter stub | Operational path missing at this seam · Screen/adapter exists · Stub deployed | Trust content is largely static; DPA download, exportAll and report requests throw. No certification or complete compliance evidence is established by that page. | Publish only supported evidence and implement document/export workflows with an actual owner. | [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/client.ts#L418) |
| **G11 — Support tickets and documentation feedback** | UI / adapter stub | Operational path missing at this seam · Screen/adapter exists · Stub deployed | Support ticket list is always empty and creation is disabled. Documentation helpful feedback also throws; local documentation content/search still works. | Connect a support backend or provide an explicit supported contact route; remove dead feedback controls. | [resources.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/resources.ts#L463) · [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/apps/console/src/api/live/client.ts#L450) |
| **G12 — Admin Resend configuration and test delivery** | Done · bounded scope | Implemented · Wired · Deployed | The complete Settings page now binds after insertion. The saved key is write-only in Vault, sender changes require a fresh test, provider failures are safe and specific, uncertain retries survive reload, and a successful new test gets a new identity. Delivery was confirmed by the authorized recipient and enabled with an audit record. | Monitor provider failures and qualify actual opted-in workflow notifications separately. | [email-delivery-2026-09-11.json](qualification/email-delivery-2026-09-11.json) · [email-settings.js](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/admin/public/email-settings.js#L1) · [admin-email-routes.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/services/control-plane/src/admin-email-routes.ts#L1) |

### Operations

| Feature | Status | Code · UI · deployment | Behavior / remaining gap | Next action | Evidence |
| --- | --- | --- | --- | --- | --- |
| **O01 — Current application deployment readiness** | Done · bounded scope | Implemented · Operator tooling/monitoring · Deployed | The fresh snapshot records 20 application deployments and MinIO at requested readiness. Public readiness endpoints are recorded separately. This is point-in-time health, not uptime or complete workflow qualification. | Keep readiness monitoring and distinguish service health from user-flow acceptance. | [deployment-snapshot.json](deployment-snapshot.json) · [public-checks.json](public-checks.json) |
| **O02 — Billing database and command-credential isolation** | Done · bounded scope | Implemented · Operator configuration · Deployed | Billing uses a designated writer, separate read-only identities and scoped command authentication; migrations/negative permission checks and rollout invariants are documented. | Preserve least privilege and per-domain command scopes during migrations. | [billing-isolation-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-isolation-2026-09-08.md#L1) · [billing-followups-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-followups-2026-09-08.md#L1) |
| **O03 — Complete domain database ownership and distributed transactions** | Not implemented | Not implemented for the stated scope · Absent · No completed capability to deploy | Shared routing ownership is generated consistently, but extracted control-plane services still use shared models and cross-domain writes. Billing isolation does not complete this architecture. | Assign one writer per aggregate, then add outbox/idempotent command and reconciliation boundaries before removing shared writes. | [service-route-ownership.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/service-route-ownership.md#L1) |
| **O04 — Database backup and isolated restore drills** | Done · bounded scope | Implemented · Operator tooling · Deployed | Encrypted backup checksums and actual isolated control/auth/billing restores have release evidence, including post-company-schema restore. This is not a live failover guarantee. | Retain scheduled restore verification and key compatibility. | [billing-company-accounts.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-company-accounts.md#L1) · [end-to-end-2026-09-07.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/end-to-end-2026-09-07.md#L1) · [billing-followups-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-followups-2026-09-08.md#L1) |
| **O05 — Database failover and sustained capacity qualification** | Qualification pending | Implemented · Wired or API/client path · Deployed | Bounded HTTP/load and restore tests exist, but database failover, sustained multi-tenant saturation, distributed customer rate limits and recovery percentiles remain open. | Run representative load/failover tests and document capacity limits, queue fairness and recovery SLOs. | [billing-followups-2026-09-08.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/billing-followups-2026-09-08.md#L1) · [eight-milestone-delivery.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/7ff34500e37ef15a5f5c5b85f4a791a60f29788d/docs/eight-milestone-delivery.md#L24) |
| **O06 — Latest pipeline and fixed-revision release qualification** | Done · bounded scope | Implemented · Wired · Deployed | Pipeline 5394 passed all 30 jobs at d8c9f75, including runtime build, worker/runtime promotion, application deployment and both live canaries. All 20 application deployments are ready at this same revision. New local P1 fixes require their own qualified release. | Keep subsequent application changes pinned and pass the same release gates before claiming them deployed. | [pipeline-snapshot.json](pipeline-snapshot.json) · [password-auth-2026-09-11.json](qualification/password-auth-2026-09-11.json) · [email-delivery-2026-09-11.json](qualification/email-delivery-2026-09-11.json) · [fixed-release-2026-09-11.json](qualification/fixed-release-2026-09-11.json) |
| **O07 — Main/deployed source reconciliation and remaining branch** | Partial | Implemented with gaps · Wired with limitations · Deployed | All 20 application deployments now run the fully qualified d8c9f75 revision. Main f5b0708 adds documentation only. Independent feature branch review and the remaining P1 work continue; the progress branch is intentionally separate. | Keep subsequent P1 implementation and branch review reconciled to a fixed application revision. | [source-comparison.json](source-comparison.json) · [deployment-snapshot.json](deployment-snapshot.json) · [audit-end-check.json](audit-end-check.json) · [fixed-release-2026-09-11.json](qualification/fixed-release-2026-09-11.json) |
| **O08 — Accurate product capability and release documentation** | Partial | Implemented with gaps · Wired with limitations · Deployed | The audit now incorporates password and Resend qualification, deployed upload/run/action wiring and current pipeline state. It retains distinct code/UI/deployment/usability/evidence dimensions. Some legacy feature flags, overview values, disabled adapters and old implementation-ledger checkpoints still need reconciliation. | Use this matrix as a dated inventory; update rows only with current source and qualification evidence. | [user-agent-flow-completion-2026-09-11.md](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/docs/user-agent-flow-completion-2026-09-11.md#L1) · [client.ts](https://gitlabb.blazingfast.io/platform/snabb/-/blob/f5b07085937319e91c6b83c289bbe933801f3760/apps/console/src/api/live/client.ts#L288) · [source-comparison.json](source-comparison.json) |

## User and agent relations

Arrows are prerequisites or handoffs, with alternatives labeled. Dashed edges touch blocked/stub/unimplemented nodes; a green node does not make an incomplete journey usable.

### User: sign in → first useful run

Password authentication has real browser qualification. Email delivery and sign-in request work; link consumption, registration, private permissions and source-upload-to-first-run still need full live acceptance.

```mermaid
flowchart LR
  A01["A01 · Blazingfast SSO sign-in"]:::unverified
  A17["A17 · Direct password setup, sign-in and sign-out"]:::done
  A02["A02 · Native email registration and magic-link login"]:::partial
  A03["A03 · Passkey sign-in and account passkey management"]:::unverified
  B01["B01 · Shared beta plan catalogue"]:::done
  B03["B03 · Independent company payers and billing administrators"]:::done
  A07["A07 · Project creation and repository settings"]:::partial
  A09["A09 · Private GitHub/GitLab onboarding and credential repair"]:::partial
  A10["A10 · Verified source archive upload from browser"]:::unverified
  A11["A11 · Source index publication and context discovery"]:::unverified
  A12["A12 · Development manifest and saved verification tasks"]:::done
  R01["R01 · Isolated jobs on signed Firecracker runtimes"]:::done
  R05["R05 · Run logs, artifact downloads and result verification"]:::done
  B02["B02 · Wallet admission, holds, settlement and fractional-cent carry"]:::done
  G12["G12 · Admin Resend configuration and test delivery"]:::done
  A01 -->|"SSO option"| B01
  A03 -->|"passkey option"| B01
  B01 -->|"optional company payer"| B03
  B01 -->|"personal payer"| A07
  B03 -->|"new company project"| A07
  A07 -->|"repository source option"| A09
  A07 -->|"archive source option"| A10
  A10 -->|"verify and publish"| A11
  A11 -->|"bind task"| A12
  A09 -->|"repository task"| A12
  A12 -->|"admit run"| R01
  R01 -->|"inspect output"| R05
  R01 -->|"settle usage"| B02
  A17 -->|"qualified password identity alternative"| A07
  A17 -->|"administrator configures sender"| G12
  G12 -->|"Resend enabled"| A02
  A02 -->|"email: link consumption pending"| B01
  classDef done fill:#147d59,color:#fff,stroke:#147d59
  classDef partial fill:#a45e04,color:#fff,stroke:#a45e04
  classDef ui fill:#7451bb,color:#fff,stroke:#7451bb
  classDef blocked fill:#c13737,color:#fff,stroke:#c13737
  classDef stub fill:#ad3e74,color:#fff,stroke:#ad3e74
  classDef notdone fill:#617080,color:#fff,stroke:#617080
  classDef unverified fill:#2376b6,color:#fff,stroke:#2376b6
  classDef undeployed fill:#b9531d,color:#fff,stroke:#b9531d
```

### User + native agent: source → provider → reviewed result

Native BYOK/account paths are enabled. Reviewed publication/archive are implemented but need full browser acceptance. Durable admission and full production Codex remain gated, independently of model-account connection.

```mermaid
flowchart LR
  A01["A01 · Blazingfast SSO sign-in"]:::unverified
  B01["B01 · Shared beta plan catalogue"]:::done
  A10["A10 · Verified source archive upload from browser"]:::unverified
  A11["A11 · Source index publication and context discovery"]:::unverified
  A12["A12 · Development manifest and saved verification tasks"]:::done
  S02["S02 · Personal BYOK provider settings"]:::done
  S06["S06 · Personal ChatGPT connection and account-backed native execution"]:::partial
  S03["S03 · Native agent edit, approvals, tests and source download"]:::done
  S04["S04 · Useful source-backed suggestion answer on a real account"]:::unverified
  S09["S09 · Exact-payload effect approval and denial"]:::done
  S10["S10 · Pause/resume/stop, guidance and saved activity history"]:::done
  R01["R01 · Isolated jobs on signed Firecracker runtimes"]:::done
  R05["R05 · Run logs, artifact downloads and result verification"]:::done
  S12["S12 · Agent approve-and-push, take-over and report archive actions"]:::partial
  W08["W08 · Fork, three-way comparison and selective file promotion"]:::done
  S14["S14 · Durable in-app agent inbox"]:::done
  S15["S15 · Email agent completion and approval notifications"]:::unverified
  A01 -->|"eligible account"| B01
  B01 -->|"BYOK option"| S02
  B01 -->|"ChatGPT option"| S06
  B01 -->|"project source"| A10
  A10 -->|"publish verified source"| A11
  A11 -->|"pin source"| S03
  A12 -->|"full-suite verification task"| S03
  S02 -->|"provider/model"| S03
  S06 -->|"account-backed model"| S03
  S03 -->|"request effect approval"| S09
  S09 -->|"approved tests"| R01
  R01 -->|"signed output"| R05
  S03 -->|"supervise"| S10
  S03 -->|"suggestion mode"| S04
  R05 -->|"review/promote saved result"| W08
  R05 -->|"Git push/archive: unavailable"| S12
  S03 -->|"durable inbox"| S14
  S14 -->|"Resend: notification flow pending"| S15
  classDef done fill:#147d59,color:#fff,stroke:#147d59
  classDef partial fill:#a45e04,color:#fff,stroke:#a45e04
  classDef ui fill:#7451bb,color:#fff,stroke:#7451bb
  classDef blocked fill:#c13737,color:#fff,stroke:#c13737
  classDef stub fill:#ad3e74,color:#fff,stroke:#ad3e74
  classDef notdone fill:#617080,color:#fff,stroke:#617080
  classDef unverified fill:#2376b6,color:#fff,stroke:#2376b6
  classDef undeployed fill:#b9531d,color:#fff,stroke:#b9531d
```

### Agent: durable workspace and full Codex runner

This is a separate gated path. Deployed supervisor/guest code and ChatGPT login support do not enable durable admission or the full authenticated Codex runner. Dashed dependencies show the intended path across blockers.

```mermaid
flowchart LR
  S02["S02 · Personal BYOK provider settings"]:::done
  S06["S06 · Personal ChatGPT connection and account-backed native execution"]:::partial
  W01["W01 · Named workspace lifecycle"]:::done
  W05["W05 · Live revisions and incremental context"]:::done
  S07["S07 · Durable multi-turn agent and workspace admission"]:::blocked
  S08["S08 · Full production Codex runner with authenticated tools"]:::blocked
  S09["S09 · Exact-payload effect approval and denial"]:::done
  W12["W12 · Structured commands, reconnect, cancellation and retained output"]:::done
  G03["G03 · Runtime-enforced read-only command profile"]:::done
  S13["S13 · Agent private workspace writer handoff and promotion"]:::partial
  W08["W08 · Fork, three-way comparison and selective file promotion"]:::done
  S14["S14 · Durable in-app agent inbox"]:::done
  W17["W17 · Physical host/disk loss, multi-day soak and tenant fairness"]:::unverified
  W01 -.->|"workspace"| S07
  W05 -.->|"context"| S07
  S02 -.->|"personal provider"| S07
  S06 -.->|"account option"| S07
  S07 -.->|"durable admission OFF"| S08
  S08 -.->|"review effects"| S09
  S09 -->|"dispatch command"| W12
  G03 -->|"read-only boundary"| W12
  W12 -->|"save/handoff"| S13
  S13 -->|"promote reviewed result"| W08
  S07 -.->|"supervision inbox"| S14
  S13 -->|"physical-loss qualification"| W17
  classDef done fill:#147d59,color:#fff,stroke:#147d59
  classDef partial fill:#a45e04,color:#fff,stroke:#a45e04
  classDef ui fill:#7451bb,color:#fff,stroke:#7451bb
  classDef blocked fill:#c13737,color:#fff,stroke:#c13737
  classDef stub fill:#ad3e74,color:#fff,stroke:#ad3e74
  classDef notdone fill:#617080,color:#fff,stroke:#617080
  classDef unverified fill:#2376b6,color:#fff,stroke:#2376b6
  classDef undeployed fill:#b9531d,color:#fff,stroke:#b9531d
```

### User / agent: prepare → fork → verify → promote → recover

Saved-generation prepare/clone/recovery/promotion have bounded qualification. Browser checkpoint/terminal wiring is deployed; real attach/reconnect acceptance, cross-project sharing, line merge and replicated live-write durability remain separate gaps.

```mermaid
flowchart LR
  A10["A10 · Verified source archive upload from browser"]:::unverified
  A12["A12 · Development manifest and saved verification tasks"]:::done
  W01["W01 · Named workspace lifecycle"]:::done
  W02["W02 · Encrypted checkpoints, archive and recovery"]:::done
  W03["W03 · Independent data disk and runtime changes"]:::done
  W05["W05 · Live revisions and incremental context"]:::done
  W06["W06 · Prepared environments: publish, clone and revoke"]:::done
  W07["W07 · Private prebuilds and large prepared-environment catalogues"]:::partial
  W08["W08 · Fork, three-way comparison and selective file promotion"]:::done
  W09["W09 · Inline text diff, custom edits and automatic line merge"]:::notdone
  W10["W10 · Reference handoff versus cross-project workspace sharing"]:::partial
  W11["W11 · Browser workspace terminal and checkpoint terminal"]:::unverified
  W12["W12 · Structured commands, reconnect, cancellation and retained output"]:::done
  W13["W13 · Named service TCP/HTTP readiness"]:::done
  W14["W14 · 90-day output policy and natural production expiry"]:::partial
  W04["W04 · Replicated live volumes and survival of uncheckpointed writes"]:::notdone
  A10 -->|"admitted source"| W01
  W01 -->|"CLI/VS Code commands"| W12
  W01 -->|"browser terminal: qualify live"| W11
  W12 -->|"service readiness"| W13
  W01 -->|"live context"| W05
  W01 -->|"save generation"| W02
  W02 -->|"runtime change"| W03
  W02 -->|"publish prepared"| W06
  W06 -->|"private/large follow-up"| W07
  W06 -->|"fork result"| W08
  A12 -->|"fresh verification"| W08
  W08 -.->|"text merge not delivered"| W09
  W08 -->|"reference handoff"| W10
  W02 -->|"retention and GC"| W14
  W03 -.->|"replication not delivered"| W04
  classDef done fill:#147d59,color:#fff,stroke:#147d59
  classDef partial fill:#a45e04,color:#fff,stroke:#a45e04
  classDef ui fill:#7451bb,color:#fff,stroke:#7451bb
  classDef blocked fill:#c13737,color:#fff,stroke:#c13737
  classDef stub fill:#ad3e74,color:#fff,stroke:#ad3e74
  classDef notdone fill:#617080,color:#fff,stroke:#617080
  classDef unverified fill:#2376b6,color:#fff,stroke:#2376b6
  classDef undeployed fill:#b9531d,color:#fff,stroke:#b9531d
```

### User / CI: pipeline → build → registry → preview

Whole-pipeline retry, supply-chain document downloads and repository integration controls are implemented and deployed. Complete browser/provider journeys, step-level retry/checks and generic preview/webhook controls remain open.

```mermaid
flowchart LR
  A09["A09 · Private GitHub/GitLab onboarding and credential repair"]:::partial
  A12["A12 · Development manifest and saved verification tasks"]:::done
  R17["R17 · GitLab CI project binding and triggers"]:::partial
  R09["R09 · Pipeline definition, immutable versions and full retained history"]:::partial
  R10["R10 · Pipeline step retry/resume and GitHub checks UI"]:::partial
  R01["R01 · Isolated jobs on signed Firecracker runtimes"]:::done
  R11["R11 · OCI builds, verified images and remote BuildKit cache"]:::done
  R12["R12 · SBOM and provenance document downloads"]:::unverified
  R13["R13 · Registry credentials and image lifecycle"]:::partial
  R14["R14 · Private previews and signed run HTTP/TCP/UDP access"]:::partial
  R15["R15 · Team previews, extension, relaunch and live preview events"]:::stub
  R16["R16 · Generic integration and webhook management"]:::partial
  R05["R05 · Run logs, artifact downloads and result verification"]:::done
  B02["B02 · Wallet admission, holds, settlement and fractional-cent carry"]:::done
  A09 -->|"provider binding"| R17
  R17 -->|"GitLab trigger"| R09
  A12 -->|"saved tasks"| R09
  R09 -->|"dispatch"| R01
  R09 -->|"whole-run retry; step/check gap"| R10
  R09 -->|"generic webhook gap"| R16
  R01 -->|"OCI build"| R11
  R11 -->|"verified document downloads"| R12
  R11 -->|"publish image"| R13
  R13 -->|"private preview"| R14
  R14 -.->|"team/extend/relaunch gaps"| R15
  R01 -->|"results"| R05
  R01 -->|"execution settlement"| B02
  R14 -->|"preview settlement"| B02
  classDef done fill:#147d59,color:#fff,stroke:#147d59
  classDef partial fill:#a45e04,color:#fff,stroke:#a45e04
  classDef ui fill:#7451bb,color:#fff,stroke:#7451bb
  classDef blocked fill:#c13737,color:#fff,stroke:#c13737
  classDef stub fill:#ad3e74,color:#fff,stroke:#ad3e74
  classDef notdone fill:#617080,color:#fff,stroke:#617080
  classDef unverified fill:#2376b6,color:#fff,stroke:#2376b6
  classDef undeployed fill:#b9531d,color:#fff,stroke:#b9531d
```

### Agent / CI: source evidence → advisory impact → full verification

Candidate analysis is useful advisory evidence. Its file observations and bounded corpus do not justify skipping the full suite or claiming reusable verified verdicts.

```mermaid
flowchart LR
  A10["A10 · Verified source archive upload from browser"]:::unverified
  A11["A11 · Source index publication and context discovery"]:::unverified
  T01["T01 · Source-bound advisory impact and archive explanations"]:::done
  T02["T02 · Smart Run source/runtime admission binding"]:::done
  T03["T03 · Signed isolated Node test-file results"]:::done
  T04["T04 · Runtime input attribution and directory/hidden-input coverage"]:::partial
  T05["T05 · Verified test selection and reusable verdicts"]:::notdone
  T06["T06 · Reuse button and reusable-result revocation UI"]:::stub
  R01["R01 · Isolated jobs on signed Firecracker runtimes"]:::done
  R05["R05 · Run logs, artifact downloads and result verification"]:::done
  T07["T07 · Investigations, insights, test quarantine and feedback"]:::partial
  A10 -->|"archive/index binding"| A11
  A11 -->|"analyze changes"| T01
  T01 -->|"pin plan inputs"| T02
  T02 -->|"full-suite required"| R01
  R01 -->|"isolated file result"| T03
  T03 -->|"runtime observations"| T04
  T04 -.->|"soundness gaps block selection"| T05
  T05 -.->|"reuse UI unavailable"| T06
  R01 -->|"verify result"| R05
  T01 -->|"investigate candidates"| T07
  classDef done fill:#147d59,color:#fff,stroke:#147d59
  classDef partial fill:#a45e04,color:#fff,stroke:#a45e04
  classDef ui fill:#7451bb,color:#fff,stroke:#7451bb
  classDef blocked fill:#c13737,color:#fff,stroke:#c13737
  classDef stub fill:#ad3e74,color:#fff,stroke:#ad3e74
  classDef notdone fill:#617080,color:#fff,stroke:#617080
  classDef unverified fill:#2376b6,color:#fff,stroke:#2376b6
  classDef undeployed fill:#b9531d,color:#fff,stroke:#b9531d
```

### Company user + admin: payer → agreement → usage → finance

Company billing roles grant financial access, not project execution. Approved beta agreements are metadata/entitlements on existing plans. Card payments and customer storage charging are disabled; manual funding is supported.

```mermaid
flowchart LR
  A01["A01 · Blazingfast SSO sign-in"]:::unverified
  B01["B01 · Shared beta plan catalogue"]:::done
  B03["B03 · Independent company payers and billing administrators"]:::done
  B04["B04 · Company agreements and requested beta plan changes"]:::done
  A05["A05 · Project roles and invitations"]:::partial
  A07["A07 · Project creation and repository settings"]:::partial
  B02["B02 · Wallet admission, holds, settlement and fractional-cent carry"]:::done
  B05["B05 · Billing totals, ledger history and deposit receipts"]:::partial
  B06["B06 · Manual deposits and administrator-confirmed reversals"]:::done
  B07["B07 · Stripe checkout, webhook recovery and reconciliation"]:::blocked
  B08["B08 · Bounded storage and retained-output metering"]:::done
  B09["B09 · Customer storage charging"]:::blocked
  B10["B10 · Company invitation delivery"]:::partial
  G02["G02 · RBAC, capability scopes and billing-only access"]:::partial
  O02["O02 · Billing database and command-credential isolation"]:::done
  A01 -->|"owner creates company"| B03
  B01 -->|"beta catalogue"| B03
  B03 -->|"admin agreement/plan review"| B04
  B03 -->|"share invite link"| B10
  B03 -->|"billing-only role"| G02
  A05 -->|"separate project membership"| A07
  B03 -->|"new payer-owned project"| A07
  B06 -->|"manual funding/review"| B02
  B07 -.->|"Stripe OFF"| B02
  A07 -->|"reserve/settle usage"| B02
  B02 -->|"ledger/receipt"| B05
  B08 -.->|"charging OFF"| B09
  B09 -.->|"future validated debit"| B02
  O02 -->|"isolated writer"| B02
  classDef done fill:#147d59,color:#fff,stroke:#147d59
  classDef partial fill:#a45e04,color:#fff,stroke:#a45e04
  classDef ui fill:#7451bb,color:#fff,stroke:#7451bb
  classDef blocked fill:#c13737,color:#fff,stroke:#c13737
  classDef stub fill:#ad3e74,color:#fff,stroke:#ad3e74
  classDef notdone fill:#617080,color:#fff,stroke:#617080
  classDef unverified fill:#2376b6,color:#fff,stroke:#2376b6
  classDef undeployed fill:#b9531d,color:#fff,stroke:#b9531d
```

### Operator: authority → enforcement → evidence → recovery

Key isolation, reviewed effects and read-only execution have implementation. Shared data ownership, complete audit UX, measured public status and production-scale/failure assurance remain separate gaps.

```mermaid
flowchart LR
  A04["A04 · Scoped API keys and revocation"]:::done
  G01["G01 · Write-only project secrets and provider secret isolation"]:::done
  G02["G02 · RBAC, capability scopes and billing-only access"]:::partial
  G03["G03 · Runtime-enforced read-only command profile"]:::done
  G04["G04 · General egress and unified policy enforcement"]:::partial
  G05["G05 · Policy profile editor and exception requests"]:::stub
  S09["S09 · Exact-payload effect approval and denial"]:::done
  R01["R01 · Isolated jobs on signed Firecracker runtimes"]:::done
  G06["G06 · Audit chaining, WORM export and permanent-gap disclosure"]:::partial
  G07["G07 · Console audit history, saved filters, live tail and export semantics"]:::partial
  G08["G08 · Service status, capacity, uptime and incidents display"]:::partial
  G10["G10 · Trust portal DPA, reports and account-wide export"]:::stub
  O01["O01 · Current application deployment readiness"]:::done
  O02["O02 · Billing database and command-credential isolation"]:::done
  O03["O03 · Complete domain database ownership and distributed transactions"]:::notdone
  O04["O04 · Database backup and isolated restore drills"]:::done
  O05["O05 · Database failover and sustained capacity qualification"]:::unverified
  O06["O06 · Latest pipeline and fixed-revision release qualification"]:::done
  W17["W17 · Physical host/disk loss, multi-day soak and tenant fairness"]:::unverified
  A04 -->|"scoped authority"| G02
  G01 -->|"write-only secret delivery"| R01
  G02 -->|"reviewed effects"| S09
  G02 -.->|"profile/exception UI gap"| G05
  S09 -->|"authorized dispatch"| R01
  G03 -->|"read-only profile"| R01
  G04 -->|"egress policy"| R01
  R01 -->|"audit evidence"| G06
  G06 -->|"incomplete audit UI"| G07
  G06 -.->|"trust documents gap"| G10
  O01 -->|"status must use real data"| G08
  O02 -.->|"wider ownership still open"| O03
  O02 -->|"backup/restore"| O04
  O04 -->|"live failover unqualified"| O05
  O05 -->|"soak/physical failure"| W17
  O06 -->|"fixed-revision qualification"| O01
  classDef done fill:#147d59,color:#fff,stroke:#147d59
  classDef partial fill:#a45e04,color:#fff,stroke:#a45e04
  classDef ui fill:#7451bb,color:#fff,stroke:#7451bb
  classDef blocked fill:#c13737,color:#fff,stroke:#c13737
  classDef stub fill:#ad3e74,color:#fff,stroke:#ad3e74
  classDef notdone fill:#617080,color:#fff,stroke:#617080
  classDef unverified fill:#2376b6,color:#fff,stroke:#2376b6
  classDef undeployed fill:#b9531d,color:#fff,stroke:#b9531d
```

## Qualification limits

- Full production Codex/controller dispatch, natural long-duration expiry, physical-device/client acceptance, host loss, failover and sustained tenant fairness remain qualified only where a row explicitly cites such evidence.
- The acknowledged historical audit-chain gap remains invalid. Later exports do not repair that record.
- Real email test receipt and a browser sign-in request do not by themselves qualify registration, consuming the link or opted-in completion/approval notification delivery.
- Public source links require normal GitLab project access. The static report contains no application credential, session cookie, setup token or private key.
- Fresh observations can supersede these dated findings. Update the reviewed inputs and publish through the independent progress pipeline.
