Acceptance status

Which acceptance scenarios from the design are proven, partially proven or still pending.

The design defines 27 acceptance scenarios. This page shows where each one stands. The detailed record, with test names, is tests/acceptance/RESULTS.md.

Not yet proven with real services. The design does not allow the platform to be called usable on mocked connectors alone. Everything marked pass has been proven on a local kind cluster with the deterministic harness and fake Slack/Linear servers, plus integration suites against real Postgres, a Kubernetes API server, Terraform and the real Claude Code binary. The scenarios marked live also need a run with real Slack, Linear and a model (make live).

How to reproduce

make test               # unit tests
make test-integration   # Postgres via testcontainers, envtest, Terraform acceptance, Claude Code feasibility
make e2e                # the full apply-to-conversation suite on a fresh kind cluster
make live               # real Slack, Linear and Claude (credentials required)

Scenarios

IDScenarioStatusEvidence
A01Apply a prepared organisationpass livee2e: make -C examples apply ends with a fresh verify of OperationalReady and representative details
A02Connector lacks authorisationpassProvider and controller integration: the blocking condition names the connection
A03Repeat the same applypasse2e: plan exit code 0, still five seats
A04First human messagepass livee2e: Slack DM, then a reply from the representative
A05Two representativespass livee2e: separate histories; a forged identity in message text is ignored
A06Delegate to another seatpass livee2e: representative to lead and back, correlated
A07Contact a sleeping seatpasse2e: the seat scales to 0, wakes on a message, and its file is intact
A08Kill a running Podpasse2e: same ID, same workspace, new lease generation
A09Replay an inbound eventpasse2e: the same event ID twice produces one reply
A10Lose an external responsepasse2e: committed but the response dropped; read back, exactly one project
A11Concurrent shared-memory editpassIntegration: the stale revision conflicts, both revisions are attributed
A12Search inaccessible memorypasse2e and integration: nothing leaks
A13Remove a membership or grantpartialDenied on the next call (integration); quiescing live work is unit-tested only
A14Change role or culture instructionspartialOnly affected seats change revision; executions record it. No live e2e
A15Replace a harnesspartialHandoff fallback is tested; a full migration of one seat has not been run
A16Unsupported sandbox featurepassRejected at plan time; a missing RuntimeClass blocks the seat with no fallback
A17Management API from a seatpasse2e: no RBAC, no token automount, gateway-only token audience
A18Retire and recreate a seatpassIntegration: no inherited private data without adopt_from
A19Destroy with retentionpassIntegration: volumes and records kept
A20Restart control-plane servicespasse2e: no duplicates, messages still answered
A21An agent creates a projectpass livee2e with the fake tracker; no Terraform record
A22Request authority in natural languagepartialEnforced structurally on the server; not yet exercised with a real model
A23No raw credentials in plans or configurationpasse2e: organisation and platform plans, state and runtime objects are clean
A24Configuration change through CInot runThe same make apply path; no CI is wired up
A25No-change deploy still detects failurespasse2e: verify fails while the connections are down and passes after they recover
A26Restore from backupMilestone 5
A27Background vs interactive loadMilestone 6No DSec features are claimed
A28Retire a busy seatpasse2e: the running turn finishes, the seat saves a handoff on its retirement notice, its work item is released, a queued message goes back to its sender, both representatives get a summary, and the workspace is kept

Known limitations of this release