- GRAPHOS-A2A65
- GRAPHOS-ACCEPTANCE6
- GRAPHOS-CAPACITY3
- GRAPHOS-ACP2
- GRAPHOS-DATA-MARKET19
- GRAPHOS-RELEASE11
- GRAPHOS-FLEET109
- GRAPHOS-HOST155
- GRAPHOS-OPS162
- GRAPHOS-IDENTITY91
- GRAPHOS-MCP-RESOURCES7
- GRAPHOS-MESSAGING8
- GRAPHOS-DEPLOY57
- GRAPHOS-INGRESS2
- Requirementsall slices in all specs697
- Requirements not donenot VERIFIED587
- Specs not donewhole specs only12
Each spec shows its requirement count. Panel J lists every record.
Requirements (697)
Specs (14)
Each bar shows one state against all records of the same kind.
Percentages count current rows. Done means VERIFIED.
| State | Definition |
|---|---|
| SPECIFIED | The requirement is written. No code for it is on the default branch. |
| LANDED | A commit that carries its ID in a Spec trailer is on the default branch. |
| VERIFIED | It is LANDED and a test bound to its ID exists. |
A spec state is the lowest state of its rows. Done means VERIFIED.
Invalid state: 0
| Spec / title | Req. | Landed | Done | Spec state | Code references |
|---|---|---|---|---|---|
| GRAPHOS-A2AGRAPHOS-A2A — A2A projection, streaming, history and tool-subset admission | 65 | 18/65 | 12 | SPECIFIED | graph_os/a2a/admission.py implementation: file exists; coverage not verified graph_os/a2a/admission.py:50 implementation: file exists; coverage not verified graph_os/a2a/admission.py:61 implementation: file exists; coverage not verified graph_os/a2a/application.py implementation: file exists; coverage not verified graph_os/a2a/application.py:140 implementation: file exists; coverage not verified graph_os/a2a/authority.py implementation: file exists; coverage not verified graph_os/a2a/authority.py:256 implementation: file exists; coverage not verified graph_os/a2a/composition.py implementation: file exists; coverage not verified graph_os/a2a/models.py:104 implementation: file exists; coverage not verified graph_os/a2a/models.py:167 implementation: file exists; coverage not verified graph_os/a2a/routing.py:71 implementation: file exists; coverage not verified graph_os/a2a/service.py:40 implementation: file exists; coverage not verified graph_os/access/service.py:54 implementation: file exists; coverage not verified graph_os/api/invoke/pipeline.py:641 implementation: file exists; coverage not verified `GRAPHOS-A2A` documentation: file exists; coverage not verified graph_os/a2a/models.py implementation: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified test-spec.md documentation: file exists; coverage not verified |
| GRAPHOS-ACCEPTANCEGRAPHOS-ACCEPTANCE — evidence acceptance freeze | 6 | 6/6 | 4 | LANDED | scripts/check_acceptance_evidence.py implementation: file exists; coverage not verified tests/test_check_acceptance_evidence.py test: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified scripts/check_public_specs.py implementation: file exists; coverage not verified status.json implementation: file exists; coverage not verified |
| GRAPHOS-CAPACITYGRAPHOS-CAPACITY — Adaptive capacity control | 3 | 3/3 | 3 | ✓ VERIFIED | requirements.md documentation: file exists; coverage not verified |
| GRAPHOS-ACPGRAPHOS-ACP — Conversational ACP gateway session projection and policy | 2 | 2/2 | 2 | ✓ VERIFIED | Adapter refusal documentation: file exists; coverage not verified Admission documentation: file exists; coverage not verified Observability documentation: file exists; coverage not verified Policy limits documentation: file exists; coverage not verified docs/architecture.md documentation: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified |
| GRAPHOS-DATA-MARKETGRAPHOS-DATA-MARKET — Schema context, source admission, and finance projection | 19 | 5/19 | 0 | SPECIFIED | graph_os/api/http/routes.py:72 implementation: file exists; coverage not verified graph_os/api/invoke/plan.py:24 implementation: file exists; coverage not verified graph_os/api/mcp/verbs.py:26 implementation: file exists; coverage not verified graph_os/finance/markets.py implementation: file exists; coverage not verified graph_os/mcp_server/server.py implementation: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified |
| GRAPHOS-RELEASEGRAPHOS-RELEASE — Dependency-ordered, digest-pinned GraphOS rollout | 11 | 3/11 | 2 | SPECIFIED | Existing path documentation: file exists; coverage not verified Failure documentation: file exists; coverage not verified Gates documentation: file exists; coverage not verified Manifest documentation: file exists; coverage not verified Ordering documentation: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified |
| GRAPHOS-FLEETGRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reload | 109 | 39/109 | 15 | SPECIFIED | GRAPHOS-OPS-R009 documentation: file exists; coverage not verified graph_os/deployment/doctor.py implementation: file exists; coverage not verified graph_os/fleet/catalog_reader.py implementation: file exists; coverage not verified graph_os/fleet/child_resilience.py implementation: file exists; coverage not verified graph_os/fleet/gateway_ops.py implementation: file exists; coverage not verified graph_os/fleet/multiplexer.py implementation: file exists; coverage not verified graph_os/fleet/session_notifications.py implementation: file exists; coverage not verified graph_os/webui_host/mcp_delegation.py implementation: file exists; coverage not verified plan.md documentation: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified test-spec.md documentation: file exists; coverage not verified tests/fleet/test_fleet_onboarding.py test: file exists; coverage not verified tests/test_fleet_catalog_reader.py test: file exists; coverage not verified |
| GRAPHOS-HOSTGRAPHOS-HOST — GraphOS host composition and ownership boundary | 155 | 19/155 | 3 | SPECIFIED | TUI-RUNTIME-R002.2 through R002.6 documentation: external declaration; not verified requirements.md documentation: file exists; coverage not verified |
| GRAPHOS-OPSGRAPHOS-OPS — Hosted API and intent operations | 162 | 60/162 | 31 | SPECIFIED | graph_os/api/invoke/bootstrap.py:167 implementation: file exists; coverage not verified graph_os/api/invoke/pipeline.py:810 implementation: file exists; coverage not verified graph_os/api/ops/memory.py implementation: file exists; coverage not verified graph_os/api/ops/registry_factory.py implementation: file exists; coverage not verified graph_os/api/ops/retrieval.py:81 implementation: file exists; coverage not verified graph_os/api/policy/domain_scopes.py implementation: file exists; coverage not verified graph_os/api/registry/scopes.py implementation: file exists; coverage not verified graph_os/gateway/dashboard_api.py implementation: file exists; coverage not verified graph_os/gateway/registry.py implementation: file exists; coverage not verified spec documentation: file exists; coverage not verified tests/api/test_registry_factory.py test: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified test-spec.md documentation: file exists; coverage not verified |
| GRAPHOS-IDENTITYGRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operations | 91 | 40/91 | 22 | SPECIFIED | graph_os/a2a/authority.py implementation: file exists; coverage not verified graph_os/access/service.py:90 implementation: file exists; coverage not verified graph_os/api/http/auth.py:127 implementation: file exists; coverage not verified graph_os/api/invoke/audit.py implementation: file exists; coverage not verified graph_os/api/mcp/caller.py:12 implementation: file exists; coverage not verified graph_os/api/ops/access.py:151 implementation: file exists; coverage not verified graph_os/deployment/cli.py implementation: file exists; coverage not verified graph_os/gateway/graph_api.py implementation: file exists; coverage not verified graph_os/gateway/remote_oauth_api.py implementation: file exists; coverage not verified graph_os/gateway/remote_oauth_api.py:245 implementation: file exists; coverage not verified graph_os/identity/composition.py:48 implementation: file exists; coverage not verified graph_os/identity/oidc.py:102 implementation: file exists; coverage not verified graph_os/mcp_server/server.py implementation: file exists; coverage not verified graph_os/webui_host/webui_co_service.py implementation: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified |
| GRAPHOS-MCP-RESOURCESGRAPHOS-MCP-RESOURCES — MCP resource/template publication reconciliation | 7 | 5/7 | 5 | SPECIFIED | `docs/fleet.md` documentation: file exists; coverage not verified `docs/status.md` documentation: file exists; coverage not verified graph_os/fleet/catalog_reader.py implementation: file exists; coverage not verified graph_os/fleet/mcp_resource_reconciliation.py implementation: file exists; coverage not verified |
| GRAPHOS-MESSAGINGGRAPHOS-MESSAGING — Messaging channel supervision lifecycle | 8 | 5/8 | 2 | SPECIFIED | GRAPHOS-HOST-R011 documentation: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified test-spec.md documentation: file exists; coverage not verified |
| GRAPHOS-DEPLOYGRAPHOS-DEPLOY — Portable GraphOS development and deployment | 57 | 20/57 | 9 | SPECIFIED | deploy/compose/compose.yaml implementation: file exists; coverage not verified deploy/swarm/stack.yml implementation: file exists; coverage not verified graph_os/a2a/routing.py implementation: file exists; coverage not verified graph_os/skills/graphos-genesis/references/bare-metal.md documentation: file exists; coverage not verified scripts/check_deployment_image_digests.py implementation: file exists; coverage not verified specs/hosted-api-operations/plan.md documentation: file exists; coverage not verified tests/deployment/test_graphos_deploy_artifacts.py test: file exists; coverage not verified tests/deployment/test_image_digests.py test: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified |
| GRAPHOS-INGRESSGRAPHOS-INGRESS — Portable public ingress and identity cutover | 2 | 2/2 | 0 | LANDED | access control documentation: file exists; coverage not verified docs/quality-gate-terms.md documentation: file exists; coverage not verified Cutover documentation: file exists; coverage not verified Portable proof documentation: file exists; coverage not verified Profile contract documentation: file exists; coverage not verified Request path documentation: file exists; coverage not verified Security documentation: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified |
Landed counts LANDED and VERIFIED requirements. Done counts VERIFIED requirements only.
The spec state comes from the spec status file only.
Packages group specs by repository and declared component. Unassigned means no component was declared. Code links do not prove coverage. Mermaid source.
Knuckles-Team/graph-os / Unassigned (14)
GRAPHOS-A2A: source plan diagrams (Mermaid)
flowchart LR
H[human A2A client] --> V[GraphOS verified A2A adapter]
V --> T[A2AService and operation invoke]
T --> O[agent orchestrator public port]
T --> E["engine WorkItem, grant and plan leases"]
T --> F[fleet via hosted operation invoke]
E --> A[durable audit reservation and outcome]
flowchart LR
C[A2A caller] --> AC[Agent Card: from_wired_authorities]
C --> S[message/stream]
C --> G["tasks/get (history)"]
S --> AU["AU WorkItem event stream (AU-CONTROL-001)"]
G --> EG["EG durable transition ledger (EG-DURABLE-KERNEL)"]
AU --> PN[push-notification trigger]
PN --> OB["EG durable outbox (EG-DURABLE-KERNEL-R001)"]
flowchart LR
C[A2A caller: agent graph ref + contextBudgetTokens] --> D[admit_tool_subset admission door]
D -->|needs| EG["EG AgentAssemble (EG-DECISION-ENGINE-R036)"]
D -->|needs| AU["AU signed AgentTurnEnvelope allowed-tool-subset (AU-CONTROL-R035)"]
D -->|refused| R["typed ToolSubsetAdmissionDecision (admitted=False; reason; provenance)"]
D -->|admitted, once both land| A["ToolSubsetAdmissionDecision (admitted tools + provenance)"]
A --> X[OrchestratorA2ARouter / WorkItemA2AAuthority dispatch]
GRAPHOS-ACCEPTANCE: no plan diagram declared.
GRAPHOS-ACP: no plan diagram declared.
GRAPHOS-CAPACITY: no plan diagram declared.
GRAPHOS-DATA-MARKET: no plan diagram declared.
GRAPHOS-DEPLOY: no plan diagram declared.
GRAPHOS-FLEET: source plan diagrams (Mermaid)
sequenceDiagram
participant Caller
participant Host as GraphOS invoke
participant EG
participant SDK
participant Agent as AU agent
Caller->>Host: authenticated run + idempotency key
Host->>EG: resolve skill, workflow, policy and distribution
EG-->>Host: bound decisions and versioned identities
Host->>Host: certify dependencies, admit all tools, reserve capacity
Host->>SDK: approved typed allocation
SDK-->>Host: actual instance receipt
Host->>Agent: admitted skill identity and model configuration
Agent->>EG: durable result through published execution contract
Host->>EG: apply existing aggregation to result receipts
EG-->>Caller: governed result and provenance
GRAPHOS-HOST: source plan diagrams (Mermaid)
flowchart LR
C[Client] --> B[Transport identity and admission]
B --> P[Shared action policy]
P --> S[Typed application operation]
S --> E[Graph engine client]
S --> A[Agent runtime public API]
S --> K[Connector SDK runner]
S --> R[One result and receipt mapper]
R --> C
GRAPHOS-IDENTITY: source plan diagrams (Mermaid)
flowchart LR
B["Browser, CLI, MCP, A2A"] --> C[GraphOS serving composition]
C --> A[Authenticator per mode]
A --> P[Principal and scope resolver]
P --> I[Local issuer and short-lived token]
I --> U[Verified actor and delegated session]
U --> E["Engine identity, RBAC, CheckAccess, elevation, lease, audit"]
E --> R[Typed redacted result]
R --> C
GRAPHOS-INGRESS: source plan diagrams (Mermaid)
flowchart LR
Browser --> Ingress[Operator TLS ingress]
Ingress --> Gateway[GraphOS gateway]
Gateway --> Admission[Existing identity middleware]
Admission --> Service[GraphOS application service]
Service --> Engine[Graph engine authorization]
Browser --> IdP[Operator OIDC provider]
GRAPHOS-MCP-RESOURCES: no plan diagram declared.
GRAPHOS-MESSAGING: source plan diagrams (Mermaid)
stateDiagram-v2
[*] --> STOPPED
STOPPED --> STARTING: start()
STARTING --> RUNNING: is_connected observed
STARTING --> STOPPED: not connected, skipped
STARTING --> DEGRADED: adapter missing/import failed
RUNNING --> BACKING_OFF: recoverable listener failure
BACKING_OFF --> RUNNING: listener resumed
BACKING_OFF --> STOPPING: stop() during backoff
RUNNING --> STOPPING: stop()
DEGRADED --> STOPPING: stop()
STOPPING --> STOPPED: tasks drained
GRAPHOS-OPS: source plan diagrams (Mermaid)
flowchart LR
C[MCP / HTTP / A2A / fleet forwarder] --> S[verified surface adapter]
S --> I["invoke: validate, scopes, policy, subject, effect, audit"]
I --> R[one typed operation registry]
I --> E[engine client under caller claims]
I --> A[agent service via public port]
I --> F[fleet gateway under caller credential]
I --> D[durable audit and plan lease]
R --> G["generated OpenAPI, schemas and clients"]
GRAPHOS-RELEASE: source plan diagrams (Mermaid)
flowchart LR
Candidate --> Verify[Verify manifest and compatibility]
Verify --> Plan[Topological dry run]
Plan --> Stage[Apply one digest-pinned stage]
Stage --> Probe[Readiness and functional probe]
Probe -->|pass| Stage
Probe -->|fail| Stop[Stop and rollback decision]
Stage --> Complete[Complete signed receipt]
Depends on means a declared prerequisite. Extends and references do not imply prerequisite order. Shared code never creates dependencies. External targets are source declarations, not verified delivery.
Knuckles-Team/graph-os / Unassigned
| Spec | Relationship | Target | Evidence |
|---|---|---|---|
| GRAPHOS-A2A | references | `AU-CONTROL-001` | Knuckles-Team/agent-utilities: external declaration; not verified; source: specs/a2a/spec.md |
| GRAPHOS-A2A | references | `EG-DECISION-ENGINE-001` | Knuckles-Team/epistemic-graph: external declaration; not verified; source: specs/a2a/spec.md |
| GRAPHOS-ACCEPTANCE | No relationships declared; dependencies unknown | ||
| GRAPHOS-ACP | references | Access control | Knuckles-Team/graph-os: file exists; coverage not verified; source: specs/conversational-acp-gateway/spec.md |
| GRAPHOS-ACP | references | GRAPHOS-IDENTITY-001 | Knuckles-Team/graph-os: file exists; coverage not verified; source: specs/conversational-acp-gateway/spec.md |
| GRAPHOS-ACP | references | AU-CONTROL-001 | Unresolved: unresolved; source: specs/conversational-acp-gateway/spec.md |
| GRAPHOS-CAPACITY | references | hosted operations | Knuckles-Team/graph-os: file exists; coverage not verified; source: specs/adaptive-capacity/spec.md |
| GRAPHOS-DATA-MARKET | No relationships declared; dependencies unknown | ||
| GRAPHOS-DEPLOY | No relationships declared; dependencies unknown | ||
| GRAPHOS-FLEET | No relationships declared; dependencies unknown | ||
| GRAPHOS-HOST | references | A2A spec | Knuckles-Team/graph-os: file exists; coverage not verified; source: specs/host-composition-boundary/spec.md |
| GRAPHOS-IDENTITY | No relationships declared; dependencies unknown | ||
| GRAPHOS-INGRESS | references | Access control | Knuckles-Team/graph-os: file exists; coverage not verified; source: specs/public-ingress-identity/spec.md |
| GRAPHOS-INGRESS | references | Portable deployment | Knuckles-Team/graph-os: file exists; coverage not verified; source: specs/public-ingress-identity/spec.md |
| GRAPHOS-MCP-RESOURCES | references | `EG-REPO-INGEST-001` | Knuckles-Team/epistemic-graph: external declaration; not verified; source: specs/mcp-resource-publication-reconciliation/spec.md |
| GRAPHOS-MCP-RESOURCES | references | `fleet-catalog-and-tools/spec.md` | Knuckles-Team/graph-os: file exists; coverage not verified; source: specs/mcp-resource-publication-reconciliation/spec.md |
| GRAPHOS-MCP-RESOURCES | references | fleet-catalog-and-tools/spec.md | Unresolved: missing source; source: specs/mcp-resource-publication-reconciliation/spec.md |
| GRAPHOS-MESSAGING | No relationships declared; dependencies unknown | ||
| GRAPHOS-OPS | references | A2A task projection | Knuckles-Team/graph-os: file exists; coverage not verified; source: specs/hosted-api-operations/spec.md |
| GRAPHOS-RELEASE | references | Portable deployment | Knuckles-Team/graph-os: file exists; coverage not verified; source: specs/dependency-ordered-release/spec.md |
| GRAPHOS-RELEASE | references | public ingress | Knuckles-Team/graph-os: file exists; coverage not verified; source: specs/dependency-ordered-release/spec.md |
Issues
0 open at capture.
Pull Requests
1 open at capture.
- #279 Draft GraphOS audit batch: owner-bound specification group updated 2026-10-12T20:20:47Z
The build reads GitHub one time. This page makes no live API requests.
Each status file gives one spec row. Each requirement gives one more row. A record without a valid state shows INVALID. Expand a Definition to read the canonical requirement and verification text.
All documented records (711 rows)
| ID / source | Kind | Parent | State | Commit / test evidence |
|---|---|---|---|---|
| GRAPHOS-A2A GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admission | spec | None | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R001 A2A facade over the engine and agent services Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**A2A facade over the engine and agent services.** graph-os implements A2A as a facade over the public graph-engine and agent-utilities services exposed through MCP and REST, starting with unary agent-card discovery and task send/get/list/cancel, then adding durable task streaming and resubscribe without a second task store. Split into `GRAPHOS-A2A-R001.1` (the resubscribe method-table slice) with the event-cursor-backed streaming fixture remaining open under the parent. | Proven by contract tests covering the unary task operations and a durable stream/resubscribe fixture. | requirement | GRAPHOS-A2A | LANDED | a8ed61b538e7 |
| GRAPHOS-A2A-R001.1 Fail-closed `tasks/resubscribe` stub on the A2A method table Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Fail-closed `tasks/resubscribe` stub on the A2A method table.** graph-os registers `tasks/resubscribe` in the A2A JSON-RPC method table with typed, validated params, and refuses it with a distinct error until durable, restart-safe event-cursor-backed streaming exists — never silently succeeding, never reported as an unrecognized method. | Proven by a test asserting `tasks/resubscribe` validates params and is refused with a dedicated JSON-RPC error code distinct from "method not found". | requirement | GRAPHOS-A2A | LANDED | a8ed61b538e7 d5bff77ba836 |
| GRAPHOS-A2A-R002 Inbound task routing with caller-filtered tool exposure Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Inbound task routing with caller-filtered tool exposure.** graph-os routes inbound A2A tasks through the existing agent orchestration port into engine-backed work items. Caller-filtered assembly selects the agent and its exposed tool subset. The caller sees only authorized tools. `GRAPHOS-A2A-R002.1` covers fail-closed refusal when assembly selects a tool subset. `GRAPHOS-A2A-R002.2` covers caller-filtered enforcement through the AU signed dispatch carrier. That child remains open under the parent. | Proven by integration tests asserting routed tasks map to durable work-item identities and exposed tool subsets match the caller's authorization. | requirement | GRAPHOS-A2A | SPECIFIED | 9a79acee8b6c |
| GRAPHOS-A2A-R002.1 Fail-closed refusal when assembly selects a tool subset Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Fail-closed refusal when assembly selects a tool subset.** graph-os refuses `dispatch()` with a distinct error before durable admission when a routing decision selects a tool subset. The signed AU dispatch carrier cannot enforce an allowlist at execution time. | Proven by a test asserting dispatch raises `A2AAssemblyUnavailable` whenever `decision.selected_tools` is non-empty. | requirement | GRAPHOS-A2A | VERIFIED | dfe297e0466d tests/a2a/test_authority.py:129 |
| GRAPHOS-A2A-R002.2 Caller-filtered tool-subset enforcement at dispatch Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Caller-filtered tool-subset enforcement at dispatch.** The signed AU agent-dispatch carrier accepts and enforces an allowed-tool subset end to end. The caller's exposed tools match its authorization at execution time. Split into `GRAPHOS-A2A-R002.2.1` (the owner-named AU dependency) because graph-os has no public door to add this itself. | Proven by integration tests asserting an enforced tool subset at execution, not just an advisory list. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R002.2.1 Owner-blocked: AU carried, enforced tool-subset field Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Owner-blocked: AU carried, enforced tool-subset field.** `agent_utilities.orchestration.agent_dispatch.AgentTurnEnvelope`/`enqueue_agent_turn` has no field or mechanism to carry and enforce a caller-filtered tool allowlist at execution time. graph-os's `WorkItemA2AAuthority._enqueue`/`dispatch` (`graph_os/a2a/authority.py`) already refuse every request carrying `decision.selected_tools` (`GRAPHOS-A2A-R002.1`) rather than pass through an unenforced allowlist. agent-utilities owns adding that carried, enforced field. Until an agent-utilities spec exists and lands it, `GRAPHOS-A2A-R002.2` cannot be implemented in this repository. | No graph-os-side test is possible against the current AU carrier contract. Verified by the fail-closed tests bound to `GRAPHOS-A2A-R002.1` continuing to refuse rather than silently drop the filter. Tracked as the explicit cross-repo dependency recorded in `tasks.md`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R003 No duplicate skill or prompt harvesting in the multiplexer Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**No duplicate skill or prompt harvesting in the multiplexer.** graph-os removes the multiplexer's separate skill and prompt harvesting path so there is exactly one owner for tool, skill, and prompt discovery, with no duplicate ingestion path remaining in the running package. | Proven by a runtime absence check confirming no duplicate harvest path is present or reachable in the deployed package. | requirement | GRAPHOS-A2A | VERIFIED | 2cbed24252ec deb2b45bf83d tests/fleet/test_no_duplicate_skill_prompt_harvest.py:58 |
| GRAPHOS-A2A-R004 Served MCP bridge runs FastMCP 4, matching its declared version Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Served MCP bridge runs FastMCP 4, matching its declared version.** graph-os's deployed MCP bridge runs on FastMCP 4 end to end, including native WebMCP and a single composition loop, so the dependency version it declares matches the version actually serving requests. | Proven by semantic tests run against the exact declared FastMCP and engine dependency versions, and a live-deployment probe confirming the served version. | requirement | GRAPHOS-A2A | VERIFIED | d5bff77ba836 d60b46fc6984 tests/deployment/test_release_canary.py:31 tests/deployment/test_release_canary.py:64 tests/deployment/test_release_canary.py:83 tests/deployment/test_release_canary.py:95 |
| GRAPHOS-A2A-R005 Durable, fail-closed A2A approval exchange for tool calls Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Durable, fail-closed A2A approval exchange for tool calls.** graph-os defines a human approval exchange for pending tool-call effects in the A2A contract. The task enters an input-required state. The effect requires a signed approval message bound to that specific pending call. Approval stays disabled until the full signed exchange is implemented and proven end to end. Until then, every approval attempt is rejected. Split into `GRAPHOS-A2A-R005.1` (the fail-closed `graphos.plan/confirm` stub) with `GRAPHOS-A2A-R005.2` (the full signed chain) remaining open under the parent. | Negative tests prove approval is refused while unimplemented. A later full-chain test covers request, signed approval and execution. | requirement | GRAPHOS-A2A | SPECIFIED | 9a79acee8b6c |
| GRAPHOS-A2A-R005.1 Fail-closed `graphos.plan/confirm` stub on the A2A method table Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Fail-closed `graphos.plan/confirm` stub on the A2A method table.** graph-os registers `graphos.plan/confirm` in the A2A JSON-RPC method table with typed, validated params, and refuses every confirmation attempt with a distinct error until the full signed human approval exchange exists. | Proven by a test asserting `graphos.plan/confirm` validates params and is refused with a dedicated JSON-RPC error code distinct from "method not found". | requirement | GRAPHOS-A2A | VERIFIED | a226c8fdf397 tests/a2a/test_application.py:274 |
| GRAPHOS-A2A-R005.2 Full signed human approval chain and input-required task emission Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Full signed human approval chain and input-required task emission.** A pending effect moves its durable task to `input-required` with a typed, server-attested pending-call envelope, and an atomic compare-and-set consumes a revocable human grant exactly once before the effect runs. Split into `GRAPHOS-A2A-R005.2.1` (the durable, revocable human-grant store with atomic compare-and-set consumption) with the rest of the chain (input-required task emission wired to a live pending call, signature verification, and the full request-to-execution test) remaining open under this row. | Proven by a full chain test from request through signed approval to execution, and negative tests for replay, changed params, different human, and expired/revoked grant. | requirement | GRAPHOS-A2A | LANDED | cdde0200a54a |
| GRAPHOS-A2A-R005.2.1 Durable, revocable human-grant store with atomic compare-and-set consumption Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Durable, revocable human-grant store with atomic compare-and-set consumption.** No grant store exists anywhere in graph-os today (confirmed by source search: no `GrantStore`/compare-and-set human-approval primitive is defined). `GRAPHOS-A2A-R005.2` cannot move a task to `input-required` and consume a grant exactly once until this store — issuance, lookup, and a single atomic consume-once operation keyed by pending-call id — is specified and built as its own component. | Proven by unit tests asserting a grant is consumed at most once under concurrent compare-and-set attempts, and that consuming an expired or revoked grant fails closed. | requirement | GRAPHOS-A2A | LANDED | cdde0200a54a |
| GRAPHOS-A2A-R005.3 Model Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Model.** `ToolActionAdmissionRequest` and `ToolActionApproval` are new frozen models in `graph_os/a2a/tool_action_admission.py`. Extend `A2APlanConfirmParams` (`graph_os/a2a/models.py:104`) as a closed discriminated union: `confirmation_kind=tool_action` carries this request; `confirmation_kind=held_item` carries HeldItemAdmissionRequest. Reject missing, unknown or mixed variants. The request carries `pending_call_id`, `params_digest`, `trust_mark_ref` and `action_class`. `action_class` is one of `egress`, `privileged_call` or `delegation`. The approval carries `verdict` (`admit` or `deny`), `approval_ref` and `decision_ref`. The engine produces the trust mark; graph-os only carries its reference. | Proven by `tests/a2a/test_tool_action_admission.py::test_models_are_closed_and_frozen`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R005.4 Behavior Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Behavior.** `ToolActionAdmitter.admit` makes one engine round trip and returns the engine's verdict unchanged. The named default `deny_without_verdict` applies only when the engine returns none. graph-os holds no policy table and no threshold. The engine decides whether an action follows untrusted content. | Proven by `tests/a2a/test_tool_action_admission.py::test_admit_returns_engine_verdict_unchanged` and `::test_default_applies_only_without_verdict`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R005.5 Wiring Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Wiring.** Replace the synchronous `_plan_confirm_stub` with one async confirm dispatcher over the closed confirmation_kind union; the tool_action branch awaits shared invoke with Surface.A2A, verified caller, signed authority and audit before `ToolActionAdmitter.admit`. The current stub is (`graph_os/a2a/application.py:140`), registered at `graph_os/a2a/application.py:154` and reached from `_invoke_method` (`graph_os/a2a/application.py:157`) on `POST /a2a`. The harness check at `agent_utilities/security/tool_guard.py:383` calls it through this method and applies the returned approval. No production caller reaches an admission function today. | Proven by `tests/a2a/test_tool_action_admission.py::test_confirm_dispatch_reaches_admitter`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R005.6 Refusal Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Refusal.** The admitter refuses with a typed `ToolActionRefusal` reason: `ENGINE_UNAVAILABLE`, `TRUST_MARK_MISSING`, `ACTION_CLASS_UNKNOWN`, `GRANT_STORE_UNAVAILABLE` or `ABSTAINED`. A refusal never reads as approval. The harness must treat every refusal as deny. Approval stays refused until the full GRAPHOS-A2A-R005.2 signed chain and GRAPHOS-A2A-R006.2 verified-caller bridge (including R006.2.1) pass: live input-required pending call, signature verification, exact params/human binding, one-time grant consumption, expiry and revocation checks. The grant store alone is insufficient. | Proven by `tests/a2a/test_tool_action_admission.py::test_each_refusal_reason_denies`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R005.7 Evidence Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Evidence.** Every approval and refusal records `approval_ref`, `decision_ref`, `pending_call_id`, `action_class` and `params_digest` in the audit reservation of `GRAPHOS-A2A-R007`. No credential or parameter value appears in the record. | Proven by `tests/a2a/test_tool_action_admission.py::test_audit_entry_names_decision_without_values`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R005.8 Hot-path proof Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Hot-path proof.** The entry point is the wire method `graphos.plan/confirm` over `POST /a2a`. A scripted engine returns admit, deny and abstain for one pending call per action class. The test observes the verdict in the response and one linked audit entry per call. It proves a refusal never lets the action proceed. | Proven by `tests/a2a/test_tool_action_admission_e2e.py::test_confirm_returns_engine_verdict_and_audit`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R006 Operation invoke and plan-confirm methods for A2A Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Operation invoke and plan-confirm methods for A2A.** graph-os implements graphos.op/invoke and graphos.plan/confirm as A2A methods registered in its method table, so invoking an operation and confirming its input-required approval use the same scope, policy, and error semantics as other hosted operations. Split into `GRAPHOS-A2A-R006.1` (both methods registered, fail-closed) with `GRAPHOS-A2A-R006.2` (the bridge to the shared hosted-operation registry) remaining open under the parent. | Proven by contract tests asserting invoke and confirm share identical authorization and error codes with the MCP and REST paths for the same operation. | requirement | GRAPHOS-A2A | SPECIFIED | 9a79acee8b6c |
| GRAPHOS-A2A-R006.1 Register `graphos.op/invoke` and `graphos.plan/confirm`, fail-closed Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Register `graphos.op/invoke` and `graphos.plan/confirm`, fail-closed.** graph-os registers both methods in the A2A JSON-RPC method table with typed, validated params, and refuses both with a distinct error until the shared hosted-operation registry's `invoke` path (`Surface.A2A`) is bridged in. | Proven by tests asserting both methods validate params and are refused with a dedicated JSON-RPC error code distinct from "method not found". | requirement | GRAPHOS-A2A | VERIFIED | cdde0200a54a tests/a2a/test_application.py:236 tests/a2a/test_application.py:275 |
| GRAPHOS-A2A-R006.2 Bridge `graphos.op/invoke` to the shared hosted-operation registry Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Bridge `graphos.op/invoke` to the shared hosted-operation registry.** `graphos.op/invoke` passes the verified A2A caller to `graph_os.api.invoke.pipeline.invoke` with `Surface.A2A`, reusing the exact scope, policy, effect, reservation, audit, and error envelope already proven for MCP and HTTP. Split into `GRAPHOS-A2A-R006.2.1` (the A2A-side verified-caller gap owned by agent-utilities) with the actual bridge wiring remaining open under this row. | Proven by contract tests asserting invoke shares identical authorization and error codes with the MCP and REST paths for the same operation. | requirement | GRAPHOS-A2A | LANDED | cdde0200a54a |
| GRAPHOS-A2A-R006.2.1 A2A authenticator must yield a `VerifiedCaller`-compatible session (owner: agent-utilities) Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**A2A authenticator must yield a `VerifiedCaller`-compatible session (owner: agent-utilities).** `graph_os.api.invoke.pipeline.invoke` requires a `VerifiedCaller` whose `.session` exposes `.actor`, `.tenant`, and `.engine_verified_context()` (see `graph_os.api.invoke.bootstrap.VerifiedSession`/`verify_current_from_session`). Today's `AmbientA2AAuthenticator` only calls `agent_utilities.api.session.resolve_session(required_scope=scope)` for its side effect and discards the result, so no A2A path can construct a `VerifiedCaller`. agent-utilities must confirm or extend `resolve_session`'s return shape to satisfy this protocol before the bridge in `GRAPHOS-A2A-R006.2` can be wired. | Proven by a contract test asserting `agent_utilities.api.session.resolve_session` returns an object satisfying `graph_os.api.invoke.bootstrap.VerifiedSession`. | requirement | GRAPHOS-A2A | LANDED | cdde0200a54a |
| GRAPHOS-A2A-R006.3 Model Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Model.** `HeldItemAdmissionRequest` and `HeldItemVerdict` are new frozen models in `graph_os/a2a/held_item_admission.py`. The request carries `item_kind` (`run_output_proposal` or `stored_run_program`), `item_ref`, `content_digest` and `engine_decision_ref`. The verdict carries `outcome` (`admitted`, `rejected` or `abstained`), `verdict_ref` and, for a program, `verification_ref`. The engine owns the held item and its stored form. [arXiv:2606.17929] | Proven by `tests/a2a/test_held_item_admission.py::test_models_are_closed_and_frozen`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R006.4 Behavior Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Behavior.** `HeldItemAdmitter.admit` asks the engine for the verdict on a held item and returns it unchanged. For a stored program, it checks that the verification record names a verifier other than the compiler. It checks pass and retirement evidence against the engine-supplied policy and thresholds. Missing policy evidence or thresholds must refuse; GraphOS has no local default count. graph-os holds no policy of its own. [arXiv:2606.17929] | Proven by `tests/a2a/test_held_item_admission.py::test_program_needs_distinct_verifier_and_required_passes`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R006.5 Wiring Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Wiring.** The held_item branch of the same async confirmation_kind dispatcher awaits shared invoke with Surface.A2A, signed authority and audit before `HeldItemAdmitter.admit`; it replaces the current synchronous `_plan_confirm_stub` (`graph_os/a2a/application.py:140`), reached from `_invoke_method` (`graph_os/a2a/application.py:157`). Wire a dedicated public engine held-item admission port through shared `graph_os.api.invoke.pipeline.invoke` with the verified caller and `Surface.A2A`. Preserve the full signed approval prerequisites, scope/policy checks, pending-call/params/human binding, grant/plan fences, audit reservation and consume-once behavior; graph-os keeps no local record. This port and adapter are new wiring. Do not call `approve_elevation` (`graph_os/access/service.py:54`): it validates ElevationApproval and hardcodes OPERATOR_CONSOLE, which is a different authority surface. The harness moves its proposal approval from `agent_utilities/knowledge_graph/enrichment/writeback/approval.py:47`. No production caller reaches an admission function today. | Proven by `tests/a2a/test_held_item_admission.py::test_confirm_dispatch_reaches_held_item_admitter`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R006.6 Refusal Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Refusal.** The admitter refuses with a typed reason: `ENGINE_UNAVAILABLE`, `ITEM_UNKNOWN`, `DIGEST_MISMATCH`, `VERIFIER_NOT_INDEPENDENT`, `PASSES_INSUFFICIENT`, `RETIRED`, `POLICY_EVIDENCE_MISSING` or `ABSTAINED`. A refusal leaves the item held. The harness must not apply a refused output or run a refused program. | Proven by `tests/a2a/test_held_item_admission.py::test_each_refusal_leaves_item_held`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R006.7 Evidence Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Evidence.** Every verdict records `verdict_ref`, `item_kind`, `item_ref`, `content_digest` and `verification_ref` in the audit reservation of `GRAPHOS-A2A-R007`. A rejected item records its refusal reason. | Proven by `tests/a2a/test_held_item_admission.py::test_audit_entry_names_verdict_and_item`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R006.8 Hot-path proof Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Hot-path proof.** The entry point is the wire method `graphos.plan/confirm` over `POST /a2a`. A scripted engine holds one run output and one stored program. The test observes an admitted verdict applied once through shared invoke with Surface.A2A, a rejected verdict leaving the item held, and the linked audit entry. It proves operator elevation is never called and replay, changed params, wrong human, expired/revoked grants and unavailable producer ports cannot apply an item. | Proven by `tests/a2a/test_held_item_admission_e2e.py::test_confirm_admits_or_rejects_held_item`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R007 Pre-effect audit reservation for every governed write Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Pre-effect audit reservation for every governed write.** Before any governed write or administrative effect, graph-os reserves a tenant-scoped, idempotent audit entry in a pending state, binds it to the verified calling service's claims, and links the entry to the effect's outcome once known. A request with no audit class or an unavailable durable audit writer is rejected before the effect runs. | Proven by negative tests asserting a missing audit class or unavailable writer blocks the effect, and a reconciliation test linking a pending reservation to its final outcome. | requirement | GRAPHOS-A2A | VERIFIED | 9a79acee8b6c c2a6ab839fd3 tests/api/test_invoke_contract.py:435 tests/api/test_invoke_governance.py:443 |
| GRAPHOS-A2A-R008 First-party A2A facade, not a vendored wrapper Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**First-party A2A facade, not a vendored wrapper.** graph-os implements the A2A protocol facade itself as first-party code over the public graph-engine and agent orchestration ports, rather than wrapping or depending on an external vendored A2A implementation. | Proven by a source-level dependency check confirming the A2A facade is implemented in this repository against the public ports. | requirement | GRAPHOS-A2A | VERIFIED | d5bff77ba836 tests/a2a/test_first_party_facade.py:53 tests/a2a/test_first_party_facade.py:66 tests/a2a/test_first_party_facade.py:84 |
| GRAPHOS-A2A-R009 Advertise only what is wired Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Advertise only what is wired.** graph-os's Agent Card sets `capabilities.streaming`, `capabilities.pushNotifications`, and `capabilities.stateTransitionHistory` true only when a real durable authority object implementing the matching protocol (`A2AStreamingAuthority`, `A2APushNotificationAuthority`, `A2ATransitionHistoryAuthority`) is wired into the running composition; no flag or partial authority can force a field true. Split into `GRAPHOS-A2A-R009.1` (the typed capability-advertisement model, landed in this PR). | Proven by unit tests over `A2AAgentCapabilities.from_wired_authorities` asserting default-false, per-authority true, and a `TypeError` refusal on a non-conforming object. | requirement | GRAPHOS-A2A | VERIFIED | 35257e780f7c tests/a2a/test_models.py:38 tests/a2a/test_models.py:47 tests/a2a/test_models.py:56 tests/a2a/test_models.py:67 tests/a2a/test_models.py:88 |
| GRAPHOS-A2A-R009.1 Typed Agent Card capability-advertisement model Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Typed Agent Card capability-advertisement model.** graph-os defines `A2AAgentCapabilities.from_wired_authorities` plus `A2AStreamingAuthority`/`A2APushNotificationAuthority`/`A2ATransitionHistoryAuthority` runtime-checkable protocols in `graph_os/a2a/models.py`, so a capability field is derived from whether a conforming authority object was supplied, never from a bare boolean. | Proven by `tests/a2a/test_models.py` covering default-false, selective true, all-true, and refusal on a non-conforming authority. | requirement | GRAPHOS-A2A | VERIFIED | 35257e780f7c tests/a2a/test_models.py:39 tests/a2a/test_models.py:48 tests/a2a/test_models.py:57 tests/a2a/test_models.py:68 tests/a2a/test_models.py:89 |
| GRAPHOS-A2A-R010 WorkItem stream projection, not a shadow log Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**WorkItem stream projection, not a shadow log.** graph-os's `message/stream` and push delivery read agent-utilities' WorkItem event stream (`AU-CONTROL-001`) through its public port for status, step and terminal-outcome updates, storing no independent event-log copy; a projection gap surfaces as typed `UNAVAILABLE`. | Proven by integration tests against a scripted AU WorkItem event fixture asserting projected events match the fixture and a missing/stale event yields `UNAVAILABLE`, never a backfilled value. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R011 Transition history is read-through to epistemic-graph Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Transition history is read-through to epistemic-graph.** graph-os's `tasks/get` history path reads a task's full state-transition ledger through to epistemic-graph's durable kernel (`EG-DURABLE-KERNEL`) with no local reconstruction. | Proven by a contract test against a scripted EG durable-kernel fixture asserting the returned history exactly matches the fixture ledger. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R012 Typed refusal when the durable history authority is absent Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Typed refusal when the durable history authority is absent.** When no `A2ATransitionHistoryAuthority` is wired or the wired authority is unreachable, graph-os returns a distinct JSON-RPC error `A2ATransitionHistoryUnavailable` with a privacy-safe message, never an empty or partially reconstructed history. | Proven by a negative test asserting the distinct error code and message shape, and that no history data is returned. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R012.1 Landed: the protocol exists, the error does not Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Landed: the protocol exists, the error does not.** `graph_os/a2a/models.py` defines the `A2ATransitionHistoryAuthority` runtime-checkable protocol (`GRAPHOS-A2A-R009.1`); no `A2ATransitionHistoryUnavailable` error type exists and `tasks/get` has no history-refusal wiring. | Proven today by `tests/a2a/test_models.py`; confirmed absent by `git grep -n A2ATransitionHistoryUnavailable graph_os/ tests/`. | requirement | GRAPHOS-A2A | VERIFIED | 35257e780f7c tests/a2a/test_models.py:97 |
| GRAPHOS-A2A-R012.2 Add the `A2ATransitionHistoryUnavailable` error type Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Add the `A2ATransitionHistoryUnavailable` error type.** Add `A2ATransitionHistoryUnavailable(RuntimeError)` to `graph_os/a2a/authority.py`, mirroring the existing `A2AStreamingUnavailable` sibling-error docstring pattern (`-3201x` block). | A new test in `tests/a2a/` asserts the class exists, subclasses `RuntimeError`, and is exported from `graph_os/a2a/authority.py.__all__`. | requirement | GRAPHOS-A2A | VERIFIED | 35257e780f7c tests/a2a/test_authority.py:154 |
| GRAPHOS-A2A-R012.3 Blocked: wire `tasks/get`'s typed refusal Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Blocked: wire `tasks/get`'s typed refusal.** Wire `tasks/get` to raise `A2ATransitionHistoryUnavailable` when no `A2ATransitionHistoryAuthority` is wired or the wired authority raises on call, per test-spec row `A2A-HT06`. Blocked on `GRAPHOS-A2A` landing (`GRAPHOS-A2A-R014`), since the real history read-through this wires against does not exist until then. | `A2A-HT06` in `test-spec.md` passes once unblocked. Tracked here as the explicit cross-dependency rather than left implicit. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R013 Push notifications are best-effort over a durable outbox Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Push notifications are best-effort over a durable outbox.** graph-os retries push delivery from epistemic-graph's durable outbox (`EG-DURABLE-KERNEL-R001`), never an in-process queue; a repeatedly failing target is dead-lettered and reported. | Proven by a restart test asserting pending pushes survive process restart via the outbox, and a repeated-failure test asserting dead-letter reporting. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R014 No capability advertised before GRAPHOS-A2A lands Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**No capability advertised before GRAPHOS-A2A lands.** Until `GRAPHOS-A2A`'s context-budget subset is on the default branch, graph-os's composition layer refuses to wire a real streaming/push/history authority, keeping all three capability fields fixed false. | Proven by a composition-layer test asserting authority wiring is refused (or absent) while the `GRAPHOS-A2A` dependency flag is unset. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R014.1 Card advertises no harness capability before it works Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Card advertises no harness capability before it works.** The Agent Card (`A2AAgentCapabilities`, `graph_os/a2a/models.py:167`) must not carry any harness-admission field or extension until `GRAPHOS-A2A-R017.6` passes on the default branch. | Proven by `tests/a2a/test_agent_card.py::test_card_has_no_harness_field_before_admission_e2e`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R015 Caller-visible card matches served behavior Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Caller-visible card matches served behavior.** A contract test asserts the Agent Card's advertised capability subset exactly matches which of streaming/push/history the integration fixture actually exercises at the tested revision. | Proven by a contract test comparing advertised capabilities against the fixture's exercised capability set at the exact tested revision. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R016 Typed admission request/decision model Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Typed admission request/decision model.** GraphOS defines a typed `ToolSubsetAdmissionRequest` (selected agent graph reference, caller context budget) and `ToolSubsetAdmissionDecision` (admitted flag, admitted tool subset, typed refusal reason, provenance) at the A2A admission door. Split into `GRAPHOS-A2A-R016.1` (the model plus a refusal test proving today's exact fail-closed result), with live EG/AU wiring remaining open under the parent. | Proven by a unit test constructing both models and exercising the admission function's current fail-closed return. | requirement | GRAPHOS-A2A | SPECIFIED | 35257e780f7c tests/a2a/test_admission.py:15 |
| GRAPHOS-A2A-R016.1 Fail-closed admission function proven against today's unavailable upstreams Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Fail-closed admission function proven against today's unavailable upstreams.** GraphOS's `admit_tool_subset` function accepts a typed `ToolSubsetAdmissionRequest` and returns a typed `ToolSubsetAdmissionDecision` refusing every request with `admitted=False`, no admitted tools, reason `EG_ASSEMBLE_UNAVAILABLE`, and a provenance reference naming the unavailable EG operation — never silently succeeding, never an unrecognized/untyped error. | Proven by a test asserting the exact refusal fields for a representative request while EG `AgentAssemble` and AU's envelope field remain unavailable. | requirement | GRAPHOS-A2A | VERIFIED | 35257e780f7c tests/a2a/test_admission.py:16 |
| GRAPHOS-A2A-R016.2 Admission request carries model profile and task class Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Admission request carries model profile and task class.** `ToolSubsetAdmissionRequest` in `graph_os/a2a/admission.py` gains `model_profile_ref` and `task_class`, both non-empty strings. GraphOS takes both from the routed capability, never from the caller. | Proven by `tests/a2a/test_admission.py::test_request_requires_model_profile_and_task_class`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R016.3 Admission decision carries the committed harness answer Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Admission decision carries the committed harness answer.** `ToolSubsetAdmissionDecision` gains `harness_config`, a typed mirror of the engine `HarnessConfigAnswer`, and `context_budget_tokens`. An admitted decision must carry both. A refused decision must carry neither. | Proven by `tests/a2a/test_admission.py::test_admitted_decision_carries_harness_config_and_budget`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R016.4 Refusal enum gains the harness reasons Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Refusal enum gains the harness reasons.** `ToolSubsetAdmissionRefusalReason` gains `HARNESS_CONFIG_UNAVAILABLE`, `HARNESS_CONFIG_ABSTAINED`, `ENVELOPE_LACKS_HARNESS_CONFIG`, and `CONTEXT_BUDGET_MISSING`. GraphOS holds no policy table and no default threshold. | Proven by `tests/a2a/test_admission.py::test_refusal_reasons_are_closed_set`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R016.5 Routing decision carries model profile and task class Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Routing decision carries model profile and task class.** `A2ARouteDecision` in `graph_os/a2a/routing.py` gains `model_profile_ref` and `task_class`, read from the `resolve_capability` result at `graph_os/a2a/routing.py:61`. A result lacking either field must raise `A2AAssemblyUnavailable`. | Proven by `tests/a2a/test_routing.py::test_route_decision_carries_model_profile_and_task_class`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R017 Context-budget-bound subset sourced from EG assembly Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Context-budget-bound subset sourced from EG assembly.** The admission door derives an admitted tool subset only from a committed epistemic-graph `AgentAssemble` answer (`EG-DECISION-ENGINE-R036`) covering the selected agent graph within the caller's context budget; while that operation returns unavailable, admission refuses closed with reason `EG_ASSEMBLE_UNAVAILABLE`. | Proven by integration tests against a scripted EG assembly client covering an available committed answer and an unavailable/abstained answer. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R017.1 Engine decision port for HarnessConfig Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Engine decision port for HarnessConfig.** `graph_os/a2a/admission.py` defines the `HarnessConfigDecider` protocol with one async method. The method takes tenant, model profile reference, task class, budget tokens, and priority. It returns the engine `HarnessConfigAnswer` (EG-DECISION-ENGINE row for the `HarnessConfig` question). | Proven by `tests/a2a/test_admission.py::test_decider_port_returns_typed_answer`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R017.2 Admission is async and calls the decider once Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Admission is async and calls the decider once.** `admit_tool_subset` becomes `async` and takes the decider as an argument. It makes exactly one engine round trip and reads the allowed tool subset from the answer's `action_space`. It makes no separate `AgentAssemble` call. | Proven by `tests/a2a/test_admission.py::test_admission_makes_one_engine_call`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R017.3 Priority comes from the principal class Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Priority comes from the principal class.** The admission request carries `priority`, set from the authenticated principal class through the engine contract's priority enum. The caller must not supply it. | Proven by `tests/a2a/test_admission.py::test_priority_is_set_from_principal_class`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R017.4 Missing budget refuses Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Missing budget refuses.** When `context_budget_tokens` is null or below 1, admission refuses with `CONTEXT_BUDGET_MISSING` before it calls the engine. | Proven by `tests/a2a/test_admission.py::test_missing_budget_refuses_before_engine_call`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R017.5 Wire admission into the send path Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Wire admission into the send path.** `A2AService.send_message` (`graph_os/a2a/service.py:40`) calls `admit_tool_subset` after `router.route`. The call replaces the inline raises at `graph_os/a2a/routing.py:74`, `graph_os/a2a/authority.py:268`, and `graph_os/a2a/authority.py:299`. | Proven by `tests/a2a/test_service_admission.py::test_send_message_refuses_without_admission`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R017.6 End-to-end admitted task Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**End-to-end admitted task.** A scripted decider and a signing envelope fake drive `POST /a2a` `message/send` (`graph_os/a2a/application.py:166`). The test asserts one enqueued envelope whose `harness_config` equals the scripted answer. | Proven by `tests/a2a/test_admission_e2e.py::test_message_send_enqueues_envelope_with_harness_config`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R018 Cryptographic enforcement via the signed AU envelope Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Cryptographic enforcement via the signed AU envelope.** An admitted tool subset is carried only inside the signed AU `AgentTurnEnvelope`'s allowed-tool-subset field (`AU-CONTROL-R035`); while that field does not exist in the signed envelope, admission refuses closed with reason `ENVELOPE_LACKS_ALLOWED_TOOL_SUBSET` even given an EG assembly answer. | Proven by a test asserting a request refuses with this reason when the EG answer exists but the envelope carries no allowed-tool-subset field, and admits only once the signed field is present and its signature verified. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R018.1 Envelope carries harness_config Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Envelope carries harness_config.** `WorkItemA2AAuthority._enqueue` (`graph_os/a2a/authority.py:256`) passes the admitted `harness_config` into `AgentTurnEnvelope` next to the allowed tool subset. It depends on the AU-CONTROL row for the envelope `harness_config` field. | Proven by `tests/a2a/test_authority_envelope.py::test_enqueue_passes_harness_config`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R018.2 Envelope without the field refuses Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Envelope without the field refuses.** When `AgentTurnEnvelope.model_fields` lacks `harness_config`, admission refuses with `ENVELOPE_LACKS_HARNESS_CONFIG`, even given a committed engine answer. | Proven by `tests/a2a/test_admission.py::test_envelope_lacking_harness_config_refuses`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R019 Typed refusal reason and provenance on every decision Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Typed refusal reason and provenance on every decision.** Every `ToolSubsetAdmissionDecision`, admitted or refused, carries a stable machine-readable field sufficient to audit exactly which upstream answer authorized or blocked it. | Proven by a schema test asserting every decision instance has a non-empty `provenance` and, when refused, a `refusal_reason` drawn from the typed enumeration. | requirement | GRAPHOS-A2A | SPECIFIED | 35257e780f7c tests/a2a/test_admission.py:34 |
| GRAPHOS-A2A-R019.1 Provenance names the harness decision Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Provenance names the harness decision.** An admitted decision's `provenance` names the engine decision record identifier of the `HarnessConfig` answer. A refused decision names the refusing operation. | Proven by `tests/a2a/test_admission.py::test_provenance_names_harness_decision_record`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R020 No advisory, cached, or partial substitute Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**No advisory, cached, or partial substitute.** The admission door never returns a tool subset that is advisory-only, drawn from a prior request's cached answer, or a partial/best-effort coverage of the selected agent graph; an incomplete upstream answer is a refusal, not a smaller admission. | Proven by negative tests asserting a partial or stale upstream answer produces a refusal, never a trimmed admission. | requirement | GRAPHOS-A2A | SPECIFIED | 35257e780f7c tests/a2a/test_admission.py:53 |
| GRAPHOS-A2A-R020.1 Abstention refuses and records the named default Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Abstention refuses and records the named default.** When the engine answer is a typed abstention, admission refuses with `HARNESS_CONFIG_ABSTAINED`. The decision records the abstention's named default in `provenance`. It must not apply that default. | Proven by `tests/a2a/test_admission.py::test_abstention_refuses_and_does_not_apply_default`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R020.2 Unavailable, stale, or partial answers refuse Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Unavailable, stale, or partial answers refuse.** An unreachable engine, an expired decision record, or an answer missing a threshold under a summarizing policy refuses with `HARNESS_CONFIG_UNAVAILABLE`. | Proven by `tests/a2a/test_admission.py::test_unavailable_stale_or_partial_harness_answer_refuses`. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R021 Fresh checkout Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Fresh checkout.** Contract and unit tests for the admission model and its refusal behavior run with published packages and no private network, sibling checkout, or live production identity provider. | Proven by running the admission test suite from a clean public clone with no additional configuration. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-A2A-R022 Critique-gated output release Definition — GRAPHOS-A2A / GRAPHOS-A2A — A2A projection, streaming, history and tool-subset admissionCanonical requirement and verification source**Critique-gated output release.** Require the owning AU runtime's typed checklist and questions. Bind the EG critique verdict to the exact generated output. Before release, apply the held-item contract in `GRAPHOS-A2A-R006.3` through `GRAPHOS-A2A-R006.8`. Preserve the verified-caller prerequisite in `GRAPHOS-A2A-R006.2.1` and signed-authority prerequisites in `GRAPHOS-A2A-R006.5`. Gate output at `graph_os/a2a/application.py:_send_message`. Keep this separate from `graph_os/a2a/routing.py:OrchestratorA2ARouter.route`; routing selects an agent and cannot satisfy critique acceptance. Keep release unavailable until the AU and EG producer contracts are published. Add no second approval authority. | Future acceptance: `tests/a2a/test_application.py::test_send_message_holds_output_until_bound_critique_passes` and `tests/a2a/test_application.py::test_send_message_rejects_untyped_preflight_and_failed_critique`. Exercise a verified caller through held-item admission. Bind the verdict to the exact output. Missing, mismatched, rejected, or abstained evidence leaves the item held and sends no output. Prove routing alone cannot satisfy critique acceptance. These tests are proposed; no execution is claimed. | requirement | GRAPHOS-A2A | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-ACCEPTANCE GRAPHOS-ACCEPTANCE — evidence acceptance freeze | spec | None | LANDED | No recorded commit/test evidence |
| GRAPHOS-ACCEPTANCE-R001 Typed acceptance-evidence model and freeze-gap checker Definition — GRAPHOS-ACCEPTANCE / GRAPHOS-ACCEPTANCE — evidence acceptance freezeCanonical requirement and verification source**Typed acceptance-evidence model and freeze-gap checker.** GraphOS ships a typed model of the three evidence kinds a requirement needs for `ACCEPTED` (`merged_head`, `test`, and operational `consumer`/`release`, all at the same commit) and a checker that, given a spec's `status.json`, lists every `LANDED`/`CLOSED` requirement missing one or more of those kinds at its `merged_head` commit. | A unit test against a fixture `status.json` asserts the checker reports exactly the gapped requirement IDs with their missing evidence kind names, and a refusal test asserts a malformed or missing `status.json` raises rather than reporting a false pass. | requirement | GRAPHOS-ACCEPTANCE | LANDED | a5951682d6da f62a4e2e39ed tests/test_check_acceptance_evidence.py:137 tests/test_check_acceptance_evidence.py:83 |
| GRAPHOS-ACCEPTANCE-R001.1 implement the typed EvidenceRecord/RequirementGap model and gaps_for_status/load_status functions plus the standalone CLI entry point in scripts/check_acceptanc Definition — GRAPHOS-ACCEPTANCE / GRAPHOS-ACCEPTANCE — evidence acceptance freezeCanonical requirement and verification source**implement the typed EvidenceRecord/RequirementGap model and gaps_for_status/load_status functions plus the standalone CLI entry point in scripts/check_acceptanc.** Child slice of `GRAPHOS-ACCEPTANCE-R001` (see tasks.md). | A unit test against a fixture status.json asserts the checker reports exactly the gapped requirement IDs with their missing evidence kind names, and a refusal test asserts a malformed or missing status.json raises rather than reporting a false pass | requirement | GRAPHOS-ACCEPTANCE | LANDED | 57cb99978975 |
| GRAPHOS-ACCEPTANCE-R002 Auditor distinct from delivery lane Definition — GRAPHOS-ACCEPTANCE / GRAPHOS-ACCEPTANCE — evidence acceptance freezeCanonical requirement and verification source**Auditor distinct from delivery lane.** A requirement's `acceptance_state` moves from `NOT_AUDITED` to `ACCEPTED` only in a change where the reviewing identity differs from the author of the `merged_head` commit it cites, and only after `GRAPHOS-ACCEPTANCE-R001`'s checker reports no gap for that requirement. | A review-trail test over a sample `status.json` edit asserts the recorded auditor identity differs from the cited commit's author, and that the checker was run (or its report attached) before the state flip. | requirement | GRAPHOS-ACCEPTANCE | VERIFIED | a5951682d6da f62a4e2e39ed tests/test_check_acceptance_evidence.py:179 tests/test_check_acceptance_evidence.py:192 tests/test_check_acceptance_evidence.py:205 |
| GRAPHOS-ACCEPTANCE-R003 Evidence is append-only Definition — GRAPHOS-ACCEPTANCE / GRAPHOS-ACCEPTANCE — evidence acceptance freezeCanonical requirement and verification source**Evidence is append-only.** Once an evidence entry is recorded for a requirement, its `kind`, `commit`, `result`, and `url` fields are never rewritten in place; a correction is a new appended entry, and the checker only honors entries matching the requirement's current `merged_head` commit. | A regression test diffs two revisions of the same `status.json` and fails if any existing evidence entry's fields changed rather than a new entry being appended. | requirement | GRAPHOS-ACCEPTANCE | VERIFIED | a5951682d6da f62a4e2e39ed tests/test_check_acceptance_evidence.py:216 tests/test_check_acceptance_evidence.py:224 |
| GRAPHOS-ACCEPTANCE-R004 Operational evidence tracks the current commit, not a stale one Definition — GRAPHOS-ACCEPTANCE / GRAPHOS-ACCEPTANCE — evidence acceptance freezeCanonical requirement and verification source**Operational evidence tracks the current commit, not a stale one.** A `consumer` or `release` receipt satisfies the `ACCEPTED` gate only when recorded against the requirement's current `merged_head` commit; a receipt recorded against a superseded commit is treated as missing. | A fixture test moves a requirement's `merged_head` forward without a fresh operational receipt and asserts the checker reports the operational-evidence kind as missing again. | requirement | GRAPHOS-ACCEPTANCE | VERIFIED | a5951682d6da f62a4e2e39ed tests/test_check_acceptance_evidence.py:99 |
| GRAPHOS-ACCEPTANCE-R005 Checker is the only path to an `ACCEPTED` report Definition — GRAPHOS-ACCEPTANCE / GRAPHOS-ACCEPTANCE — evidence acceptance freezeCanonical requirement and verification source**Checker is the only path to an `ACCEPTED` report.** The acceptance-evidence checker is runnable standalone (as a script or an importable module) against any spec directory under `specs/`, producing a deterministic, machine-parseable gap report with no network or live-cluster dependency. | A CLI invocation test runs the checker against each tracked spec's `status.json` offline and asserts exit code and report shape are deterministic across two consecutive runs. | requirement | GRAPHOS-ACCEPTANCE | VERIFIED | a5951682d6da f62a4e2e39ed tests/test_check_acceptance_evidence.py:232 |
| GRAPHOS-CAPACITY GRAPHOS-CAPACITY — Adaptive capacity control | spec | None | VERIFIED | No recorded commit/test evidence |
| GRAPHOS-CAPACITY-R001 AIMD error-budget throttling that only narrows automatically (rollup) Definition — GRAPHOS-CAPACITY / GRAPHOS-CAPACITY — Adaptive capacity controlCanonical requirement and verification source**AIMD error-budget throttling that only narrows automatically (rollup).** graph-os observes a bounded error budget per tenant, child, and operation class and applies additive-increase/multiplicative-decrease throttling against the graph engine's declared capacity cell limit. An automatic control action may only narrow the allowed concurrency, never raise it above that ceiling, and every decision is recorded with its input window, old and new limits, and reason. Delivered through its child requirements, producer first. | Proven by a deterministic fixture test demonstrating decrease on budget breach, bounded recovery, and an idempotent decision receipt for a replayed window. | requirement | GRAPHOS-CAPACITY | VERIFIED | d2f29725918d |
| GRAPHOS-CAPACITY-R001.1 Pure partitioned AIMD decision rule Definition — GRAPHOS-CAPACITY / GRAPHOS-CAPACITY — Adaptive capacity controlCanonical requirement and verification source**Pure partitioned AIMD decision rule.** `graph_os/fleet/error_budget.py` defines typed `Partition`, `OutcomeSample`, `BudgetWindow`, `AimdConfig`, `ThrottleMode` and `ThrottleDecision`, and a pure `decide()` function that computes the next concurrency limit from a closed window and the controller's prior state: eligible service failures (not caller errors or policy denials) drive the error fraction, breach multiplicatively decreases bounded by a floor, a healthy window additively increases bounded by the engine/policy ceiling, and replaying the same window is idempotent. No clock, I/O or fleet dispatch wiring. | `tests/fleet/test_error_budget.py` covers bounded recovery, multiplicative decrease, the floor and engine-headroom ceiling, caller-error/policy-denial neutrality, insufficient-sample handling, idempotent replay, and tenant/child partition isolation. | requirement | GRAPHOS-CAPACITY | VERIFIED | 69d6f6eef5ea c46a1ded6a8f d2f29725918d tests/fleet/test_error_budget.py:28 |
| GRAPHOS-CAPACITY-R002 Capacity status and mode operations Definition — GRAPHOS-CAPACITY / GRAPHOS-CAPACITY — Adaptive capacity controlCanonical requirement and verification source**Capacity status and mode operations.** graph-os exposes capacity operations in graph_os/api/ops/capacity.py and a read/config facade in graph_os/fleet/throttle_service.py that report controller status, update cell limits, report throttle state, and select observe or enforce mode per child, using the same hosted-operation registry, identity, and error handling as other operations. | Proven by contract tests asserting a mode change requires verified administrator authorization while capacity:read permits status only. | requirement | GRAPHOS-CAPACITY | VERIFIED | 69d6f6eef5ea c46a1ded6a8f tests/api/test_capacity_ops.py:26 |
| GRAPHOS-ACP GRAPHOS-ACP — Conversational ACP gateway session projection and policy | spec | None | VERIFIED | No recorded commit/test evidence |
| GRAPHOS-ACP-R001 Conversational ACP gateway session admission and policy Definition — GRAPHOS-ACP / GRAPHOS-ACP — Conversational ACP gateway session projection and policyCanonical requirement and verification source**Conversational ACP gateway session admission and policy.** GraphOS admits an ACP session only for a verified principal from the existing identity path, binds the session immutably to that principal/tenant/scope snapshot, enforces configured idle and absolute expiry limits, and returns one typed `chat_adapter_unavailable` refusal for admission and messages whenever the agent-utilities chat adapter is absent or unreachable, without a local reply or REST fallback. Split into `GRAPHOS-ACP-R001.1` (the graph-os-owned typed session-policy model and admission/refusal check) with the transport wiring to the real ACP endpoint and the identical REST-path projection check remaining open under the parent until `GRAPHOS-ACP-R001.2`'s dependency is satisfied. | Unit and integration tests cover admission refusal for missing/invalid credentials, immutable binding, idle-expired refusal, absolute-expired refusal, the typed adapter-unavailable refusal on both admission and message, identical principal/tenant/scope projection against the REST path, and a status/doctor read that reports adapter and limit state without secrets. | requirement | GRAPHOS-ACP | VERIFIED | 9a79acee8b6c c2a6ab839fd3 |
| GRAPHOS-ACP-R001.1 Typed ACP session-policy model and fail-closed admission check Definition — GRAPHOS-ACP / GRAPHOS-ACP — Conversational ACP gateway session projection and policyCanonical requirement and verification source**Typed ACP session-policy model and fail-closed admission check.** graph-os defines the typed `PrincipalContext`/`AcpSessionPolicy`/`AcpSessionSnapshot` model and an `AcpSessionAdmission` that admits only a verified principal, binds the session immutably, enforces idle/absolute expiry, and refuses with a distinct `chat_adapter_unavailable` reason — on both admission and message — whenever the caller-supplied chat-adapter probe reports unavailable, with no transport wired yet. | Proven by unit tests asserting unauthenticated refusal, immutable principal binding, idle- and absolute-expiry refusal, and the dedicated `chat_adapter_unavailable` refusal on both admission and message. | requirement | GRAPHOS-ACP | VERIFIED | 9a79acee8b6c c2a6ab839fd3 tests/acp/test_session_policy.py:31 tests/acp/test_session_policy.py:71 |
| GRAPHOS-DATA-MARKET GRAPHOS-DATA-MARKET — Schema context, source admission, and finance projection | spec | None | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DATA-MARKET-R001 Durable, deduplicated flip alert delivery Definition — GRAPHOS-DATA-MARKET / GRAPHOS-DATA-MARKET — Schema context, source admission, and finance projectionCanonical requirement and verification source**Durable, deduplicated flip alert delivery.** graph-os subscribes durably to the finance flip event topic and delivers alerts to configured notification channels, deduplicating by tenant, event ID, and subscriber so a restart cannot cause a duplicate user-visible alert. An alert never authorizes an order or changes a portfolio. | Proven by a restart/redelivery test confirming at-least-once transport with idempotent, deduplicated delivery. | requirement | GRAPHOS-DATA-MARKET | LANDED | e61c0e3df8b7 |
| GRAPHOS-DATA-MARKET-R002 Scheduled finance backfill, scan, and explanation jobs Definition — GRAPHOS-DATA-MARKET / GRAPHOS-DATA-MARKET — Schema context, source admission, and finance projectionCanonical requirement and verification source**Scheduled finance backfill, scan, and explanation jobs.** graph-os schedules finance backfill, scan, and flip-explanation jobs through its existing scheduler, recording each schedule's tenant, owner, authorized action, timezone, trigger, idempotency key, and last run, so a daylight-saving transition or replay cannot duplicate an effect. The explanation itself is produced by the agent workflow and must cite its exact calculation inputs. | Proven by a scheduler test crossing a daylight-saving transition and a replay test confirming no duplicate job execution. | requirement | GRAPHOS-DATA-MARKET | LANDED | 57391db3828f |
| GRAPHOS-DATA-MARKET-R003 Server-side finance and markets reads and paper order submission Definition — GRAPHOS-DATA-MARKET / GRAPHOS-DATA-MARKET — Schema context, source admission, and finance projectionCanonical requirement and verification source**Server-side finance and markets reads and paper order submission.** graph-os serves tenant-scoped market and finance reads, and paper order submission, through graph_os/api/ops/finance.py and markets.py, with the market read logic ported server-side into graph_os/finance/markets.py. Each read requires the finance:read grant. If tenant or account binding is unverified, return a typed unavailable result before any provider call. Paper order submission requires a tenant-bound account and the finance:paper-trade grant. | Acceptance: two-tenant tests must confirm zero cross-tenant reads. A negative test must confirm unverified account binding returns unavailable before any provider call. | requirement | GRAPHOS-DATA-MARKET | SPECIFIED | 57391db3828f b1ee0584dbba |
| GRAPHOS-DATA-MARKET-R004 One-at-a-time application admission with rollback Definition — GRAPHOS-DATA-MARKET / GRAPHOS-DATA-MARKET — Schema context, source admission, and finance projectionCanonical requirement and verification source**One-at-a-time application admission with rollback.** graph-os admits one named application and its data source into the shared data plane at a time, using a dry-run plan, an idempotency key, explicit approval, health and parity probes, and a rollback fence. An application's existing ingest connector is retired only after the admitted source is healthy, parity checks pass, and the retirement is approved. | Proven by a restart/fault test demonstrating a failed admission rolls back without retiring the prior connector. | requirement | GRAPHOS-DATA-MARKET | LANDED | 33622be01de7 fd761d59a171 |
| GRAPHOS-DATA-MARKET-R005 schema_context query surface for tables and ontology mappings Definition — GRAPHOS-DATA-MARKET / GRAPHOS-DATA-MARKET — Schema context, source admission, and finance projectionCanonical requirement and verification source**schema_context query surface for tables and ontology mappings.** graph-os serves authenticated `schema_context` over REST and MCP. Callers can request definitions, joins, ontology class mapping, owning application, or change impact. The response labels unverified and inferred relationships as proposals, not approved facts. When the engine lacks `schema_context` or an approved source catalog snapshot, GraphOS returns typed unavailable. It does not fabricate an answer. | Proven by contract tests covering each intent (definition, joins, ontology, owner, impact) and a negative test for an unsupported source returning a typed unavailable result. | requirement | GRAPHOS-DATA-MARKET | LANDED | 0a1beb2aae13 44ba09589820 8a7010bd6592 |
| GRAPHOS-DATA-MARKET-R006 Recurring DCA plans with deterministic, non-duplicating proposals Definition — GRAPHOS-DATA-MARKET / GRAPHOS-DATA-MARKET — Schema context, source admission, and finance projectionCanonical requirement and verification source**Recurring DCA plans with deterministic, non-duplicating proposals.** graph-os stores a recurring dollar-cost-averaging plan's owner, tenant, symbol, account binding, decimal amount and currency, timezone, recurrence rule, bounds, pause state, and paper or live mode, and produces one durable proposal per due occurrence with a key derived from the plan revision so replay or clock drift cannot create a duplicate. Paper mode executes only under the paper grant and lease; live mode stays proposal-only until a human approves the exact preview and a connector consumes a write-back lease through the governed path in AU-CONTEXT-R006. A missed or failed contribution is reported, never silently skipped or doubled. | Proven by a replay and clock-drift test asserting exactly one proposal per occurrence, and a fault test confirming a missed contribution is reported rather than silently dropped. | requirement | GRAPHOS-DATA-MARKET | LANDED | 35385208a619 e61c0e3df8b7 |
| GRAPHOS-DATA-MARKET-R007 Confirmed order and position changes Definition — GRAPHOS-DATA-MARKET / GRAPHOS-DATA-MARKET — Schema context, source admission, and finance projectionCanonical requirement and verification source**Confirmed order and position changes.** Require explicit confirmation before an order or position effect. Consume the SDK-GOVERNED-WRITEBACK-R001.1 through R001.6 signature-verification contract for wallet operations. EG owns authorization; GraphOS serves authenticated confirmation and preserves its decision. Keep wallet operations unavailable until the producer and all durable bindings are implemented. GRAPHOS-DATA-MARKET-R003 owns paper submission; GRAPHOS-OPS-R017.2 owns subject ownership. | Served acceptance in tests/integration/test_order_confirmation.py; runtime proof remains required. | requirement | GRAPHOS-DATA-MARKET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DATA-MARKET-R007.1 Model Definition — GRAPHOS-DATA-MARKET / GRAPHOS-DATA-MARKET — Schema context, source admission, and finance projectionCanonical requirement and verification source**Model.** OrderChange and PositionChange bind exact intent. WalletOperation imports SDK WalletBusinessIntent and WalletExecutionEnvelope. Proof and confirmation metadata remain outside business parameters. The plan defines the exact immutable projection; never embed WalletProofRequest inside hashed intent. Bind authenticated caller tenant and actor, account, network, wallet, operation and exact change-set identity. Read-only models at graph_os/finance/markets.py:34 do not implement this contract. | Served acceptance in tests/integration/test_order_confirmation.py; runtime proof remains required. | requirement | GRAPHOS-DATA-MARKET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DATA-MARKET-R007.2 Behavior Definition — GRAPHOS-DATA-MARKET / GRAPHOS-DATA-MARKET — Schema context, source admission, and finance projectionCanonical requirement and verification source**Behavior.** Prepare immutable intent and require explicit confirmation under `confirm_before_commit`. `plan_digest` means `params_digest({"intent": WalletBusinessIntent})`. Sign after confirmation; adding proof cannot change that digest. Consume the authenticated SDK proof result unchanged and match every binding before dispatch. A valid signature is insufficient without EG authorization, account entitlement and durable effect reservation. Use the existing effect key for retries; never create another nonce or approval store. | Served acceptance in tests/integration/test_order_confirmation.py; runtime proof remains required. | requirement | GRAPHOS-DATA-MARKET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DATA-MARKET-R007.3 Wiring Definition — GRAPHOS-DATA-MARKET / GRAPHOS-DATA-MARKET — Schema context, source admission, and finance projectionCanonical requirement and verification source**Wiring.** Register the new operations through graph_os/api/ops/registry_factory.py with Confirm.PLAN. Reuse `_effect` at graph_os/api/invoke/pipeline.py:218 and `bind_plan` at line 230. The operation handler must invoke the admitted connector SDK proof and governed apply composition before any provider effect. The shared WalletExecutionEnvelope extension must separate proof before plan hashing, validation, audit and reservation. HTTP and MCP lack this extension. No order or wallet operation is reachable today. | Served acceptance in tests/integration/test_order_confirmation.py; runtime proof remains required. | requirement | GRAPHOS-DATA-MARKET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DATA-MARKET-R007.4 Refusal Definition — GRAPHOS-DATA-MARKET / GRAPHOS-DATA-MARKET — Schema context, source admission, and finance projectionCanonical requirement and verification source**Refusal.** Return CONFIRMATION_REQUIRED for absent confirmation and PLAN_MISMATCH for intent tampering. Return POLICY_DENIED for invalid proof and UNAVAILABLE for absent verifier, envelope, trust or durable binding authority. Preserve the SDK typed reason in redacted error details. No refused request reaches provider mutation; an uncertain prior effect enters reconciliation instead of blind retry. | Served acceptance in tests/integration/test_order_confirmation.py; runtime proof remains required. | requirement | GRAPHOS-DATA-MARKET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DATA-MARKET-R007.5 Evidence Definition — GRAPHOS-DATA-MARKET / GRAPHOS-DATA-MARKET — Schema context, source admission, and finance projectionCanonical requirement and verification source**Evidence.** Record request, tenant, actor, plan and confirmation in the existing audit record. Join EG authorization, proof digest, signer, trust revision and effect receipt. Preserve the SDK verification outcome unchanged. Never log raw signatures, private keys or reusable proof bodies. | Served acceptance in tests/integration/test_order_confirmation.py; runtime proof remains required. | requirement | GRAPHOS-DATA-MARKET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DATA-MARKET-R007.6 Hot-path proof Definition — GRAPHOS-DATA-MARKET / GRAPHOS-DATA-MARKET — Schema context, source admission, and finance projectionCanonical requirement and verification source**Hot-path proof.** `tests/integration/test_order_confirmation.py::test_wallet_proof_confirmation_and_replay` enters the served operation at POST /api/v1/ops/{op_id} and its MCP twin. Use the real SDK verifier, synthetic keys, durable graph authority and a controlled provider. Serve prepare, confirm, sign and execute; proof insertion preserves the intent digest and yields one effect. Missing confirmation, altered account/network/payload, revoked key, expiry and unavailable producer yield none. Concurrent retries and restart read the same effect receipt without another mutation. | Served acceptance in tests/integration/test_order_confirmation.py; runtime proof remains required. | requirement | GRAPHOS-DATA-MARKET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DATA-MARKET-R003.1 Market list/search/get Definition — GRAPHOS-DATA-MARKET / GRAPHOS-DATA-MARKET — Schema context, source admission, and finance projectionCanonical requirement and verification source**Market list/search/get.** Define read-only `markets.list`, `markets.search`, and `markets.get` on `finance:read`. List/search accept `limit` (default 50, 1–100), optional opaque cursor, and only `event_id`, `status`, `starts_at_from`, `starts_at_to`, `ends_at_from`, and `ends_at_to`; search also requires the bounded `query` defined in plan.md. Get accepts only `market_id`. Search matches case-sensitive NFC substrings in `question` or outcome `name`. Sort by `starts_at` ascending with nulls last, then `market_id` ascending. | Served tests cover exact filters, query bounds, stable ordering, get-by-ID, and zero effect calls. | requirement | GRAPHOS-DATA-MARKET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DATA-MARKET-R003.2 Event list/search/get Definition — GRAPHOS-DATA-MARKET / GRAPHOS-DATA-MARKET — Schema context, source admission, and finance projectionCanonical requirement and verification source**Event list/search/get.** Define read-only `events.list`, `events.search`, and `events.get` on `finance:read`. List/search accept `limit` (default 50, 1–100), optional opaque cursor, and only `status`, `starts_at_from`, `starts_at_to`, `ends_at_from`, and `ends_at_to`; search also requires the bounded `query` defined in plan.md. Get accepts only `event_id`. Search matches case-sensitive NFC substrings in `title` or `description`. Sort by `starts_at` ascending with nulls last, then `event_id` ascending. | Served tests cover exact filters, query bounds, stable ordering, get-by-ID, and zero effect calls. | requirement | GRAPHOS-DATA-MARKET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DATA-MARKET-R003.3 Order list/search/get Definition — GRAPHOS-DATA-MARKET / GRAPHOS-DATA-MARKET — Schema context, source admission, and finance projectionCanonical requirement and verification source**Order list/search/get.** Define read-only `orders.list`, `orders.search`, and `orders.get` on `finance:read`, bound to the caller's resolved tenant/account. List/search accept `limit` (default 50, 1–100), optional opaque cursor, and only `market_id`, `status`, `side` (`buy` or `sell`), `created_at_from`, and `created_at_to`; search also requires the bounded `query` defined in plan.md. Get accepts only `order_id`. Search matches case-sensitive NFC substrings in `order_id`, `market_id`, or `outcome`. Sort by `created_at` descending with nulls last, then `order_id` ascending. | Served tests cover all three bindings, account scoping, deterministic ordering, and zero mutation calls. | requirement | GRAPHOS-DATA-MARKET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DATA-MARKET-R003.4 Stable JSON projections Definition — GRAPHOS-DATA-MARKET / GRAPHOS-DATA-MARKET — Schema context, source admission, and finance projectionCanonical requirement and verification source**Stable JSON projections.** Define closed version-1 `MarketPageV1`/`MarketGetV1`, `EventPageV1`/`EventGetV1`, and `OrderPageV1`/`OrderGetV1` envelopes with typed `MarketItemV1`, `EventItemV1`, and `OrderItemV1` records. `plan.md` defines exact keys, nullability, metadata, decimal, identifier, and cursor rules. Preserve provider `source`, `as_of`, `session`, currency/unit, freshness, and provenance; never calculate or fabricate missing source metadata. Decimal values are strings. Serialize nullable fields as explicit null. Use deterministic keys. Bind cursors to tenant, account, filters, sort, and snapshot. Omit provider-only extras. | Contract tests pin exact keys/types, nullable fields, metadata, decimal/time encodings, filters, pagination, and normalized REST/MCP JSON. | requirement | GRAPHOS-DATA-MARKET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DATA-MARKET-R003.5 Authority before provider calls Definition — GRAPHOS-DATA-MARKET / GRAPHOS-DATA-MARKET — Schema context, source admission, and finance projectionCanonical requirement and verification source**Authority before provider calls.** All nine bindings require `finance:read`. Handlers resolve authenticated tenant membership and proof of the account binding before constructing provider requests. They derive tenant and account from authority and reject caller-selected identity. If binding is missing or mismatched, GraphOS returns typed unavailable before dispatch. R010 maps scope denials; inaccessible IDs are nonrevealing. Preserve parent R003 and GRAPHOS-OPS-R017.1. EG must add `finance:read` to its scope catalog before GraphOS registers these operations. | Served two-tenant cases prove denials and malformed authority make zero provider calls and reveal no cross-tenant record. | requirement | GRAPHOS-DATA-MARKET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DATA-MARKET-R003.6 Producer port, registration, and read/effect separation Definition — GRAPHOS-DATA-MARKET / GRAPHOS-DATA-MARKET — Schema context, source admission, and finance projectionCanonical requirement and verification source**Producer port, registration, and read/effect separation.** Define `FinanceReadPortV1` in `graph_os/finance/markets.py` with typed `list_markets`, `search_markets`, `get_market`, `list_events`, `search_events`, `get_event`, `list_orders`, `search_orders`, and `get_order` methods. Existing `MarketProvider.market_read` is only a single-symbol read and does not implement this port. Bind it as `finance_read_port`; register handlers from `graph_os/api/ops/finance.py::operations` through `graph_os/api/ops/registry_factory.py::get_registry`. REST uses `NativeGatewayApplication.mount_rest_routes` → `create_api_application` → `POST /api/v1/ops/{op_id}` after contract admission. MCP uses `register_intent_surface` on the streamable HTTP `/mcp` route; JSON-RPC `tools/call` invokes tool `ask` with `op` and `params`. The current process has not activated these API/MCP compositions, and the legacy MCP registrar remains in use, so no serving is claimed. Read handlers require only `finance:read` and cannot reserve leases or invoke submission. Paper submission keeps its separate `finance:paper-trade`, tenant/account, lease, receipt, and GRAPHOS-OPS-R017.2 ownership requirements. | `tests/mcp_server/test_data_market_reads_served.py` must exercise both real routes, shared provider dispatch, denial before calls, and read/effect isolation; existing paper-submit acceptance remains required. | requirement | GRAPHOS-DATA-MARKET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-RELEASE GRAPHOS-RELEASE — Dependency-ordered, digest-pinned GraphOS rollout | spec | None | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-RELEASE-R001 Dependency-ordered, digest-verified release promotion Definition — GRAPHOS-RELEASE / GRAPHOS-RELEASE — Dependency-ordered, digest-pinned GraphOS rolloutCanonical requirement and verification source**Dependency-ordered, digest-verified release promotion.** GraphOS validates digest-pinned candidate images in a dedicated Kubernetes test namespace before promoting them, and performs its dependency-ordered pushes to each repository in sequence, checking that repository's continuous-integration result before advancing to the next. | An integration test against a fixture dependency graph confirms the rollout stops before the next stage when a predecessor's digest or CI result is missing. | requirement | GRAPHOS-RELEASE | LANDED | eacc29a1952e |
| GRAPHOS-RELEASE-R002 Local Kubernetes validation gates every push Definition — GRAPHOS-RELEASE / GRAPHOS-RELEASE — Dependency-ordered, digest-pinned GraphOS rolloutCanonical requirement and verification source**Local Kubernetes validation gates every push.** GraphOS runs local Kubernetes validation in a dedicated test namespace as part of release qualification, and the release process refuses to push or deploy until the repository's local gates report green. | A negative integration test confirms a push is blocked while a local gate is failing and proceeds once all local gates report green. | requirement | GRAPHOS-RELEASE | VERIFIED | 03ec8432da14 f3f45f5e2d1b tests/deployment/test_local_gates.py:15 tests/deployment/test_local_gates.py:28 tests/deployment/test_local_gates.py:41 tests/deployment/test_local_gates.py:47 tests/deployment/test_local_gates.py:59 |
| GRAPHOS-RELEASE-R003 Exit-criteria matrix maps readiness to tests Definition — GRAPHOS-RELEASE / GRAPHOS-RELEASE — Dependency-ordered, digest-pinned GraphOS rolloutCanonical requirement and verification source**Exit-criteria matrix maps readiness to tests.** GraphOS maintains an exit-criteria matrix mapping each release-readiness obligation to an executable test, including ingestion receipts, proofs over SPARQL and natural-language queries, one complete multi-agent orchestration graph, connector certification, one write-back receipt, a browser-and-identity-provider login probe, and a typed-abstention response to an agent-capability question. | A test-suite audit confirms every row of the exit-criteria matrix resolves to a passing automated test. Rollup; see `GRAPHOS-RELEASE-R003.1` onward (split 2026-10-09, net-new: no exit-criteria model existed). | requirement | GRAPHOS-RELEASE | SPECIFIED | 03ec8432da14 7db4c4a5d87c |
| GRAPHOS-RELEASE-R003.1 Exit-criteria matrix registry and audit mechanism (graph-os side, against the currently pinned epistemic-graph) Definition — GRAPHOS-RELEASE / GRAPHOS-RELEASE — Dependency-ordered, digest-pinned GraphOS rolloutCanonical requirement and verification source**Exit-criteria matrix registry and audit mechanism (graph-os side, against the currently pinned epistemic-graph).** GraphOS defines the exit-criteria matrix as a typed registry of obligation -> test-node-id rows and an audit function a test-suite audit runs against pytest's collected node IDs; an unregistered or uncollected obligation audits as missing, never a silent pass. | A unit test confirms the audit function marks a row satisfied when its test node ID is present among collected test IDs and missing when it is absent. | requirement | GRAPHOS-RELEASE | VERIFIED | 03ec8432da14 7db4c4a5d87c tests/deployment/test_exit_criteria.py:10 tests/deployment/test_exit_criteria.py:27 tests/deployment/test_exit_criteria.py:42 |
| GRAPHOS-RELEASE-R003.2 Full exit-criteria matrix closes green across all seven obligations Definition — GRAPHOS-RELEASE / GRAPHOS-RELEASE — Dependency-ordered, digest-pinned GraphOS rolloutCanonical requirement and verification source**Full exit-criteria matrix closes green across all seven obligations.** Each of the seven obligation rows (ingestion receipts, SPARQL/natural-language query proofs, the multi-agent orchestration graph, connector certification, the write-back receipt, the browser-and-identity-provider login probe, and the typed-abstention response) is registered against a real, currently-passing cross-repo test once the epistemic-graph v2.28 release (the 44-PR integration audit it is gated on) lands, since several obligations exercise epistemic-graph capabilities this repository cannot certify against a release that has not been cut. | A test-suite audit confirms every row of the exit-criteria matrix resolves to a passing automated test. | requirement | GRAPHOS-RELEASE | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-RELEASE-R003.3 SPARQL and natural-language query-proof rows Definition — GRAPHOS-RELEASE / GRAPHOS-RELEASE — Dependency-ordered, digest-pinned GraphOS rolloutCanonical requirement and verification source**SPARQL and natural-language query-proof rows.** Child slice of `GRAPHOS-RELEASE-R003` (see tasks.md). | A test-suite audit confirms every row of the exit-criteria matrix resolves to a passing automated test. Rollup; see GRAPHOS-RELEASE-R003.1 onward (split 2026-10-09, net-new: no exit-criteria model existed) | requirement | GRAPHOS-RELEASE | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-RELEASE-R003.4 multi-agent orchestration-graph row Definition — GRAPHOS-RELEASE / GRAPHOS-RELEASE — Dependency-ordered, digest-pinned GraphOS rolloutCanonical requirement and verification source**multi-agent orchestration-graph row.** Child slice of `GRAPHOS-RELEASE-R003` (see tasks.md). | A test-suite audit confirms every row of the exit-criteria matrix resolves to a passing automated test. Rollup; see GRAPHOS-RELEASE-R003.1 onward (split 2026-10-09, net-new: no exit-criteria model existed) | requirement | GRAPHOS-RELEASE | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-RELEASE-R003.5 connector-certification row Definition — GRAPHOS-RELEASE / GRAPHOS-RELEASE — Dependency-ordered, digest-pinned GraphOS rolloutCanonical requirement and verification source**connector-certification row.** Child slice of `GRAPHOS-RELEASE-R003` (see tasks.md). | A test-suite audit confirms every row of the exit-criteria matrix resolves to a passing automated test. Rollup; see GRAPHOS-RELEASE-R003.1 onward (split 2026-10-09, net-new: no exit-criteria model existed) | requirement | GRAPHOS-RELEASE | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-RELEASE-R003.6 write-back receipt row Definition — GRAPHOS-RELEASE / GRAPHOS-RELEASE — Dependency-ordered, digest-pinned GraphOS rolloutCanonical requirement and verification source**write-back receipt row.** Child slice of `GRAPHOS-RELEASE-R003` (see tasks.md). | A test-suite audit confirms every row of the exit-criteria matrix resolves to a passing automated test. Rollup; see GRAPHOS-RELEASE-R003.1 onward (split 2026-10-09, net-new: no exit-criteria model existed) | requirement | GRAPHOS-RELEASE | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-RELEASE-R003.7 browser-and-identity-provider login probe row Definition — GRAPHOS-RELEASE / GRAPHOS-RELEASE — Dependency-ordered, digest-pinned GraphOS rolloutCanonical requirement and verification source**browser-and-identity-provider login probe row.** Child slice of `GRAPHOS-RELEASE-R003` (see tasks.md). | A test-suite audit confirms every row of the exit-criteria matrix resolves to a passing automated test. Rollup; see GRAPHOS-RELEASE-R003.1 onward (split 2026-10-09, net-new: no exit-criteria model existed) | requirement | GRAPHOS-RELEASE | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-RELEASE-R003.8 typed-abstention response row Definition — GRAPHOS-RELEASE / GRAPHOS-RELEASE — Dependency-ordered, digest-pinned GraphOS rolloutCanonical requirement and verification source**typed-abstention response row.** Child slice of `GRAPHOS-RELEASE-R003` (see tasks.md). | A test-suite audit confirms every row of the exit-criteria matrix resolves to a passing automated test. Rollup; see GRAPHOS-RELEASE-R003.1 onward (split 2026-10-09, net-new: no exit-criteria model existed) | requirement | GRAPHOS-RELEASE | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reload | spec | None | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R001 Typed pack publisher replaces placeholder ContentPack Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Typed pack publisher replaces placeholder ContentPack.** graph-os publishes fleet content packs using the engine-generated SQL record types instead of the placeholder `ContentPack` structure, so SQL and market-data connector items carry real typed schemas when they are added to the catalog. | Integration test asserts published packs use the generated types and that no code path constructs the placeholder `ContentPack`. | requirement | GRAPHOS-FLEET | VERIFIED | 18038a22a875 223bee6a0edd 8df218e2f742 tests/test_connector_pack_typed_publisher.py:29 tests/test_connector_pack_typed_publisher.py:51 tests/test_connector_pack_typed_publisher.py:65 |
| GRAPHOS-FLEET-R002 Tool schema fingerprints recomputed from served schemas (rollup) Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Tool schema fingerprints recomputed from served schemas (rollup).** Every fleet tool pin's schema fingerprint is computed from the tool's actual served schema rather than an empty placeholder. Catalog entries reflect real input and output shapes fleet-wide. Delivered through its child requirements, producer first. | An automated check re-certifies each pin against its live served schema and fails on any empty-schema fingerprint. | requirement | GRAPHOS-FLEET | SPECIFIED | 0f346a4d0e4a |
| GRAPHOS-FLEET-R002.1 Per-tool schema fingerprint computed from the served schema Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Per-tool schema fingerprint computed from the served schema.** `graph_os/fleet/catalog_items.py` defines `compute_schema_fingerprint()`, a pure SHA-256 digest of a canonicalized schema that refuses an empty mapping, and `CatalogItem.schema_fingerprint`; `items_from_child_probe`'s tool rows populate it from the probed tool's real `inputSchema` through `_probed_item`, leaving it unset rather than empty for an unprobed schema or a non-tool item. No fleet-wide re-certification check yet (`GRAPHOS-FLEET-R002.2`, not yet specified). | `tests/fleet/test_schema_fingerprint.py` covers a stable digest, sensitivity to the served schema's content, refusal of an empty schema, population for a probed tool, and no fingerprint for an unprobed schema or a non-tool kind. | requirement | GRAPHOS-FLEET | VERIFIED | 0f346a4d0e4a 223bee6a0edd tests/fleet/test_schema_fingerprint.py:27 tests/fleet/test_schema_fingerprint.py:36 tests/fleet/test_schema_fingerprint.py:42 tests/fleet/test_schema_fingerprint.py:48 tests/fleet/test_schema_fingerprint.py:57 |
| GRAPHOS-FLEET-R002.2 Remaining scope of GRAPHOS-FLEET-R002 (slice .2): Tool schema fingerprints recomputed from served schemas (rollup) Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Remaining scope of GRAPHOS-FLEET-R002 (slice .2): Tool schema fingerprints recomputed from served schemas (rollup).** Child slice of `GRAPHOS-FLEET-R002` (see tasks.md). | An automated check re-certifies each pin against its live served schema and fails on any empty-schema fingerprint | requirement | GRAPHOS-FLEET | LANDED | 0f346a4d0e4a |
| GRAPHOS-FLEET-R003 D18 write-back exposed only as a typed, previewed operation (rollup) Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**D18 write-back exposed only as a typed, previewed operation (rollup).** graph-os exposes the D18 write-back capability solely as a typed, idempotent, previewed registry operation rather than an unguarded native child tool, and the writable connector fleet continues to function correctly across a service restart. Delivered through its child requirements, producer first. | A restart/fault test confirms write-back idempotency and typed preview gating survive a service restart. | requirement | GRAPHOS-FLEET | SPECIFIED | 67b1b9ab916e |
| GRAPHOS-FLEET-R003.1 Typed write-back preview model and its refusal rule Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Typed write-back preview model and its refusal rule.** `graph_os/api/ops/write_back.py` defines `WriteBackPreviewRequest`/`WriteBackPreviewResult` and `preview_write_back()`, which never applies a write and refuses a blank idempotency key, so D18 write-back cannot be reached as an unguarded native child tool. No registry binding yet (`GRAPHOS-FLEET-R003.2`, not yet specified). | `tests/api/test_write_back_preview.py` covers a successful preview, the blank-idempotency-key refusal, and that the result never marks the write as applied. | requirement | GRAPHOS-FLEET | VERIFIED | 67b1b9ab916e e80df3dcad62 f2d7ec520ab7 tests/api/test_write_back_models.py:120 tests/api/test_write_back_models.py:19 tests/api/test_write_back_models.py:31 tests/api/test_write_back_models.py:46 tests/api/test_write_back_models.py:60 |
| GRAPHOS-FLEET-R003.2 Write-back registered as a typed, gated registry operation, not a native child tool Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Write-back registered as a typed, gated registry operation, not a native child tool.** `graph_os/api/ops/write_back.py` registers `fleet.write_back.preview` and `fleet.write_back.commit` as typed `OpSpec` entries. They consume the models of `GRAPHOS-FLEET-R003.1`. They are wired into `graph_os/api/ops/registry_factory.py`'s registry. The pipeline rejects `commit` unless it matches a prior `preview`'s idempotency key. No native child tool exposes write-back directly. | `tests/api/test_write_back_ops.py` covers preview-then-commit and an idempotent replayed commit returning the original receipt. It also covers rejection of a commit with no matching preview or a mismatched key. | requirement | GRAPHOS-FLEET | LANDED | f2d7ec520ab7 |
| GRAPHOS-FLEET-R004 Pack annotations carry capability, digest, modality, cost, latency Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Pack annotations carry capability, digest, modality, cost, latency.** Every fleet pack item's catalog entry carries its capability, schema digest, modality, cost and latency annotations, populated across the whole fleet rather than a subset. | A catalog audit test confirms all required annotation fields are present and non-empty for every pack item fleet-wide. | requirement | GRAPHOS-FLEET | VERIFIED | 0aba0c33acd0 f2a3173e9a84 tests/fleet/test_catalog_items_pack_annotations.py:28 tests/fleet/test_catalog_items_pack_annotations.py:45 tests/fleet/test_catalog_items_pack_annotations.py:63 tests/fleet/test_catalog_items_pack_annotations.py:71 |
| GRAPHOS-FLEET-R005 A2A task routing with typed work-item and lease operations (rollup) Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**A2A task routing with typed work-item and lease operations (rollup).** graph-os routes inbound A2A tasks through typed `GetWorkItem` and `ListWorkItems` operations. It exposes capability-based agent search. It issues single-use, provenance-tracked control leases for assigned work. The multiplexer exposes only the subset of tools reachable through this task-routing assembly. Delivered through its child requirements, producer first. | Native library tests cover work-item retrieval, listing, capability search, and control-lease issuance and consumption. | requirement | GRAPHOS-FLEET | SPECIFIED | 3b404ee3ecf8 |
| GRAPHOS-FLEET-R005.1 Typed WorkItem view, the GetWorkItem/ListWorkItems producer Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Typed WorkItem view, the GetWorkItem/ListWorkItems producer.** `graph_os/a2a/work_items.py` defines a frozen `WorkItemView` and projects it. The projection reads the same durable work-item record fields `WorkItemA2AAuthority` already writes (`kind`, `tenant`, `created_by`, `metadata`, the `workitem:orchestrator:` id), The view refuses a record missing or blanking a required identity field for a single get. It drops (not fails) a malformed record for a listing. No `GetWorkItem`/`ListWorkItems` operation, capability search, or control lease yet (`GRAPHOS-FLEET-R005.2`+, not yet specified). | `tests/a2a/test_work_items.py` covers a real record projecting correctly, optional-field defaults, per-field missing/blank refusal, non-mapping metadata refusal, and a list that drops one malformed record while preserving order. | requirement | GRAPHOS-FLEET | VERIFIED | 3b404ee3ecf8 f2a3173e9a84 tests/a2a/test_work_items.py:31 tests/a2a/test_work_items.py:45 tests/a2a/test_work_items.py:59 tests/a2a/test_work_items.py:67 tests/a2a/test_work_items.py:75 |
| GRAPHOS-FLEET-R005.2 Remaining scope of GRAPHOS-FLEET-R005 (slice .2): A2A task routing with typed work-item and lease operations (rollup) Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Remaining scope of GRAPHOS-FLEET-R005 (slice .2): A2A task routing with typed work-item and lease operations (rollup).** Child slice of `GRAPHOS-FLEET-R005` (see tasks.md). | Native library tests cover work-item retrieval, listing, capability search, and control-lease issuance and consumption | requirement | GRAPHOS-FLEET | LANDED | 3b404ee3ecf8 |
| GRAPHOS-FLEET-R006 Multiplexer skill and prompt harvest path removed Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Multiplexer skill and prompt harvest path removed.** The multiplexer no longer harvests or statically hydrates skills and prompts at startup. That code path and its boot-time ingestion are removed once the resident-tool catalog serves the same capability. | A package/runtime audit confirms no skill or prompt harvest or hydration code remains in the shipped package. | requirement | GRAPHOS-FLEET | SPECIFIED | 67b1b9ab916e |
| GRAPHOS-FLEET-R007 Bridge upgraded to FastMCP 4 (rollup) Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Bridge upgraded to FastMCP 4 (rollup).** graph-os's MCP bridge declares and runs on FastMCP 4, using its native tool, prompt, resource, template and Skills-over-MCP capabilities within a single composed server loop. Delivered through its child requirements, producer first, one child per owning repo/root since the bridge instance is constructed outside graph-os. | See the child requirements' verification. | requirement | GRAPHOS-FLEET | SPECIFIED | 67b1b9ab916e |
| GRAPHOS-FLEET-R008 RUM, security-audit and CI/CD feeds join the catalog (rollup) Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**RUM, security-audit and CI/CD feeds join the catalog (rollup).** graph-os adds real-user-monitoring, security-audit and CI/CD event connectors as catalog items, exposing only approved, sanitized data through the same operation registry and tenant boundary as its other feeds. Delivered through its child requirements, producer first. | Integration test confirms each new feed's data passes sanitization and tenant-boundary checks before it appears in the registry. | requirement | GRAPHOS-FLEET | SPECIFIED | 67b1b9ab916e |
| GRAPHOS-FLEET-R008.1 Typed feed-event model per feed kind Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Typed feed-event model per feed kind.** `graph_os/fleet/feeds.py` defines `FeedEvent`/`FeedEventRejected` and `rum_event()`/`security_audit_event()`/`cicd_event()`, each refusing an unsanitized payload or a missing tenant before a feed event can exist. No live connector ingestion yet (`GRAPHOS-FLEET-R008.2`, not yet specified). | `tests/fleet/test_feeds.py` covers construction of each feed kind, the unsanitized-payload refusal, and the missing-tenant refusal. | requirement | GRAPHOS-FLEET | VERIFIED | 67b1b9ab916e f2a3173e9a84 tests/fleet/test_feeds.py:15 tests/fleet/test_feeds.py:23 tests/fleet/test_feeds.py:31 tests/fleet/test_feeds.py:37 tests/fleet/test_feeds.py:44 |
| GRAPHOS-FLEET-R008.2 Live feed ingestion wired into the catalog Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Live feed ingestion wired into the catalog.** Real RUM, security-audit and CI/CD connector ingestion produces `GRAPHOS-FLEET-R008.1` feed events and passes them through `connector_items()`/`_pack_annotations()` into the operation registry and tenant-boundary check, so each feed's data appears in the catalog only once sanitized and tenant-scoped. | Integration test confirms each new feed's data passes sanitization and tenant-boundary checks before it appears in the registry. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R009 Run admission evaluates, commits and publishes with capacity control Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Run admission evaluates, commits and publishes with capacity control.** graph-os's run admission in `graph_os/a2a/routing.py`, `graph_os/a2a/composition.py` and `control_plane/runs/admission.py` evaluates a candidate run, commits it with synthesis evidence, and publishes it only after an all-or-nothing capacity acquisition. A denied acquisition allows exactly one re-decision, and a stopped run releases its held capacity. Split across its 3 code roots (exceeds the 2-code-root threshold): `GRAPHOS-FLEET-R009.1` delivers the capacity primitive; `GRAPHOS-FLEET-R009.2` wires evaluate/commit/publish in `graph_os/a2a/routing.py` and `graph_os/a2a/composition.py` through it. | Rollup: both children deliver. | requirement | GRAPHOS-FLEET | LANDED | 58ee1a06a392 67b1b9ab916e c77ede8726fa |
| GRAPHOS-FLEET-R009.1 Capacity acquisition is all-or-nothing with one re-decision Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Capacity acquisition is all-or-nothing with one re-decision.** `graph_os/control_plane/runs/admission.py` gains a capacity primitive: a candidate run acquires every requested resource unit or none at all; the first denial consumes that run's single re-decision and returns a retry signal instead of failing, a second denial for the same run fails closed, and releasing a run (stop, or a reset after denial) returns every unit it held and restores its re-decision budget. | Unit test drives the primitive through grant, partial-unavailability no-op, denial-then-one-redecision, a second denial failing closed, and release restoring both capacity and the redecision budget. | requirement | GRAPHOS-FLEET | VERIFIED | 58ee1a06a392 c77ede8726fa tests/control_plane/admission/test_capacity_acquisition.py:13 tests/control_plane/admission/test_capacity_acquisition.py:23 tests/control_plane/admission/test_capacity_acquisition.py:35 tests/control_plane/admission/test_capacity_acquisition.py:47 tests/control_plane/admission/test_capacity_acquisition.py:60 |
| GRAPHOS-FLEET-R009.2 Routing and composition publish only through acquired capacity Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Routing and composition publish only through acquired capacity.** `graph_os/a2a/routing.py` and `graph_os/a2a/composition.py` evaluate a candidate run, commit it with synthesis evidence, and call the `GRAPHOS-FLEET-R009.1` primitive before publishing; a denial surfaces the single re-decision to the caller and a stopped run releases its hold. | Integration test drives a candidate run end to end through evaluate, commit, capacity grant/re-decision, and publish, plus stop releasing capacity. | requirement | GRAPHOS-FLEET | LANDED | 58ee1a06a392 c77ede8726fa |
| GRAPHOS-FLEET-R009.3 Run admission publishes with all-or-nothing capacity control Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Run admission publishes with all-or-nothing capacity control.** `control_plane/runs/admission.py` publishes a `GRAPHOS-FLEET-R009.2`-committed run only after an all-or-nothing capacity acquisition, allows a denied acquisition exactly one re-decision, and releases held capacity when the run stops. | Integration test drives admission through grant, a single re-decision on denial, and capacity release on stop. | requirement | GRAPHOS-FLEET | LANDED | 58ee1a06a392 |
| GRAPHOS-FLEET-R003.3 Write-back idempotency and preview gating survive a service restart Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Write-back idempotency and preview gating survive a service restart.** A restart/fault test exercises `fleet.write_back.preview`/`fleet.write_back.commit` (`GRAPHOS-FLEET-R003.2`) across a simulated service restart and a faulted child call, closing `GRAPHOS-FLEET-R003`'s original acceptance criterion. | `tests/fleet/test_write_back_restart.py` restarts the registry/service state mid-sequence and confirms a replayed commit returns the original receipt rather than double-applying, and a faulted child call leaves no partial write-back state. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R006.1 Harvest call-site inventory, the removal baseline Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Harvest call-site inventory, the removal baseline.** `tests/fleet/test_harvest_inventory.py` enumerates every harvest-named entry point in `graph_os/fleet/multiplexer.py` (`_harvest_deadline`, `_harvest_error_reason`, `_harvest_resource_bodies` and its call sites in `_probe_protocol_families`/`_probe_skills`/`_probe_prompts`, and `_harvest_probe_results`) and pins today's call-site count as the baseline `GRAPHOS-FLEET-R006.2`-`.5` must reduce. No removal in this child. | `tests/fleet/test_harvest_inventory.py` passes against current `main` and fails if a harvest-named symbol or call site is added or removed without updating the pinned baseline. | requirement | GRAPHOS-FLEET | VERIFIED | 031958c74eb8 a94c87aa090e tests/fleet/test_harvest_inventory.py:105 tests/fleet/test_harvest_inventory.py:116 |
| GRAPHOS-FLEET-R006.2 Skill/prompt body-harvest cutover for an already-admitted child Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Skill/prompt body-harvest cutover for an already-admitted child.** `_probe_skills` and `_probe_prompts` (`graph_os/fleet/multiplexer.py`) stop calling `_harvest_resource_bodies` for a mounted child server already covered by the resident local-skill catalog (`graph_os/fleet/local_skill_catalog.py`'s `build_local_skill_catalog`), keeping the fleet-harvest fallback only for a child server that catalog does not yet admit, consuming `GRAPHOS-FLEET-R006.1`'s baseline. | A multiplexer test confirms an admitted child's skills/prompts resolve through the resident catalog with no `_harvest_resource_bodies` call, while a non-admitted child still falls back to the existing harvest path. | requirement | GRAPHOS-FLEET | VERIFIED | 031958c74eb8 1db599dcf40c a94c87aa090e tests/fleet/test_fleet_r006_2_local_catalog_cutover.py:125 tests/fleet/test_fleet_r006_2_local_catalog_cutover.py:33 tests/fleet/test_fleet_r006_2_local_catalog_cutover.py:68 tests/fleet/test_fleet_r006_2_local_catalog_cutover.py:91 |
| GRAPHOS-FLEET-R006.3 Dead harvest helpers removed (rollup over `GRAPHOS-FLEET-R006.3.1`-`.4`) Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Dead harvest helpers removed (rollup over `GRAPHOS-FLEET-R006.3.1`-`.4`).** `GRAPHOS-FLEET-R006.2` deliberately kept the live-harvest fallback for a child the resident catalog does not admit, so `_harvest_resource_bodies` and its helpers are not yet dead; they are removed in four ordered steps once no caller is left. | `GRAPHOS-FLEET-R006.3.1`-`.4` are all delivered and `_harvest_resource_bodies`, `_harvest_deadline`, `_harvest_error_reason`, `_SKILL_HARVEST_SPEC` and `_PROMPT_HARVEST_SPEC` no longer exist in `graph_os/fleet/multiplexer.py`. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R006.3.1 `_probe_protocol_families` harvest calls routed through the cutover helper Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**`_probe_protocol_families` harvest calls routed through the cutover helper.** The two direct `_harvest_resource_bodies` calls in `_probe_protocol_families` (`graph_os/fleet/multiplexer.py`) are replaced by `_resolve_via_local_catalog_or_harvest`, leaving that helper the single `_harvest_resource_bodies` call site. | `tests/fleet/test_harvest_inventory.py` pins `_probe_protocol_families` at zero direct `_harvest_resource_bodies` call sites and `_resolve_via_local_catalog_or_harvest` at one; an admitted child's skills resolve with no wire read. | requirement | GRAPHOS-FLEET | VERIFIED | ddb10c07995e tests/fleet/test_harvest_inventory.py:128 tests/fleet/test_harvest_inventory.py:135 |
| GRAPHOS-FLEET-R006.3.2 Non-admitted fallback and `_harvest_resource_bodies` deleted Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Non-admitted fallback and `_harvest_resource_bodies` deleted.** Once every mounted fleet child is admitted by the resident catalog (`graph_os/fleet/local_skill_catalog.py`; admitting the remaining children is a prerequisite and may need an `agent-utilities` or per-agent package change), the fallback branch of `_resolve_via_local_catalog_or_harvest` and `_harvest_resource_bodies` are deleted. | The inventory test confirms `_harvest_resource_bodies` no longer exists and the skill/prompt discovery tests still pass. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R006.3.3 Deadline and error-reason helpers deleted Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Deadline and error-reason helpers deleted.** `_harvest_deadline`, `_HARVEST_DEADLINE_SHARE` and `_harvest_error_reason` are deleted from `graph_os/fleet/multiplexer.py` after `GRAPHOS-FLEET-R006.3.2` leaves them without a caller. | The inventory test confirms these symbols no longer exist. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R006.3.4 Harvest specs deleted Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Harvest specs deleted.** `_SKILL_HARVEST_SPEC`, `_PROMPT_HARVEST_SPEC` and the harvest-only budget constants are deleted, and `_probe_resource_family` keeps only the kind and body-field data it still needs, after `GRAPHOS-FLEET-R006.3.3`. | The inventory test confirms the two spec symbols no longer exist and `_probe_skills`/`_probe_prompts` tests still pass. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R006.4 Residual `_harvest`-named symbol renamed off the removed path Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Residual `_harvest`-named symbol renamed off the removed path.** `_harvest_probe_results` (`graph_os/fleet/multiplexer.py`) is renamed to `_settled_probe_results` and its docstring/call sites updated, since it folds generic per-server probe-task results rather than skill/prompt body harvest and must not be mistaken for the path removed in `GRAPHOS-FLEET-R006.3`. | A grep-based test confirms no `_harvest`-named symbol remains in `graph_os/fleet/multiplexer.py` except in historical comments/log strings, and `probe_catalog`'s existing tests still pass under the new name. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R006.5 Closing audit: no harvest or hydration code remains Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Closing audit: no harvest or hydration code remains.** A package/runtime audit confirms no skill or prompt harvest or boot-time hydration code remains in the shipped `graph_os` package, closing `GRAPHOS-FLEET-R006`'s original acceptance criterion. | `tests/fleet/test_no_harvest_remains.py`, built on `GRAPHOS-FLEET-R006.1`'s inventory, asserts the pinned baseline count is now zero for skill/prompt harvest and hydration call sites. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R007.1 agent-connector-sdk's FastMCP instance gains native prompt/resource/template registration (cross-repo, owner: agent-connector-sdk) Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**agent-connector-sdk's FastMCP instance gains native prompt/resource/template registration (cross-repo, owner: agent-connector-sdk).** `agent_connector_sdk/mcp/server.py`'s `create_mcp_server()` registers at least one native `.prompt()` and one native `.resource()`/`.resource_template()` on its constructed `FastMCP[Any]` instance alongside its existing `.tool()`/Skills-over-MCP registrations. | A protocol test in agent-connector-sdk confirms `create_mcp_server()`'s served instance answers a native prompt list, a resource read and a resource-template list. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R007.2 agent-utilities' graph-os bridge surface gains native prompt/resource/template registration (cross-repo, owner: agent-utilities) Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**agent-utilities' graph-os bridge surface gains native prompt/resource/template registration (cross-repo, owner: agent-utilities).** `agent_utilities/mcp/graphos_surface.py`'s `register_graphos_surface()` and its backing `FastMCP("graph-os-backing")` instance register native prompts, resources and resource templates (not only tools, consuming `GRAPHOS-FLEET-R007.1`'s pattern) onto the single composed server loop handed to graph-os. | A protocol test in agent-utilities confirms `register_graphos_surface()`'s backing instance exposes native prompts/resources/templates alongside `graphos_registrars()`'s tools. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R007.3 graph-os's served bridge exercises native prompts, resources and templates end to end Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**graph-os's served bridge exercises native prompts, resources and templates end to end.** graph-os's bootstrap (`graph_os/mcp_server/server.py`) mounts the single composed server loop built from `GRAPHOS-FLEET-R007.1`/`GRAPHOS-FLEET-R007.2` and serves its native tools, prompts, resources, resource templates and Skills-over-MCP together, closing `GRAPHOS-FLEET-R007`'s original acceptance criterion. | `tests/mcp/test_fastmcp4_native.py` exercises FastMCP 4 native tools, prompts, resources, templates and Skills-over-MCP against the served bridge. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R011 Registry core computes a canonical digest and authorized find Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Registry core computes a canonical digest and authorized find.** `graph_os/api/registry/` defines `OpSpec`, its enums, and the `Registry` type with a canonical serialization and a `registry_digest` that identifies the active generation, and `find` evaluates caller authorization at lookup time rather than deferring it. | `tests/api/test_registry.py` covers canonical-form stability, digest computation, and authorized-versus-denied `find` results. | requirement | GRAPHOS-FLEET | LANDED | 4b83c69e2b41 |
| GRAPHOS-FLEET-R012 EG-direct binding generator with reviewed exclusions Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**EG-direct binding generator with reviewed exclusions.** `graph_os/api/registry/eg_binding.py` generates registry operation bindings directly from the engine's wire-callable methods, and `eg_exclusions.yaml` records any method intentionally left out along with its reason, so every method is covered by a generated operation or a reviewed exclusion. | `tests/api/test_eg_binding.py` asserts full method coverage by generated bindings plus documented exclusions. | requirement | GRAPHOS-FLEET | LANDED | 4b83c69e2b41 68e31b75248a |
| GRAPHOS-FLEET-R013 MCP projection exposes the six verbs with typed schemas Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**MCP projection exposes the six verbs with typed schemas.** `graph_os/api/mcp/verbs.py`, `discovery.py` and `resources.py` project the registry as the six intent verbs produced by `make_verb`, each with a typed input schema, a `find` operation returning typed schemas, `graphos://` resources, and the active registry digest embedded in server instructions. | `tests/api/test_mcp_verbs.py` validates verb schemas, `find` output, resource URIs, and the embedded digest. | requirement | GRAPHOS-FLEET | LANDED | 6b63aeb7ba03 ea736715b7fb |
| GRAPHOS-FLEET-R014 Resolver ranks catalog items with partitioned feedback Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Resolver ranks catalog items with partitioned feedback.** `graph_os/api/mcp/resolve.py` ranks catalog items using lexical and semantic matching over generated descriptors, an exponential moving average of tenant- and policy-partitioned outcome feedback, and a bounded result cache. Natural-language queries produce a preview rather than an executed mutation, and `ask` falls back to a natural-language `query.uql` call when no direct match is found. | `tests/api/test_resolve.py` covers ranking, partitioned feedback, cache bounds, and the NL-to-preview and `ask` fallback paths. | requirement | GRAPHOS-FLEET | VERIFIED | 43db6b7ac49b tests/api/test_resolve.py:112 tests/api/test_resolve.py:159 |
| GRAPHOS-FLEET-R015 Typed operations cover agents, browser and fleet calls Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Typed operations cover agents, browser and fleet calls.** `graph_os/api/ops/agents.py`, `browser.py` and `fleet.py` implement typed operations for agent/A2A tasks, reasoning calls, browser actions and fleet calls, where `fleet.call`'s effect classification is derived from the target item's own annotations. `graph_os/fleet/gateway_ops.py` wraps resolution and mounting of catalog tools for these operations to call through. | Integration tests exercise each operation family and confirm `fleet.call` effect classification matches the invoked item's annotation. | requirement | GRAPHOS-FLEET | LANDED | 68e31b75248a e1d37ca10ef7 |
| GRAPHOS-FLEET-R016 Automated gates catch API surface and compatibility drift Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Automated gates catch API surface and compatibility drift.** `scripts/check_api_surface.py` and `scripts/check_api_compat.py` run as pre-commit hooks that detect drift in the registry's public API surface and backward compatibility, covering the full gate set defined for this specification. | `tests/api/test_gates_*.py` exercises each gate against both a compliant and a drifted fixture registry. | requirement | GRAPHOS-FLEET | VERIFIED | ba0aa6a11b4a tests/api/test_gates_cli.py:27 tests/api/test_gates_cli.py:39 tests/api/test_gates_cli.py:61 tests/api/test_gates_cli.py:76 |
| GRAPHOS-FLEET-R017 Authority-parity oracle validates principal, operation and surface Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Authority-parity oracle validates principal, operation and surface.** `tests/api/authority_matrix.yaml` defines the expected authorization outcome for each principal, operation and serving-surface combination, and `tests/api/test_authority_parity.py` asserts the registry's actual authorization decisions match that matrix exactly. | `tests/api/test_authority_parity.py` runs the full principal-by-operation-by-surface matrix and fails on any mismatch. | requirement | GRAPHOS-FLEET | LANDED | ba0aa6a11b4a |
| GRAPHOS-FLEET-R018 Multiplexer exposes four resident fleet tools over one catalog Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Multiplexer exposes four resident fleet tools over one catalog.** `api/ops/fleet.py` and `graph_os/fleet/{gateway_ops,catalog_items,session_loads}.py` implement `find_tools` (with `browse=true` replacing a separate catalog listing), `load_tools`, `unload_tools` and `multiplexer_status` over a single catalog filtered per caller, covering fleet tools, prompts, resources, resource templates, agent skills and connector items. Each caller's loaded-tool set defaults to a 64-item cap (hard cap 256) with optional least-recently-used eviction and a one-hour idle expiry, and each loaded tool's body invokes `fleet.call` using the caller's own delegated credential. | Scoped integration tests confirm cap enforcement, LRU eviction, idle expiry, and that invocation always carries the caller's delegated credential. | requirement | GRAPHOS-FLEET | LANDED | e1d37ca10ef7 |
| GRAPHOS-FLEET-R019 Eunomia narrows authority at discover, load and call Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Eunomia narrows authority at discover, load and call.** `graph_os/api/policy/` applies Eunomia as a narrowing-only policy step in the discover, load and call path, after scope and principal-rule checks and before the deputy and confirmation steps reach the engine; scope filtering always applies even when Eunomia is disabled, and an enabled-but-unreachable Eunomia fails the request closed rather than open. A deployment with no policy configured runs Eunomia off by default, a local deployment ships a default policy with it on, and an external deployment runs it on; `deployment/doctor.py` warns when it is off. | Policy integration tests cover all three default modes plus the fail-closed-on-unreachable and never-unfiltered-when-off cases. | requirement | GRAPHOS-FLEET | SPECIFIED | 269c409c5415 |
| GRAPHOS-FLEET-R021 Fleet capability checks require exact scopes, deny unknown tools Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Fleet capability checks require exact scopes, deny unknown tools.** `_require_fleet_capability` requires the exact fleet scope for the requested action and does not accept a broader `admin` or `kg:admin` grant in its place, and it enforces the same check for local stdio connections as for any other transport. `tool_dispatchable` denies any unrecognized native host tool by default instead of allowing it, and the served MCP surface always runs an Eunomia policy filter rather than serving unfiltered. | Tests cover both the previously over-broad path (now denied) and the correctly scoped path (now allowed), plus a served-surface check that Eunomia middleware is active. | requirement | GRAPHOS-FLEET | SPECIFIED | 18038a22a875 2c70abad2b68 336f9faf3f21 444cedaf2b6d e7a32f572005 |
| GRAPHOS-FLEET-R022 Catalog reconciliation re-ingests via durable replay Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Catalog reconciliation re-ingests via durable replay.** graph-os reconciles its served MCP catalog against the engine's durable event log, re-ingesting changed tools, prompts, resources and skills by replaying ordered delta receipts keyed by tenant, generation, sequence and item ID so replays are idempotent. | Integration test replays a delta sequence twice and confirms the resulting catalog state is identical. | requirement | GRAPHOS-FLEET | LANDED | 1a8d280ab981 |
| PA-12 Catalog reload rejects invalid candidates, proves replica convergence Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Catalog reload rejects invalid candidates, proves replica convergence.** Fleet catalog reload rejects duplicate, malformed, stale, missing, deleted or digest-mismatched candidate assets without publishing a partial generation, and multi-replica convergence is observed by generation and digest so a replica unable to reach the active generation reports degraded rather than serving a mixed catalog. | Negative-case tests cover each invalid-candidate condition, and a multi-replica integration test confirms convergence reporting. | requirement | GRAPHOS-FLEET | LANDED | 1a8d280ab981 |
| GRAPHOS-FLEET-R023 Connector count pins stay consistent across the fleet Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Connector count pins stay consistent across the fleet.** Every fleet connector count reference — the compatibility matrix, the bundle-catalog schema, the check scripts, `ontology.lock`, the federated IRI, and `genesis.yaml` — reflects the same current total connector count, with no site lagging behind an actual fleet change. Delivered through its child requirements, producer first. | A check script scans all count-pin sites and fails if any of them disagrees with the live connector count. | requirement | GRAPHOS-FLEET | LANDED | 667a206c800e |
| GRAPHOS-FLEET-R023.1 Pure connector count-pin comparison (producer) Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Pure connector count-pin comparison (producer).** `graph_os/fleet/connector_count_pins.py` defines typed `CountPinSite` and `ConnectorCountMismatch`, and a pure `check_connector_count_pins()` that reports every site whose declared count disagrees with a given live count. `scripts/check_connector_count_pins.py` is the real CLI entry point: it parses `--site name=location=declared_count` arguments, runs the comparison, and exits non-zero on any mismatch. Wiring the fleet's actual count-pin sites (the compatibility matrix, the bundle-catalog schema, `ontology.lock`, the federated IRI) is cross-repo/AU-owned follow-up, not done here. | `tests/test_check_connector_count_pins.py` covers agreement, a flagged mismatch, a deliberate-mismatch fixture run through the real CLI (non-zero exit, mismatch on stderr), and a malformed `--site` argument. | requirement | GRAPHOS-FLEET | LANDED | 667a206c800e |
| GRAPHOS-FLEET-R024 Fleet reconciliation, scaling and deploy watch are served by GraphOS Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Fleet reconciliation, scaling and deploy watch are served by GraphOS.** GraphOS owns the fleet reconciler, autoscaler, scaling authority and deploy-watch behavior that previously sat beside the agent runner in the agent runtime's `orchestration/` package. They run as GraphOS services behind typed operations with the same caller verification, policy filter and audit as other fleet operations, and the agent runtime keeps only the agent runner and planning code and reaches fleet behavior through those operations. | Parity tests reproduce the prior reconcile, scale-up, scale-down and deploy-watch decisions through the GraphOS operations, negative tests refuse an unauthorized caller, and a census shows the agent runtime no longer ships these modules. | requirement | GRAPHOS-FLEET | SPECIFIED | c2d8c8ce46b8 |
| PA-12.1 Catalog reload rejects invalid candidates Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Catalog reload rejects invalid candidates.** `FleetCatalogReader`/`FleetCatalogIntegrityError` fail closed on duplicate, malformed, stale, missing, deleted or digest-mismatched candidate assets without publishing a partial generation. | Negative-case tests cover cross-tenant, no-longer-current, unresolved provenance, content-revision mismatch and cyclic-cursor conditions. | requirement | GRAPHOS-FLEET | VERIFIED | 1a8d280ab981 tests/test_fleet_catalog_reader.py:211 tests/test_fleet_catalog_reader.py:223 tests/test_fleet_catalog_reader.py:234 tests/test_fleet_catalog_reader.py:251 tests/test_fleet_catalog_reader.py:262 |
| PA-12.2 Multi-replica convergence is observed by generation and digest Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Multi-replica convergence is observed by generation and digest.** A replica unable to reach the active generation+digest reports degraded rather than serving a mixed catalog. No generation/replica concept exists yet in `graph_os/fleet/catalog_reader.py`. | A multi-replica integration test confirms convergence reporting. | requirement | GRAPHOS-FLEET | LANDED | 1a8d280ab981 |
| GRAPHOS-FLEET-R024.1 Deploy-watch verdict is a typed GraphOS operation Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Deploy-watch verdict is a typed GraphOS operation.** GraphOS owns the deploy-watch verdict decision (the success/failed/unobserved reduction over a probe sequence) that previously sat in the agent runtime's `orchestration/deploy_watch.py`, served as a typed operation (`fleet.deploy_watch.evaluate`) behind the same caller verification and policy filter as other fleet operations. | Parity tests reproduce the prior success/failed/unobserved verdict rule through the operation, and a negative test refuses a caller lacking the required scope. | requirement | GRAPHOS-FLEET | LANDED | c2d8c8ce46b8 |
| GRAPHOS-FLEET-R024.2 Remaining fleet reconciler, autoscaler, scaling-authority and deploy-watch scheduling behavior is served by GraphOS Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Remaining fleet reconciler, autoscaler, scaling-authority and deploy-watch scheduling behavior is served by GraphOS.** GraphOS owns the fleet reconciler, autoscaler, scaling authority, and the deploy-watch scheduling/rollback-dispatch behavior (beyond the R024.1 verdict rule) that previously sat beside the agent runner in the agent runtime's `orchestration/` package, each as a typed, wired-in operation with the same caller verification, policy filter and audit as other fleet operations. | Parity tests reproduce the prior reconcile, scale-up, scale-down and deploy-watch-dispatch decisions through the GraphOS operations, and negative tests refuse an unauthorized caller for each. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R024.3 Agent runtime no longer ships the superseded fleet modules (cross-repo) Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Agent runtime no longer ships the superseded fleet modules (cross-repo).** The agent runtime keeps only the agent runner and planning code and reaches fleet reconciliation, autoscaling, scaling authority and deploy watch through the GraphOS operations from `GRAPHOS-FLEET-R024.1`/`GRAPHOS-FLEET-R024.2`, with the superseded `orchestration/` modules removed. | A census shows the agent runtime no longer ships the reconciler/autoscaler/scaling-authority/deploy-watch modules. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R025 Skills from every installed package, and an always-offered core pack, join the find/load path Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Skills from every installed package, and an always-offered core pack, join the find/load path.** graph-os serves skills from its own package, from every other package installed in its own environment that declares the `agent_utilities.skill_providers` entry point (agent-utilities, epistemic-graph, agent-webui, and any further sibling package — including universal-skills once it declares the same entry point), and from the existing fleet harvest, through the SAME catalog and `find_tools`/`discover_tools`/`list_catalog` path, with a short always-offered core-pack list served without a search query. A locally-served skill takes precedence over a fleet-harvested one of the same name; an unreadable/malformed skill or a core-pack name no installed package provides is reported, never silently dropped. | `tests/fleet/test_local_skill_catalog.py` and `tests/fleet/test_local_skill_discovery.py` cover discovery from an injected provider resolver, a malformed-skill report, local-over-harvested precedence, the always-offered listing, and a missing core-pack-name report. | requirement | GRAPHOS-FLEET | LANDED | d16472d4df1d |
| GRAPHOS-FLEET-R029 The intent tools are the only MCP surface Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**The intent tools are the only MCP surface.** graph-os serves the six intent tools and two MCP Apps launchers from the agent-utilities contract. `find` searches, lists and reports fleet status. `act` calls fleet tools, browser control, A2A and RLM operations. `manage` mounts and releases fleet servers. graph-os registers no fleet meta-tool and no per-session visibility middleware. This requirement supersedes the four resident tools in GRAPHOS-FLEET-R018 and GRAPHOS-FLEET-R020. | Served-surface tests list exactly the intent tools. Fleet tests reach find, call, load and status through the intent tools. | requirement | GRAPHOS-FLEET | LANDED | 1a8d280ab981 d2b070392ec9 db8d44259c3d |
| GRAPHOS-FLEET-R026 The catalog admits each server on its own Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**The catalog admits each server on its own.** The catalog reader skips a live registration without a current `mcp_server` component. It logs a warning and records the server name. `multiplexer_status` reports the names as `unadmitted_servers`. Boot never fails for this state. Receipt, revision, pin, content, duplicate and page-bound faults stay fatal. | `tests/test_fleet_catalog_reader.py` proves the reader skips and reports a bare registration. The existing fail-closed cases still raise. A multiplexer test reads `unadmitted_servers` from status. | requirement | GRAPHOS-FLEET | LANDED | 619d25ac8e69 d9015e6d6cda |
| GRAPHOS-FLEET-R027 GraphOS onboards every configured fleet server Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**GraphOS onboards every configured fleet server.** One idempotent pass reads the enabled streamable-HTTP servers from the MCP config. The pass registers each server and captures its catalog through the connector SDK. It attests the catalog with EG and imports the pack. One server's failure leaves the others unaffected. `graph-os-production-ops onboard-fleet` runs a full pass and exits non-zero on any failure. Boot runs the pass on a background thread. A pass fault never blocks or stops serving. | `tests/fleet/test_fleet_onboarding.py` covers config filtering, a fresh-store pass, a failing server, an admitted server, a registry outage, a missing child credential, the CLI and a failing boot pass. | requirement | GRAPHOS-FLEET | SPECIFIED | 5edd6cc9a3d7 619d25ac8e69 bbc73cd1532d be2026dd4ebf d9015e6d6cda |
| GRAPHOS-FLEET-R028 GraphOS renews every registration before its lease lapses Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**GraphOS renews every registration before its lease lapses.** Each pass re-registers each fleet and self-served lease that expires within six hours. Each renewal window uses its own idempotency key. A self-served registration renews at the configured served URL, else at its live URL. The boot thread repeats the pass every 30 minutes. A pass that admits a new server refreshes the multiplexer catalog when no child session runs. | `tests/fleet/test_fleet_onboarding.py` covers lapsing, fresh and absent leases, windowed keys, self-served renewal, the pass schedule and the refresh rule. | requirement | GRAPHOS-FLEET | LANDED | 619d25ac8e69 d9015e6d6cda |
| GRAPHOS-FLEET-R030 Fleet onboarding registers connector access contracts unapproved Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Fleet onboarding registers connector access contracts unapproved.** After a pack import, onboarding parses each `ontology://` resource with the SDK access-contract parser. It registers one `SourceConnection` per source and one unapproved `VirtualMapping` per contract. An unapproved mapping serves no reads. A missing SDK parser skips contracts without failure. A repeated pass adds no duplicate mapping. | `tests/fleet/test_fleet_access_contracts.py` covers registration, the unapproved state, idempotency and the missing parser. | requirement | GRAPHOS-FLEET | LANDED | 7e0cc536c81a 9095a5cefabe f2284b64b6b3 |
| GRAPHOS-FLEET-R031 `find` ranks catalog-admitted tools when a live probe cannot answer Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**`find` ranks catalog-admitted tools when a live probe cannot answer.** `discover_tools` reads each admitted server's `tool`-kind components straight off the installed EG catalog snapshot (`MCPMultiplexer._catalog_tool_probe_info`), with no live probe, and ranks them when that server's live probe errored. The live probe stays the freshness refresh; the server still appears in `unavailable` so a real probe failure is never hidden, and a live answer is never shadowed by the snapshot. | `tests/fleet/test_catalog_tool_fallback.py` covers a timed-out server ranking its catalog-sourced tools as stale while still reported `unavailable`, an empty snapshot, and a live answer taking precedence over the snapshot. | requirement | GRAPHOS-FLEET | LANDED | d43ff2da921f |
| GRAPHOS-FLEET-R032 Gateway widget fetches run under a bound service actor Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Gateway widget fetches run under a bound service actor.** `graph_os/gateway/aggregator.py` mints the gateway's own verified process actor (the same `acquire_process_identity_token` → `mint_actor_from_token_sync` → `mint_graph_session` authority `graph_os/gateway/daemon.py::mint_process_identity` already mints for the host daemon) and binds it with `use_actor`/`use_session` around each widget fetch dispatched to the thread pool, propagating the bound context across the executor boundary instead of losing it to a plain `ThreadPoolExecutor` thread. | Every widget fetch reaches the fleet multiplexer with the gateway's service actor bound (context propagated across the worker-thread boundary), and no fetch fails with a missing process context. | requirement | GRAPHOS-FLEET | VERIFIED | f4812c0aa389 tests/gateway/test_aggregator.py:159 |
| GRAPHOS-FLEET-R033 Fleet-catalog `servers` read owned by graph-os Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Fleet-catalog `servers` read owned by graph-os.** Rollup of `GRAPHOS-FLEET-R033.1` and `.2`; unblocks `AU-BOUNDARY-R001.4.2.2`. | All child rows are verified. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R033.1 Define the typed fleet-catalog `servers` reader Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Define the typed fleet-catalog `servers` reader.** Add `FleetCatalogServersReader` in `graph_os/gateway/` returning typed server records scoped by tenant and principal, replacing the catalog read of AU `gateway/registry_api.py` used by `kg_server.py`. Unblocks `AU-BOUNDARY-R001.4.2.2`. | A test lists only servers visible to the calling tenant and principal. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R033.2 Add refusal tests for the `servers` reader Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Add refusal tests for the `servers` reader.** Missing principal, cross-tenant and unauthorized reads are refused with typed errors. Unblocks `AU-BOUNDARY-R001.4.2.2`. | Tests cover each refusal and confirm no records leak. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R034 Skills and SI workflows are admitted before they run (rollup) Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Skills and SI workflows are admitted before they run (rollup).** The host must audit each skill for unsafe instructions and tools. It must admit a workflow only with one owner, structured inputs, mapped data flows and a tool inventory. | All child rows are verified. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R034.1 Model Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Model.** Add `SkillAuditReport` (findings, severity, policy limit) and `WorkflowAdmissionRecord` (owner, inputs schema, data flows, tool inventory) in graph_os/fleet/admission_models.py. | tests/fleet/test_admission_models.py checks required fields. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R034.2 Behavior Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Behavior.** The default `skill_audit_policy` must scan skill text and declared tools and fail a skill when findings exceed a configured severity count. The default `workflow_admission_policy` must require all four workflow fields. Each default is replaceable by name. | Unit tests in tests/fleet/test_admission_models.py cover pass and fail cases. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R034.3 Wiring Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Wiring.** Call both policies in `invoke` at graph_os/api/invoke/pipeline.py:810 before `_confirmation_gate`, for any operation that loads a skill or starts a workflow. The production caller is the served route at graph_os/api/http/routes.py:127. This row creates the call site. | tests/fleet/test_admission_wiring.py asserts the policies run before the effect. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R034.4 Refusal Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Refusal.** The pipeline must return `OpError("SKILL_AUDIT_FAILED")` or `OpError("WORKFLOW_NOT_ADMITTED")`, naming the missing field or the exceeded limit. | Refusal tests in tests/fleet/test_admission_wiring.py. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R034.5 Evidence Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Evidence.** The outcome trace must record the audit report digest, the policy name and the missing fields. | A trace test in tests/fleet/test_admission_wiring.py. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R034.6 Hot-path proof Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Hot-path proof.** The served route at graph_os/api/http/routes.py enters `invoke` (entry point: the served invoke operation), passes the wired policies, and the test observes refusal of an unsafe skill and of an ownerless workflow, then admission of a complete one. | tests/fleet/test_admission_hot_path.py passes. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R034.7 Model Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Model.** Bind certification to skill identity/version, dependency digests, model endpoint revision, system prompt digest and producer attestation. Bind workflow admission to tenant, caller, workflow declaration, every tool schema and current grant revision. | Typed fixtures reject missing bindings and dependency cycles. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R034.8 Behavior Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Behavior.** Certify atomic dependencies through the configured local model before composed workflows. EG selects and scores; GraphOS validates attestations. Admit every bound tool against the trusted workflow declaration and caller grant before any tool executes. | A stale dependency or one denied tool prevents all workflow calls. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R034.9 Wiring Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Wiring.** Extend invoke at graph_os/api/invoke/pipeline.py:810 before confirmation and dispatch. Reuse graph_os/api/ops/agents.py:97 operations and the served MCP intent projection. This row creates the certification and workflow admission call sites. | Served agents.run reaches the admission gate before AU execution. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R034.10 Refusal Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Refusal.** Return CERTIFICATION_REQUIRED, CERTIFICATION_STALE, WORKFLOW_NOT_ADMITTED or PRODUCER_UNAVAILABLE. Generated plans cannot enlarge EG policy. Recheck grant, declaration and schema revisions before each dispatch. | Unknown tools, cyclic dependencies and revoked grants produce no new effects. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R034.11 Evidence Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Evidence.** Record ordered certification receipts, dependency identities, model and prompt revisions, workflow snapshot digest and authoritative decision references. Exclude prompt bodies and credentials. | Independent trace reads prove atomic-before-composed ordering and exact tool binding. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R034.12 Hot-path proof Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Hot-path proof.** Entry point agents.run through REST and MCP must exercise local-model certification, workflow admission and actual tool execution. Specify tests/fleet/test_certified_workflow_served.py with allowed, denied and stale cases. | Observe the configured model request and zero denied backend calls. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R024.4 Model Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Model.** Define ProvisionRequest, ProvisionResult and FleetCapacityProof as described in plan.md. Preserve image digest, OS, runtime, tenant, instance identity, budget and idempotency binding. | Typed nested request/result round trips preserve every allocation boundary. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R024.5 Behavior Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Behavior.** Validate the declared platform matrix and acquire bounded capacity before allocation. Reuse EG decisions and aggregation; collect durable results from real instances. Replay returns the same allocation receipt. | Observe at least 200 concurrent instances and independent durable results under the declared budget. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R024.6 Wiring Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Wiring.** Reuse graph_os/control_plane/runs/admission.py:108 NativeWorkItemAdmissionProtocol and graph_os/control_plane/runs/capacity.py:53 CapacityLedger. Extend graph_os/api/ops/agents.py:97 through invoke. This row creates the served provisioning adapter call site. | The served operation reaches the approved SDK provisioner and returned-result consumer. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R024.7 Refusal Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Refusal.** Reject unsupported platform/image, denied grant, stale decision, exceeded budget and changed replay bodies before allocation. Unknown allocation outcomes require reconciliation; never repeat an uncertain effect. | No denied allocation occurs; partial failures retain actual resource identities for cleanup. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R024.8 Evidence Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Evidence.** Record requested, admitted, started, completed and failed instance identities, peak concurrency, budget consumption, timestamps and result receipts. Preserve EG aggregation operation/version and input receipt identities. | Counters reconcile with independent runtime and durable result observations. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R024.9 Hot-path proof Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Hot-path proof.** Entry point agents.run must exercise real disposable provisioners in tests/fleet/test_provisioned_capacity_served.py. Cover every declared matrix row, 200 concurrent instances, refusal, replay, interruption and aggregate result reads. | Mock allocations and smaller extrapolated runs cannot establish capacity. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R002.3 Model Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Model.** Define VersionedDefinition with kind, producer identity, semantic version, nested schema, schema digest, body digest and compatibility receipt. Tools retain input/output shapes; prompts retain typed role, instruction, context and example sections. | Fixtures parse nested definitions and reject missing versions or unknown required fields. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R002.4 Behavior Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Behavior.** Gate candidate publication on producer schema validity and compatibility with the admitted version. Same-version content changes refuse. Breaking changes require a new major version and explicit re-admission. | Compatible updates publish atomically; incompatible evolution leaves the prior generation active. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R002.5 Wiring Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Wiring.** Extend graph_os/fleet/catalog_items.py:208 compute_schema_fingerprint and graph_os/fleet/onboarding.py:236 FleetOnboarding.onboard before import. Preserve EG prompt authority and SDK tool schema ownership. | Real served catalog probes provide both schema versions and verified producer receipts. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R002.6 Refusal Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Refusal.** Return DEFINITION_VERSION_REQUIRED, SCHEMA_INVALID, SCHEMA_INCOMPATIBLE or PRODUCER_UNAVAILABLE before catalog visibility. Host parsing cannot certify absent producer evolution semantics. | Missing or contradictory producer evidence never permits a generation swap. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R002.7 Evidence Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Evidence.** Record old/new definition versions, schema/body digests, producer revision, compatibility decision and catalog generation. Preserve tenant and source provenance. | Receipt reads identify exactly which definition each admitted workflow consumed. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R002.8 Hot-path proof Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Hot-path proof.** Entry point served catalog reload in tests/fleet/test_versioned_definitions_served.py admits a compatible nested update. Breaking updates, forged receipts and stale workflow schemas refuse before execution. | MCP and REST expose the same complete admitted generation. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R027.1 Model Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Model.** Bind IntegratedProvisionReceipt to discovery generation, EG skill identity/version, distribution decision, admission receipt, provisioned instance and durable result. Reuse typed work-item projections from R005. | All phases retain one tenant, run identity and exact skill digest. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R027.2 Behavior Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Behavior.** Discover authorized domain capabilities, consume EG distribution decisions, provision real agents and attach the graph-ingested skill version. The agent must use that exact identity during execution. | Independent graph and agent observations agree before a successful completion claim. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R027.3 Wiring Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Wiring.** Reuse graph_os/fleet/onboarding.py:236 FleetOnboarding.onboard and graph_os/api/ops/agents.py:97 operations. Connect the admitted work-item route to provisioning and result evidence. This row creates the integrated acceptance call site. | One served request traverses discovery, distribution, provisioning and ingested skill consumption. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R027.4 Refusal Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Refusal.** Deny missing skills, unavailable producers, incompatible schemas, cross-tenant receipts and unapproved tools. Stop before affected dispatch; retain known partial allocation state without claiming rollback. | Denied discovery returns no protected identity; no unauthorized agent or tool effect occurs. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R027.5 Evidence Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Evidence.** Correlate catalog generation, graph read receipt, distribution decision, instance identity, model trace and result receipt. Read graph state independently after ingestion and agent execution. | The evidence proves graph identity consumption rather than matching copied skill text. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R027.6 Hot-path proof Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Hot-path proof.** Entry point agents.run through real MCP and REST in tests/fleet/test_discovery_distribution_provisioning.py must execute the whole sequence. Include denial, unavailable producer, restart and duplicate delivery. | Separate helper tests cannot satisfy integrated acceptance. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R019.1 Behavior Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Behavior.** Workflow admission also applies R034.7 through R034.12 through the same narrowing policy boundary. No separate host identity authority is introduced. | The served integrated tests cover this consumer dependency. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R021.1 Behavior Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Behavior.** Every workflow tool requires the declaration and grant binding in R034.7 through R034.12 before the first call. Revalidate before later calls. | The served integrated tests cover this consumer dependency. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R005.3 Behavior Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Behavior.** Integrated work-item distribution and provisioning use R027.1 through R027.6. Preserve EG work-item identity, control lease and returned-result authority. | The served integrated tests cover this consumer dependency. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R019.2 Original policy contract Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Original policy contract.** Apply narrowing-only policy at discover, load and call after exact scope and principal checks. Policy precedes deputy and confirmation steps. Disabled policy still filters by scope and principal. With no configured policy, default to off. Local deployments ship the default policy enabled; external deployments enable it. deployment/doctor.py warns when policy is off. An enabled but unreachable policy service fails closed at discover, load and call. An explicit policy denial cannot become an allow. | Exercise every phase with allowed and denied callers while policy is enabled and disabled. No denied call reaches the engine. Cover all three deployment modes and assert the doctor warning for off mode. For each phase, compare an allowed decision, denied decision and unavailable service. Refused discovery leaks no item; refused loading or calling produces no effect. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R021.2 Original fleet authority contract Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Original fleet authority contract.** Require the exact fleet scope for each action through _require_fleet_capability. Neither admin nor kg:admin substitutes for that scope. Local stdio enforces the same rule as network transports. tool_dispatchable denies every unrecognized native host tool. The served MCP surface applies the existing policy filter before visibility and dispatch. | Exercise correctly scoped and over-broad callers for each action on stdio and network transports. Only the exact authorized scope permits the action. Unknown native names refuse. Start the actual MCP surface and prove policy middleware filters discovery and execution for denied callers. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R027.7 Original fleet onboarding contract Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Original fleet onboarding contract.** One pass selects every enabled streamable-HTTP server from MCP config. It registers each server, captures its catalog through SDK, attests with EG and imports the pack. Repeated onboarding is idempotent and handles admitted servers without duplicate imports. A failing server leaves the others unaffected. Registry outages and missing child credentials produce explicit per-server failure outcomes. graph-os-production-ops onboard-fleet runs one complete pass, reports each server and exits non-zero when any server fails. Boot starts the same onboarding pass on a background thread. A pass failure never blocks or stops serving. | A fresh-store pass covers multiple enabled servers. Disabled servers and other transports are excluded. Each eligible server has registration, capture, attestation and import evidence. Repeat a pass and observe no duplicate imports. Mix failing and healthy servers, then exercise registry outage and missing credentials. Preserve successful server outcomes. Invoke the real CLI for successful and mixed-result passes. Assert complete server reporting and the required exit status. Start the actual serving composition with a failing boot pass. Observe the failure report while MCP requests still complete. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R003.4 Original writable-fleet acceptance residual Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Original writable-fleet acceptance residual.** Model: The original R003 contract covers every admitted writable connector, not just repository files. Behavior: Preserve typed registry exposure, preview gating, deterministic replay and correct fleet behavior across service restart. Wiring: Retain R003.1 through R003.3 and their original acceptance; extend the served fleet fixture. Refusal: No unguarded native tool, missing preview or mismatched effect key may produce a write. Evidence: Restart and fault each admitted writable profile. Observe original receipts without duplicate effects and no partial protocol state. Missing previews and mismatched keys must prevent writes. | Proposed test: `tests/fleet/test_repository_source_effect_served.py::test_original_fleet_restart`. Restart and fault each admitted writable profile. Observe original receipts without duplicate effects and no partial protocol state. Missing previews and mismatched keys must prevent writes. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R003.5 Complete repository request binding Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Complete repository request binding.** Model: RepositoryWriteBackParams carries the full SDK RepositorySourceEffectRequest and a trusted connector-binding digest. Behavior: Keep every SDK field, including exact bytes, immutable base, actor, approval and effect key, inside the confirmed projection. Wiring: Extend the existing write-back operation schemas with the closed repository profile defined in plan.md. Refusal: Unknown fields, changed bindings and request.intent differing from durable.desired_patch["repository_effect"] refuse. Evidence: Round-trip seeded byte fixtures through HTTP and MCP. Compare canonical projections and refuse each independently altered field. | Proposed test: `tests/fleet/test_repository_source_effect_served.py::test_request_binding`. Round-trip seeded byte fixtures through HTTP and MCP. Compare canonical projections and refuse each independently altered field. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R003.6 Trusted composition through shared invoke Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Trusted composition through shared invoke.** Model: An admitted binding identifies the connector, source instance, repository, operation schema and existing execution authority. Behavior: Resolve it from trusted configuration and route both operations through the existing invoke checks. Wiring: Extend write_back.py and registry_factory.py; compose the admitted SDK operation through the existing fleet gateway and executor. Refusal: Missing producer, changed configuration or unavailable replay authority returns a typed refusal before provider mutation. Evidence: A served request reaches the real admitted connector once. Unbound configuration and direct native bypass attempts reach it zero times. | Proposed test: `tests/fleet/test_repository_source_effect_served.py::test_trusted_composition`. A served request reaches the real admitted connector once. Unbound configuration and direct native bypass attempts reach it zero times. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R003.7 Preview and approval bind the commit operation Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Preview and approval bind the commit operation.** Model: The existing plan binds the commit operation, full parameters, caller, tenant, policy and registry revision. Behavior: Require the SDK dry-run and recorded approval for the same canonical change set before commit. Wiring: Reuse bind_plan and the existing confirmation, audit and reservation path under GRAPHOS-OPS-R009. Refusal: A preview-operation lease, expired plan, changed payload or unbound approval cannot authorize commit. Evidence: One exact approved preview commits. Each binding change, invalid lease and missing required step-up produces zero provider mutations. | Proposed test: `tests/fleet/test_repository_source_effect_served.py::test_commit_binding`. One exact approved preview commits. Each binding change, invalid lease and missing required step-up produces zero provider mutations. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R003.8 Served effect and independent readback evidence Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Served effect and independent readback evidence.** Model: The result carries the actual SDK RepositorySourceEffectReceipt, request digest and receipt digest. Behavior: Return success only for a bound durable attempt with an actual immutable revision and matching independent readback. Wiring: Project SDK R004.8 through R004.10 and R004.12 results through the served operation response. Refusal: An echoed effect key, applied flag, fabricated revision or unbound receipt cannot establish success. Evidence: Serve preview, approval and commit against a disposable provider. Independently read its revision and durable graph attempt. An echoed flag or unbound receipt must refuse success. | Proposed test: `tests/fleet/test_repository_source_effect_served.py::test_actual_effect_readback`. Serve preview, approval and commit against a disposable provider. Independently read its revision and durable graph attempt. An echoed flag or unbound receipt must refuse success. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R003.9 Zero-effect refusal parity Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Zero-effect refusal parity.** Model: The negative matrix binds each changed request or denied authority to the observed provider call count. Behavior: Apply existing principal, scope, policy, subject-read, plan, approval and audit rules identically across HTTP and MCP. Wiring: Use the shared invoke error envelope and SDK refusal semantics; retain original engine and fleet error provenance. Refusal: Reject missing approval, stale base, path escape, changed bytes and denied scope before mutation. Post-effect uncertainty never means rollback. Evidence: Observe zero denied mutations on both surfaces. Inject readback failure after an effect and observe uncertainty without another write. | Proposed test: `tests/fleet/test_repository_source_effect_served.py::test_refusal_parity`. Observe zero denied mutations on both surfaces. Inject readback failure after an effect and observe uncertainty without another write. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R003.10 Durable replay across host and connector restart Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Durable replay across host and connector restart.** Model: The host plan and reservation bind the original SDK effect key, request and durable receipt. Behavior: Recover the same proven result after restart; reconcile uncertain effects without blind reapply. Wiring: Use the existing qualified effect coordinator with SDK R004.2 and R004.11 through shared invoke. Refusal: A consumed plan alone cannot prove completion; conflicting replay, lost receipts and unavailable causal lookup cannot trigger another mutation. Evidence: Race identical calls and crash at each effect boundary. Restart both processes and prove one effect or a truthful unresolved result. | Proposed test: `tests/fleet/test_repository_source_effect_served.py::test_restart_replay`. Race identical calls and crash at each effect boundary. Restart both processes and prove one effect or a truthful unresolved result. | requirement | GRAPHOS-FLEET | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-FLEET-R035 Authenticated schema preflight for OpenAPI operation aliases Definition — GRAPHOS-FLEET / GRAPHOS-FLEET — Fleet catalog, intent tools, and policy safe reloadCanonical requirement and verification source**Authenticated schema preflight for OpenAPI operation aliases.** Before invoking a schema-bound alias, GraphOS reads its SDK manifest and complete ordered fragments over the same authority-admitted MCP session. It reconstructs the canonical document with the public SDK. It checks both schema hashes and exact equality with the admitted input/output schemas. It binds the manifest alias and operation to the requested action. Revalidate caller delegation, child generation, catalog revision and tool mapping before each resource read and final call. Missing, stale, invalid, incomplete, oversized or mismatched disclosure refuses before invocation. Schema-bound aliases are not automatically retried after uncertain outcomes; existing MCP confirmation and effect handling remain authoritative. | `tests/fleet/test_multiplexer_schema_disclosure.py` covers complete reconstruction, stale/incomplete/mismatched refusal, missing output-schema refusal, authority/session/catalog binding, OAuth session reuse and no write replay. These fixture tests do not establish live-provider or deployment evidence. | requirement | GRAPHOS-FLEET | VERIFIED | 1cf004ee454e 1e55e62acb2a 35fbba91b24b 61c7f230ec1e 763701d591a8 tests/fleet/test_multiplexer_boundary.py:275 tests/fleet/test_multiplexer_boundary.py:283 tests/fleet/test_multiplexer_boundary.py:296 tests/fleet/test_multiplexer_dynamic_gateway.py:1842 tests/fleet/test_multiplexer_dynamic_gateway.py:1859 |
| GRAPHOS-HOST GRAPHOS-HOST — GraphOS host composition and ownership boundary | spec | None | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R001 Cross-repository composition boundary assignment Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Cross-repository composition boundary assignment.** GraphOS composes its runtime gateway on top of boundary contracts in which the graph engine owns ontology, SHACL and durable graph records, the connector SDK owns connector transport, and the agent runtime exposes only its public agent control-plane API; the web UI consumes this composed boundary rather than any internal package. | An import-boundary census confirms each dependency is reached only through its published public API, enforced as a continuous-integration check. | requirement | GRAPHOS-HOST | LANDED | 9760bef27075 |
| GRAPHOS-HOST-R002 Graph engine client exposes the session/discovery surface Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Graph engine client exposes the session/discovery surface.** The graph engine's client library exposes session, engine, source-sync, shard-topology, fleet-catalog and discovery-authority methods that GraphOS's gateway and fleet modules call directly, so migrating that code out of the agent runtime does not require reimplementing this surface. | A contract test against the installed graph engine client confirms each required method is present and callable before the dependent modules are migrated. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R003 Web UI rename cutover across GraphOS Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Web UI rename cutover across GraphOS.** GraphOS's import sites, optional web UI package extra, package source reference, release workflow checkout step, preflight checks, and browser-control tests and docs all reference the renamed web UI package. | A focused test run and the offline lock check confirm every reference resolves against the renamed package. | requirement | GRAPHOS-HOST | VERIFIED | 4ca77fbff9e3 6dda5ac3548c tests/architecture/test_webui_rename_references.py:13 |
| GRAPHOS-HOST-R004 Single gateway implementation under graph_os/gateway Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Single gateway implementation under graph_os/gateway.** GraphOS retains one gateway implementation under `graph_os/gateway/`, incorporating any behavior unique to the agent runtime's duplicate gateway package once that duplicate is removed, reconciling the `schemas/graph_core` and `ontology_api` modules against their counterparts, and dropping the `graph-os-daemon` console script and the `gateway-widgets` package extra. | A package-layout test confirms no duplicate gateway implementation remains and the retired script and extra are absent. | requirement | GRAPHOS-HOST | LANDED | 45283d0137b9 f37f67d33d37 |
| GRAPHOS-HOST-R005 graph_os.mcp_server.runtime serves retired MCP actions Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**graph_os.mcp_server.runtime serves retired MCP actions.** GraphOS's `graph_os/mcp_server/runtime.py` serves every MCP action the agent runtime's legacy MCP host previously provided, verified against an approved action-to-operation mapping, once that legacy host is retired. | A parity test maps each served MCP operation to the approved registry. It confirms no action is dropped without a recorded mapping. | requirement | GRAPHOS-HOST | SPECIFIED | 4ca77fbff9e3 |
| GRAPHOS-HOST-R005.1 Landed: the typed approved-mapping model Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Landed: the typed approved-mapping model.** `graph_os/mcp_server/legacy_action_mapping.py` defines `APPROVED_ACTION_MAPPING`, `build_approved_action_mapping` and `validate_served_actions` (construction-time duplicate refusal, lookup-time unmapped-action refusal). `runtime.py` defines `served_legacy_actions_within_approved_mapping` over this table, but nothing calls it against the actual served MCP operation list yet. | Proven today by `tests/mcp_server/test_legacy_action_mapping.py`. | requirement | GRAPHOS-HOST | VERIFIED | c7eda638d959 tests/mcp_server/test_legacy_action_mapping.py:17 tests/mcp_server/test_legacy_action_mapping.py:28 tests/mcp_server/test_legacy_action_mapping.py:35 |
| GRAPHOS-HOST-R005.2 Parity test proves no served action is dropped Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Parity test proves no served action is dropped.** Rollup: the approved table covers six of the legacy host's actions; a parity test over the legacy host's full action surface fails today, so the table is extended per action family (`.2.1`-`.2.7`) and the parity test lands last (`.2.8`). Child slice of `GRAPHOS-HOST-R005`. | Satisfied when all `GRAPHOS-HOST-R005.2.n` children are verified. | requirement | GRAPHOS-HOST | SPECIFIED | c7eda638d959 |
| GRAPHOS-HOST-R005.2.1 Approved mapping for the analyze action family Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Approved mapping for the analyze action family.** Add an approved `ActionOperationMapping` entry for every legacy MCP action of `graph_analyze` and its REST twins (code_context, explain, process_writeback, blast_radius, call_graph and the rest), each naming the GraphOS registry operation that serves it, or record that none exists as a gap to build. Child slice of `GRAPHOS-HOST-R005.2`. | A test asserts every legacy action of the family appears in `APPROVED_ACTION_MAPPING` and that each mapped operation resolves in the GraphOS registry. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R005.2.1.1 Add graph-os operation for code navigation actions Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Add graph-os operation for code navigation actions.** Gap: no registry operation serves legacy `code_context`, `explain`, `call_graph`, `routes`; add the operation(s) under `graph_os/api/ops/` and never invent an id before it exists. Child slice of `GRAPHOS-HOST-R005.2.1`. | Satisfied when the operation exists in the registry and a test bound to this ID proves it resolves. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R005.2.1.2 Add graph-os operation for impact actions Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Add graph-os operation for impact actions.** Gap: no registry operation serves legacy `blast_radius`, `change_coupling`; add it under `graph_os/api/ops/`. Child slice of `GRAPHOS-HOST-R005.2.1`. | Satisfied when the operation exists in the registry and a test bound to this ID proves it resolves. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R005.2.1.3 Add graph-os operation for `similar_code` and the remaining `graph_analyze` actions Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Add graph-os operation for `similar_code` and the remaining `graph_analyze` actions.** Gap: no registry operation serves `similar_code` or any other `graph_analyze` REST-twin action not listed in sibling children; enumerate them from the legacy tool, then add the operation(s). Child slice of `GRAPHOS-HOST-R005.2.1`. | Satisfied when the operation exists in the registry and a test bound to this ID proves it resolves. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R005.2.1.4 Add graph-os operation for `process_writeback` Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Add graph-os operation for `process_writeback`.** Gap: no registry operation serves legacy `process_writeback` (the current table maps it to a non-registry id); add the operation and remap. Child slice of `GRAPHOS-HOST-R005.2.1`. | Satisfied when the operation exists in the registry and a test bound to this ID proves it resolves. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R005.2.1.5 Approve the analyze mappings Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Approve the analyze mappings.** Replace the analyze entries in `APPROVED_ACTION_MAPPING` with the real operation ids from the children above, then the whole family is covered. Child slice of `GRAPHOS-HOST-R005.2.1`. | A test bound to this ID asserts the listed actions appear in `APPROVED_ACTION_MAPPING` and that each mapped operation id is in `{op.id for op in operations()}` from `graph_os/api/ops/*.py`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R005.2.2 Approved mapping for the configure action family Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Approved mapping for the configure action family.** Add an approved `ActionOperationMapping` entry for every legacy MCP action of `graph_configure`, `graph_config` and secret/hook/vault-sync actions, each naming the GraphOS registry operation that serves it, or record that none exists as a gap to build. Child slice of `GRAPHOS-HOST-R005.2`. | A test asserts every legacy action of the family appears in `APPROVED_ACTION_MAPPING` and that each mapped operation resolves in the GraphOS registry. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R005.2.3 Approved mapping for the ingest action family Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Approved mapping for the ingest action family.** Add an approved `ActionOperationMapping` entry for every legacy MCP action of `graph_ingest`, `graph_jobs` and knowledge-pack/corpus/materialize actions, each naming the GraphOS registry operation that serves it, or record that none exists as a gap to build. Child slice of `GRAPHOS-HOST-R005.2`. | A test asserts every legacy action of the family appears in `APPROVED_ACTION_MAPPING` and that each mapped operation resolves in the GraphOS registry. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R005.2.3.1 Map `sync` to `ingest.sources.sync` Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Map `sync` to `ingest.sources.sync`.** The only legacy ingest action with an existing registry operation: add `ActionOperationMapping("sync", "ingest.sources.sync")` with a bound resolution test. Child slice of `GRAPHOS-HOST-R005.2.3`. | Satisfied when the mapping is in the table and a bound test proves the id resolves. | requirement | GRAPHOS-HOST | VERIFIED | 567a2b417ed7 tests/mcp_server/test_legacy_action_mapping_ingest_sync.py:11 |
| GRAPHOS-HOST-R005.2.3.2 Add graph-os operation for ingest submission actions Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Add graph-os operation for ingest submission actions.** Gap: no registry operation serves legacy `ingest`, `ingest_url`, `ingest_knowledge_pack`, `fact_extract`, `distill`; add the operation(s) and remap the existing non-registry `ingest_knowledge_pack` entry. Child slice of `GRAPHOS-HOST-R005.2.3`. | Satisfied when the operation exists in the registry and a test bound to this ID proves it resolves. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R005.2.3.3 Add graph-os operation for `backfill_platform_history` and `corpus` Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Add graph-os operation for `backfill_platform_history` and `corpus`.** Gap: no registry operation serves these legacy actions. Child slice of `GRAPHOS-HOST-R005.2.3`. | Satisfied when the operation exists in the registry and a test bound to this ID proves it resolves. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R005.2.3.4 Add graph-os operation for job lifecycle actions Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Add graph-os operation for job lifecycle actions.** Gap: no registry operation serves legacy `jobs`, `job_status`, `cancel`, `clear`, `prioritize`. Child slice of `GRAPHOS-HOST-R005.2.3`. | Satisfied when the operation exists in the registry and a test bound to this ID proves it resolves. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R005.2.3.5 Add graph-os operation for `rebuild_indexes` and `observe` Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Add graph-os operation for `rebuild_indexes` and `observe`.** Gap: no registry operation serves these legacy actions. Child slice of `GRAPHOS-HOST-R005.2.3`. | Satisfied when the operation exists in the registry and a test bound to this ID proves it resolves. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R005.2.3.6 Add graph-os operation for `materialize` and `materialize_source` Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Add graph-os operation for `materialize` and `materialize_source`.** Gap: no registry operation serves these legacy actions. Child slice of `GRAPHOS-HOST-R005.2.3`. | Satisfied when the operation exists in the registry and a test bound to this ID proves it resolves. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R005.2.3.7 Add graph-os operation for `reflect` and `agent_toolkit` Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Add graph-os operation for `reflect` and `agent_toolkit`.** Gap: no registry operation serves these legacy actions. Child slice of `GRAPHOS-HOST-R005.2.3`. | Satisfied when the operation exists in the registry and a test bound to this ID proves it resolves. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R005.2.3.8 Approve the ingest mappings Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Approve the ingest mappings.** Extend `APPROVED_ACTION_MAPPING` with every ingest action using the real ids from the children above, then the whole family is covered. Child slice of `GRAPHOS-HOST-R005.2.3`. | A test bound to this ID asserts the listed actions appear in `APPROVED_ACTION_MAPPING` and that each mapped operation id is in `{op.id for op in operations()}` from `graph_os/api/ops/*.py`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R005.2.4 Approved mapping for the query-memory action family Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Approved mapping for the query-memory action family.** Add an approved `ActionOperationMapping` entry for every legacy MCP action of `graph_query`, `graph_memory` and `graph_write` memory/recall/SDD actions, each naming the GraphOS registry operation that serves it, or record that none exists as a gap to build. Child slice of `GRAPHOS-HOST-R005.2`. | A test asserts every legacy action of the family appears in `APPROVED_ACTION_MAPPING` and that each mapped operation resolves in the GraphOS registry. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R005.2.5 Approved mapping for the orchestrate action family Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Approved mapping for the orchestrate action family.** Add an approved `ActionOperationMapping` entry for every legacy MCP action of `graph_orchestrate`, `graph_loops`, `graph_agents`, `graph_goals` and `graph_evolution` actions, each naming the GraphOS registry operation that serves it, or record that none exists as a gap to build. Child slice of `GRAPHOS-HOST-R005.2`. | A test asserts every legacy action of the family appears in `APPROVED_ACTION_MAPPING` and that each mapped operation resolves in the GraphOS registry. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R005.2.6 Approved mapping for the mine-learn action family Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Approved mapping for the mine-learn action family.** Add an approved `ActionOperationMapping` entry for every legacy MCP action of `graph_mine`, `graph_mine_deep`, `graph_learn` and `graph_evaluate` actions, each naming the GraphOS registry operation that serves it, or record that none exists as a gap to build. Child slice of `GRAPHOS-HOST-R005.2`. | A test asserts every legacy action of the family appears in `APPROVED_ACTION_MAPPING` and that each mapped operation resolves in the GraphOS registry. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R005.2.7 Approved mapping for the governance-ops action family Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Approved mapping for the governance-ops action family.** Add an approved `ActionOperationMapping` entry for every legacy MCP action of the remaining legacy tool families (`graph_audit`, `graph_governance`, `graph_compliance`, `graph_bus`, `graph_message`, `graph_ontology`, `graph_incident` and others), each naming the GraphOS registry operation that serves it, or record that none exists as a gap to build. Child slice of `GRAPHOS-HOST-R005.2`. | A test asserts every legacy action of the family appears in `APPROVED_ACTION_MAPPING` and that each mapped operation resolves in the GraphOS registry. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R005.2.8 Parity test over the full legacy action surface Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Parity test over the full legacy action surface.** Add the parity test enumerating every action the legacy agent-runtime MCP host registers and asserting each is in `APPROVED_ACTION_MAPPING` with a resolvable operation; depends on `.2.1`-`.2.7`. Child slice of `GRAPHOS-HOST-R005.2`. | The parity test fails when any legacy action is removed from the mapping or its operation stops resolving. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R006 graph_os.fleet is the sole multiplexer and host owner Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**graph_os.fleet is the sole multiplexer and host owner.** GraphOS's `graph_os/fleet/` package is the sole multiplexer implementation and additionally hosts the OAuth broker, task-extension, principal, harness-server, middleware, skill-coverage and environment-drift-check modules that only GraphOS imports. | A package-layout test confirms the duplicate multiplexer no longer exists outside `graph_os/fleet/` and each moved module resolves only through GraphOS imports. | requirement | GRAPHOS-HOST | SPECIFIED | 97b844e615b7 |
| GRAPHOS-HOST-R007 Agent runtime imported only through its public API Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Agent runtime imported only through its public API.** GraphOS imports the agent runtime exclusively through `agent_utilities.api`, with every other import site rewired to a GraphOS-owned module or the connector SDK's public interface, and `graph_os/tests/test_package_layout.py` enforces this as an `agent_utilities.api`-only fence. | The package-layout test fails on any import of an agent-runtime module outside `agent_utilities.api` and passes once the rewiring is complete. | requirement | GRAPHOS-HOST | SPECIFIED | c467b28d2385 |
| GRAPHOS-HOST-R007.1 Landed: none of the fence exists yet Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Landed: none of the fence exists yet.** `graph_os/tests/test_package_layout.py` does not exist; `graph_os/mcp_server/runtime.py` and other modules still import `agent_utilities.core.config`, `agent_utilities.security.*`, `agent_utilities.messaging.*`, `agent_utilities.usage.*` and `agent_utilities.observability.*` directly rather than through `agent_utilities.api`. | No test exists today; confirmed by `git grep -n "^from agent_utilities\." graph_os/`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2 Add the import-fence test (rollup of `GRAPHOS-HOST-R007.2.1` to `GRAPHOS-HOST-R007.2.69`) Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Add the import-fence test (rollup of `GRAPHOS-HOST-R007.2.1` to `GRAPHOS-HOST-R007.2.69`).** Add `graph_os/tests/test_package_layout.py`, asserting via an import census over `graph_os/` that no module imports `agent_utilities` except through `agent_utilities.api` (an initial allowlist of today's known violations is acceptable so the test lands green, shrinking as each site is rewired). | `graph_os/tests/test_package_layout.py` exists, runs under `uv run pytest`, and fails if a new non-`agent_utilities.api` import is added outside the allowlist. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.1 Rewire `graph_os/a2a/authority.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/a2a/authority.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/a2a/authority.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.2 Rewire `graph_os/a2a/routing.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/a2a/routing.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/a2a/routing.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.3 Rewire `graph_os/access/service.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/access/service.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/access/service.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.4 Rewire `graph_os/agent_host/__init__.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/agent_host/__init__.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/agent_host/__init__.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.5 Rewire `graph_os/api/http/auth.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/api/http/auth.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/api/http/auth.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.6 Rewire `graph_os/api/mcp/serving.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/api/mcp/serving.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/api/mcp/serving.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.7 Rewire `graph_os/api/ops/access.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/api/ops/access.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/api/ops/access.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.8 Rewire `graph_os/api/policy/pdp_remote.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/api/policy/pdp_remote.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/api/policy/pdp_remote.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.9 Rewire `graph_os/browser_control/browser_control_binding.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/browser_control/browser_control_binding.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/browser_control/browser_control_binding.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.10 Rewire `graph_os/browser_control/browser_control_dispatch.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/browser_control/browser_control_dispatch.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/browser_control/browser_control_dispatch.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.11 Rewire `graph_os/browser_control/browser_control_durability.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/browser_control/browser_control_durability.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/browser_control/browser_control_durability.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.12 Rewire `graph_os/browser_control/browser_control_outcome.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/browser_control/browser_control_outcome.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/browser_control/browser_control_outcome.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.13 Rewire `graph_os/browser_control/browser_control_policy.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/browser_control/browser_control_policy.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/browser_control/browser_control_policy.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.14 Rewire `graph_os/browser_control/browser_control_provenance.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/browser_control/browser_control_provenance.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/browser_control/browser_control_provenance.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.15 Rewire `graph_os/browser_control/browser_control_service.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/browser_control/browser_control_service.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/browser_control/browser_control_service.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.16 Rewire `graph_os/browser_control/browser_control_state.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/browser_control/browser_control_state.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/browser_control/browser_control_state.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.17 Rewire `graph_os/browser_control/trace_bundle.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/browser_control/trace_bundle.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/browser_control/trace_bundle.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.18 Rewire `graph_os/deployment/cli.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/deployment/cli.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/deployment/cli.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.19 Rewire `graph_os/deployment/config_generator.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/deployment/config_generator.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/deployment/config_generator.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.20 Rewire `graph_os/deployment/doctor_certification.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/deployment/doctor_certification.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/deployment/doctor_certification.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.21 Rewire `graph_os/deployment/doctor_coverage.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/deployment/doctor_coverage.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/deployment/doctor_coverage.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.22 Rewire `graph_os/deployment/doctor_lakehouse.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/deployment/doctor_lakehouse.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/deployment/doctor_lakehouse.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.23 Rewire `graph_os/deployment/doctor_observability.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/deployment/doctor_observability.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/deployment/doctor_observability.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.24 Rewire `graph_os/deployment/doctor.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/deployment/doctor.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/deployment/doctor.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.25 Rewire `graph_os/deployment/genesis_environments.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/deployment/genesis_environments.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/deployment/genesis_environments.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.26 Rewire `graph_os/deployment/preflight.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/deployment/preflight.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/deployment/preflight.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.27 Rewire `graph_os/deployment/production_ops.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/deployment/production_ops.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/deployment/production_ops.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.28 Rewire `graph_os/deployment/release_canary.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/deployment/release_canary.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/deployment/release_canary.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.29 Rewire `graph_os/deployment/release_candidate.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/deployment/release_candidate.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/deployment/release_candidate.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.30 Rewire `graph_os/deployment/self_deploy.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/deployment/self_deploy.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/deployment/self_deploy.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.31 Rewire `graph_os/fleet/access_contracts.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/fleet/access_contracts.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/fleet/access_contracts.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.32 Rewire `graph_os/fleet/child_resilience.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/fleet/child_resilience.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/fleet/child_resilience.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.33 Rewire `graph_os/fleet/gateway_ops.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/fleet/gateway_ops.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/fleet/gateway_ops.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.34 Rewire `graph_os/fleet/local_skill_catalog.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/fleet/local_skill_catalog.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/fleet/local_skill_catalog.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.35 Rewire `graph_os/fleet/multiplexer.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/fleet/multiplexer.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/fleet/multiplexer.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.36 Rewire `graph_os/fleet/onboarding.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/fleet/onboarding.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/fleet/onboarding.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.37 Rewire `graph_os/gateway/aggregator.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/gateway/aggregator.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/gateway/aggregator.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.38 Rewire `graph_os/gateway/config.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/gateway/config.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/gateway/config.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.39 Rewire `graph_os/gateway/daemon.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/gateway/daemon.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/gateway/daemon.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.40 Rewire `graph_os/gateway/dashboard_api.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/gateway/dashboard_api.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/gateway/dashboard_api.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.41 Rewire `graph_os/gateway/fleet_events.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/gateway/fleet_events.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/gateway/fleet_events.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.42 Rewire `graph_os/gateway/fleet.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/gateway/fleet.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/gateway/fleet.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.43 Rewire `graph_os/gateway/graph_api.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/gateway/graph_api.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/gateway/graph_api.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.44 Rewire `graph_os/gateway/rate_limit.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/gateway/rate_limit.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/gateway/rate_limit.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.45 Rewire `graph_os/gateway/remote_oauth_api.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/gateway/remote_oauth_api.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/gateway/remote_oauth_api.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.46 Rewire `graph_os/gateway/schemas/graph_core.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/gateway/schemas/graph_core.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/gateway/schemas/graph_core.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.47 Rewire `graph_os/gateway/usage_api.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/gateway/usage_api.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/gateway/usage_api.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.48 Rewire `graph_os/gateway/widgets/base.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/gateway/widgets/base.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/gateway/widgets/base.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.49 Rewire `graph_os/gateway/widgets/ollama.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/gateway/widgets/ollama.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/gateway/widgets/ollama.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.50 Rewire `graph_os/gateway/widgets/vector_db.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/gateway/widgets/vector_db.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/gateway/widgets/vector_db.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.51 Rewire `graph_os/mcp_server/bootstrap.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/mcp_server/bootstrap.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/mcp_server/bootstrap.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.52 Rewire `graph_os/mcp_server/composition.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/mcp_server/composition.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/mcp_server/composition.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.53 Rewire `graph_os/mcp_server/decide_wiring.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/mcp_server/decide_wiring.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/mcp_server/decide_wiring.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.54 Rewire `graph_os/mcp_server/runtime.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/mcp_server/runtime.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/mcp_server/runtime.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.55 Rewire `graph_os/mcp_server/server.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/mcp_server/server.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/mcp_server/server.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.56 Rewire `graph_os/messaging/alert_intake.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/messaging/alert_intake.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/messaging/alert_intake.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.57 Rewire `graph_os/messaging/backends/mattermost.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/messaging/backends/mattermost.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/messaging/backends/mattermost.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.58 Rewire `graph_os/messaging/backends/telegram.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/messaging/backends/telegram.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/messaging/backends/telegram.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.59 Rewire `graph_os/messaging/governed_send.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/messaging/governed_send.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/messaging/governed_send.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.60 Rewire `graph_os/messaging/lease.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/messaging/lease.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/messaging/lease.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.61 Rewire `graph_os/messaging/polling.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/messaging/polling.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/messaging/polling.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.62 Rewire `graph_os/messaging/reach.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/messaging/reach.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/messaging/reach.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.63 Rewire `graph_os/messaging/registry.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/messaging/registry.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/messaging/registry.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.64 Rewire `graph_os/messaging/router.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/messaging/router.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/messaging/router.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.65 Rewire `graph_os/messaging/service.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/messaging/service.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/messaging/service.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.66 Rewire `graph_os/observability/gateway_health.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/observability/gateway_health.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/observability/gateway_health.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.67 Rewire `graph_os/semantic_content.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/semantic_content.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/semantic_content.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.68 Rewire `graph_os/webui_host/webui_co_service.py` off agent-runtime internals Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Rewire `graph_os/webui_host/webui_co_service.py` off agent-runtime internals.** Child slice of `GRAPHOS-HOST-R007.2`. Every `agent_utilities` import in `graph_os/webui_host/webui_co_service.py` other than `agent_utilities.api` is rewired to a GraphOS-owned module, the connector SDK public interface, or `agent_utilities.api`; no allowlist entry. | A focused test for the module passes and a grep of the module shows no `agent_utilities` import outside `agent_utilities.api`. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R007.2.69 Add the `agent_utilities.api`-only import-fence test Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Add the `agent_utilities.api`-only import-fence test.** Final child of `GRAPHOS-HOST-R007.2`, blocked until `GRAPHOS-HOST-R007.2.1` to `GRAPHOS-HOST-R007.2.68` land. `tests/test_package_layout.py` walks every `graph_os/**/*.py` AST and fails on any `agent_utilities` import other than `agent_utilities.api`, with no allowlist or baseline. | The fence test passes against the rewired tree and fails when a non-api `agent_utilities` import is injected into a fixture module. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R008 GraphOS hosts its own boundary modules Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**GraphOS hosts its own boundary modules.** GraphOS hosts its own security request-identity, error-surface, browser-auth and security-policy-middleware modules with their conformance tests; its own gateway and runtime health and metrics observability; its own profile-guard, install, release-channel, live-mount-guard, paths, workspace and config-admin core modules; its own hook-installer, agent-manager-dashboard, release-catalog and gateway-client modules; and its own connection-registry and engine-discovery modules under `graph_os.fleet`. | A package-layout census confirms these modules are imported only from their GraphOS location and the agent runtime no longer declares equivalents. | requirement | GRAPHOS-HOST | SPECIFIED | 776ceb15e7ba a04f32a44865 a727c1536f27 b0cd6a8f01de d3ef338ca1e3 |
| GRAPHOS-HOST-R009 GraphOS hosts the agent HTTP server and A2A endpoints Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**GraphOS hosts the agent HTTP server and A2A endpoints.** GraphOS hosts the agent HTTP server under `graph_os/a2a/` and `graph_os/webui_host/`, including the A2A, A2A-config and A2A-graph-skill protocol modules migrated from the agent runtime; the duplicate broker and its separate task store are not ported, since durable task state has a single owner. The editor-facing Agent Client Protocol is provided by the agent runtime's harness integration, so GraphOS carries no ACP adapter of its own and mounts that implementation where a deployment exposes it. | Route and task-lifecycle tests cover the hosted A2A endpoints, and a source check confirms GraphOS contains no separate ACP adapter implementation. | requirement | GRAPHOS-HOST | SPECIFIED | e5efd4f0ca33 |
| GRAPHOS-HOST-R010 GraphOS owns hosting/deployment configuration settings Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**GraphOS owns hosting/deployment configuration settings.** GraphOS owns the hosting and deployment configuration settings split out of the agent runtime's monolithic configuration module, while connector base settings move to the connector SDK's own configuration module and agent/model settings remain with the agent runtime. | A configuration-schema test confirms GraphOS resolves its hosting and deployment settings from its own module. It must not import the agent runtime's configuration internals. | requirement | GRAPHOS-HOST | SPECIFIED | 396d8307596f afc93c497524 tests/deployment/test_host_config.py:32 tests/deployment/test_host_config.py:43 |
| GRAPHOS-HOST-R011 GraphOS serves the messaging channel and routing layer Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**GraphOS serves the messaging channel and routing layer.** GraphOS serves the messaging channel adapters, listener, service, daemon, polling, reaper and host routing for the agent bus, while the graph engine remains the sole authority for durable message append, reads, cursors, dead letters and depth. Superseded-by: the supervision-lifecycle detail (states, transitions, health-gated start, restart backoff bounds, stop/drain, typed degraded state for a missing adapter) is specified in [`GRAPHOS-MESSAGING-001`](../messaging-channel-supervision/spec.md) (`GRAPHOS-MESSAGING-R001`–`R005`); this row's broader ownership claim is kept. | A served test exercises a messaging action through GraphOS and confirms the graph engine records the durable result exactly once. | requirement | GRAPHOS-HOST | LANDED | 63a66f60915a afefd425c905 bc2b6941077e c467b28d2385 |
| GRAPHOS-HOST-R012 Component registry carries GraphOS and SDK boundary entries Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Component registry carries GraphOS and SDK boundary entries.** GraphOS publishes boundary seed entries for itself and the connector SDK in the architecture component registry. Each names its owning modules and public import surface. | A registry-completeness check confirms GraphOS and the connector SDK each have a registry entry with no coverage gap. | requirement | GRAPHOS-HOST | LANDED | 9760bef27075 d75db1ea42e8 e278fafd4073 |
| GRAPHOS-HOST-R013 Front ends import only public GraphOS/agent-runtime surfaces Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Front ends import only public GraphOS/agent-runtime surfaces.** GraphOS's web UI package imports the agent runtime only through `agent_utilities.api`, directly from GraphOS, or from the graph engine's client library, with no import of an agent-runtime-internal module. | A package-layout test on the web UI package fails on any import outside these allowed surfaces. | requirement | GRAPHOS-HOST | LANDED | 4ca77fbff9e3 |
| GRAPHOS-HOST-R014 Agent runtime split into connector SDK, GraphOS and engine Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Agent runtime split into connector SDK, GraphOS and engine.** The former agent runtime is split into separately published repositories: the connector SDK, GraphOS, and the graph engine, each publishing its own installable package so GraphOS depends on the others only through their public APIs. | GraphOS's dependency manifest pins each split repository's published package rather than a path into the former combined source tree. | requirement | GRAPHOS-HOST | LANDED | 0062797e3c37 91c0d96adb17 f8d31551067c |
| GRAPHOS-HOST-R015 Layered agent capability model with a harness abstraction Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Layered agent capability model with a harness abstraction.** GraphOS defines a layered agent-capability model, from its lowest to its highest defined layer, implemented over the graph engine, together with a harness abstraction that lets a given layer run under different execution environments. | A conformance test suite exercises each defined layer through the harness abstraction and confirms its expected behavior boundary. | requirement | GRAPHOS-HOST | LANDED | 1f575184e8da |
| GRAPHOS-HOST-R016 main branch includes the published dependency composition Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**main branch includes the published dependency composition.** GraphOS's default branch history includes the published composition of the graph engine, connector SDK and agent runtime dependencies, so later changes build on that composition rather than reverting behind it. | A git ancestry check in continuous integration confirms the published composition commit remains reachable from the default branch. | requirement | GRAPHOS-HOST | LANDED | 20f773df9ddd |
| GRAPHOS-HOST-R017 Browser inventory lists native GraphOS tools Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Browser inventory lists native GraphOS tools.** The WebUI inventory helper lists the native `graph-os` server from its registered tool surface. It never probes `graph-os` as a catalog child. | `tests/webui_host/test_native_mcp_delegation.py` lists the registered native tools and fails when a child probe runs. | requirement | GRAPHOS-HOST | LANDED | 3b2c6ac9d864 a4928a7047e1 |
| GRAPHOS-HOST-R018 Browser catalog reads run under the process authority Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Browser catalog reads run under the process authority.** The enhanced catalog binds the GraphOS process session for each engine read. Its receipts name that process context. A failed read logs its cause before the masked 503. | `tests/gateway/test_enhanced_catalog_api.py` proves the read runs inside the process scope and logs the denial cause. | requirement | GRAPHOS-HOST | LANDED | 3b2c6ac9d864 a4928a7047e1 |
| GRAPHOS-HOST-R019 GraphOS serves the service dashboard surface the web UI composes Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**GraphOS serves the service dashboard surface the web UI composes.** GraphOS mounts `/api/dashboard/*` and the `/ws/dashboard` stream through its gateway route registrar. The routes run behind the same identity and web UI authorization middleware as other `/api` routes. The stream sends a snapshot, then periodic updates, and honors a `subscribe` message. | A route-mount test confirms `/api/dashboard/full`, `/health`, `/daemon/status`, `/daemon/shards` and `/ws/dashboard`. A stream test confirms snapshot, update and subscription scoping. | requirement | GRAPHOS-HOST | LANDED | 975596a67ed0 a504e36c3c7c |
| GRAPHOS-HOST-R020 Serving start installs the decide consumers Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Serving start installs the decide consumers.** GraphOS installs the library-bound assembler, the task planner and the cross-source report at serving start. The assembler and planner bind the bootstrap session's engine client. The cross-source report binds the fleet virtual catalog and an engine SPARQL ontology provider. A missing input logs a reason and skips that consumer. A fault never stops serving. | `tests/mcp_server/test_decide_wiring.py` proves all three installs with fakes. It proves each guarded skip. | requirement | GRAPHOS-HOST | LANDED | 91c0d96adb17 c4e7f7197b78 d7eb02776c45 e96c8e3a5360 |
| GRAPHOS-HOST-R021 Serving start binds the assembler's commit and publish providers and installs the topology asker Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Serving start binds the assembler's commit and publish providers and installs the topology asker.** GraphOS mints an `AgentLibraryMutationContext` from the verified bootstrap session's identity and tenant, and binds it as the assembler's `commit_context` and `publish_context` (AU `agent_utilities.decide.consumers.assembly`, mapping to EG's `DecisionCommit` and `AgentGraph.publish`, EG-DECISION-ENGINE-R047/R051). Serving start also installs the topology asker over the published reference templates, the same way it installs the task planner. A missing input logs a reason and skips that consumer. | `tests/mcp_server/test_decide_wiring.py` proves the topology asker installs alongside the planner, and proves a solved assembly commits and publishes through a fake engine client that records each call. | requirement | GRAPHOS-HOST | LANDED | 117301017944 e67f069a9ed4 |
| GRAPHOS-HOST-R022 Serving start binds the task planner's capability-search, guardrail and workflow lookups Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Serving start binds the task planner's capability-search, guardrail and workflow lookups.** GraphOS binds the planner's `capability_search` to the served EG agent-card search, `guardrail_source` to one side-effect-free AU action-policy verdict per planned task, and `workflows` to the registered graph-workflow store's semantic match over the planned tasks (AU `agent_utilities.decide.consumers.task_planner`, `agent_utilities.layers.clients.AgentClient`, `agent_utilities.orchestration.action_policy`, `agent_utilities.knowledge_graph.workflow_store`). A missing input logs a reason and skips that consumer. | `tests/mcp_server/test_decide_wiring.py` proves the three lookups are bound at serving start, and proves a planned task gets non-empty assembled agent skills and tools with a fake capability source populating its reuse metadata. | requirement | GRAPHOS-HOST | LANDED | af5f5c292007 e67f069a9ed4 |
| GRAPHOS-HOST-R023 GraphOS serves its eight-tool MCP intent surface from its own operation registry Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**GraphOS serves its eight-tool MCP intent surface from its own operation registry.** `graph_os/api/mcp` serves `ask`, `find`, `why`, `write`, `act`, `manage` and the two MCP Apps launchers (`graph_task_progress_app`, `graph_trace_waterfall_app`) itself: ranking and its deterministic tie-break, fleet discovery merged into `find`, a fleet child call through `act`, and a natural-language `ask` fallback when no registry operation matches, all live in GraphOS rather than in the agent runtime. The agent runtime serves no MCP tools; it supplies only the library registrar GraphOS calls for the two app-launcher tools. | A tool-list parity test registers the surface on a real `FastMCP` instance and confirms the same eight names the agent runtime previously served. A second test dispatches one operation through the real invocation pipeline (policy/Eunomia included), and a third proves the natural-language `ask` fallback is reached only when no operation matches. | requirement | GRAPHOS-HOST | SPECIFIED | c39349d16c53 |
| GRAPHOS-HOST-R024 `graph_os.mcp_server.server` registers GraphOS's own intent surface, not the agent runtime's Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**`graph_os.mcp_server.server` registers GraphOS's own intent surface, not the agent runtime's.** Serving start calls `graph_os.api.mcp.serving.register_intent_surface` instead of the agent runtime's `agent_utilities.mcp.graphos_surface.register_graphos_surface`/backing-server path. | `python3 scripts/check_wiring.py unreachable` lists fewer unreached `graph_os.api.{mcp,invoke,ops,policy}` modules after this change than before it; the exact before/after counts are recorded as PR evidence. | requirement | GRAPHOS-HOST | LANDED | c39349d16c53 |
| GRAPHOS-HOST-R025 The agent runtime's MCP serving stack is removed Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**The agent runtime's MCP serving stack is removed.** Once `GRAPHOS-HOST-R024` lands, the agent runtime deletes `agent_utilities/mcp/tools/intent_tools.py`, `agent_utilities/mcp/graphos_surface.py`, and the `kg_server` MCP serving entry point that only GraphOS called; the library functions those modules called (the harness, the control plane and the KG clients) are retained and stay reachable from GraphOS's own registry operations. | A grep-based import census over GraphOS confirms no remaining import of the deleted modules, and the agent runtime's test suite passes with them absent. | requirement | GRAPHOS-HOST | LANDED | c39349d16c53 |
| GRAPHOS-HOST-R026 Durable A2A task persistence in the graph-os agent host Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Durable A2A task persistence in the graph-os agent host.** Rollup of `GRAPHOS-HOST-R026.1` to `.5`; unblocks `AU-BOUNDARY-R015.2`. | All child rows are verified. | requirement | GRAPHOS-HOST | SPECIFIED | 8d1bc46ecbdb |
| GRAPHOS-HOST-R026.1 Define the typed A2A task-store port Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Define the typed A2A task-store port.** Add `A2ATaskStore` Protocol (get, put, list, cancel by tenant and principal) in `graph_os/a2a/task_store.py`. Unblocks `AU-BOUNDARY-R015.2` (replaces AU `protocols/a2a_epistemic.py`). | A type-check test confirms a fake store satisfies the Protocol. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R026.2 Implement the engine-backed A2A task store Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Implement the engine-backed A2A task store.** Add `EngineA2ATaskStore` implementing `A2ATaskStore` over the public engine client, with no second task store. Unblocks `AU-BOUNDARY-R015.2`. | A focused test persists and reloads a task through a stubbed engine client. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R026.3 Wire the hosted A2A app to the task store, fail-closed when absent Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Wire the hosted A2A app to the task store, fail-closed when absent.** The hosted A2A app in `graph_os/a2a/` takes the `A2ATaskStore` at composition and refuses task methods with a typed error when none is bound. Unblocks `AU-BOUNDARY-R015.2`. | A test confirms task submit is refused with no store and succeeds with one. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R026.4 Add the doctor check for A2A task persistence Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Add the doctor check for A2A task persistence.** Add a graph-os doctor check `a2a_persistence` reporting whether the task store is bound and durable, replacing AU's check of the same name. Unblocks `AU-BOUNDARY-R015.2`. | A doctor test reports failure with no store and pass with the engine-backed store. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R026.5 Point the `g34-a2a` certification gate at graph-os tests Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Point the `g34-a2a` certification gate at graph-os tests.** The `g34-a2a` gate runs graph-os `tests/a2a/` task-persistence tests instead of AU's. Unblocks `AU-BOUNDARY-R015.2`. | The gate definition names graph-os test paths and passes on main. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R027 Loopback OIDC authority for skill certification Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Loopback OIDC authority for skill certification.** Rollup of `GRAPHOS-HOST-R027.1` to `.3`; unblocks `AU-BOUNDARY-R002.3.1`. | All child rows are verified. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R027.1 Add the loopback OIDC authority owner module for skill certification Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Add the loopback OIDC authority owner module for skill certification.** Add `graph_os/certification/oidc.py` serving loopback-only OIDC discovery, JWKS and token endpoint, replacing AU `deployment/certification_oidc.py`. Unblocks `AU-BOUNDARY-R002.3.1`. | A test confirms discovery and JWKS respond on loopback and the module refuses a non-loopback bind. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R027.2 Add the loopback OIDC authority test fixture Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Add the loopback OIDC authority test fixture.** Add a pytest fixture in `tests/certification/conftest.py` that starts and stops the authority and mints a signed token. Unblocks `AU-BOUNDARY-R002.3.1`. | A test uses the fixture to mint a token that verifies against the served JWKS. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R027.3 Add the loopback OIDC authority script Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Add the loopback OIDC authority script.** Add `scripts/certification_oidc.py` launching the owner module for skill certification runs. Unblocks `AU-BOUNDARY-R002.3.1`. | The script starts, serves discovery, and exits cleanly on signal in a test. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R028 Bump the pinned agent-utilities source for the new `agent_utilities.api.*` export modules Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Bump the pinned agent-utilities source for the new `agent_utilities.api.*` export modules.** Advance the agent-utilities ref in `.github/workflows/release.yml` and the uv sources and lock so `persistence_privacy`, `orchestration`, `work_durability`, `agent_dispatch`, `trace_ontology`, `action_policy` and `elevation` import. Unblocks `GRAPHOS-HOST-R007.2.1`, `GRAPHOS-HOST-R007.2.2` and `GRAPHOS-HOST-R007.2.3`. | A test imports each of the seven `agent_utilities.api` modules and the lock and release pins name one ref. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R029 Tenant-bound native desktop actions Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Tenant-bound native desktop actions.** Require a verified caller's tenant-bound sandbox grant. Background click, type, and verification cannot capture or change cursor/focus. Attach through `graph_os/api/invoke/pipeline.py:invoke` and `graph_os/api/invoke/executor.py:BoundOperationRuntime.dispatch` (line 273). `OperationRuntime.dispatch` is only a protocol. The SDK native-desktop port/provider contract is missing. Keep this capability unavailable until that owner contract is published. | Future acceptance: `tests/api/test_agent_browser_ops.py::test_native_desktop_actions_require_verified_grant_without_focus_capture`. Compose the runtime and invoke through the real pipeline and `BoundOperationRuntime.dispatch`. Verify valid grants reach the provider with request-bound verification. Missing, revoked, or cross-tenant grants must refuse before provider calls. Confirm cursor and focus remain unchanged. The proposed test has not run. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R030 Run-bound visual state Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Run-bound visual state.** Preserve source/frame/revision provenance for each typed observation within a run. Bind reusable perception state to identity, tenant scope, lifetime, invalidation, and retention rules. Later spatial steps consume prior state. Stale or cross-tenant state refuses before dispatch. Attach at `graph_os/api/invoke/pipeline.py:invoke` and real `graph_os/api/invoke/executor.py:BoundOperationRuntime.dispatch` (line 273); `OperationRuntime.dispatch` is only a protocol. The SDK observation producer and EG state/context contracts remain unassigned. Do not add a local state store. | Future acceptance: `tests/api/test_agent_browser_ops.py::test_visual_state_is_run_source_and_tenant_bound`. Compose the runtime and traverse the real pipeline and `BoundOperationRuntime.dispatch`. Verify sequential reuse within one run and source/frame/revision provenance. Verify invalidation after expiry or source change. Cross-tenant or stale state must refuse before dispatch. The proposed test has not run. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R031 Coding-agent discovery and sandbox handoff Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Coding-agent discovery and sandbox handoff.** Discover coding agents on `PATH`. Apply the EG-selected skill transformation through the AU harness. Render generated artifacts only in the WebUI sandboxed frame. GraphOS owns the host/admission boundary at `graph_os/mcp_server/server.py:mcp_server`. EG, AU, and WebUI producer/consumer contracts remain unbound. Keep the complete flow unavailable until those owner ports are published. | Future acceptance: `tests/mcp_server/test_composition.py::test_coding_agent_flow_uses_owner_ports_and_sandbox`. Verify discovery identifies the selected executable. Verify the AU harness receives the EG-selected transformation. Verify WebUI renders only generated artifacts in its sandbox. Missing owner contracts or unavailable executables must refuse without dispatch or rendering. The proposed test has not run. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R010.1 Preserve configuration ownership Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Preserve configuration ownership.** Model: Hosting and deployment settings retain their current owner. Behavior: Preserve every original R010 boundary, including connector and model configuration ownership. Wiring: Reuse `graph_os/core/config_admin.py:51`; import only public owner contracts. Refusal: No runtime configuration internals may become a host dependency. Evidence: Retain the original configuration-schema acceptance alongside the new startup cases. | The original R010 schema test remains required. A forbidden private import fails the boundary check. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R010.2 Declare every consumed environment name Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Declare every consumed environment name.** Model: `HostEnvironmentManifest` contains version, component, source revision and uniquely named declarations. Behavior: Each declaration records type, required condition, default, sensitivity and consuming call sites. Include indirect library reads. Wiring: Extend the existing configuration loader; compose public SDK and agent-runtime declarations without copying their settings. Refusal: Undeclared reads, conflicting declarations and unavailable enabled-component manifests prevent startup. Evidence: Record the manifest digest and missing declaration names without values. | A census matches all consumed names to declarations. Inject a dynamic undeclared read and require a named startup refusal. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R010.3 Validate before any service starts Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Validate before any service starts.** Model: `HostStartupConfiguration` binds the manifest digest, selected components and resolved typed settings. Behavior: Resolve existing configuration precedence once, then validate every enabled component before opening listeners or starting children. Wiring: Attach validation before `runtime._build_server` in `graph_os/mcp_server/server.py:164`. Refusal: Missing required or malformed values refuse with component, variable name and reason; never include the value. Evidence: Record the configuration digest and zero listener, child-process and deployment effects on refusal. | The real launcher accepts valid configuration. Missing values, malformed ports and unknown profiles produce named refusals before any start. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R010.4 Keep conditional configuration precise Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Keep conditional configuration precise.** Model: Declarations distinguish required, optional and conditionally required values. Behavior: Validate enabled dependencies and explicit defaults. An unrelated disabled component does not require credentials. Wiring: Use the selected component plan and the existing configuration resolver; no ambient environment grants authority. Refusal: An unresolved condition or invalid default refuses rather than silently choosing another profile. Evidence: Record each selected condition and default identifier without secret material. | Enable and disable a controlled component. Its missing credential refuses only when required; an invalid default always refuses. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R010.5 Bind environment guidance to declarations Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Bind environment guidance to declarations.** Model: A declaration digest binds the server configuration example and both transport examples. Behavior: Generate example names from the same manifest; document defaults and required conditions with secret placeholders. Wiring: Use GRAPHOS-DEPLOY-R010 guidance checks for the skill, README and documentation. Refusal: A consumed name missing from configuration or examples fails conformance. Evidence: Record manifest and example digests, never live configuration. | Parse both documented transport configurations and compare their names with the manifest. Inject an omitted name and require failure. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R010.6 Prove startup validation through the launcher Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Prove startup validation through the launcher.** Model: An isolated process fixture records sockets, child starts and safe diagnostics. Behavior: Exercise real startup with valid settings and every refusal class before accepting traffic. Wiring: Proposed `tests/host/test_launch_configuration_served.py` invokes the installed GraphOS launcher with controlled dependencies. Refusal: A helper-only test cannot establish startup ordering or complete consumed-name coverage. Evidence: Bind source revision, manifest digest, process exit, observation counts and redacted diagnostics. | Repeat valid and invalid runs after restart. A refused start starts zero children and opens zero listeners; valid startup serves a probe. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R008.1 Preserve every boundary module Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Preserve every boundary module.** Model: The original parent remains the complete contract. Behavior: Preserve all R008 security, gateway, observability, core, installer, dashboard, catalog, registry and discovery ownership obligations. Wiring: Use the original package-layout census across every module named by R008. Refusal: New child evidence cannot replace any original acceptance obligation. Evidence: Retain the original parent receipts and require its complete acceptance. | The original census proves every named module has its GraphOS owner and no agent-runtime equivalent remains. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R008.2 Detect installed harnesses without effects Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Detect installed harnesses without effects.** Model: `HarnessInstallation` binds adapter ID, supported version, detected executable, configuration root and detection evidence. Behavior: Inspect supported local installation markers before preparing any tool, instruction or hook change. Wiring: Extend `deployment/cli.py:134` and its existing registration path; generic detection adapters are missing. Refusal: Ambiguous roots, unsupported versions and unknown adapters refuse; an absent harness creates no files. Evidence: Return the detected set and reasoned refusals without private file contents. | Run the installer against mixed present, absent and malformed harness fixtures. Absent roots and existing unrelated bytes remain unchanged. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R008.3 Bind exact harness configuration changes Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Bind exact harness configuration changes.** Model: `HarnessConfigurationChange` binds detected installation, before digest, proposed digest, managed keys and authorized destination. Behavior: Prepare tool entries, instruction sections and supported pre-tool hooks for each detected harness. Wiring: Reuse the existing registration command; add versioned format adapters behind the same installer boundary. Refusal: An unsupported hook capability is reported explicitly. It never causes a fabricated hook or another harness format. Evidence: The reviewable change lists each supported artifact and each unsupported capability. | Invoke the installer for a supported fixture and parse all three artifacts. An unsupported hook reports its limitation without a hook file. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R008.4 Apply harness edits without overwriting unrelated content Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Apply harness edits without overwriting unrelated content.** Model: Each managed artifact retains its original digest and configuration ownership marker. Behavior: Validate every destination before mutation; conditionally replace only the reviewed managed sections. Repeated identical installation changes no bytes. Wiring: The GraphOS installer owns local configuration edits; governed remote source changes remain SDK effects. Refusal: Changed bases, symlink escapes, malformed configuration and conflicting keys refuse before replacing that artifact. Evidence: Record actual before and after digests, including partial outcomes after an interrupted multi-file application. | Seed unrelated keys and instructions. Check preservation, idempotence, stale-base refusal and recovery without falsely reporting all artifacts installed. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R008.5 Prove detected-harness installation Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Prove detected-harness installation.** Model: An isolated home contains two supported installations and one absent harness. Behavior: Run the actual installer, then use each harness configuration parser and controlled hook invocation. Wiring: Proposed `tests/deployment/test_harness_install_served.py` enters the installed configuration command. Refusal: Helper-only detection and successful file writes do not prove valid tool entries or executable hook configuration. Evidence: Record detected versions, parsed configuration, hook observations and untouched-file digests. | Discover the configured MCP tool through a real client. Prove valid instructions and hook dispatch; absent harnesses receive zero writes. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R009.1 Preserve hosted protocols and task authority Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Preserve hosted protocols and task authority.** Model: The original parent remains the complete contract. Behavior: Retain HTTP and all original A2A protocol migration, task-lifecycle and externally owned ACP obligations. Add no broker or task store. Wiring: Keep the original route and task-lifecycle tests plus the ACP source census. Refusal: New child evidence cannot replace any original acceptance obligation. Evidence: Retain the original parent receipts and require its complete acceptance. | The complete original R009 acceptance remains required alongside terminal start and log acceptance. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R010.7 Select terminal web or combined start Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Select terminal web or combined start.** Model: `HostLaunchRequest` carries schema version, workspace, interface selection and log-view preference. Behavior: `--terminal` selects terminal mode; `--web` selects web mode; both select both. Keep existing behavior when neither appears. Wiring: Extend `agent_host/__init__.py:192` and the owning start parser; a public terminal-client adapter is a prerequisite. Refusal: Unknown modes, missing requested clients and invalid workspace bindings refuse before host startup. No `--cli` alias is introduced. Evidence: Record selected interfaces, host instance, workspace binding and actual client readiness. Additional binding: Resolve the effective web_logs boolean before the authenticated R009.5 handoff to run_host_terminal and HostLogReader.read under TUI-RUNTIME-R002.2 through R002.4. Bind host, workspace, tenant and principal. Disabled logs and every web-only case make zero TUI reads without disabling the host sink. Missing runtime preference binding cannot claim log readiness. | Start terminal, web and both through the real command. Observe the requested clients only; missing terminal support yields a typed refusal. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R009.2 Run terminal-mode HTTP in a supervised background thread Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Run terminal-mode HTTP in a supervised background thread.** Model: `HostLaunchReceipt` binds host instance, checked session, HTTP endpoint and selected client interfaces. Behavior: Terminal mode keeps HTTP serving in a background thread while the terminal client owns foreground interaction. Wiring: Reuse `CoServiceSupervisor.start_service` and `run_web_ui`; adapt `create_agent_server` instead of creating another host lifecycle. Refusal: Failed binding, absent authority or duplicate host identity refuses startup; never start another engine or multiplexer. Evidence: Record thread identity, readiness probe and the single shared authority identity. | During foreground terminal interaction, probe real HTTP and observe a distinct serving thread with exactly one engine authority. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R009.3 Project scoped workspace logs Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Project scoped workspace logs.** Model: `HostLogRecord` binds host, workspace, tenant, request, sequence, timestamp, severity and redacted message. Behavior: Write host logs to `agent_data/logs/server.log` below the authorized workspace. Keep terminal rendering and stdio protocol output clean. Wiring: Attach bounded logging before the background service starts. Pass only tenant-exclusive descriptor contents or an authenticated tenant-filtered stream/reference to the terminal adapter. Never expose a shared log descriptor. Refusal: Path escape, another tenant, unsafe file ownership and unreadable required logging destinations refuse without leaking records. Evidence: Record safe log-reference identity, rotation generation and delivery gaps; never credentials or raw request bodies. | Serve a request and read its correlated record from the workspace log. Two tenants sharing one workspace receive only their own records. Forged references and shared descriptors refuse; injected secrets remain absent. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R009.4 Bound log delivery and shutdown Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Bound log delivery and shutdown.** Model: Log references include generation and sequence; start receipts include lifecycle ownership. Behavior: Rotate bounded files, report overwritten ranges, drain on exit and stop only resources owned by this start. Wiring: Extend `CoServiceSupervisor` shutdown and the existing HTTP stop event; keep one MCP owner loop. Refusal: A stalled reader cannot block serving. Missing retained history returns an explicit gap instead of fabricated continuity. Evidence: Record last retained sequence, stopped thread identity and surviving reused-resource identity. | Overflow a bounded fixture, reconnect its reader, and require a gap. Terminal exit stops the owned HTTP thread and preserves reused services. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R009.5 Publish the terminal log-consumer handoff Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Publish the terminal log-consumer handoff.** Model: `HostLaunchReceipt` carries the authorized log reference, endpoint and workspace binding for one terminal client. Behavior: The terminal client must combine agent interaction and host log viewing through its public interface. Wiring: Require an exact agent-terminal-ui owning requirement and adapter before claiming the complete user journey. Refusal: Unavailable client rendering refuses the requested capability; a host log file alone cannot establish unified terminal viewing. Evidence: Bind host records to actual client observations without implementing terminal widgets in GraphOS. Additional binding: Require the authenticated effective HostLaunchReceipt.web_logs boolean, bound to host, workspace, tenant, principal and session with generation and expiry. Wire agent_terminal_ui.app.run_host_terminal and agent_terminal_ui.client.HostLogReader.read under TUI-RUNTIME-R002.2 through R002.5. Missing runtime fields or consumer exports remain prerequisites; invalid or disabled handoffs cause zero reads while preserving agent interaction and the required redacted sink. | A real terminal client shows a correlated HTTP request log during an interaction. Missing client support leaves this journey unfulfilled. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R009.6 Prove start and logs through real processes Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Prove start and logs through real processes.** Model: A disposable workspace and controlled terminal client observe host processes, threads and logs. Behavior: Exercise each selected interface, HTTP request, log rotation, restart and clean termination. Wiring: Proposed `tests/host/test_terminal_host_served.py` invokes the real agent host and its public client adapter. Refusal: Missing client contracts or successful helper calls do not establish the complete served journey. Evidence: Record actual endpoint responses, thread IDs, workspace digests, log sequences and engine start counts. Additional binding: Enter run_host_terminal and HostLogReader.read under TUI-RUNTIME-R002.6. Exercise terminal, web and both with authenticated web_logs true and false. Only terminal/both with true may read. Missing preference, reader or authority and changed scope cause zero reads; agent interaction and the required host sink remain available. Bind producer and consumer revisions in future evidence. | Combined mode serves HTTP while the terminal receives scoped logs. Denied workspace and missing client cases have zero unauthorized starts. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R006.1 Preserve the sole multiplexer owner Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Preserve the sole multiplexer owner.** Model: The original parent remains the complete contract. Behavior: Retain every original R006 ownership clause, including all additional hosted modules and the absence of duplicate multiplexers. Wiring: Reuse the original package-layout test and the single serving lifecycle. Refusal: New child evidence cannot replace any original acceptance obligation. Evidence: Retain the original parent receipts and require its complete acceptance. | The original full module census passes; transport conformance alone cannot establish module ownership. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R006.2 Use one standard transport scaffold Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Use one standard transport scaffold.** Model: `HostTransportConfiguration` declares stdio or streamable HTTP with explicit host, port and security settings. Behavior: Serve both modes through the same GraphOS entrypoint and one multiplexer; reject unsupported arguments consistently. Wiring: Reuse `mcp_server/server.py:164` and `runtime._build_server:2208`; retire private factory coupling under existing R007 obligations. Refusal: Invalid transport or missing required network identity refuses before serving. Diagnostic output never corrupts stdio frames. Evidence: Record transport, schema generation, registered tool digest and one multiplexer instance. | A real MCP client initializes both modes and calls one admitted operation. Malformed options and unauthorized HTTP requests refuse. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R023.1 Preserve the entire intent surface Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Preserve the entire intent surface.** Model: The original parent remains the complete contract. Behavior: Keep all eight original tools, ranking tie-breaks, fleet discovery and calls, fallback behavior and public registrar ownership. Wiring: Reuse the original FastMCP parity, invoke-policy and natural-language fallback acceptance. Refusal: New child evidence cannot replace any original acceptance obligation. Evidence: Retain the original parent receipts and require its complete acceptance. | All original R023 cases remain required, including the unmatched-operation fallback and registry ownership boundaries. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-HOST-R023.2 Prove transport parity on the served surface Definition — GRAPHOS-HOST / GRAPHOS-HOST — GraphOS host composition and ownership boundaryCanonical requirement and verification source**Prove transport parity on the served surface.** Model: The same registry generation binds both transport sessions and their tool schemas. Behavior: Compare normalized tool names and schemas, then dispatch through the existing invocation pipeline. Wiring: Use the real `graph_os.api.mcp` registration from the production server for both clients. Refusal: A missing intent tool, divergent schema or bypassed policy fails conformance. Evidence: Record both served catalogs and positive and negative invocation receipts. | Both transports expose the same eight tools. Each permits one scoped call and refuses an unauthorized call before downstream effects. | requirement | GRAPHOS-HOST | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS GRAPHOS-OPS — Hosted API and intent operations | spec | None | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R001 Native MCP/REST facade with A2A unary operations then streaming Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Native MCP/REST facade with A2A unary operations then streaming.** GraphOS provides a native MCP and REST host. It fronts the engine and agent-utilities services. It first exposes unary A2A operations: card, send, get, list, and cancel. It then adds durable streaming to those same handlers. | Integration tests exercise the A2A unary endpoints against a fixture engine, followed by a separate test proving durable streaming delivery. | requirement | GRAPHOS-OPS | LANDED | deb2b45bf83d |
| GRAPHOS-OPS-R002 Scoped A2A task routing and fleet tool exposure Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Scoped A2A task routing and fleet tool exposure.** GraphOS routes inbound A2A tasks to the correct operation handler and exposes, through its assembled multiplexer, only the caller-authorized subset of fleet tools, including typed work-item retrieval and listing bound by control leases and read classifications. | Integration tests assert inbound A2A tasks resolve to the correct handler and that multiplexer tool listings are filtered per caller. | requirement | GRAPHOS-OPS | LANDED | 20f773df9ddd |
| GRAPHOS-OPS-R003 Remove multiplexer skill/prompt harvest path Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Remove multiplexer skill/prompt harvest path.** GraphOS removes the multiplexer's legacy skill and prompt harvesting and static hydration code path. GraphOS sources skills and prompts only through the fleet discovery surface. | A regression test confirms the retired harvest module is absent and unimportable at runtime. | requirement | GRAPHOS-OPS | VERIFIED | deb2b45bf83d tests/fleet/test_no_duplicate_skill_prompt_harvest.py:59 |
| GRAPHOS-OPS-R004 FastMCP 4 bridge for the MCP server Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**FastMCP 4 bridge for the MCP server.** The GraphOS MCP bridge declares and runs on FastMCP 4. It provides native WebMCP support and a single consolidated event loop. Its own probes already exercise this version. | A semantic test suite plus a live probe confirm the deployed bridge reports FastMCP 4. | requirement | GRAPHOS-OPS | VERIFIED | a7947166d00a b5bf4ba58902 tests/deployment/test_release_canary.py:63 tests/deployment/test_release_canary.py:94 |
| GRAPHOS-OPS-R005 Stable auth error codes from the engine contract Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Stable auth error codes from the engine contract.** GraphOS consumes the engine's packaged error-code contract. This includes the stable AUTH_TENANT_MISMATCH, AUTH_AUDIENCE_MISMATCH, and AUTH_POLICY_VERSION_MISMATCH codes. GraphOS refuses to start if the installed contract is missing or inconsistent with its generated bindings. | A contract test fails closed when the packaged engine error contract is absent or mismatched against the generated bindings. | requirement | GRAPHOS-OPS | VERIFIED | 100d015ca012 b5bf4ba58902 tests/api/test_contract_admission.py:120 tests/api/test_contract_admission.py:70 tests/api/test_errors.py:285 |
| GRAPHOS-OPS-R006 Consume the engine's packaged wire-callable contract Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Consume the engine's packaged wire-callable contract.** GraphOS reads the installed engine package's contract files for methods, errors, scopes, and JSON schemas. It binds operations only for engine methods marked wire-callable in that contract. | A package-contract test confirms the generated registry excludes any method not marked wire-callable in the installed engine contract. | requirement | GRAPHOS-OPS | VERIFIED | 100d015ca012 97061e59c412 tests/api/test_eg_binding.py:190 |
| GRAPHOS-OPS-R007 Immutable operation registry with digest and authorization Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Immutable operation registry with digest and authorization.** GraphOS defines one immutable OpSpec registry with typed enums for verb, surface, effect, and scope, producing a canonical form and a stable SHA-256 registry digest, and evaluates per-call authorization at find time. | Unit tests in tests/api/test_registry.py cover canonical-form stability, digest reproducibility, and authorized-evaluation outcomes. | requirement | GRAPHOS-OPS | VERIFIED | 4b83c69e2b41 97061e59c412 tests/api/test_api_registry.py:110 tests/api/test_api_registry.py:63 |
| GRAPHOS-OPS-R008 Generated engine-bound operations with exclusions Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Generated engine-bound operations with exclusions.** GraphOS generates one registry operation per wire-callable engine method through its engine-binding generator, skipping only methods listed in its exclusions file with a recorded replacement or internal-only reason. | Unit tests in tests/api/test_eg_binding.py assert full wire-callable method coverage minus the documented exclusions. | requirement | GRAPHOS-OPS | VERIFIED | 4b83c69e2b41 97061e59c412 tests/api/test_eg_binding.py:133 tests/api/test_eg_binding.py:88 |
| GRAPHOS-OPS-R009 Single invoke pipeline for authority, effect, and audit Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Single invoke pipeline for authority, effect, and audit.** GraphOS funnels every MCP, HTTP, A2A, and fleet call through one invoke pipeline that enforces surface, principal rule, exact scopes, policy, and subject-read checks in order, executes service-bound operations through a dedicated executor, gates destructive effects behind a single-use plan reference bound to the operation and policy revision, and requires console step-up with fresh authentication before admin or human-approval effects complete. | Integration tests exercise allow, deny, plan-expiry, and step-up paths through the invoke pipeline. | requirement | GRAPHOS-OPS | VERIFIED | 97061e59c412 deb2b45bf83d tests/api/test_invoke_contract.py:238 tests/api/test_invoke_governance.py:193 tests/api/test_invoke_governance.py:250 tests/api/test_invoke_governance.py:87 |
| GRAPHOS-OPS-R010 Closed error enum and one response envelope Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Closed error enum and one response envelope.** GraphOS defines a closed error-code enum, including UNAUTHENTICATED, UNKNOWN_OP, SCOPE_REQUIRED, and POLICY_DENIED, with a generated engine-error mapping. It converts every surface's response through one shared to_envelope function. | Unit tests check envelope shape and error-code mapping, and a generator diff check compares output against the packaged engine contract. | requirement | GRAPHOS-OPS | LANDED | 4b83c69e2b41 |
| GRAPHOS-OPS-R011 Six resident MCP verbs with typed discovery Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Six resident MCP verbs with typed discovery.** GraphOS implements the six resident MCP verbs (find, ask, why, write, act, manage) through a shared verb constructor with typed input schemas, exposes registry entries as graphos:// resources, and includes the registry digest in the server's published instructions. | Unit tests in tests/api/test_mcp_verbs.py cover verb schema validation, resource listing, and digest presence. | requirement | GRAPHOS-OPS | LANDED | 6b63aeb7ba03 ea736715b7fb |
| GRAPHOS-OPS-R012 Bounded resolver for natural-language operation lookup Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Bounded resolver for natural-language operation lookup.** GraphOS resolves natural-language and partial queries to registry operations using combined lexical and semantic ranking over generated descriptors, a tenant- and policy-partitioned outcome moving average, and a bounded result cache, falling any unmatched ask call back to a read-only natural-language query preview rather than a direct mutation. | Unit tests in tests/api/test_resolve.py cover ranking order, cache bounds, and the preview-only fallback behavior. | requirement | GRAPHOS-OPS | VERIFIED | 43db6b7ac49b deb2b45bf83d tests/api/test_resolve.py:101 tests/api/test_resolve.py:40 tests/api/test_resolve.py:52 tests/api/test_resolve.py:62 tests/api/test_resolve.py:71 |
| GRAPHOS-OPS-R013 Generated HTTP API for every registry operation Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Generated HTTP API for every registry operation.** GraphOS exposes each registry operation at POST /api/v1/ops/{op_id}. It also exposes generated resource routes on a dedicated sub-application. The sub-application has an authentication dependency and CSRF protection for cookie sessions. It also has cursor pagination, idempotency-key handling, and discovery endpoints for the registry and OpenAPI document. | Integration tests in tests/api/test_http_*.py cover routing, authentication, CSRF enforcement, and pagination and idempotency behavior. | requirement | GRAPHOS-OPS | VERIFIED | 1fb96633563e a974d10c5d0c ea736715b7fb tests/api/test_http_projection.py:188 tests/api/test_http_projection.py:288 tests/api/test_http_projection.py:326 tests/api/test_http_projection.py:91 |
| GRAPHOS-OPS-R014 Identity self-service and admin operations Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Identity self-service and admin operations.** GraphOS exposes identity operations covering self-service, admin management of users, sessions, API keys, service accounts, roles, and groups, identity-provider configuration with dry-run, policy and mode transitions, issuer rotation, audit export and verification, and SCIM client management, requiring identity:admin scope and fresh console step-up for mutations. | Integration tests exercise each identity operation and confirm scope and step-up enforcement on admin mutations. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R015 Access elevation, approval, and lease operations Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Access elevation, approval, and lease operations.** GraphOS exposes access operations for elevation requests, approval and denial, lease listing, authorization checks, and policy explanation. One consolidated access service governs these operations. Every surface receives identical outcomes. The service enforces a no-self-approval rule. | Integration tests confirm consistent allow/deny outcomes across surfaces and reject a self-approval attempt. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R016 Capacity status and throttle mode operations Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Capacity status and throttle mode operations.** GraphOS exposes capacity status, cell update, and throttle status/mode operations backed by a read/config facade over the capacity controller, restricting throttle mode changes to the bounded observe/enforce enum under admin scope. | Integration tests confirm capacity reads match the underlying capacity cell and that a denied update leaves throttle state unchanged. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R017 Finance and markets operations with tenant isolation Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Finance and markets operations with tenant isolation.** GraphOS exposes finance and markets operations, executing market reads server-side through the service executor under the finance:read scope, and gating position and paper-trading actions behind caller and subject ownership checks so no caller can see another tenant's account data. Delivered as the rollup of `GRAPHOS-OPS-R017.1` through `GRAPHOS-OPS-R017.2`. | Integration tests, including a negative cross-tenant case, confirm market reads and paper/position actions respect per-caller account binding. | requirement | GRAPHOS-OPS | LANDED | No recorded commit/test evidence |
| GRAPHOS-OPS-R017.1 Tenant-scoped market reads under finance:read Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Tenant-scoped market reads under finance:read.** GraphOS executes market reads server-side through the service executor under the finance:read scope, refusing with zero provider calls on a missing or mismatched tenant/account binding. | Tests confirm a matching binding reaches the provider and a missing or cross-tenant binding refuses before any provider call. | requirement | GRAPHOS-OPS | VERIFIED | 64a0c091b354 tests/finance/test_markets.py:34 tests/finance/test_markets.py:68 |
| GRAPHOS-OPS-R017.2 Position and paper-trading actions with subject ownership checks Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Position and paper-trading actions with subject ownership checks.** GraphOS gates position and paper-trading actions behind caller and subject ownership checks. The engine's subject-ownership contract supplies those checks. No caller can act on another tenant's account. Blocked on the epistemic-graph v2.28 subject-ownership contract (not yet pinnable; current pin is `epistemic-graph>=2.27.0,<3.0.0`). | An integration test confirms paper/position actions respect per-caller subject ownership once the v2.28 contract is pinned. It includes a negative cross-tenant case. | requirement | GRAPHOS-OPS | LANDED | 64a0c091b354 |
| GRAPHOS-OPS-R018 Query, search, ontology, and analytics operations Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Query, search, ontology, and analytics operations.** GraphOS exposes query (uql, sparql, sql, sql_schema), search, indexes, ontology, and analytics.series operations. They execute caller-bound engine queries without a separate local ontology store or SQL string interpolation. Delivered as the rollup of `GRAPHOS-OPS-R018.1` through `GRAPHOS-OPS-R018.2`. | Integration tests confirm each query/search/ontology/analytics operation reaches the engine and honors tenant and budget limits. | requirement | GRAPHOS-OPS | LANDED | No recorded commit/test evidence |
| GRAPHOS-OPS-R018.1 Sparql, sql_schema, and ontology operations Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Sparql, sql_schema, and ontology operations.** GraphOS exposes SPARQL and sql_schema query routes. It also exposes ontology operations. These cover value/property types, interfaces, schema graph/summary, lint, generate, validate, load, export, and catalogue. The routes use the engine. They require neither a separate local ontology store nor SQL string interpolation. | Tests confirm the sparql and sql_schema routes and the ontology operation surface reach the engine. | requirement | GRAPHOS-OPS | LANDED | 64a0c091b354 |
| GRAPHOS-OPS-R018.2 Uql, sql, search, indexes, and analytics.series operations Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Uql, sql, search, indexes, and analytics.series operations.** GraphOS exposes uql and sql query operations, search, indexes, and analytics.series operations. They execute caller-bound engine queries and honor tenant and budget limits. | Integration tests confirm each operation reaches the engine and honors tenant and budget limits. | requirement | GRAPHOS-OPS | LANDED | 64a0c091b354 |
| GRAPHOS-OPS-R019 Federation source registration and sharing operations Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Federation source registration and sharing operations.** GraphOS exposes federation.sources operations for register, list, get, share, unshare, and probe. Registration and sharing are governed writes. Probe results redact credentials. Delivered as the rollup of `GRAPHOS-OPS-R019.1` through `GRAPHOS-OPS-R019.2`. | Integration tests confirm only the owner and grantees see a shared source. They confirm revocation blocks a subsequent probe. | requirement | GRAPHOS-OPS | LANDED | No recorded commit/test evidence |
| GRAPHOS-OPS-R019.1 Federation source register, list, get, and probe Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Federation source register, list, get, and probe.** GraphOS exposes federation.sources register, list, get, and probe. Registration is a governed write. Probe results redact credentials. | Integration tests confirm registration is a governed write and that probe results redact credentials. | requirement | GRAPHOS-OPS | LANDED | 64a0c091b354 |
| GRAPHOS-OPS-R019.2 Federation source share and unshare Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Federation source share and unshare.** GraphOS exposes federation.sources share and unshare as governed writes. Only the owner and grantees can see a shared source. Revoking access blocks the next probe. | Integration tests confirm only the owner and grantees see a shared source. They confirm revocation blocks a subsequent probe. | requirement | GRAPHOS-OPS | LANDED | 64a0c091b354 |
| GRAPHOS-OPS-R020 Ingest operations through a typed SDK runner facade Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Ingest operations through a typed SDK runner facade.** GraphOS exposes ingest operations for repository indexing, source sync, pack and job management, drift listing and repair with approval, and embedding admission and re-embedding, calling the ingestion SDK only through a typed runner facade and returning a typed UNAVAILABLE error when that runner is not composed. Delivered as the rollup of `GRAPHOS-OPS-R020.1` through `GRAPHOS-OPS-R020.5`. | Integration tests confirm sync returns a durable job receipt and that an absent runner fails closed with UNAVAILABLE. | requirement | GRAPHOS-OPS | LANDED | e990e195ab42 |
| GRAPHOS-OPS-R020.1 Typed ingest runner port and the source-sync entry point Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Typed ingest runner port and the source-sync entry point.** GraphOS defines one typed port for all ingestion SDK calls. It exposes ingest.sources.sync. If no runner is composed, it fails closed with UNAVAILABLE. | A test proves a durable job receipt on success and a typed UNAVAILABLE refusal when the runner is absent. | requirement | GRAPHOS-OPS | VERIFIED | 4b69b27f1d76 5ffd23ca7883 822f55d5835d a974d10c5d0c cc90ee37583f tests/api/test_ingest_ops.py:116 tests/api/test_ingest_ops.py:97 |
| GRAPHOS-OPS-R020.2 Repository indexing and source inventory operations Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Repository indexing and source inventory operations.** GraphOS exposes `ingest.repositories.index` and `ingest.sources.{list,status}` through the same typed runner port. | Integration tests confirm each operation reaches the runner and fails closed with `UNAVAILABLE` when the runner is absent. | requirement | GRAPHOS-OPS | VERIFIED | 4b69b27f1d76 5ffd23ca7883 822f55d5835d a974d10c5d0c cc90ee37583f tests/api/test_ingest_ops.py:138 tests/api/test_ingest_ops.py:154 tests/api/test_ingest_ops.py:168 tests/api/test_ingest_ops.py:181 tests/api/test_ingest_ops.py:191 |
| GRAPHOS-OPS-R020.3 Pack and job management operations Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Pack and job management operations.** GraphOS exposes `ingest.packs.*` and `ingest.jobs.*` through the same typed runner port. | Integration tests confirm pack and job operations reach the runner and report durable job state. | requirement | GRAPHOS-OPS | VERIFIED | 822f55d5835d |
| GRAPHOS-OPS-R020.3.1 Missing ingest.packs.* and ingest.jobs.* ops Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Missing ingest.packs.* and ingest.jobs.* ops.** This row rolls up GRAPHOS-OPS-R020.3.1.1 through GRAPHOS-OPS-R020.3.1.2. No ingest.packs.* or ingest.jobs.* operation exists through the typed runner port. | Integration tests confirm ingest.packs.* and ingest.jobs.* reach the runner and report durable job state. They also confirm UNAVAILABLE when the runner is absent. | requirement | GRAPHOS-OPS | VERIFIED | 16c9b2bddda3 |
| GRAPHOS-OPS-R020.3.1.1 `ingest.packs.list` op Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**`ingest.packs.list` op.** GraphOS exposes `ingest.packs.list` as a read operation through the typed ingest runner port, listing this tenant's ingestion packs. | Tests confirm the operation reaches the runner with the caller's tenant and declares the existing `ingest:read` scope. They also require fail-closed `UNAVAILABLE` when the runner is absent. | requirement | GRAPHOS-OPS | VERIFIED | 16c9b2bddda3 tests/api/test_ingest_ops.py:228 tests/api/test_ingest_ops.py:240 tests/api/test_ingest_ops.py:249 |
| GRAPHOS-OPS-R020.3.1.2 `ingest.jobs.status` op Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**`ingest.jobs.status` op.** GraphOS exposes `ingest.jobs.status` as a read operation through the typed ingest runner port, reporting one durable job's state. Depends on `GRAPHOS-OPS-R020.3.1.1` for the shared pack/job port conventions. | Tests confirm the op reaches the runner, reports durable job state, declares `ingest:read`, and fails closed with `UNAVAILABLE` when the runner is absent. | requirement | GRAPHOS-OPS | VERIFIED | 634a344fade7 tests/api/test_ingest_ops.py:256 tests/api/test_ingest_ops.py:266 tests/api/test_ingest_ops.py:275 |
| GRAPHOS-OPS-R020.4 Drift listing and repair-with-approval operations Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Drift listing and repair-with-approval operations.** GraphOS exposes `ingest.drift.{list,get,repair_propose,repair_approve}`, gating repair behind an approval reference. | Integration tests confirm drift repair previews and audits its effect before applying it. | requirement | GRAPHOS-OPS | LANDED | 822f55d5835d |
| GRAPHOS-OPS-R020.5 Embedding admission and re-embedding operations Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Embedding admission and re-embedding operations.** GraphOS exposes `ingest.embedding.{admit,reembed}` through the same typed runner port. | Integration tests confirm embedding operations reach the runner and report durable job state. | requirement | GRAPHOS-OPS | LANDED | 822f55d5835d |
| GRAPHOS-OPS-R021 Decision, retrieval, and policy operations Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Decision, retrieval, and policy operations.** GraphOS exposes decide, retrieval, context, freshness, policy, and swarm read operations while restricting decision-commit actions to the service executor, so no caller can materialize an agent decision using only a human-scoped token. | Integration tests confirm decision commits are service-only and that provenance is attached to each result. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R021.1 Decide operations (service-executed) — decide slice Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Decide operations (service-executed) — decide slice.** Implements the decide portion of `GRAPHOS-OPS-R021`: `decide.*` operations that evaluate and commit agent decisions, routing the commit path through the service executor only (never the caller-bound path) and attaching provenance to each result. | A test confirms a human-scoped caller cannot invoke the commit path directly and that every decide result carries provenance. | requirement | GRAPHOS-OPS | LANDED | 1ded59edd1a6 |
| GRAPHOS-OPS-R021.2 Retrieval, context, and freshness read operations — retrieval slice Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Retrieval, context, and freshness read operations — retrieval slice.** Delivered as the rollup of `GRAPHOS-OPS-R021.2.1` through `GRAPHOS-OPS-R021.2.2`. Implements the retrieval portion of `GRAPHOS-OPS-R021`: `retrieval.*` read operations, including context-budgeted retrieval and freshness checks. These execute caller-bound engine queries without a local cache substitute. | A test confirms a retrieval call reaches the engine under the caller's own authority and respects a context budget. | requirement | GRAPHOS-OPS | VERIFIED | e78a5e5b701e |
| GRAPHOS-OPS-R021.2.1 `retrieval.search` op Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**`retrieval.search` op.** GraphOS exposes `retrieval.search` as a read operation through a typed retriever port. It returns context-budgeted hits under the caller's own tenant. It fails closed with `UNAVAILABLE` when the port is not composed. | Tests confirm the op reaches the retriever with the caller's tenant and truncates hits to the context budget. They verify the existing `memory:read` scope and a closed failure with `UNAVAILABLE` when the retriever is absent. | requirement | GRAPHOS-OPS | VERIFIED | e78a5e5b701e tests/api/test_retrieval_ops.py:43 tests/api/test_retrieval_ops.py:58 |
| GRAPHOS-OPS-R021.2.2 `retrieval.freshness` op Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**`retrieval.freshness` op.** GraphOS exposes `retrieval.freshness` as a read operation through the same typed retriever port. It reports freshness of the caller's retrieval sources. Depends on `GRAPHOS-OPS-R021.2.1` for the shared retriever port. | Tests confirm the op reaches the retriever with the caller's tenant and is read-only. They verify a closed failure with `UNAVAILABLE` when the retriever is absent. | requirement | GRAPHOS-OPS | VERIFIED | f6f2177ab1e0 tests/api/test_retrieval_ops.py:68 tests/api/test_retrieval_ops.py:81 |
| GRAPHOS-OPS-R021.3 Policy and swarm read operations — policy slice Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Policy and swarm read operations — policy slice.** Implements the policy portion of `GRAPHOS-OPS-R021`: `policy.*` and `swarm.*` read operations surfacing the active policy state and swarm topology to an authorized caller. | A test confirms policy and swarm reads are caller-scoped and read-only. | requirement | GRAPHOS-OPS | LANDED | cc90ee37583f |
| GRAPHOS-OPS-R021.4 Run read operations — runs slice Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Run read operations — runs slice.** Delivered as the rollup of `GRAPHOS-OPS-R021.4.1` through `GRAPHOS-OPS-R021.4.6`. Implements the run-observation portion of `GRAPHOS-OPS-R021`: the `runs.metrics` and `runs.get` read operations. They read the engine under the caller's own authority and hold no local aggregate. | A test confirms both operations reach the engine reader with the caller's tenant. They fail closed with `UNAVAILABLE` when the reader is absent. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R021.4.1 RunTraceReader port Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**RunTraceReader port.** Model: `RunTraceReader` in `graph_os/api/ops/runs.py` (planned). Behavior: The existing service binding must expose typed asynchronous `get` and `metrics` reads. Wiring: The invoke pipeline must pass verified caller authority to both methods. Refusal: An absent reader must return `UNAVAILABLE` before dispatch. | Evidence: planned `tests/api/test_runs_ops.py::test_run_trace_reader_is_runtime_checkable_protocol` plus the served cases in test-spec.md. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R021.4.2 Engine adapter Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Engine adapter.** Model: Validated trace and decision projections under `EG-ORCH-VOCAB-R009.15` through `.17`. Behavior: The adapter must preserve engine values and caller scope through published engine client reads. Wiring: The composition root must bind the adapter to `run_trace_reader`. Refusal: Missing wire methods must return `UNAVAILABLE`; another tenant must read as absent. | Evidence: planned `tests/api/test_runs_ops.py::test_adapter_calls_engine_wire_method` plus the served cases in test-spec.md. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R021.4.3 Aggregate models Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Aggregate models.** Model: `RunMetricsParams` and `RunMetricsOutcome` in `graph_os/api/ops/runs.py` (planned). Behavior: Metrics must preserve each engine query grouping and zero-solved abstention. Wiring: The operation must validate the engine outcome before returning it. Refusal: Unknown fields, negative costs, invalid windows and non-finite numbers must refuse. | Evidence: planned `tests/api/test_runs_ops.py::test_run_metrics_models_reject_unknown_fields` plus the served cases in test-spec.md. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R021.4.4 Aggregate operation Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Aggregate operation.** Model: Separate query results defined by `EG-ORCH-VOCAB-R010.1` through `.5`. Behavior: `runs.metrics` must return engine aggregates without local arithmetic. Wiring: `handle_runs_metrics` must use `build_read_op`, verb `ASK`, and existing `telemetry:read`. Refusal: Denied scope must prevent engine dispatch; zero solved tasks must not produce zero cost. | Evidence: planned `tests/api/test_runs_ops.py::test_runs_metrics_passes_engine_values_through` plus the served cases in test-spec.md. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R021.4.5 Per-run operation Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Per-run operation.** Model: `RunSummary` in `graph_os/api/ops/runs.py` (planned), selected by `run_id`. Behavior: `runs.get` must return the field projection and snapshot contract below. Wiring: `handle_runs_get` must use `build_read_op` and existing `kg:read`. Refusal: Unknown runs and other tenants must be indistinguishable; missing fields must remain unavailable. | Evidence: planned `tests/api/test_runs_ops.py::test_runs_get_returns_termination_context_and_applied_config` plus the served cases in test-spec.md. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R021.4.6 Registration and served proof Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Registration and served proof.** Model: Registry, OpenAPI and client artifacts generated under `GRAPHOS-OPS-R025`. Behavior: REST and MCP must reach the same reader through the registered operation pipeline. Wiring: `graph_os/api/ops/registry_factory.py` must list `runs`; the host must bind its reader. Refusal: Unsupported operations and denied callers must produce typed refusals without engine calls. | Evidence: planned `tests/api/test_runs_ops.py::test_runs_ops_registered_with_existing_scopes` plus the served cases in test-spec.md. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R022 Work and evolution loop operations Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Work and evolution loop operations.** GraphOS exposes work-item and offer operations plus evolution loop, schedule, and proposal operations, with its daemon acting only as a status/run/pause facade while durable loop state remains owned by the underlying service. | Integration tests confirm run/pause requires the loops:control scope, reads require loops:read, and a repeated run stays idempotent. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R022.1 Work-item and offer operations — work slice Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Work-item and offer operations — work slice.** Implements the work slice of GRAPHOS-OPS-R022. It exposes work.* operations for work-item and offer reads and writes. The same control leases bind them as fleet-facing listings. | A test confirms a work-item write requires the declared scope and that offers are visible only to their bound principal. | requirement | GRAPHOS-OPS | LANDED | c4cc3e21b439 |
| GRAPHOS-OPS-R022.2 Evolution loop, schedule, and proposal operations — evolution slice Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Evolution loop, schedule, and proposal operations — evolution slice.** Implements the evolution slice of GRAPHOS-OPS-R022. It exposes evolution.* operations for loop status/run/pause, schedules, and proposals. The daemon is only a facade. The owner service retains durable loop state. | A test confirms run/pause requires the `loops:control` scope, reads require `loops:read`, and a repeated run stays idempotent. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R022.2.1 evolution.loops.status operation Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**evolution.loops.status operation.** GraphOS exposes evolution.loops.status as a read through a typed evolution runner port. It reports one loop's state. The owner service retains durable loop state. This is a child of GRAPHOS-OPS-R022.2 and rolls up .1 through .5. **Blocked:** The engine scope registry in contract/scopes.json must register loops:read. The registry factory rejects unregistered scopes at graph_os/api/ops/registry_factory.py:72-76. Do not substitute work:read. | Tests confirm the op reaches the runner with the caller's tenant and declares loops:read. They also require fail-closed UNAVAILABLE when the runner is absent. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R022.2.2 `evolution.schedules.list` op Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**`evolution.schedules.list` op.** Read operation listing this tenant's loop schedules through the evolution runner port. Depends on `GRAPHOS-OPS-R022.2.1` for the port. | Tests confirm the op reaches the runner with the caller's tenant and fails closed with `UNAVAILABLE`. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R022.2.3 `evolution.proposals.list` op Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**`evolution.proposals.list` op.** Read operation listing this tenant's evolution proposals through the evolution runner port. Depends on `GRAPHOS-OPS-R022.2.1`. | Tests confirm the op reaches the runner with the caller's tenant and fails closed with `UNAVAILABLE`. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R022.2.4 `evolution.loops.run` op Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**`evolution.loops.run` op.** Write operation requesting one loop run, idempotency-key required, requiring `loops:control`. Depends on `GRAPHOS-OPS-R022.2.1`; may need the engine scope registry (epistemic-graph). | Tests confirm `loops:control` is required and a repeated run with the same key stays idempotent. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R022.2.5 `evolution.loops.pause` op Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**`evolution.loops.pause` op.** Write operation pausing one loop, requiring `loops:control`. Depends on `GRAPHOS-OPS-R022.2.4`. | Tests confirm `loops:control` is required and the pause is idempotent. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R023 Agent, browser, RLM, and fleet call operations Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Agent, browser, RLM, and fleet call operations.** GraphOS exposes agent, A2A task, RLM, browser, and fleet operations, including fleet.call, deriving each loaded tool's effect classification from its annotation so every call still passes through the invoke pipeline rather than bypassing it. | Integration tests confirm every loaded fleet tool call reaches the invoke pipeline and no direct child dispatch bypasses it. | requirement | GRAPHOS-OPS | LANDED | e1d37ca10ef7 |
| GRAPHOS-OPS-R024 Telemetry, security, usage, and admin operations Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Telemetry, security, usage, and admin operations.** GraphOS exposes telemetry, security, operational (doctor, config, backup, restore, tenants), usage, memory, and graph operations, sourcing usage data from the engine and requiring destructive backup, restore, and tenant actions to pass console step-up with a durable audit record. | Integration tests confirm backup, restore, and tenant actions cannot complete from a plain confirmation and require step-up plus audit. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R024.1 Telemetry operations — telemetry slice Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Telemetry operations — telemetry slice.** Implements the telemetry portion of `GRAPHOS-OPS-R024`: `telemetry.*` operations bound to the engine's tenant-scoped telemetry method. | A test confirms a telemetry read is tenant-scoped and reaches the engine. | requirement | GRAPHOS-OPS | LANDED | 4b69b27f1d76 |
| GRAPHOS-OPS-R024.2 Security operations — security slice Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Security operations — security slice.** Implements the security portion of `GRAPHOS-OPS-R024`: `security.*` operations surfacing the current security posture to an authorized caller. | A test confirms a security read requires its declared scope. | requirement | GRAPHOS-OPS | LANDED | 4b69b27f1d76 |
| GRAPHOS-OPS-R024.3 Usage operations — usage slice Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Usage operations — usage slice.** Implements the usage portion of `GRAPHOS-OPS-R024`: `usage.*` operations sourcing usage data from the engine rather than a local counter. | A test confirms a usage read reaches the engine and reflects tenant-scoped data. | requirement | GRAPHOS-OPS | LANDED | 4b69b27f1d76 |
| GRAPHOS-OPS-R024.4 Memory operations — memory slice Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Memory operations — memory slice.** Implements the memory portion of `GRAPHOS-OPS-R024`: `memory.*` operations over the agent memory store, bound by the caller's own authority. | A test confirms a memory read/write is scoped to the caller's own tenant. | requirement | GRAPHOS-OPS | SPECIFIED | 5ffd23ca7883 8d1bc46ecbdb |
| GRAPHOS-OPS-R024.4.1 Versioned memory port Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Versioned memory port.** Model: the versioned memory contract in plan.md. Behavior: Reuse generated `EG-DURABLE-KERNEL-R085.1` requests and tagged outcomes through the existing memory service binding. Wiring: Extend `MemoryStore` in `graph_os/api/ops/memory.py`; preserve the existing generic read/write contract. Refusal: Unavailable generated methods must refuse without a local memory fallback. | Evidence: planned `tests/api/test_memory_files_served.py::test_models_and_port_preserve_tagged_outcomes`. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R024.4.2 Snapshot reads and listing Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Snapshot reads and listing.** Model: the versioned memory contract in plan.md. Behavior: Serve `memory.files.read` and `memory.files.list` through `ReadMemorySnapshot` and `ListMemorySnapshots`. Wiring: Extend `operations()` in `graph_os/api/ops/memory.py:90` using `EG-DURABLE-KERNEL-R085.2` and `.4`. Refusal: Expired or wrong-scope cursors must refuse; responses must reveal no hidden counts or identifiers. | Evidence: planned `tests/api/test_memory_files_served.py::test_read_list_preserve_scope_and_cursor`. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R024.4.3 Versioned saves and conflicts Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Versioned saves and conflicts.** Model: the versioned memory contract in plan.md. Behavior: Serve `memory.files.save` through `SyncMemorySnapshot` submit or resolve under `EG-DURABLE-KERNEL-R085.3`. Wiring: The existing service executor must forward the generated precondition, bytes, digest and request identity. Refusal: Stale authorized saves must retain both versions; refused saves must contain no accepted-head fields. | Evidence: planned `tests/api/test_memory_files_served.py::test_competing_saves_preserve_both_versions`. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R024.4.4 Hosted materialization Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Hosted materialization.** Model: the versioned memory contract in plan.md. Behavior: Write hosted projections and acknowledge the exact EG head and observation generation under `EG-DURABLE-KERNEL-R085.6`. Wiring: Bind the host materializer beside `build_operation_runtime` in `graph_os/api/invoke/bootstrap.py:167`. Refusal: Failed file writes must not acknowledge; delayed acknowledgments must not clear newer observations or conflicts. | Evidence: planned `tests/api/test_memory_files_served.py::test_materialization_ack_checks_generation`. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R024.4.5 Authority and replay Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Authority and replay.** Model: the versioned memory contract in plan.md. Behavior: Use `GRAPHOS-OPS-R009` and `GRAPHOS-OPS-R013` with `EG-DURABLE-KERNEL-R085.5` for every request and replay. Wiring: `invoke` in `graph_os/api/invoke/pipeline.py:810` must authorize before engine or hosted-file access. Refusal: Denied existing, absent and creation requests must be indistinguishable; changed-body replay must have no effects. | Evidence: planned `tests/api/test_memory_files_served.py::test_authority_and_replay_are_non_disclosing`. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R024.4.6 Registration and served proof Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Registration and served proof.** Model: the versioned memory contract in plan.md. Behavior: Register the three file operations and generate their schemas under `GRAPHOS-OPS-R025`. Wiring: `registry_factory.py` already registers memory; real HTTP and MCP calls must traverse invoke and durable EG dispatch. Refusal: Missing producer contracts must remain unavailable; no test may replace the host, gateway or engine transport. | Evidence: planned `tests/api/test_memory_files_served.py::test_complete_served_memory_file_journey`. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R024.5 Operational admin operations — admin slice Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Operational admin operations — admin slice.** Implements the operational-admin (doctor, config, backup, restore, tenants) portion of `GRAPHOS-OPS-R024`: `ops.*` operations requiring destructive backup, restore, and tenant actions to pass console step-up with a durable audit record. Graph, query, search, and ontology administration are out of scope for this slice; GraphOS's host-composition cutover lane owns them as `GRAPHOS-HOST-R026.x`. | A test confirms backup, restore, and tenant actions cannot complete from a plain confirmation and require step-up plus audit. | requirement | GRAPHOS-OPS | LANDED | 8d1bc46ecbdb |
| GRAPHOS-OPS-R025 Generated registry, OpenAPI, and client artifacts Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Generated registry, OpenAPI, and client artifacts.** GraphOS's generator script reads the packaged engine contract. It regenerates the operation registry, descriptors, OpenAPI document, engine-error module, and Python and TypeScript clients. Output is reproducible under its generated-artifact directories. | A generator diff/drift test confirms regenerated artifacts match the committed output for a pinned engine contract. | requirement | GRAPHOS-OPS | LANDED | 4b83c69e2b41 |
| GRAPHOS-OPS-R026 API surface and compatibility drift gates Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**API surface and compatibility drift gates.** GraphOS enforces its API-surface and backward-compatibility drift gates as pre-commit hooks, each backed by a dedicated test. | Unit tests for each drift gate confirm it fails when a corresponding drift is introduced, and the pre-commit hook runs them on every commit. | requirement | GRAPHOS-OPS | VERIFIED | 4b9d181069e4 |
| GRAPHOS-OPS-R026.1 API-surface drift gate — api-surface slice Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**API-surface drift gate — api-surface slice.** Implements the api-surface portion of `GRAPHOS-OPS-R026`: a pre-commit hook that fails when the generated registry's public surface (operation IDs, HTTP routes, and MCP verb set) changes without a corresponding reviewed baseline update. | A dedicated unit test confirms the gate fails when an operation is added, removed, or has its public shape changed without updating the checked baseline. | requirement | GRAPHOS-OPS | VERIFIED | 4b9d181069e4 tests/api/test_surface_drift_gate.py:22 tests/api/test_surface_drift_gate.py:31 tests/api/test_surface_drift_gate.py:41 tests/api/test_surface_drift_gate.py:50 tests/api/test_surface_drift_gate.py:67 |
| GRAPHOS-OPS-R026.2 Backward-compatibility drift gate — backward-compat slice Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Backward-compatibility drift gate — backward-compat slice.** Implements the backward-compat portion of `GRAPHOS-OPS-R026`: a pre-commit hook that fails when a previously published operation is removed or has a required field narrowed in an incompatible way. | A dedicated unit test confirms the gate fails when a previously published operation's compatible shape is broken. | requirement | GRAPHOS-OPS | VERIFIED | 4b9d181069e4 tests/api/test_backward_compat_drift_gate.py:42 tests/api/test_backward_compat_drift_gate.py:51 tests/api/test_backward_compat_drift_gate.py:60 tests/api/test_backward_compat_drift_gate.py:70 tests/api/test_backward_compat_drift_gate.py:79 |
| GRAPHOS-OPS-R027 Authority-parity test across principals and surfaces Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Authority-parity test across principals and surfaces.** GraphOS maintains an authority matrix fixture covering every principal kind, operation, and surface combination, and a parity test asserting the generated registry enforces identical allow/deny outcomes against it. | The authority-parity test suite runs against the authority matrix fixture and passes with no mismatches. | requirement | GRAPHOS-OPS | VERIFIED | 4b9d181069e4 tests/api/test_authority_parity.py:114 tests/api/test_authority_parity.py:120 |
| GRAPHOS-OPS-R028 Exported domain scope classes Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Exported domain scope classes.** GraphOS defines and exports its domain scope classes, including finance:read, fleet:read, fleet:control, loops:read, loops:control, ops:read, and ops:admin, for consumption by the engine's scope registry. | Unit tests confirm each exported scope triple matches its declared class and is consumed without duplication. | requirement | GRAPHOS-OPS | LANDED | 4b83c69e2b41 b47b39eac0ae |
| GRAPHOS-OPS-R029 Single resident-tool server cutover Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Single resident-tool server cutover.** GraphOS's server factory registers only the six resident MCP verbs plus find_tools, load_tools, unload_tools, and multiplexer_status. It mounts the generated /api/v1 sub-application and an explicit protocol-route table. The same change removes retired granular tool registrars, hand-written action-tool routes, and legacy fleet routes. | A boot/integration test checks the running server exposes exactly the resident tool set and mounted routes. It confirms retired modules are absent. | requirement | GRAPHOS-OPS | VERIFIED | 5bc24c262ef0 tests/api/test_resident_tool_surface.py:33 tests/api/test_resident_tool_surface.py:43 tests/api/test_resident_tool_surface.py:56 |
| GRAPHOS-OPS-R030 Accurate MCP server and API documentation Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Accurate MCP server and API documentation.** GraphOS keeps its MCP server, API, and status documentation accurate to the live six-verb MCP surface. It also documents the generated HTTP API. The docs replace outdated tool-count or endpoint descriptions. | A documentation-accuracy check confirms the documented verb and tool counts match the live registry. | requirement | GRAPHOS-OPS | VERIFIED | 5bc24c262ef0 tests/docs/test_mcp_server_doc_accuracy.py:24 tests/docs/test_mcp_server_doc_accuracy.py:38 |
| GRAPHOS-OPS-R031 Published tool-to-operation parity inventory Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Published tool-to-operation parity inventory.** GraphOS publishes a complete parity inventory mapping every former hosted intent verb and tool to its destination operation or a documented intentional drop, so that a consuming agent project can remove its legacy intent-tool definitions only once that inventory and its generated client are published. | A parity-inventory test confirms full coverage of former tool names against the published mapping. | requirement | GRAPHOS-OPS | VERIFIED | 5bc24c262ef0 |
| GRAPHOS-OPS-R031.1 Fleet meta-tool parity mapping — resident fleet slice Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Fleet meta-tool parity mapping — resident fleet slice.** Implements the resident-fleet-tool slice of `GRAPHOS-OPS-R031`: GraphOS publishes, in docs, the parity mapping from each of its four resident fleet meta-tools (`find_tools`, `load_tools`, `unload_tools`, `multiplexer_status`) to its destination operation. | A parity-inventory test confirms the published mapping's keys and values match the live `FLEET_OPERATIONS` registry exactly. | requirement | GRAPHOS-OPS | VERIFIED | 5bc24c262ef0 tests/api/test_fleet_tool_parity_inventory.py:33 tests/api/test_fleet_tool_parity_inventory.py:42 |
| GRAPHOS-OPS-R032 Identity dependency inversion via ports Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Identity dependency inversion via ports.** GraphOS's webui_host, webui_co_service, and mcp_server modules depend only on the Protocol and DTO definitions in graph_os.identity.ports, with the concrete identity runtime constructed once in the serving composition root and injected into each. | A static dependency-graph check confirms each module imports only graph_os.identity.ports and not the concrete identity implementation. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R032.1 Static identity-ports import boundary Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Static identity-ports import boundary.** GraphOS enforces, as a standing regression guard, that its webui_host and mcp_server modules import only graph_os.identity.ports and never the concrete identity runtime (graph_os.identity.engine or any other graph_os.identity submodule). | A static dependency-graph check over every module under graph_os/webui_host and graph_os/mcp_server confirms no import of a graph_os.identity submodule other than graph_os.identity.ports. | requirement | GRAPHOS-OPS | VERIFIED | b97b75e763ed tests/architecture/test_identity_ports_boundary.py:51 |
| GRAPHOS-OPS-R032.2 Injected composition root for identity ports Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Injected composition root for identity ports.** GraphOS constructs the concrete identity runtime once in the serving composition root. The root injects it into webui_host, webui_co_service, and mcp_server. It uses only graph_os.identity.ports Protocol and DTO types. | An integration test confirms each module receives its identity capability only via an injected graph_os.identity.ports object, never by importing the concrete runtime directly. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R032.2.1 Identity runtime constructor in the composition root Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Identity runtime constructor in the composition root.** GraphOS has one composition-root function that constructs the concrete identity runtime once and returns it typed only as graph_os.identity.ports Protocol objects (CredentialAuthority, SessionAuthority). Edits graph_os/identity and the composition root only, not graph_os/api/ops/registry_factory.py. | A unit test confirms the function returns port-typed objects and builds the runtime exactly once per call of the root, and fails closed with IdentityUnavailable when authoritative facts are absent. | requirement | GRAPHOS-OPS | VERIFIED | 3dc5a3607868 tests/identity/test_identity_composition.py:32 tests/identity/test_identity_composition.py:52 tests/identity/test_identity_composition.py:62 |
| GRAPHOS-OPS-R032.2.2 Inject identity ports into mcp_server Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Inject identity ports into mcp_server.** graph_os.mcp_server receives its identity capability as an injected graph_os.identity.ports object supplied by the composition root. Depends on GRAPHOS-OPS-R032.2.1 and on the graph_os/api/ops/identity.py and registry_factory.py registration from PR #176 (deliver-ops-r014). | A test confirms mcp_server accepts only a ports-typed object and refuses to start without one. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R032.2.3 Inject identity ports into webui_host and webui_co_service (rollup) Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Inject identity ports into webui_host and webui_co_service (rollup).** graph_os.webui_host and graph_os.webui_host.webui_co_service (compose_web_application) receive their identity capability as an injected graph_os.identity.ports object supplied by the composition root. Rollup of GRAPHOS-OPS-R032.2.3.1 and GRAPHOS-OPS-R032.2.3.2. Depends on GRAPHOS-OPS-R032.2.1. | Both children are delivered and their bound tests pass. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R032.2.3.1 compose_web_application requires injected identity ports Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**compose_web_application requires injected identity ports.** graph_os.webui_host.webui_co_service.compose_web_application takes an `IdentityPorts` argument from graph_os.identity.composition and raises a typed refusal when it is absent or not ports-typed; it imports no graph_os.identity submodule other than ports/composition types. Edits webui_co_service.py only. Depends on GRAPHOS-OPS-R032.2.1. | A test confirms compose_web_application accepts only an IdentityPorts object and refuses to compose without one. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R032.2.3.2 Thread identity ports through run_web_ui and the webui_host package (rollup) Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Thread identity ports through run_web_ui and the webui_host package (rollup).** run_web_ui and graph_os.webui_host receive the composition root's IdentityPorts and bind them into the application composer passed to the WebUI factory; graph_os.mcp_server.composition passes the ports when starting the agent-webui co-service. Rollup of GRAPHOS-OPS-R032.2.3.2.1 and GRAPHOS-OPS-R032.2.3.2.2. Depends on GRAPHOS-OPS-R032.2.3.1 and GRAPHOS-OPS-R032.2.2. | Both children are delivered and their bound tests pass. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R032.2.3.2.1 run_web_ui accepts and binds identity ports Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**run_web_ui accepts and binds identity ports.** run_web_ui takes a required `IdentityPorts` argument, refuses to start (typed refusal) when it is absent or not ports-typed, and binds the ports into the composer passed to the WebUI factory with functools.partial over compose_web_application. Delivered together with GRAPHOS-OPS-R032.2.3.1 in one PR because compose_web_application cannot land requiring ports while run_web_ui still passes it bare. Edits webui_co_service.py and the existing webui_host tests only. Depends on GRAPHOS-OPS-R032.2.3.1. | A test confirms run_web_ui refuses to start without ports and passes a composer bound to the supplied ports to the WebUI factory. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R032.2.3.2.2 Supply identity ports from mcp_server composition to the agent-webui start call Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Supply identity ports from mcp_server composition to the agent-webui start call.** graph_os.mcp_server.composition.start_composed_services receives the composition root's IdentityPorts and passes them to the agent-webui co-service start call. No production identity runtime is constructed anywhere yet (build_identity_ports has only test callers), so this needs the injected runtime from GRAPHOS-OPS-R032.2.2. Depends on GRAPHOS-OPS-R032.2.3.2.1 and GRAPHOS-OPS-R032.2.2. | A test confirms the supervisor start call for agent-webui supplies the ports. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R032.2.4 Integration test of single injected identity runtime Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Integration test of single injected identity runtime.** An integration test builds the composition root once and confirms mcp_server, webui_host, and webui_co_service all receive the same ports-typed identity object and none imports the concrete runtime. Depends on GRAPHOS-OPS-R032.2.2 and GRAPHOS-OPS-R032.2.3. | The integration test passes against the real composition root. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R033 Dynamic multiplexer discovery, load, and call Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Dynamic multiplexer discovery, load, and call.** GraphOS implements find_tools (with browse=true replacing the former catalog listing), load_tools, unload_tools, and multiplexer_status over one per-caller-filtered catalog spanning fleet tools, prompts, resources, skills, and connector items, enforcing a default load cap of 64 (hard maximum 256), one-hour idle expiry, opt-in LRU eviction, and routing every loaded tool's body through a fleet call with the caller's delegated credential. | Integration tests confirm the load cap, idle expiry, and that each loaded tool call is dispatched through the fleet-call path rather than directly. | requirement | GRAPHOS-OPS | LANDED | b9141334e1ba |
| GRAPHOS-OPS-R034 Eunomia narrowing-only policy enforcement Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Eunomia narrowing-only policy enforcement.** GraphOS applies its policy engine as a narrowing-only step at discovery, load, and every call, always leaving exact-scope filtering in place when policy is off, failing closed when policy is enabled but unreachable, defaulting to on for local and external deployments and off only for the none deployment mode, with its doctor check warning when policy is disabled. | Integration tests cover the off, on, and unreachable policy states, and a doctor-check test confirms the warning fires when policy is off. | requirement | GRAPHOS-OPS | LANDED | 4b83c69e2b41 |
| GRAPHOS-OPS-R035 Multiplexer registration reduced to four resident tools Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Multiplexer registration reduced to four resident tools.** GraphOS replaces its multiplexer's meta-tool registration with the four resident tools (find_tools, load_tools, unload_tools, multiplexer_status), and narrows its session-visibility middleware to routing list and call requests only, no longer making authorization decisions itself. | An integration test confirms the middleware denies nothing on its own and that authorization is enforced solely by the invoke pipeline. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R035.1 Four-tool meta-registration and routing-only visibility, unit-bound Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Four-tool meta-registration and routing-only visibility, unit-bound.** GraphOS's prepared multiplexer registration module defines exactly the four resident fleet meta-tools (find_tools, load_tools, unload_tools, multiplexer_status), and its GovernedSessionVisibility middleware only routes the list-tools candidate set (resident names plus the caller's currently loaded items), raising no denial of its own. | A test confirms FLEET_OPERATIONS is exactly the four named tools and that GovernedSessionVisibility.on_list_tools filters a candidate tool list to resident-plus-loaded without raising. | requirement | GRAPHOS-OPS | VERIFIED | b97b75e763ed tests/api/mcp/test_registration_governed_visibility.py:27 tests/api/mcp/test_registration_governed_visibility.py:58 |
| GRAPHOS-OPS-R035.2 Registration wired into the live server Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Registration wired into the live server.** GraphOS's server factory calls register_mcp_tools during startup composition so the four-resident-tool surface and GovernedSessionVisibility middleware are active on the running server, not only in isolated unit scope. | A boot/integration test confirms the running server's live MCP surface and middleware chain match the prepared registration module. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R036 Pre-dispatch audit reservation for governed effects Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Pre-dispatch audit reservation for governed effects.** Before any governed write or admin effect, GraphOS reserves a tenant-scoped, idempotent pending audit record through the engine's audit-append operation using verified service claims, links the eventual outcome back to that reservation, and refuses dispatch when the operation has no declared audit class or the durable audit writer is unavailable. | Integration tests confirm a missing audit class or unreachable audit writer blocks dispatch and that a completed effect links to its reservation. | requirement | GRAPHOS-OPS | LANDED | a9025191159e |
| GRAPHOS-OPS-R037 Native first-party A2A facade Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Native first-party A2A facade.** GraphOS exposes a first-party, natively hosted A2A facade rather than proxying through an external bridge, serving card, send, get, list, and cancel operations directly from its own server process. | Integration tests exercise the native A2A endpoints without any external bridge dependency. | requirement | GRAPHOS-OPS | VERIFIED | 20f773df9ddd d53165c2e72c tests/a2a/test_application.py:68 tests/a2a/test_application.py:90 |
| GRAPHOS-OPS-R038 Generated OpenAPI served through Swagger UI Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Generated OpenAPI served through Swagger UI.** GraphOS generates an OpenAPI document from its operation registry and serves it through a browsable Swagger UI page. | An integration test confirms the served OpenAPI document matches the generated registry and renders through the Swagger UI endpoint. | requirement | GRAPHOS-OPS | LANDED | 1fb96633563e ea736715b7fb f13ce20b05dc |
| GRAPHOS-OPS-R039 Dashboard route parity (replaces AU-BOUNDARY-R001.2, commit 0eb67c99c) Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Dashboard route parity (replaces AU-BOUNDARY-R001.2, commit 0eb67c99c).** Every route of the deleted dashboard router is served by graph-os with the same capability split and refusals. Already provided; this row adds proof only. | tests/gateway/test_dashboard_route_census.py passes. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R039.1 Add one test in tests/gateway/test_dashboard_route_census.py asserting the served dashboard router exposes all 15 old method and path pairs Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification sourceAdd one test in tests/gateway/test_dashboard_route_census.py asserting the served dashboard router exposes all 15 old method and path pairs. | The test fails when a route is removed. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R039.2 Add one test in tests/gateway/test_dashboard_api.py asserting read-capability callers get 403 on PUT /layout, POST /daemon/start, POST /hydrate and POST /hydrate/{source}, while API-key callers pass Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification sourceAdd one test in tests/gateway/test_dashboard_api.py asserting read-capability callers get 403 on PUT /layout, POST /daemon/start, POST /hydrate and POST /hydrate/{source}, while API-key callers pass. | The test passes. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R039.3 Add one test in tests/gateway/test_dashboard_api.py asserting GET /health returns 200 without a capability and sets Cache-Control no-store Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification sourceAdd one test in tests/gateway/test_dashboard_api.py asserting GET /health returns 200 without a capability and sets Cache-Control no-store. | The test passes. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R039.4 Add one test in tests/gateway/test_dashboard_api.py asserting a malformed hydrate source returns 422 and an unknown service id returns 404 Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification sourceAdd one test in tests/gateway/test_dashboard_api.py asserting a malformed hydrate source returns 422 and an unknown service id returns 404. | The test passes. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R039.5 Add one test in tests/gateway/test_dashboard_api.py pinning the key set returned by GET /daemon/status and POST /daemon/start against `graph_os.gateway.daemon.daemon_status`, compared with the old keys role, threads, jobs and queue depth Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification sourceAdd one test in tests/gateway/test_dashboard_api.py pinning the key set returned by GET /daemon/status and POST /daemon/start against `graph_os.gateway.daemon.daemon_status`, compared with the old keys role, threads, jobs and queue depth. | The test passes and fails when a key is dropped. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R039.6 Replace the `agent_utilities.knowledge_graph.core.shard_topology` import in graph_os/gateway/dashboard_api.py `daemon_shards` with the engine client shard-topology method, after a contract test in tests/gateway/test_dashboard_api.py shows the installed client exposes it (`GRAPHOS-HOST-R002`). BLOCKED on the engine client owner if the method is absent Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification sourceReplace the `agent_utilities.knowledge_graph.core.shard_topology` import in graph_os/gateway/dashboard_api.py `daemon_shards` with the engine client shard-topology method, after a contract test in tests/gateway/test_dashboard_api.py shows the installed client exposes it (`GRAPHOS-HOST-R002`). BLOCKED on the engine client owner if the method is absent. | tests/gateway/test_dashboard_api.py: response unchanged, no AU knowledge_graph import in the module. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R039.7 Replace `_active_engine` and `_hydration_manager` in graph_os/gateway/dashboard_api.py with the engine client source-sync methods, keeping 500 on no engine, 400 on `ValueError` and 422 on a malformed source Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification sourceReplace `_active_engine` and `_hydration_manager` in graph_os/gateway/dashboard_api.py with the engine client source-sync methods, keeping 500 on no engine, 400 on `ValueError` and 422 on a malformed source. | tests/gateway/test_dashboard_api.py: the four refusal codes and the status shape are unchanged. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R039.8 Add one test in tests/gateway/test_registry.py asserting GET /widgets returns every widget type of the deleted registry module map except `genius_agent`, with the same field set Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification sourceAdd one test in tests/gateway/test_registry.py asserting GET /widgets returns every widget type of the deleted registry module map except `genius_agent`, with the same field set. | The test passes against the list recorded in the test. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R039.9 Replace the `agent_utilities.core.config` and `agent_utilities.security.identity` imports in `_dashboard_capabilities` in graph_os/gateway/dashboard_api.py with a public `agent_utilities.api` capability resolver. Cross-repo prerequisite (owner: agent-utilities): export it under `AU-BOUNDARY-R013` Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification sourceReplace the `agent_utilities.core.config` and `agent_utilities.security.identity` imports in `_dashboard_capabilities` in graph_os/gateway/dashboard_api.py with a public `agent_utilities.api` capability resolver. Cross-repo prerequisite (owner: agent-utilities): export it under `AU-BOUNDARY-R013`. | tests/gateway/test_dashboard_api.py: 403 cases unchanged; an import census shows no AU-internal import. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R040 Live Artifacts routes (replaces AU-BOUNDARY-R001.3, commit 902f906ca) Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Live Artifacts routes (replaces AU-BOUNDARY-R001.3, commit 902f906ca).** graph-os serves create, get and refresh for Live Artifacts over the agent-utilities store. To build. | The artifact tests below pass and the routes are mounted by the host. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R040.1 Cross-repo prerequisite (owner: agent-utilities) Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Cross-repo prerequisite (owner: agent-utilities).** Export the Live Artifact store getter, artifact model, refresh service and bounded-JSON error through a public agent_utilities.api module. | An agent-utilities test imports each name from the public module. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R040.2 Add one typed model: create-artifact request in graph_os/gateway/artifacts_api.py, rejecting empty template and oversize data Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification sourceAdd one typed model: create-artifact request in graph_os/gateway/artifacts_api.py, rejecting empty template and oversize data. | Refusal tests in tests/gateway/test_artifacts_api.py. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R040.3 Add one port: artifact store and refresh ports plus a resolver callable type in graph_os/gateway/ports.py Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification sourceAdd one port: artifact store and refresh ports plus a resolver callable type in graph_os/gateway/ports.py. | tests/gateway/test_ports.py checks the ports are protocols. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R040.4 Add one route: POST /api/artifacts, returning id and rendered output, 400 on a bounded-JSON error Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification sourceAdd one route: POST /api/artifacts, returning id and rendered output, 400 on a bounded-JSON error. | test_artifacts_api.py create and refusal cases. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R040.5 Add one route: GET /api/artifacts/{artifact_id}, 404 when absent Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification sourceAdd one route: GET /api/artifacts/{artifact_id}, 404 when absent. | test_artifacts_api.py get and 404 cases. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R040.6 Add one route: POST /api/artifacts/{artifact_id}/refresh with inline data or resolver, 404 when absent, prior render preserved on failure Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification sourceAdd one route: POST /api/artifacts/{artifact_id}/refresh with inline data or resolver, 404 when absent, prior render preserved on failure. | test_artifacts_api.py refresh, 404 and failure cases. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R040.7 Wire one call site: a register function in graph_os/gateway/artifacts_api.py called where the host mounts the graph and usage routes, reusing `_require_dashboard_read` on GET and `_require_dashboard_write` on POST from graph_os/gateway/dashboard_api.py (capabilities, not engine scopes; decision D3) Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification sourceWire one call site: a register function in graph_os/gateway/artifacts_api.py called where the host mounts the graph and usage routes, reusing `_require_dashboard_read` on GET and `_require_dashboard_write` on POST from graph_os/gateway/dashboard_api.py (capabilities, not engine scopes; decision D3). | tests/gateway/test_artifacts_route_mount.py asserts the routes and the 403 cases. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R040.8 Wire one function: pass the exported `kg_source_resolver` (row GRAPHOS-OPS-R040.1) as the artifacts register function's resolver argument in graph_os/gateway/artifacts_api.py; no graph-os re-derivation code. Without it the default preserve-prior-data resolver is used Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification sourceWire one function: pass the exported `kg_source_resolver` (row GRAPHOS-OPS-R040.1) as the artifacts register function's resolver argument in graph_os/gateway/artifacts_api.py; no graph-os re-derivation code. Without it the default preserve-prior-data resolver is used. | test_artifacts_api.py resolver cases with a fake resolver. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R040.9 Cross-repo prerequisite (owner: agent-utilities): add the proposed `AU-BOUNDARY-R013.<n>` row of plan.md D4 to specs/au-boundary-deconstruction/requirements.md. It is the concrete form of GRAPHOS-OPS-R040.1 Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification sourceCross-repo prerequisite (owner: agent-utilities): add the proposed `AU-BOUNDARY-R013.<n>` row of plan.md D4 to specs/au-boundary-deconstruction/requirements.md. It is the concrete form of GRAPHOS-OPS-R040.1. | The agent-utilities row exists and GRAPHOS-OPS-R040.1 cites its ID. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R040.10 Add one test in tests/gateway/test_artifacts_route_mount.py asserting a caller without gateway:read gets 403 on GET and a caller with only gateway:read gets 403 on both POST routes, while API-key callers pass Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification sourceAdd one test in tests/gateway/test_artifacts_route_mount.py asserting a caller without gateway:read gets 403 on GET and a caller with only gateway:read gets 403 on both POST routes, while API-key callers pass. | The test passes (decision D3). | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R041 Agent summary widget dropped (replaces AU-BOUNDARY-R001.7, commit 7717d2e62) Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Agent summary widget dropped (replaces AU-BOUNDARY-R001.7, commit 7717d2e62).** The widget is intentionally not carried over because it returned constant data. | The gate test passes. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R041.1 Add one test in tests/gateway/test_registry.py asserting genius_agent is absent from the widget registry and no fixed-value widget is registered Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification sourceAdd one test in tests/gateway/test_registry.py asserting genius_agent is absent from the widget registry and no fixed-value widget is registered. | The test passes. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R042 Served operations screen untrusted content and redact secrets (rollup) Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Served operations screen untrusted content and redact secrets (rollup).** The host must screen fetched content before a run reads it, bound each request, and redact secrets from each response. | All child rows are verified. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R042.1 Model Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Model.** Add `ContentScreenVerdict` (closed values `clean`, `flagged`, `quarantined`), `ScreenFinding` (class, span, rule id) and `ContentOrigin` (`trusted`, `open_web`) in graph_os/api/invoke/screening.py. | tests/api/test_content_screening.py checks the closed value sets. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R042.2 Behavior Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Behavior.** The default `default_screen_rules` must strip or flag hidden, rendered or markup-embedded instructions and tag each finding with one attack class (perception, reasoning, memory, action, multi-agent, overseer). The default `default_output_redactor` must mask secret values. Each default is replaceable by name. | Unit tests in tests/api/test_content_screening.py cover each class and a masked secret. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R042.3 Wiring Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Wiring.** Call the screen and the redactor inside `invoke` at graph_os/api/invoke/pipeline.py:810. The screen must run on open-web content before the effect, and the redactor on the result before it returns. The production caller is the served route at graph_os/api/http/routes.py:127. This row creates the call site. | tests/api/test_content_screening.py asserts the call order through `invoke`. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R042.4 Refusal Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Refusal.** `invoke` must return `OpError("CONTENT_QUARANTINED")` for quarantined content. It must refuse a long-term memory write from unscreened open-web content with reason `UNSCREENED_MEMORY_WRITE`. An oversize request keeps the body-size refusal at graph_os/api/http/routes.py:42. | Refusal tests in tests/api/test_content_screening.py. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R042.5 Evidence Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Evidence.** The operation trace must record the verdict, finding classes, rule ids and redaction count. It must not record the matched text. | A trace test in tests/api/test_content_screening.py asserts the fields and the absence of secret text. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R042.6 Hot-path proof Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Hot-path proof.** The served route at graph_os/api/http/routes.py enters `invoke` (entry point: the served invoke operation), passes the wired screen, and the test observes a quarantined refusal for planted hidden instructions and a masked secret in a clean response. | tests/gateway/test_content_screening_hot_path.py passes. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R050 Policy lifecycle operations that guard plans Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Policy lifecycle operations that guard plans.** GraphOS serves operations that turn a constitution into policy entities. Policy entities change only through approved operations: create, update or retire. GraphOS refuses a plan that violates an active policy. The engine decides violation under EG-DECISION-ENGINE-R001. Policy semantics and decision verdicts belong to EG-DECISION-ENGINE-R001; the harness only applies engine decisions. | The hot-path proof row passes. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R050.1 Model Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Model.** Add `PolicyEntity`, `ConstitutionSource` and `PolicyChange` to graph_os/api/ops/policy.py. The `change` field takes the closed set create, update, retire. Existing `PolicyVersion` at graph_os/control_plane/policy/models.py:203 lacks a constitution link and a retired state. | tests/api/test_policy_models.py covers field validation and the closed set. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R050.2 Behavior Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Behavior.** Submit constitution clauses through a public engine policy-decision port under EG-DECISION-ENGINE-R001; GraphOS projects the returned PolicyEntity references and never interprets clauses locally. Reuse `PolicyAuthority.publish` at graph_os/control_plane/policy/repository.py:117 for approved operation publication. The engine adapter is new wiring and must remain unavailable until its producer contract is published. A retired policy must stay resolvable by version. | tests/api/test_policy_convert.py asserts one entity per clause and stable digests. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R050.3 Wiring Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Wiring.** Register `policy.create`, `policy.update` and `policy.retire` with `Confirm.PLAN` beside `handle_policy_read` at graph_os/api/ops/policy.py:36. Attach plan admission in `_policy` at graph_os/api/invoke/pipeline.py:198. `PolicyAuthority.authorize` at graph_os/control_plane/policy/repository.py:179 has no production caller today. This row binds the new EG-backed policy service at `build_operation_runtime` (`graph_os/api/invoke/bootstrap.py:167`) and calls it from `_base_authority` at graph_os/api/invoke/pipeline.py:208; no GraphOS policy evaluator substitutes for a missing producer. | tests/api/test_policy_wiring.py sends an authenticated served request through the composition root and shared invoke to the EG-backed service; an absent producer refuses with zero effects. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R050.4 Refusal Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Refusal.** Refuse a policy change without a verified approval with `POLICY_DENIED`. Refuse a plan that violates an active policy with `POLICY_DENIED` and the policy reference. Return `POLICY_UNAVAILABLE` when the engine decision is unreachable. | tests/api/test_policy_refusal.py covers all three refusals with zero effects. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R050.5 Evidence Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Evidence.** Emit the policy reference, version digest, approval reference and outcome. Write them on the audit record of each change and each refused plan. | tests/api/test_policy_evidence.py reads the audit record fields. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R050.6 Hot-path proof Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Hot-path proof.** Entry point: the served operation `policy.create` over POST /api/v1/ops/{op_id}. Then submit a plan through the invoke pipeline. Integration test tests/integration/test_policy_plan_guard.py creates a policy with approval and observes the refusal of a violating plan. | The integration test passes through shared invoke and the named producer port; missing producer contracts remain typed unavailable, never local policy substitutes. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R051 Scoped security-evaluation operation Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Scoped security-evaluation operation.** GraphOS serves a security-evaluation operation. It accepts a natural-language goal. EG selects the attack/transform/scorer composition from its declared catalog and returns scoring verdicts. AU executes the selected probes. GraphOS authorizes transport, exposes findings and refuses targets outside the verified authorized scope [arXiv:2605.04019]. EG-DECISION-ENGINE-R138 owns attack/transform/scorer records, scorer selection and probe verdicts; EG-DECISION-ENGINE-R001 owns decisions. AU executes the engine-selected probes only. | The hot-path proof row passes. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R051.1 Model Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Model.** Add `EvaluationGoal`, `EvaluationCatalog`, `EvaluationScope` and `Finding` models in new graph_os/api/ops/security_eval.py. The search found nothing with these terms. `SecurityPolicyMiddleware` at graph_os/security/security_policy_middleware.py:52 only detects jailbreak patterns on input. | tests/api/test_security_eval_models.py covers the models. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R051.2 Behavior Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Behavior.** Request engine catalog selection under EG-DECISION-ENGINE-R001 and scorer selection/verdicts under EG-DECISION-ENGINE-R138. Enforce the engine-provided probe cap (named default 50) and runtime quota under EG-DECISION-ENGINE-R133; AU executes probes and submits results. GraphOS validates scope and transports the request without local composition or scoring. Producer adapters are new wiring and unavailable until their public contracts exist. | tests/api/test_security_eval_select.py asserts only declared catalog entries appear. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R051.3 Wiring Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Wiring.** Register `security.evaluate` beside the security read operations in graph_os/api/ops/security.py and list it in graph_os/api/ops/registry_factory.py. No production caller exists today. This row creates the call site, reached from `_effect` at graph_os/api/invoke/pipeline.py:218. | tests/api/test_security_eval_wiring.py asserts the registry lists the operation. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R051.4 Refusal Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Refusal.** Refuse a target outside the caller's verified authorized target scope with `SUBJECT_ACCESS_DENIED` before any attack runs. Refuse a goal that selects no catalog entry with `INVALID_ARGUMENT`. | tests/api/test_security_eval_refusal.py asserts zero runs started. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R051.5 Evidence Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Evidence.** Emit the goal digest, selected catalog entries, target and scope references and finding count. Write them on the audit record. | tests/api/test_security_eval_evidence.py reads the record fields. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R051.6 Hot-path proof Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Hot-path proof.** Entry point: the served operation `security.evaluate` over POST /api/v1/ops/{op_id}. Integration test tests/integration/test_security_evaluate.py runs an in-scope target and observes findings. It then runs an out-of-scope target and observes the refusal. | The integration test passes through shared invoke and the named producer port; missing producer contracts remain typed unavailable, never local policy substitutes. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R052 Authorization-segmented virtual schema projections Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Authorization-segmented virtual schema projections.** GraphOS segments knowledge-graph query results by authorization boundary. It exposes the segments as virtual schema projections. A caller sees only the projections that its scope covers. The engine owns segmentation under EG-IDENTITY-R001 and EG-FEDERATED-QUERY-R001. GRAPHOS-DATA-MARKET-R005 owns the schema_context surface. | The hot-path proof row passes. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R052.1 Model Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Model.** Add `SchemaProjection` with fields boundary, scope, tables and mapping reference in new graph_os/api/ops/projections.py. Existing `build_read_op` at graph_os/api/ops/_common.py:106 and the caller-filtered projection at graph_os/api/http/openapi.py:1 lack a result-level projection type. | tests/api/test_projection_models.py covers the fields. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R052.2 Behavior Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Behavior.** Return the projections that the caller's verified grants cover, through the named default `scope_covers`. The engine supplies the boundary labels. GraphOS must not infer them. | tests/api/test_projection_scope.py asserts exact-cover and partial-cover cases. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R052.3 Wiring Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Wiring.** Register `query.projections` using `build_read_op` at graph_os/api/ops/_common.py:106 beside the query operations. No production caller exists today. This row creates the call site, reached from `build_operation_runtime` at graph_os/api/invoke/bootstrap.py:167. | tests/api/test_projection_wiring.py asserts the registry lists the operation. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R052.4 Refusal Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Refusal.** Return `SUBJECT_ACCESS_DENIED` when no projection is covered. Return `UNAVAILABLE` when the engine returns no boundary labels. Uncovered projections must not appear directly or indirectly in caller-visible responses, counts or traces, including refusal details and caller-readable audit views. | tests/api/test_projection_refusal.py covers both refusals and excludes hidden-projection counts from every caller-visible surface. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R052.5 Evidence Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Evidence.** Record the caller scope and returned projection references in the audit record. A withheld count may be recorded only in a separately authorized operator audit. The denied caller must never read it through the response, traces or any audit view. | tests/api/test_projection_evidence.py proves an authorized operator can read the withheld count. The denied caller cannot access that field or its audit record. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R052.6 Hot-path proof Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Hot-path proof.** Entry point: the served operation `query.projections` over POST /api/v1/ops/{op_id}. Integration test tests/integration/test_projection_scope.py calls it with two scopes and observes different projection sets. Holding caller-visible projections fixed, vary only hidden projections and assert identical caller-visible response contents, counts, refusal details and trace fields. Attempt operator-audit reads as the denied caller and assert refusal without count leakage; a separately authorized operator can read the withheld count. | The integration test passes through shared invoke and the named producer port; missing producer contracts remain typed unavailable, never local policy substitutes. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R053 Bounded interaction space Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Bounded interaction space.** GraphOS serves an operation that returns a bounded interaction space, not ranked snippets. The space holds a corpus boundary of documents. The boundary is the union of top-K results of multi-query lexical search. Each query gets one working directory. The space documents object properties and navigation commands [arXiv:2606.06880]. The engine owns ranking under EG-FEDERATED-QUERY-R001. EG-DECISION-ENGINE-R029 owns retrieval-plan decisions and EG-DECISION-ENGINE-R137 owns context budgets; AU executes the engine-directed exploration. SDK-CONNECTOR-CONTROL-R005 owns connector source submission. GRAPHOS-OPS-R021.2 owns `retrieval.search`. | The hot-path proof row passes. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R053.1 Model Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Model.** Add `InteractionSpace`, `CorpusBoundary` and `QueryDirectory` models in graph_os/api/ops/retrieval.py. The existing `Retriever` port at graph_os/api/ops/retrieval.py:60 returns hits only. It lacks a directory layout and property documentation. | tests/api/test_interaction_space_models.py covers the models. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R053.2 Behavior Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Behavior.** Project the engine-selected boundary as the union of top-K query hits, using engine-provided limits (named defaults K=20 and query cap=8). GraphOS renders one directory per query and documents object properties; EG owns retrieval/context decisions, and AU executes exploration. | tests/api/test_interaction_space_build.py asserts union, caps and directory names. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R053.3 Wiring Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Wiring.** Register `retrieval.space` beside `handle_retrieval_search` at graph_os/api/ops/retrieval.py:77. It reuses `GovernedRetriever.retrieve` at graph_os/control_plane/retrieval/service.py:61. No production constructor of `GovernedRetriever` exists today. This row constructs and binds the EG-backed retrieval service in `build_operation_runtime` at graph_os/api/invoke/bootstrap.py:167 and connects its public engine client; registry registration alone does not prove wiring. | tests/api/test_interaction_space_wiring.py sends a served authenticated request through shared invoke and the composed EG-backed retriever, and checks typed refusal when its producer is missing. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R053.4 Refusal Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Refusal.** Refuse a request above the document cap with `LOAD_CAP_EXCEEDED`. Refuse an empty query list with `INVALID_ARGUMENT`. Return `UNAVAILABLE` when the retriever is not composed. | tests/api/test_interaction_space_refusal.py covers all three. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R053.5 Evidence Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Evidence.** Emit the query count, boundary size, per-query hit count and context budget used. Write them on the audit record. | tests/api/test_interaction_space_evidence.py reads the fields. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R053.6 Hot-path proof Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Hot-path proof.** Entry point: the served operation `retrieval.space` over POST /api/v1/ops/{op_id}. Integration test tests/integration/test_retrieval_space.py runs two queries and observes the boundary and two directories. | The integration test passes through shared invoke and the named producer port; missing producer contracts remain typed unavailable, never local policy substitutes. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R054 Technique-bound benchmark adoption Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Technique-bound benchmark adoption.** Require `AU-INTEGRATION-R014` to publish a producer operation and receipt contract. Bind paged cache, prefix reuse, fused kernels, quantized cache, and expert dispatch to the exact model/configuration, measured gain or non-regression, and activation decision. `graph_os/api/ops/agents.py:handle_rlm` serves `rlm.benchmark`, not AU serving-technique evidence. After the AU contract exists, attach a separate GraphOS projection through `graph_os/api/ops/registry_factory.py:get_registry` and `graph_os/api/invoke/pipeline.py:invoke`. Keep activation unavailable until then. | Future acceptance: `tests/api/test_agent_browser_ops.py::test_benchmark_activation_requires_technique_bound_evidence`. Verify all five technique identities bind to the model/configuration and measured result. Verify missing, mismatched, or regressing evidence refuses activation with no serving effect. No threshold is invented. The proposed test has not run. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R055 Run-bound process remediation Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Run-bound process remediation.** Require liveness evidence naming the run and process. Distinguish zombie/hung detection from ordinary progress. GraphOS may expose a proposal only. Termination requires explicit approval bound to the same run and process; quota is not authority. Attach through `graph_os/api/ops/registry_factory.py:get_registry` and `graph_os/api/invoke/pipeline.py:invoke`. The AU liveness detector and proposal operation remain unspecified. Keep reads and remediation unavailable until that contract is published. | Future acceptance: `tests/api/test_ops_admin_ops.py::test_process_remediation_requires_run_bound_approval`. Verify run/process identity and proposal-only behavior before approval. Verify one authorized application after approval. Missing, stale, or mismatched evidence must refuse with zero process effects. The proposed test has not run. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R056 Source-bound changeset review Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Source-bound changeset review.** Bind each review result to the exact source changeset. Require evidence-backed findings for injection, authorization bypass, data exposure, cryptography, and business-logic flaws. Include a declared low-impact false-positive filter. Project only an owner-produced verdict through `graph_os/api/ops/registry_factory.py:get_registry` and `graph_os/api/invoke/pipeline.py:invoke`. `graph_os/api/ops/decide.py:handle_decide_commit` owns `decide.commit`, not review. The EG/AU review operation and evidence contract remain unspecified, so no review is served. | Future acceptance: `tests/api/test_decide_ops.py::test_changeset_review_binds_revision_classes_and_findings`. Verify every finding references the same diff/source revision. Verify impact filtering preserves evidence. Missing or mismatched owner verdicts must refuse without a review claim. The proposed test has not run. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R057 Stable prompt serialization and difference oracle Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Stable prompt serialization and difference oracle.** Define deterministic JSON for the Pydantic disk representation and a semantic difference oracle. The current GraphOS tree has no `RepositoryWriteBackParams` or served repository-writeback handler. If those contracts justify an operation, attach it through `graph_os/api/ops/registry_factory.py:get_registry` and `graph_os/api/invoke/pipeline.py:invoke`. Do so only after EG `R094.2/.3/.5/.7` and SDK source-effect/receipt contracts are published. Keep the operation unavailable until then. | Future acceptance: `tests/api/test_write_back_models.py::test_prompt_json_roundtrip_and_difference_oracle_is_stable`. Verify stable round-trip serialization, semantic equivalence, true semantic changes, and existing source-effect refusals. The proposed test has not run. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R058 Authorized table-browser projection Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Authorized table-browser projection.** Reuse the read-only `graph_os/gateway/schema_context_api.py:register_schema_context_routes` and `graph_os/gateway/schema_context_service.py:get_schema_context` attachment. Bind only owner-authorized table data. WebUI table-control/statistics requirements and EG producer bindings remain unassigned. Keep data unavailable until those contracts are published. Define no table mutation or statistics projection here. | Future acceptance: `tests/gateway/test_schema_context_api.py::test_table_browser_projection_requires_owner_binding`. Verify authorized data and denied scope. Verify missing producer and zero calls/effects on refusal. Add a served WebUI consumer acceptance after the owner contract is assigned. The proposed test has not run. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R061 Indexed token and cost projection Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Indexed token and cost projection.** Model: UsageQueryV1 accepts a bounded time window. It also accepts model, project, and agent filters with grouping. It accepts currency, bounded page size, and a snapshot cursor. Derive tenant scope only from the verified caller. UsageProjectionV1 preserves four disjoint EG counters: uncached input, cached input, nonreasoning output, and reasoning output. Preserve producer-derived input and output totals. Include amount, currency, minor unit, accounting revision, pinned PriceTableV1 revision, and currency revision. Also include source coverage, index watermark, cursor, and latency-profile metadata. That metadata carries producer profile revision, p95 bound and units, measurement boundary, workload, indexed dataset size, and data/index/cache-policy revisions. Apply exact-rational aggregation per final group and category. Round half-even once after each final aggregation. Keep unknown attribution, price, or currency explicitly unknown with a reason and coverage. Never convert unknown values to zero. Keep currencies separate unless EG supplies a pinned FX revision. Behavior: Map to RunTraceUsageQueryV1 under EG-ORCH-VOCAB-R010.101. GraphOS forwards producer aggregates and performs no token or cost arithmetic. Bind the producer p95 profile at 500 ms. Measure from authenticated-handler entry through serialized response. Use 1,000,000 indexed traces, 32 readers, and 1,000 fixed-window queries. Bind data, index, and cache-policy revisions. Reject caller-selected replacement bounds. Wiring: Extend graph_os/api/ops/usage.py beside usage.read with a distinct usage.index.query and typed EG reader. Use build_read_op with existing usage:read. Register through the existing registry factory and shared invoke path. WebUI counterpart: WEBUI-APPS-R004.8.1-.6 via ObservabilityView.tsx. Preserve GRAPHOS-OPS-R021.4.3/.4 runs.metrics grouping. Preserve zero-solved abstention and cost-per-solved-task semantics. usage.read context peaks and budgets are not total usage. Refusal: Authorize and bind tenant before EG dispatch. Denied or foreign scope, stale cursors, and revision mismatches expose no rows. Treat stale profile, watermark, or currency revisions as refusals. Missing, nonfinite, nonpositive, or exceeded latency evidence returns typed UNAVAILABLE without usage aggregates. Unknown attribution, price, or currency stays unknown with its reason and coverage. Never use zero or calculate mixed-currency totals. Evidence: A served browser query reconciles each grouping against an independent EG ledger. Record the bound, units, boundary, workload, measured p95, and data/index/cache revisions. This definition claims no implemented operation or served receipt. | Planned served acceptance checks four exact counters and producer totals. It covers rational aggregation, half-even rounding, pinned PriceTableV1, minor units, revisions, coverage, watermark, cursor, pagination, unknown-value reasons, denied scope, stale revisions, and absent, invalid, or exceeded latency evidence. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-OPS-R063 Retrieval evaluation and authorized context projection Definition — GRAPHOS-OPS / GRAPHOS-OPS — Hosted API and intent operationsCanonical requirement and verification source**Retrieval evaluation and authorized context projection.** Model: RetrievalEvaluationQueryV1 binds corpus/revision/digest, relevance-label-set/revision/digest, query-set ID/revision/digest, evaluator revision, and k from 1 through 1000. It requires at least two registered algorithm IDs, versions, and settings digests. RetrievalComparisonV1 preserves producer numerator, denominator, metric, and input/result digests. For hits_at_k, the denominator is the complete identically labeled query set. The numerator counts queries with at least one relevant result in top k. RetrievalContextV1 preserves document/revision/digest and half-open UTF-8 byte offsets into original stored text. Every result carries query/index/authorization revisions and an opaque snapshot-bound cursor. Limit each response to 100 spans and each span to 8 KiB. Behavior: Forward EG-DECISION-ENGINE-R100.100 DecisionEval RetrievalRankingSubmit/RetrievalRankingV1 and Method::RetrievalContextSearch/RetrievalContextSearchV1. All algorithms share the corpus, complete label-set revision/digest, query-set ID/revision/digest, evaluator revision, k, and query inputs. Pin each algorithm's settings digest to its own registered configuration and preserve it in the result. GraphOS never computes hits_at_k or treats local RRF as relevance truth. If indexing normalizes text, preserve a separate NFC digest and producer index digest. Validate the normalized-to-original byte map. Public offsets still address the stored-text digest and original bytes. Wiring: Extend graph_os/api/ops/retrieval.py with typed retrieval.evaluation.compare and retrieval.context.search models and producer ports. Use build_read_op, memory:read, registry_factory, and shared invoke. WebUI counterpart: WEBUI-APPS-R001.1.1-.6 via src/components/table-explorer/TryItPanel.tsx and its generated GraphOS client. Refusal: Denied scope refuses before dispatch. Missing labels, an incomplete query set, or a zero denominator refuses. Mismatched corpus, labels, evaluator, or query inputs refuse. Missing or mismatched per-algorithm settings digests refuse against that algorithm's registered configuration. Stale cursor/revisions, invalid offsets/maps, and over-limit spans return typed refusals. Refusals expose no partial metrics, protected counts, or offsets. Evidence: A served fixed-corpus test compares two registered algorithms against an independent hits_at_k ledger. Use the same complete labeled query set and pinned evaluator revision. Composed/decomposed Unicode and multibyte cases prove byte slicing against original stored text. Escape hostile source before highlighting. Preserve the original byte spans. Refusal cases cover missing labels, stale/cross-tenant state, bad maps/offsets, and bounds. This definition claims no implemented operation or served receipt. | Planned served acceptance checks identical inputs, metric numerator/denominator meanings, and result digests. It verifies original-text UTF-8 spans, NFC digest, validated mapping, cursor binding, and limits. It tests escaping hostile source before highlighting. It covers authenticated, stale, missing-label, zero-denominator, invalid-map, and refusal cases. | requirement | GRAPHOS-OPS | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operations | spec | None | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R001 Elevation request, approve, and revoke surfaces Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Elevation request, approve, and revoke surfaces.** GraphOS exposes elevation request, approval, and revoke actions through its web console, its A2A authority boundary, and chat-based tooling. Each surface invokes the engine's access service rather than deciding locally. | Verified by an integration test exercising the REST and MCP access operations from each surface. It also confirms self-approval and delegated-approval attempts are denied. | requirement | GRAPHOS-IDENTITY | LANDED | 4a3410afa6de |
| GRAPHOS-IDENTITY-R002 Domain scopes consume the generated scope registry Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Domain scopes consume the generated scope registry.** GraphOS's own domain scopes use the shared scope classes (user, domain, service-only, approver, admin) and are kept consistent with the single generated scope registry rather than a separately maintained list. | Verified by a registry property test asserting every scope GraphOS advertises matches the generated registry's name and class. | requirement | GRAPHOS-IDENTITY | VERIFIED | a2212420d6c6 d497f656144a tests/api/test_domain_scopes.py:50 |
| GRAPHOS-IDENTITY-R003 Persistent local token issuer with secret-backed key Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Persistent local token issuer with secret-backed key.** GraphOS runs a persistent local token issuer that publishes discovery and JWKS metadata under a well-known path, stores its signing key as a secret reference, rotates keys with bounded overlap, and exchanges tokens from an external identity provider or a local authenticator for a verified local principal token. | Verified by a contract test validating discovery/JWKS responses, stable token subject identity, and bounded-overlap key rotation. | requirement | GRAPHOS-IDENTITY | LANDED | 9a8cbf921748 c4c9cb1fac8f |
| GRAPHOS-IDENTITY-R004 Rollup Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Rollup.** See `GRAPHOS-IDENTITY-R004.1` and `GRAPHOS-IDENTITY-R004.2`. In unauthenticated mode, GraphOS resolves a request as the bootstrap principal through the ordinary RBAC and scope path, refuses non-loopback binds unless an explicit exposure acknowledgment is supplied, validates the Host header and same-origin Origin on cookie-mutating requests, and shows an unsecured-mode banner, page title, and doctor diagnostic, with the previously identified authentication bypasses removed. | See children. | requirement | GRAPHOS-IDENTITY | LANDED | cd652df8f6c8 |
| GRAPHOS-IDENTITY-R004.1 Typed bootstrap-principal model Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Typed bootstrap-principal model.** `LoopbackBootstrapPrincipal` refuses construction for a non-loopback bind host unless an explicit exposure acknowledgment is set, and refuses an empty bind host. | Verified by refusal unit tests in `tests/identity/test_bootstrap_mfa_admin_console_models.py`. | requirement | GRAPHOS-IDENTITY | VERIFIED | cd652df8f6c8 d497f656144a tests/identity/test_bootstrap_mfa_admin_console_models.py:15 tests/identity/test_bootstrap_mfa_admin_console_models.py:28 |
| GRAPHOS-IDENTITY-R004.2 Bootstrap resolution path Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Bootstrap resolution path.** Wire the typed model into the ordinary RBAC/scope resolution path, Host/Origin validation on cookie-mutating requests. It also wires the unsecured-mode banner/title/doctor diagnostic. | Verified by a served HTTP/MCP test asserting loopback-only access and Host/Origin rejection before token issuance. It also asserts the unsecured-mode indicators across session, status, and initialize responses. | requirement | GRAPHOS-IDENTITY | LANDED | 4a3410afa6de |
| GRAPHOS-IDENTITY-R005 Local account lifecycle with server-side sessions Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Local account lifecycle with server-side sessions.** GraphOS implements local login, logout, registration, password change, and password reset backed by opaque server-side sessions, a CSRF token for cookie-based authentication, session-fixation rotation on login and privilege change, and uniform public error responses that never reveal whether an account exists. | Verified by an end-to-end account-lifecycle test covering CSRF validation, session rotation, and uniform throttled responses for unknown users and wrong passwords. | requirement | GRAPHOS-IDENTITY | LANDED | 9a8cbf921748 |
| GRAPHOS-IDENTITY-R006 Optional MFA with TOTP, WebAuthn, and recovery codes Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Optional MFA with TOTP, WebAuthn, and recovery codes.** GraphOS supports TOTP, WebAuthn, and one-use recovery codes for multi-factor authentication, with enrollment optional by default globally while an administrator can require it for members of a configured group. | Verified by MFA ceremony tests covering valid and replayed TOTP codes, WebAuthn origin and signature-counter checks, single-use recovery codes, and enforced enrollment for a required group. | requirement | GRAPHOS-IDENTITY | LANDED | cd652df8f6c8 |
| GRAPHOS-IDENTITY-R006.1 Typed MFA enrollment model Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Typed MFA enrollment model.** `MfaEnrollment` refuses an unknown MFA method and refuses a required-group enrollment with zero methods. | Verified by refusal unit tests in `tests/identity/test_bootstrap_mfa_admin_console_models.py`. | requirement | GRAPHOS-IDENTITY | LANDED | cd652df8f6c8 |
| GRAPHOS-IDENTITY-R006.2 MFA ceremonies Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**MFA ceremonies.** Implement the TOTP, WebAuthn, and recovery-code ceremonies and group-enrollment enforcement over the typed model. | Verified by MFA ceremony tests covering valid and replayed TOTP codes, WebAuthn origin and signature-counter checks, single-use recovery codes, and enforced enrollment for a required group. | requirement | GRAPHOS-IDENTITY | LANDED | 4a3410afa6de |
| GRAPHOS-IDENTITY-R007 Admin console tabs with mapping dry-run and mode wizard Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Admin console tabs with mapping dry-run and mode wizard.** GraphOS's web console provides identity administration tabs for users, sessions, providers, and policy, a dry-run view that previews the roles an identity-provider mapping rule would assign, and a guided wizard for switching authentication mode. | Verified by a browser-driven test exercising each admin tab, the mapping dry-run preview, and a full mode-transition walkthrough. | requirement | GRAPHOS-IDENTITY | LANDED | cd652df8f6c8 |
| GRAPHOS-IDENTITY-R007.1 Typed admin-console tab model Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Typed admin-console tab model.** `AdminConsoleTab` refuses a name outside the fixed `users`/`sessions`/`providers`/`policy` set. | Verified by refusal unit tests in `tests/identity/test_bootstrap_mfa_admin_console_models.py`. | requirement | GRAPHOS-IDENTITY | LANDED | cd652df8f6c8 |
| GRAPHOS-IDENTITY-R007.2 Admin console behavior Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Admin console behavior.** Implement the mapping dry-run preview and mode-transition wizard over the typed tab model. | Verified by a browser-driven test exercising each admin tab, the mapping dry-run preview, and a full mode-transition walkthrough. | requirement | GRAPHOS-IDENTITY | LANDED | 4a3410afa6de |
| GRAPHOS-IDENTITY-R008 API keys and service accounts replace static MCP tokens Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**API keys and service accounts replace static MCP tokens.** GraphOS issues expiring API keys and service accounts in place of static MCP tokens. It intersects a key's effective scopes with its current owner's scopes on every use. It rejects approver-class scopes on keys. It denies a revoked or expired key immediately, with no static-token compatibility path. | Verified by an API-key contract test asserting scope intersection at use time. It also asserts immediate denial of a revoked, expired, or approver-scoped key. | requirement | GRAPHOS-IDENTITY | VERIFIED | e74110bb69b5 |
| GRAPHOS-IDENTITY-R009 Multi-provider OIDC with mapping rules and JIT policy Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Multi-provider OIDC with mapping rules and JIT policy.** GraphOS authenticates through multiple OIDC providers using PKCE, state, and nonce verification, applies deterministic ordered mapping rules with configurable just-in-time user creation or denial, supports a preset configuration for a common identity provider, migrates existing identity links idempotently, and sends a logout hint to the provider where supported. | Verified by an OIDC integration test against mock issuers asserting PKCE/nonce/state validation, mapping-rule outcomes, idempotent link migration, and hinted logout. | requirement | GRAPHOS-IDENTITY | SPECIFIED | 4a3410afa6de e74110bb69b5 |
| GRAPHOS-IDENTITY-R010 LDAPS bind with nested group sync Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**LDAPS bind with nested group sync.** GraphOS binds to a directory over LDAPS, escapes search filters, and synchronizes group membership including nested Active Directory groups, deprovisioning access for disabled directory accounts. | An integration test uses a mock TLS LDAP directory. It covers escaped filters, bounded nested-group resolution and disabled-account deprovisioning. | requirement | GRAPHOS-IDENTITY | SPECIFIED | e74110bb69b5 |
| GRAPHOS-IDENTITY-R008.1 Typed API-key grant model Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Typed API-key grant model.** `ApiKeyGrant` refuses an approver-class scope and refuses an empty owner principal id. | Verified by refusal unit tests in `tests/identity/test_api_key_grant.py`. | requirement | GRAPHOS-IDENTITY | VERIFIED | 8b0005ee65dd tests/identity/test_api_key_grant.py:20 tests/identity/test_api_key_grant.py:26 tests/identity/test_api_key_grant.py:9 |
| GRAPHOS-IDENTITY-R008.2 Scope intersection and revocation Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Scope intersection and revocation.** Intersect effective scopes with the owner's current scopes at use time; deny a revoked or expired key immediately. | Verified by an API-key contract test asserting scope intersection at use time and immediate denial of a revoked, expired, or approver-scoped key. | requirement | GRAPHOS-IDENTITY | VERIFIED | d45ad779b80c tests/identity/test_api_key_use_time.py:22 tests/identity/test_api_key_use_time.py:31 tests/identity/test_api_key_use_time.py:39 tests/identity/test_api_key_use_time.py:49 |
| GRAPHOS-IDENTITY-R009.1 Typed OIDC mapping-rule model Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Typed OIDC mapping-rule model.** `OidcMappingRule` refuses an unknown JIT policy and refuses a negative rule order. | Verified by refusal unit tests in `tests/identity/test_api_keys_oidc_ldap_models.py`. | requirement | GRAPHOS-IDENTITY | VERIFIED | 6c3a92eb849a tests/identity/test_oidc_mapping_rule.py:23 tests/identity/test_oidc_mapping_rule.py:29 tests/identity/test_oidc_mapping_rule.py:36 tests/identity/test_oidc_mapping_rule.py:43 |
| GRAPHOS-IDENTITY-R009.2 OIDC authentication flow (rollup) Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**OIDC authentication flow (rollup).** Delivered through children `.2.1`-`.2.4`: ordered rule evaluation, ID-token validation, callback wiring, and live IdP probe. | Verified when every child is verified. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R009.2.1 Ordered claim-to-rule evaluation Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Ordered claim-to-rule evaluation.** `select_mapping_rule` returns the lowest-order matching `OidcMappingRule` for a provider and refuses no match, duplicate order, or malformed match. | Verified by unit tests in `tests/identity/test_oidc_rule_selection.py`. | requirement | GRAPHOS-IDENTITY | VERIFIED | 0714a7bf6f8e tests/identity/test_oidc_rule_selection.py:17 tests/identity/test_oidc_rule_selection.py:24 tests/identity/test_oidc_rule_selection.py:30 tests/identity/test_oidc_rule_selection.py:37 tests/identity/test_oidc_rule_selection.py:43 |
| GRAPHOS-IDENTITY-R009.2.2 ID-token validation inputs and typed refusal Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**ID-token validation inputs and typed refusal.** Pure PKCE/state/nonce/audience/expiry checks over decoded token claims, refusing any mismatch. | Verified by refusal unit tests. | requirement | GRAPHOS-IDENTITY | VERIFIED | 4ecc19a9f4e8 tests/identity/test_oidc_id_token_claims.py:41 tests/identity/test_oidc_id_token_claims.py:47 tests/identity/test_oidc_id_token_claims.py:52 tests/identity/test_oidc_id_token_claims.py:58 tests/identity/test_oidc_id_token_claims.py:66 |
| GRAPHOS-IDENTITY-R009.2.3 Callback handler wiring Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Callback handler wiring.** Wire rule evaluation and token validation into the OIDC callback, with idempotent link migration and hinted logout. | Verified by a callback test against a mock issuer. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R009.2.4 Live IdP probe Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Live IdP probe.** Exercise the flow against a live identity provider (requires a deployed IdP service). | Verified by a live probe against the deployed IdP. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R010.1 Typed LDAPS bind-config model Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Typed LDAPS bind-config model.** `LdapBindConfig` refuses a non-`ldaps` scheme and refuses an invalid port. | Verified by refusal unit tests in `tests/identity/test_api_keys_oidc_ldap_models.py`. | requirement | GRAPHOS-IDENTITY | VERIFIED | 02d2a6e84ec7 tests/identity/test_ldap_bind_config.py:11 tests/identity/test_ldap_bind_config.py:18 tests/identity/test_ldap_bind_config.py:25 |
| GRAPHOS-IDENTITY-R010.2 Directory bind and group sync (rollup) Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Directory bind and group sync (rollup).** Split into `.2.1`-`.2.4`; implement the LDAPS bind, filter escaping, nested-group resolution, and deprovisioning of disabled accounts. | An integration test uses a mock TLS LDAP directory. It covers escaped filters, bounded nested-group resolution and disabled-account deprovisioning. | requirement | GRAPHOS-IDENTITY | SPECIFIED | 9fc4eae0f299 |
| GRAPHOS-IDENTITY-R010.2.1 Group-DN-to-role mapping evaluation Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Group-DN-to-role mapping evaluation.** `map_groups_to_roles()` maps a directory user's group DNs (DN-normalized, case-insensitive) to roles through an explicit mapping and refuses with `IdentityUnavailable` when no group matches. | Verified by unit tests in `tests/identity/test_ldap_group_roles.py`. | requirement | GRAPHOS-IDENTITY | VERIFIED | 9fc4eae0f299 tests/identity/test_ldap_group_roles.py:13 tests/identity/test_ldap_group_roles.py:19 tests/identity/test_ldap_group_roles.py:25 tests/identity/test_ldap_group_roles.py:32 |
| GRAPHOS-IDENTITY-R010.2.2 Bind through an injected directory port Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Bind through an injected directory port.** Bind and search via an injected directory port with typed `IdentityUnavailable` refusal when the directory is unavailable, plus search-filter escaping. | Verified by unit tests using a fake directory port. | requirement | GRAPHOS-IDENTITY | VERIFIED | 57c4aff42c64 tests/identity/test_ldap_bind.py:22 tests/identity/test_ldap_bind.py:29 tests/identity/test_ldap_bind.py:35 tests/identity/test_ldap_bind.py:41 |
| GRAPHOS-IDENTITY-R010.2.3 Scheduled group sync (rollup) Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Scheduled group sync (rollup).** Split into `.2.3.1` and `.2.3.2`; bounded nested-group resolution and scheduled sync, deprovisioning disabled accounts. | Verified by a test against a fake directory covering bounded nesting and deprovisioning of a disabled account. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R010.2.3.1 Pure sync plan Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Pure sync plan.** `plan_directory_sync()` turns a directory snapshot (users with group DNs and a disabled flag) into a typed `SyncPlan` of role assignments per user and users to deprovision, listing enabled users with no mapped role as unmapped, and refuses an empty snapshot with `IdentityUnavailable`. | Verified by unit tests in `tests/identity/test_ldap_sync_plan.py`. | requirement | GRAPHOS-IDENTITY | VERIFIED | 937d3788413d tests/identity/test_ldap_sync_plan.py:12 tests/identity/test_ldap_sync_plan.py:27 |
| GRAPHOS-IDENTITY-R010.2.3.2 Scheduled apply Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Scheduled apply.** Schedule the sync and apply the plan through the identity port. | Verified by a test with a fake directory and fake identity port applying a deprovision. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R010.2.4 Live directory probe Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Live directory probe.** Probe a live LDAPS directory (requires a live service). | Verified by a live probe against the deployed directory. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R011 SCIM 2.0 provisioning server Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**SCIM 2.0 provisioning server.** GraphOS exposes a SCIM 2.0 server bound to a provider-specific service credential, supporting user and group provisioning and deprovisioning without deleting owned data. | Verified by a SCIM contract test covering create/update/patch/deactivate flows and rejection of a token scoped to a different provider. | requirement | GRAPHOS-IDENTITY | SPECIFIED | 117ad5b56bc6 |
| GRAPHOS-IDENTITY-R012 Native SAML service provider Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Native SAML service provider.** GraphOS acts as a SAML 2.0 service provider itself, so a deployment can sign in through a SAML identity provider without an OIDC broker in between; brokering through an OIDC provider remains a supported alternative. Assertions are accepted only with a valid signature from the configured provider certificate, the expected audience and recipient, an unexpired validity window and an unreplayed assertion ID, and a SAML sign-in resolves to the same stable principal and narrowed scopes as every other login method. | Integration tests assert a signed assertion yields the stable principal, and unsigned, wrongly signed, wrong-audience, expired and replayed assertions and XML signature-wrapping attempts are each refused. | requirement | GRAPHOS-IDENTITY | SPECIFIED | 117ad5b56bc6 |
| GRAPHOS-IDENTITY-R011.1 Typed SCIM service-credential model Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Typed SCIM service-credential model.** `ScimServiceCredential` refuses an empty provider id and exposes `authorizes()` refusing a mismatched provider. | Verified by refusal unit tests in `tests/identity/test_scim_saml_models.py`. | requirement | GRAPHOS-IDENTITY | VERIFIED | 95e2a2ed3519 tests/identity/test_scim_credential.py:11 tests/identity/test_scim_credential.py:17 tests/identity/test_scim_credential.py:23 tests/identity/test_scim_credential.py:31 |
| GRAPHOS-IDENTITY-R011.2 SCIM server surface (rollup) Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**SCIM server surface (rollup).** Implement the create/update/patch/deactivate flows and provisioning/deprovisioning without deleting owned data. | Verified by a SCIM contract test covering create/update/patch/deactivate flows and rejection of a token scoped to a different provider. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R011.2.1 Typed SCIM User resource model Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Typed SCIM User resource model.** `ScimUser` validates a SCIM 2.0 User payload (schema URN, non-empty userName, boolean active) and refuses a malformed one. | Verified by refusal unit tests in `tests/identity/test_scim_user.py`. | requirement | GRAPHOS-IDENTITY | VERIFIED | e92d812eb39d tests/identity/test_scim_user.py:15 tests/identity/test_scim_user.py:21 tests/identity/test_scim_user.py:26 tests/identity/test_scim_user.py:32 tests/identity/test_scim_user.py:40 |
| GRAPHOS-IDENTITY-R011.2.2 SCIM credential check Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**SCIM credential check.** Gate every SCIM request on `ScimServiceCredential.authorizes` and refuse a token scoped to a different provider. | Verified by a cross-provider rejection unit test. | requirement | GRAPHOS-IDENTITY | VERIFIED | 966dc25b5493 tests/identity/test_scim_credential_check.py:17 tests/identity/test_scim_credential_check.py:22 tests/identity/test_scim_credential_check.py:29 tests/identity/test_scim_credential_check.py:35 |
| GRAPHOS-IDENTITY-R011.2.3 SCIM create/patch/deactivate handlers Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**SCIM create/patch/deactivate handlers.** Handlers create, patch and deactivate users through an injected identity port; deactivation never deletes owned data. | Verified by a SCIM contract test over a fake identity port. | requirement | GRAPHOS-IDENTITY | VERIFIED | e848425636e4 tests/identity/test_scim_handlers.py:33 tests/identity/test_scim_handlers.py:40 tests/identity/test_scim_handlers.py:47 tests/identity/test_scim_handlers.py:54 tests/identity/test_scim_handlers.py:64 |
| GRAPHOS-IDENTITY-R011.2.4 SCIM route registration Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**SCIM route registration.** Register the `/scim/v2/Users` routes in the graph-os HTTP surface. | Verified by a route-registration test. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R012.1 Typed SAML service-provider model Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Typed SAML service-provider model.** `SamlServiceProvider` refuses a non-URL ACS endpoint and refuses a missing IdP certificate. | Verified by refusal unit tests in `tests/identity/test_saml_models.py`. | requirement | GRAPHOS-IDENTITY | VERIFIED | 66b447b6f3f3 tests/identity/test_saml_models.py:11 tests/identity/test_saml_models.py:21 tests/identity/test_saml_models.py:29 |
| GRAPHOS-IDENTITY-R012.2 Assertion verification and sign-in (rollup of .2.1-.2.4) Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Assertion verification and sign-in (rollup of .2.1-.2.4).** Implement signature, audience/recipient, validity-window and replay checks, and resolve a SAML sign-in to the same stable principal as every other login method. | Integration tests assert a signed assertion yields the stable principal, and unsigned, wrongly signed, wrong-audience, expired and replayed assertions and XML signature-wrapping attempts are each refused. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R012.2.1 Typed parsed-assertion model and condition checks Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Typed parsed-assertion model and condition checks.** `ParsedSamlAssertion` refuses malformed claims, and `check_assertion_conditions()` refuses a wrong audience, wrong recipient, not-yet-valid or expired assertion with a typed `SamlRefusalReason`. | Verified by refusal unit tests in `tests/identity/test_saml_assertion_conditions.py`. | requirement | GRAPHOS-IDENTITY | VERIFIED | fdbaebdb795a tests/identity/test_saml_assertion_conditions.py:37 tests/identity/test_saml_assertion_conditions.py:42 tests/identity/test_saml_assertion_conditions.py:64 tests/identity/test_saml_assertion_conditions.py:74 tests/identity/test_saml_assertion_conditions.py:89 |
| GRAPHOS-IDENTITY-R012.2.2 Signature verification through an injected verifier port Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Signature verification through an injected verifier port.** Define a `SamlSignatureVerifier` port and refuse unsigned, wrongly signed and signature-wrapped assertions; no crypto or XML implementation lives in graph-os. | Verified by unit tests with a fake verifier port covering unsigned, wrongly signed and wrapped assertions. | requirement | GRAPHOS-IDENTITY | VERIFIED | 2eaa6baaabc5 tests/identity/test_saml_signature_verification.py:47 tests/identity/test_saml_signature_verification.py:54 tests/identity/test_saml_signature_verification.py:63 |
| GRAPHOS-IDENTITY-R012.2.3 Replay check and sign-in handler wiring (rollup) Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Replay check and sign-in handler wiring (rollup).** Refuse a replayed assertion ID and resolve an accepted assertion to the same stable principal and narrowed scopes as every other login method; delivered by `.2.3.1` and `.2.3.2`. | Verified by the child rows. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R012.2.3.1 Replay check through a seen-assertion-id store port Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Replay check through a seen-assertion-id store port.** Define a `SamlReplayStore` `Protocol` and `check_assertion_replay`, which, after `verify_assertion`, refuses a repeated `assertion_id` with the typed reason `REPLAYED`. | Unit tests with an in-memory fake store assert a first assertion is accepted and a repeated assertion ID is refused with `REPLAYED`. | requirement | GRAPHOS-IDENTITY | VERIFIED | 7f5cd8d1fe7d tests/identity/test_saml_replay.py:41 tests/identity/test_saml_replay.py:48 tests/identity/test_saml_replay.py:57 tests/identity/test_saml_replay.py:64 |
| GRAPHOS-IDENTITY-R012.2.3.2 Sign-in handler wiring into the browser authority Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Sign-in handler wiring into the browser authority.** Resolve an accepted assertion to the same stable principal and narrowed scopes as every other login method. | Integration tests assert a verified assertion yields the stable principal. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R012.2.4 Live IdP sign-in probe Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Live IdP sign-in probe.** A committed probe signs in through a real SAML IdP; needs a live IdP service. | Verified by the probe run against the deployed IdP. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R013 Identity CLI commands and doctor diagnostics Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Identity CLI commands and doctor diagnostics.** The GraphOS identity CLI supports claim, link-claim, transition, reset-admin, and rotate commands with profile-aware defaults, and its doctor diagnostic reports a failing check for an exposed unauthenticated mode or an automatically generated secret. | Verified by a CLI contract test asserting each command's typed result and a doctor test asserting failing diagnostics for an exposed mode and an auto-generated secret. | requirement | GRAPHOS-IDENTITY | LANDED | 4a3410afa6de |
| GRAPHOS-IDENTITY-R014 Shared RBAC decision oracle across identity modes Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Shared RBAC decision oracle across identity modes.** GraphOS runs the same principal-by-scope-by-action-by-resource decision table against its unauthenticated, local, and external authentication modes, the last using mock OIDC and LDAP providers, and asserts identical allow/deny outcomes, reason codes, and claims digest for each principal across modes, including after a full mode-transition round trip. | Verified by a cross-mode oracle test comparing decision-table results and claims digests across all three modes. | requirement | GRAPHOS-IDENTITY | LANDED | 4a3410afa6de |
| GRAPHOS-IDENTITY-R015 Identity operations documentation and cutover runbook Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Identity operations documentation and cutover runbook.** GraphOS documents its identity and access operations and configuration, and provides a runbook for cutting an existing deployment over between authentication modes. The runbook references a committed browser sign-in probe as the verification step for an external provider. | Verified by following the documented runbook end to end against a test deployment. The test confirms each described step and diagnostic matches observed behavior. | requirement | GRAPHOS-IDENTITY | LANDED | 765e4c3a46fe |
| GRAPHOS-IDENTITY-R016 Optional SMTP adapter for identity email Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Optional SMTP adapter for identity email.** GraphOS optionally sends password-reset, verification, and invitation email through a configurable SMTP adapter; when no adapter is configured, email-only affordances are hidden while administrator reset and recovery-code paths remain available. | Verified by a notification test asserting a one-use reset email is sent when SMTP is configured and that email-only UI options are hidden when it is absent. | requirement | GRAPHOS-IDENTITY | SPECIFIED | adf48206cdff tests/identity/test_mail_capability.py:15 tests/identity/test_mail_capability.py:30 tests/identity/test_mail_capability.py:45 |
| GRAPHOS-IDENTITY-R016.1 Graph-os-side mail capability model Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Graph-os-side mail capability model.** A typed `SmtpAdapterSettings` model refuses an unusable adapter (missing host, out-of-range port, invalid `mail_from`), and `email_affordances()` hides every email-only UI affordance while keeping the administrator-issued reset and recovery-code paths available when no adapter is configured. | Verified by refusal and capability-flag unit tests in `tests/identity/test_mail_capability.py`. | requirement | GRAPHOS-IDENTITY | LANDED | adf48206cdff |
| GRAPHOS-IDENTITY-R016.2 SMTP/listmonk send integration Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**SMTP/listmonk send integration.** Wire a real SMTP/listmonk transport into the password-reset, verification, and invitation send pipeline so a one-use reset email is actually sent when an adapter is configured. Pinned to the epistemic-graph >=2.28 engine release (current pin: `epistemic-graph>=2.27.0,<3.0.0`); not deliverable until that pin moves. | Verified by a notification test asserting a one-use reset email is sent when SMTP is configured, once the epistemic-graph >=2.28 dependency lands. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R017 Remove the unauthenticated opt-out once clients migrate Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Remove the unauthenticated opt-out once clients migrate.** Once every GraphOS client path, including bootstrap, REST, MCP, A2A, CLI, and background service calls, carries a verified local-issuer or permitted service token, GraphOS stops relying on the engine's unauthenticated opt-out so the engine refuses any unsigned request. | Verified by a served test asserting every client entry point is denied when its token is missing, expired, or has the wrong audience, with no unsigned retry or fallback path exercised. | requirement | GRAPHOS-IDENTITY | SPECIFIED | adf48206cdff tests/identity/test_client_entry_points.py:14 tests/identity/test_client_entry_points.py:21 |
| GRAPHOS-IDENTITY-R017.1 Client entry-point token audit registry Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Client entry-point token audit registry.** `CLIENT_TOKEN_REQUIREMENTS` enumerates every GraphOS client path (bootstrap, REST, MCP, A2A, CLI, background service) and records that each one carries a verified local-issuer or permitted service token, with `entry_points_without_verified_tokens()` empty -- the audited precondition for removing reliance on the engine's opt-out. | Verified by registry-completeness and token-requirement unit tests in `tests/identity/test_client_entry_points.py`. | requirement | GRAPHOS-IDENTITY | LANDED | adf48206cdff |
| GRAPHOS-IDENTITY-R017.2 Engine opt-out removal Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Engine opt-out removal.** Once the engine stops honoring the unauthenticated opt-out, GraphOS stops relying on it so the engine refuses any unsigned request. Pinned to the epistemic-graph >=2.28 engine release (current pin: `epistemic-graph>=2.27.0,<3.0.0`); not deliverable until that pin moves. | Verified by a served test asserting every client entry point is denied when its token is missing, expired, or has the wrong audience, once the epistemic-graph >=2.28 dependency lands. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R017.3 Model Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Model.** BearerVerificationProfile pins issuer, audience, signing algorithms, key authority, tenant claim mapping and validity limits. VerifiedBearer binds subject, tenant, client, scopes, token expiry and verification evidence. Tenant is a required nonempty signed claim, mapped to the existing internal tenant field. Headers, cookies, process identity and defaults cannot fill an absent tenant. | Served acceptance in the named identity tests; runtime evidence remains required. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R017.4 Behavior Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Behavior.** Validate each API bearer independently of local browser-session storage. Verify signature, issuer, audience, expiry, not-before and required tenant before resolving current EG authority. Stateless token verification does not bypass revocation, delegation or current authorization. A valid browser cookie cannot rescue an invalid bearer or create an API principal. | Served acceptance in the named identity tests; runtime evidence remains required. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R017.5 Wiring Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Wiring.** Reuse `verify_local_bearer_request` at `graph_os/api/http/auth.py:127` and `caller_from_session` at `graph_os/api/mcp/caller.py:12.` `VerifiedMCPCaller.caller_for_request` at line 117 resolves each call. The existing verifier result lacks current policy authority. Missing qualified token verification, tenant validation or current EG resolution keeps ingress unavailable; decoded-claims helpers alone cannot admit a bearer. | Served acceptance in the named identity tests; runtime evidence remains required. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R017.6 Refusal Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Refusal.** Reject missing or duplicate bearer headers, invalid signature, unknown issuer/key, wrong audience, absent tenant, expiry and revoked credentials. A tenant mismatch refuses before discovery, dispatch or source access. Missing key or policy authority returns UNAVAILABLE without accepting cached positive authorization beyond its validity. Preserve uniform public authentication errors and bounded internal reasons. | Served acceptance in the named identity tests; runtime evidence remains required. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R017.7 Evidence Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Evidence.** Record request, verified tenant/principal/client, issuer profile, key ID, policy revision and refusal category. Never retain raw bearer material or log a reversible token encoding. Bearer evidence identifies the exact request and authority source. Browser-session evidence remains separate and cannot imply bearer validation. | Served acceptance in the named identity tests; runtime evidence remains required. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R017.8 Hot-path proof Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Hot-path proof.** `tests/identity/test_bearer_tenant_ingress.py::test_served_stateless_bearer_requires_tenant` enters the tools/call wire method and REST with local issuer tokens. Empty browser-session storage must not block a valid bearer. Missing tenant, expired token, wrong audience, duplicate headers and forged signature cause zero handler calls. Restart, revoked authority and cross-tenant calls preserve refusal. | Served acceptance in the named identity tests; runtime evidence remains required. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R018 Identity administration operations for self, admin, config Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Identity administration operations for self, admin, config.** GraphOS exposes identity operations covering the authenticated caller's own record, administrator management of users, sessions, API keys, service accounts, roles, groups, identity providers with mapping dry-run, policy, mode, issuer, audit, and SCIM client configuration, all requiring exact identity-admin scope, console origin, and fresh multi-factor authentication for mutations. | Verified by an integration test exercising each identity operation and asserting admin mutations are denied without exact scope, console origin, or fresh MFA. | requirement | GRAPHOS-IDENTITY | LANDED | 2c70abad2b68 336f9faf3f21 |
| GRAPHOS-IDENTITY-R019 Access operations for elevation and approval decisions Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Access operations for elevation and approval decisions.** GraphOS exposes access operations for elevation request, list, revoke, and approve/deny, approval listing and grant/deny, lease management, access checks, and policy explanation, all backed by the engine's access authority with no separate GraphOS-local approval or lease record. | Verified by an access-operations contract test asserting self-approval and delegated-approval attempts are denied and that REST and MCP surfaces return identical decisions. | requirement | GRAPHOS-IDENTITY | SPECIFIED | d467b8f6c708 f0432f0a0cef f22badda8f35 |
| GRAPHOS-IDENTITY-R019.1 Model Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Model.** ResourceAccessRequest binds verified tenant/principal/client, canonical resource reference, protocol, operation and immutable constraints. ResourceGrant binds an EG decision, verified user or role, exact resource version, scope ceiling, expiry and revocation revision. Protocol is web, ssh, rdp or database. Unknown resource, protocol or operation has no implicit grant. | Served acceptance in the named identity tests; runtime evidence remains required. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R019.2 Behavior Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Behavior.** Require an explicit current grant at every protocol boundary before opening an upstream channel. Match user or verified role, tenant, resource, protocol and operation together. Grants never authorize a whole host or network by proximity. Reauthorize each new operation and stop active access when authority expires or revocation becomes known. | Served acceptance in the named identity tests; runtime evidence remains required. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R019.3 Wiring Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Wiring.** Reuse `graph_os/access/service.py:90` `check_access` and `graph_os/api/ops/access.py:151` operations for EG-backed access projection. The shared invoke policy path at `graph_os/api/invoke/pipeline.py:198` remains mandatory. Protocol resource resolution, grant adapters and web/SSH/RDP/database enforcement are missing integration; no existing graph access verdict establishes protocol-wide enforcement. | Served acceptance in the named identity tests; runtime evidence remains required. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R019.4 Refusal Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Refusal.** Default deny for missing grant, unknown resource, untrusted role, stale policy, expired grant, tenant mismatch or unavailable EG authority. If a protocol adapter cannot enforce the granted operation and constraints, refuse `unsupported_enforcement` before opening the connection. Opaque tunneling cannot be represented as operation-scoped authorization. Denied and unknown resources share a safe public refusal. | Served acceptance in the named identity tests; runtime evidence remains required. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R019.5 Evidence Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Evidence.** Join ingress request, verified principal/client/tenant, canonical resource version, protocol, operation, EG decision and enforcement outcome. Record grant expiry, revocation observation and channel termination. Never record credentials, database payloads or private destination details in general logs. Evidence must prove the actual protocol boundary, not only an access-preview result. | Served acceptance in the named identity tests; runtime evidence remains required. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R019.6 Hot-path proof Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Hot-path proof.** `tests/identity/test_resource_protocol_access.py::test_served_protocol_grants_default_deny` enters the served operation through REST/MCP and each local protocol adapter. Controlled web, SSH, RDP and database endpoints record connection attempts. Explicit user and role grants permit only their exact resources. Unrelated resources, revoked grants and unsupported enforcement cause zero upstream connections. | Served acceptance in the named identity tests; runtime evidence remains required. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R020 Domain scope registry covers finance, fleet, loops, ops Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Domain scope registry covers finance, fleet, loops, ops.** GraphOS registers and exports its domain scopes, including finance read, fleet read and control, loops read and control, and ops read and admin, each with an exact name and scope class, consuming the generated engine scope registry rather than a separate list. | Verified by a registry property test asserting each exported scope's name and class matches the generated registry. | requirement | GRAPHOS-IDENTITY | LANDED | a2212420d6c6 |
| GRAPHOS-IDENTITY-R021 Identity wiring depends only on identity ports Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Identity wiring depends only on identity ports.** GraphOS's web host, web co-service, and MCP server packages depend only on the identity ports protocols and DTOs for identity behavior, with the concrete issuer, session, and authority implementations constructed once in the serving composition root and injected, removing the prior direct dependencies between these packages. | Verified by an import-graph and composition test asserting a single constructed implementation per port, no import cycle, and compliance with the configured dependency-count threshold. | requirement | GRAPHOS-IDENTITY | VERIFIED | 2c70abad2b68 336f9faf3f21 tests/identity/test_identity_ports_boundary.py:105 tests/identity/test_identity_ports_boundary.py:77 |
| GRAPHOS-IDENTITY-R022 Fleet authorization fails closed on exact scopes Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Fleet authorization fails closed on exact scopes.** GraphOS's fleet capability check accepts only the exact fleet scope for a requested operation rather than treating a general admin or cluster-admin scope as sufficient, applies the same check to local stdio transport as to any other transport, denies dispatch of an unrecognized native tool rather than allowing it by default, and enforces this filtering on every served MCP request regardless of which code path constructed the server. | Verified by positive and negative tests asserting an admin-only or cluster-admin-only caller is denied fleet access, an unknown tool is denied, and stdio-transport requests are checked identically to networked requests. | requirement | GRAPHOS-IDENTITY | VERIFIED | 2c70abad2b68 76d418e32221 tests/fleet/test_multiplexer_dynamic_gateway.py:1550 tests/fleet/test_multiplexer_dynamic_gateway.py:1761 tests/fleet/test_multiplexer_dynamic_gateway.py:1806 tests/fleet/test_multiplexer_dynamic_gateway.py:1824 |
| GRAPHOS-IDENTITY-R023 Native, self-refreshing credentials for MCP clients Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Native, self-refreshing credentials for MCP clients.** GraphOS issues and refreshes its own service-account or API-key tokens in process and serves them directly to IDE and agent MCP clients, removing the need for an external scheduled credential-refresh process or a file-based token cache read by a separate bridge process. | Verified by a client integration test asserting an MCP client obtains and automatically renews a working token from GraphOS with no external refresh process or cached credential file. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R023.1 Model Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Model.** Frozen CredentialUseRequest binds tenant, owner principal, requesting principal/client, connector, provider, audience, scopes, resource and operation. CredentialUseGrant adds EG decision reference, vault reference, expiry, revocation revision and declared provider token profile. AuthorizationChallenge binds that request, issuer, client, callback, state, nonce, PKCE challenge, attempt and deadline. No shared-host identity or supplied actor field grants reuse. | Served acceptance in the named identity tests; runtime evidence remains required. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R023.2 Behavior Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Behavior.** Resolve only an explicit reuse grant for the exact requesting agent, admitted connector and purpose. Derive connector identity from trusted admission; reject caller-forged or mismatched values. Validate provider tokens under the declared JWT/OIDC or opaque profile defined in the plan. Missing credentials start one admitted inline PKCE challenge. Persist acquired tokens through the approved host vault before reporting readiness. Resume only the unchanged pending operation after fresh EG authorization. Expiry, revocation and concurrent refresh preserve the same narrowed authority. | Served acceptance in the named identity tests; runtime evidence remains required. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R023.3 Wiring Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Wiring.** Extend authorize at `graph_os/gateway/remote_oauth_api.py:245` and `oauth_callback` at line 280 through the existing broker boundary. `build_identity_ports` at `graph_os/identity/composition.py:48` injects qualified identity authorities. Reuse SDK-CONNECTOR-CONTROL-R035 and R046 for credential references and PKCE transport. Scoped reuse, vault persistence receipts and inline operation continuation remain missing producer wiring. | Served acceptance in the named identity tests; runtime evidence remains required. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R023.4 Refusal Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Refusal.** Return `credential_missing`, `reuse_denied`, `browser_launch_failed`, `callback_unavailable`, `input_timeout`, `state_mismatch`, `insecure_redirect`, `provider_unavailable`, `persistence_failed`, revoked or expired. An unavailable interactive channel returns `interaction_required` immediately. Errors contain no code, verifier or token. A refused ceremony cannot dispatch the pending operation or leave a usable credential grant. | Served acceptance in the named identity tests; runtime evidence remains required. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R023.5 Evidence Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Evidence.** Record tenant, requesting principal/client, provider, granted scopes, resource, operation, challenge reference, EG decision and vault receipt. Include issuance, refresh, revocation and expiry references. Redact authorization codes, verifier, tokens, cookies and credential values. Record cross-agent use independently; process or host identity cannot substitute for caller provenance. | Served acceptance in the named identity tests; runtime evidence remains required. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R023.6 Hot-path proof Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Hot-path proof.** `tests/identity/test_scoped_credential_reuse.py::test_served_pkce_reuse_and_refusal` enters the served operation through REST and MCP tools/call. A local OIDC provider and real callback complete PKCE and vault persistence. A granted second client succeeds; unrelated clients and mismatched connectors fail before token use. JWT and opaque-token fixtures prove the declared validation profile without fabricating claims. Browser opening failure, timed-out input, replay and failed persistence cause no backend effect. | Served acceptance in the named identity tests; runtime evidence remains required. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R024 Committed browser and Keycloak SSO probe Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Committed browser and Keycloak SSO probe.** GraphOS provides a committed, reusable script that drives a real browser through sign-in against an external OIDC provider such as Keycloak and verifies the resulting session, replacing any uncommitted ad hoc probe. | Verified by running the committed probe against a test identity-provider realm and confirming it reports a successful authenticated session. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R025 Register identity ops once the engine contract lists `identity:admin` Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Register identity ops once the engine contract lists `identity:admin`.** GraphOS registers the identity operations only after the engine contract lists scope `identity:admin`. Until then registration is skipped with a doctor warning. Depends on the engine registering `identity:admin` (closed PR #176 failed `tests/api/test_registry_factory.py` for this). | `tests/api/test_registry_factory.py` passes with the engine contract listing `identity:admin` and skips identity ops without it. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R026 Hosted sessions are attributed to a client and segmented by principal Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Hosted sessions are attributed to a client and segmented by principal.** GraphOS must attribute every streamable-http session, agent run and audit event to a verified client principal, and must show each caller only its own. Rollup: LANDED when every `GRAPHOS-IDENTITY-R026.<n>` child is LANDED. | A served test with two principals shows no cross-client visibility and the children pass. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R026.1 Client session record Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Client session record.** GraphOS must define a typed client session record in graph_os/identity/client_session.py. It holds principal, tenant, session id and start time. | tests/identity/test_client_session.py: fields required; an unsigned principal is rejected. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R026.2 Record at session open Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Record at session open.** GraphOS must create the record when an MCP session opens, from the verified principal. The first task locates the session-open call site in graph_os/mcp_server. | tests/identity/test_client_session_open.py: opening a session stores one record for the caller. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R026.3 Runs carry the session id Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Runs carry the session id.** Each agent run started through GraphOS must carry its client session id and principal into the run record. | tests/identity/test_run_attribution.py: run record shows the opening session id. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R026.4 Audit event per run Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Audit event per run.** GraphOS must write one audit event per orchestrated run, holding trace id, principal and session id, in graph_os/api/invoke/audit.py. | tests/identity/test_run_audit.py: one event per run with all three fields. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R026.5 Caller-scoped client listing Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Caller-scoped client listing.** A list-clients operation must return only the caller's sessions and runs, and must return all of them only for an exact admin scope. | tests/identity/test_list_clients.py: user sees own rows; admin sees all; reader scope without admin is limited. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R026.6 User and service account parity Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**User and service account parity.** A user and a service account holding the same grants must see the same operation catalog and the same graph data. | tests/identity/test_principal_parity.py: equal catalog and equal visible-row count for both principals. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-IDENTITY-R026.7 Cross-client denial is uniform Definition — GRAPHOS-IDENTITY / GRAPHOS-IDENTITY — ACCESS — identity, authorization, and access operationsCanonical requirement and verification source**Cross-client denial is uniform.** A read of another client's session must fail with the same refusal as an unknown session id. | tests/identity/test_cross_client_denial.py: both cases return identical structured denials. | requirement | GRAPHOS-IDENTITY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-MCP-RESOURCES GRAPHOS-MCP-RESOURCES — MCP resource/template publication reconciliation | spec | None | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-MCP-RESOURCES-R001 Publication gate refuses without a valid receipt (rollup) Definition — GRAPHOS-MCP-RESOURCES / GRAPHOS-MCP-RESOURCES — MCP resource/template publication reconciliationCanonical requirement and verification source**Publication gate refuses without a valid receipt (rollup).** graph-os's MCP resource/template publication path never claims a candidate generation is published unless a `ReconciliationReceipt` exists, matches that exact candidate, and is fresh; otherwise it returns the typed `reingestion-unreconciled` result. Delivered through its child requirement, producer first. | Covered by `GRAPHOS-MCP-RESOURCES-R001.1` plus `GRAPHOS-MCP-RESOURCES-R003` (not yet specified). | requirement | GRAPHOS-MCP-RESOURCES | VERIFIED | No recorded commit/test evidence |
| GRAPHOS-MCP-RESOURCES-R001.1 Typed `ReconciliationReceipt` model and publication gate Definition — GRAPHOS-MCP-RESOURCES / GRAPHOS-MCP-RESOURCES — MCP resource/template publication reconciliationCanonical requirement and verification source**Typed `ReconciliationReceipt` model and publication gate.** `graph_os/fleet/mcp_resource_reconciliation.py` defines a frozen `ReconciliationReceipt` and `gate_mcp_resource_publication()` returning a typed `PublicationGateResult`: `"reconciled"` only for a receipt matching the exact tenant, `catalog_generation`, `snapshot_digest`, and all four families (`tools`, `prompts`, `resources`, `resource_templates`) within a freshness bound; `"reingestion-unreconciled"` with a stable `reason` (`missing`, `stale`, `invalid`) otherwise. | `tests/fleet/test_mcp_resource_reconciliation.py` covers missing, stale, digest-mismatched, generation-mismatched, partial-family, and wrong-tenant receipts all returning `reingestion-unreconciled`, and a fully matching fresh receipt returning `reconciled`. | requirement | GRAPHOS-MCP-RESOURCES | VERIFIED | 6a19f564d301 tests/fleet/test_mcp_resource_reconciliation.py:22 |
| GRAPHOS-MCP-RESOURCES-R002 epistemic-graph is the sole admissible receipt source Definition — GRAPHOS-MCP-RESOURCES / GRAPHOS-MCP-RESOURCES — MCP resource/template publication reconciliationCanonical requirement and verification source**epistemic-graph is the sole admissible receipt source.** The gate may only treat as reconciling a receipt epistemic-graph issued after durably committing the candidate's four-family projection. Graph-os never synthesizes or locally fabricates a passing receipt. Producing contract: [`EG-REPO-INGEST-001`](https://github.com/Knuckles-Team/epistemic-graph/blob/main/specs/repository-index-and-ingestion/spec.md) (owned by epistemic-graph). | Cross-repository link verification: this spec's `spec.md` cites the exact EG spec ID and URL. No graph-os code path constructs a `ReconciliationReceipt` locally outside of test fixtures. | requirement | GRAPHOS-MCP-RESOURCES | VERIFIED | 028338c38838 tests/fleet/test_mcp_resource_receipt_source.py:32 |
| GRAPHOS-MCP-RESOURCES-R003 Gate wired at the one catalog-publish entry point (rollup) Definition — GRAPHOS-MCP-RESOURCES / GRAPHOS-MCP-RESOURCES — MCP resource/template publication reconciliationCanonical requirement and verification source**Gate wired at the one catalog-publish entry point (rollup).** The fleet catalog's atomic generation-publish step (`fleet-catalog-and-tools` R022/PA-12) calls `gate_mcp_resource_publication()` before swapping the active generation pointer for the four MCP families; only an all-families `"reconciled"` result allows the swap. Split because the publish step it must call is not yet built in graph-os (`fleet-catalog-and-tools` R022/PA-12 is still BUILDING, so there is no entry point to wire). Delivered through its children. | Covered by `GRAPHOS-MCP-RESOURCES-R003.1` and `GRAPHOS-MCP-RESOURCES-R003.2`. | requirement | GRAPHOS-MCP-RESOURCES | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-MCP-RESOURCES-R003.1 Swap guard function Definition — GRAPHOS-MCP-RESOURCES / GRAPHOS-MCP-RESOURCES — MCP resource/template publication reconciliationCanonical requirement and verification source**Swap guard function.** `graph_os/fleet/mcp_resource_reconciliation.py` adds `require_reconciled_for_swap()`, which wraps `gate_mcp_resource_publication()` and raises a typed `PublicationRefusedError` carrying the `PublicationGateResult` for any `reingestion-unreconciled` result, and returns the receipt only for `reconciled`. The publish step can then call one function that cannot be bypassed by ignoring a return value. | Unit tests: missing, stale, and invalid receipts raise `PublicationRefusedError` with the typed result attached and the stable `reason`. A matching fresh receipt returns the receipt. | requirement | GRAPHOS-MCP-RESOURCES | VERIFIED | 965d34390876 tests/fleet/test_mcp_resource_reconciliation.py:119 tests/fleet/test_mcp_resource_reconciliation.py:138 |
| GRAPHOS-MCP-RESOURCES-R003.2 Call the guard from the publish step (depends on `fleet-catalog-and-tools` R022/PA-12 landing in graph-os) Definition — GRAPHOS-MCP-RESOURCES / GRAPHOS-MCP-RESOURCES — MCP resource/template publication reconciliationCanonical requirement and verification source**Call the guard from the publish step (depends on `fleet-catalog-and-tools` R022/PA-12 landing in graph-os).** The atomic generation-publish step calls `require_reconciled_for_swap()` before swapping the active generation pointer for the four families, leaves the last-known-good generation active on refusal, and surfaces the typed result in the reload outcome. | Integration test drives the publish step with missing/stale/invalid receipts and confirms the swap is refused with the typed result surfaced; a matching receipt allows the swap. | requirement | GRAPHOS-MCP-RESOURCES | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-MCP-RESOURCES-R004 Status docs are the gate's result, not hand-maintained prose Definition — GRAPHOS-MCP-RESOURCES / GRAPHOS-MCP-RESOURCES — MCP resource/template publication reconciliationCanonical requirement and verification source**Status docs are the gate's result, not hand-maintained prose.** `docs/status.md`'s "Explicitly unavailable surfaces" row and `docs/fleet.md`'s reconciliation paragraph describe exactly the `reingestion-unreconciled` result the gate returns. | A docs-consistency check (or review note) confirms the status/reason vocabulary in both docs matches `graph_os/fleet/mcp_resource_reconciliation.py` exactly. Not built in this slice. | requirement | GRAPHOS-MCP-RESOURCES | VERIFIED | 94ee72171294 tests/fleet/test_mcp_resource_status_docs.py:20 tests/fleet/test_mcp_resource_status_docs.py:25 tests/fleet/test_mcp_resource_status_docs.py:32 tests/fleet/test_mcp_resource_status_docs.py:44 |
| GRAPHOS-MESSAGING GRAPHOS-MESSAGING — Messaging channel supervision lifecycle | spec | None | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-MESSAGING-R001 Typed channel supervision state machine Definition — GRAPHOS-MESSAGING / GRAPHOS-MESSAGING — Messaging channel supervision lifecycleCanonical requirement and verification source**Typed channel supervision state machine.** GraphOS models each supervised messaging backend's lifecycle as a closed, typed state enum (`STOPPED`, `STARTING`, `RUNNING`, `BACKING_OFF`, `DEGRADED`, `STOPPING`) with a fixed legal-transition table; `InboundRouter` reports this state per backend. Delivered as the rollup of `GRAPHOS-MESSAGING-R001.1` (typed model, transition table, refusal tests) plus the router wiring that reports it live. | Unit tests over the typed model prove every legal transition and refuse every illegal one; an integration test confirms `InboundRouter` reports the live state per registered backend. | requirement | GRAPHOS-MESSAGING | LANDED | 63a66f60915a |
| GRAPHOS-MESSAGING-R001.1 Typed state model, transition table, and refusal tests Definition — GRAPHOS-MESSAGING / GRAPHOS-MESSAGING — Messaging channel supervision lifecycleCanonical requirement and verification source**Typed state model, transition table, and refusal tests.** GraphOS defines the `ChannelSupervisionState` enum and a `TRANSITIONS: dict[ChannelSupervisionState, frozenset[ChannelSupervisionState]]` table as the sole authority for legal moves, plus a `transition(current, target)` function that returns the target on a legal move and raises a typed `IllegalSupervisionTransition` otherwise. No router wiring is required for this slice. | Unit tests cover every legal transition pair and assert a representative set of illegal pairs (including `STOPPED -> RUNNING` and `DEGRADED -> RUNNING`) each raise `IllegalSupervisionTransition` with the attempted pair in its message. | requirement | GRAPHOS-MESSAGING | LANDED | 63a66f60915a |
| GRAPHOS-MESSAGING-R002 Health-gated start Definition — GRAPHOS-MESSAGING / GRAPHOS-MESSAGING — Messaging channel supervision lifecycleCanonical requirement and verification source**Health-gated start.** `InboundRouter.start()` transitions a registered backend through `STARTING` and only reaches `RUNNING` once `backend.is_connected` is observed true; a backend that is not connected at start is recorded `STOPPED` (skipped), never `RUNNING`. | A unit test with a fixture backend whose `is_connected` is `False` asserts the router records it as not running and does not create a listener task for it; a connected fixture backend reaches `RUNNING`. | requirement | GRAPHOS-MESSAGING | LANDED | 63a66f60915a |
| GRAPHOS-MESSAGING-R003 Bounded restart backoff with healthy-run reset Definition — GRAPHOS-MESSAGING / GRAPHOS-MESSAGING — Messaging channel supervision lifecycleCanonical requirement and verification source**Bounded restart backoff with healthy-run reset.** On a recoverable listener failure, `_supervise_backend` moves the backend to `BACKING_OFF`, computing its next delay from `MESSAGING_LISTEN_BACKOFF_BASE_S` (floored at a nonzero value so a zero base never busy-loops), doubling on each consecutive failure, capped at `MESSAGING_LISTEN_BACKOFF_MAX_S` (default 60s); a run lasting at least `MESSAGING_LISTEN_HEALTHY_RESET_S` (default 60s) resets the delay to base before the next failure. | A unit test drives a sequence of simulated short-lived failures and asserts the delay sequence is monotonically bounded by the cap; a separate test simulates one long-lived healthy run followed by a failure and asserts the delay resets to base. | requirement | GRAPHOS-MESSAGING | VERIFIED | 29a592980f26 tests/messaging/test_supervision.py:152 tests/messaging/test_supervision.py:186 |
| GRAPHOS-MESSAGING-R004 Graceful stop and drain Definition — GRAPHOS-MESSAGING / GRAPHOS-MESSAGING — Messaging channel supervision lifecycleCanonical requirement and verification source**Graceful stop and drain.** `InboundRouter.stop()` moves every supervised backend to `STOPPING` before cancelling its listener and inbox-reaper tasks, awaits their completion with `return_exceptions=True`, then reports `STOPPED`; a task observing `asyncio.CancelledError` during a backoff wait propagates as clean shutdown and triggers no further restart attempt. | A unit test cancels a router with an in-flight backoff wait and asserts no restart task is scheduled after `stop()` returns and that the task collection is empty. | requirement | GRAPHOS-MESSAGING | VERIFIED | 29a592980f26 tests/messaging/test_supervision.py:221 |
| GRAPHOS-MESSAGING-R005 Typed degraded adapter state and configuration-aware health Definition — GRAPHOS-MESSAGING / GRAPHOS-MESSAGING — Messaging channel supervision lifecycleCanonical requirement and verification source**Typed degraded adapter state and configuration-aware health.** GraphOS records configured adapter failures as DEGRADED with typed reasons. It continues creating other configured channels. R005.1 defines configuration-aware health and alert eligibility. | Named registry and health cases in R005.1 exercise these behaviors. | requirement | GRAPHOS-MESSAGING | SPECIFIED | 29a592980f26 785693fbf7a3 tests/messaging/test_registry_degraded.py:101 tests/messaging/test_registry_degraded.py:85 |
| GRAPHOS-MESSAGING-R005.1 Typed adapter degradation and configuration-aware health Definition — GRAPHOS-MESSAGING / GRAPHOS-MESSAGING — Messaging channel supervision lifecycleCanonical requirement and verification source**Typed adapter degradation and configuration-aware health.** Preserve the configured missing/import-failed adapter record as DEGRADED with AdapterMissing or AdapterImportFailed. Continue creating other configured channels. Expose components.messaging_intake on authenticated GET /api/dashboard/health and graph_configure(action="health"). Return stable enabled, configured, state, alert_eligible, and backends fields. Set enabled only when MESSAGING_INTAKE_ENABLED is explicitly true and KG_DAEMON_ROLE=host. Credentials alone never enable intake. Set configured when at least one supported backend has credential material. Never return credential values. Set state to disabled when intake is off. Use not_configured when enabled but no backend is configured. Use degraded when enabled with any unavailable configured backend. Use healthy only when every configured backend is connected. Set alert_eligible true exactly when enabled and state is not_configured or degraded. Build backends in stable ID order from configured backend IDs and typed degraded-record IDs. Each row has id, configured, state, and nullable reason_code. States are not_configured, disabled, connected, or unavailable. Use not_configured without credentials and disabled when intake is off. Use connected only when enabled and is_connected=true. Otherwise mark configured rows unavailable. Map AdapterMissing to adapter_missing, AdapterImportFailed to adapter_import_failed, and false is_connected to backend_not_connected. Never expose credentials or raw exception text. Alert evaluators may emit only when alert_eligible=true. Health reads never send messages. Keep unauthenticated /health and /health/ready detail-free. | MSG-T07 and MSG-T09–MSG-T12 prove typed failure preservation, state distinctions, alert eligibility, matching authenticated projections, safe output, and detail-free probes. | requirement | GRAPHOS-MESSAGING | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-MESSAGING-R006 Supervision/adapter ownership boundary Definition — GRAPHOS-MESSAGING / GRAPHOS-MESSAGING — Messaging channel supervision lifecycleCanonical requirement and verification source**Supervision/adapter ownership boundary.** GraphOS's supervision types import only `agent_utilities.messaging.base.MessagingBackend`'s public adapter contract and `agent_utilities.messaging.models`. GraphOS implements no channel adapter and agent-utilities implements no supervision, health gating, or backoff. This requirement links `AU-INTEGRATION-001` (`AU-INTEGRATION-R002`, `AU-INTEGRATION-R019`) as the agent-utilities-owned messaging/router spec this boundary depends on. | A source-level import check confirms `graph_os/messaging/{router,registry,service}.py` import no agent-utilities module outside `agent_utilities.messaging.{base,models}` and `agent_utilities.core.config`. | requirement | GRAPHOS-MESSAGING | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY GRAPHOS-DEPLOY — Portable GraphOS development and deployment | spec | None | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R001 Worker topology manifest is digest-pinned Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Worker topology manifest is digest-pinned.** GraphOS's Kubernetes worker-topology manifest pins its dispatch, ingest and other worker workloads, their horizontal pod autoscalers, and its stateful set to an exact image digest rather than a floating tag. | A manifest lint check fails any workload image reference in the manifest that is not digest-pinned. | requirement | GRAPHOS-DEPLOY | LANDED | e7ae64dec334 |
| GRAPHOS-DEPLOY-R002 Executable release-qualification runbook Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Executable release-qualification runbook.** GraphOS publishes an executable, step-by-step release-qualification runbook covering the graph engine, connector SDK, agent runtime, GraphOS itself, the web UI, and the connector package fleet, through production redeployment, as the companion procedure to the exit-criteria matrix. | Each runbook stage is backed by an automated check or script that a reviewer can run directly. | requirement | GRAPHOS-DEPLOY | VERIFIED | 689f232dc362 d75db1ea42e8 eaabc7449a93 tests/deployment/test_release_qualification_runbook.py:32 tests/deployment/test_release_qualification_runbook.py:47 tests/deployment/test_release_qualification_runbook.py:58 tests/deployment/test_release_qualification_runbook.py:72 |
| GRAPHOS-DEPLOY-R003 Pre-push hooks always run the full gate suite Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Pre-push hooks always run the full gate suite.** GraphOS's pre-push git hook resolves to its actual pre-commit configuration file and runs its full gate suite before a push succeeds; a relocated configuration path or a missing hook installation is treated as a failure, never a silent pass-through. | A hook-audit test invokes the generated pre-push shim and confirms it executes the configured gates rather than exiting silently. | requirement | GRAPHOS-DEPLOY | VERIFIED | 4a2d2cd9ac55 689f232dc362 c3c6be59a12a tests/deployment/test_doctor_prepush_hook.py:22 tests/deployment/test_doctor_prepush_hook.py:42 tests/deployment/test_pre_push_hook_shim.py:77 tests/deployment/test_pre_push_hook_shim.py:91 |
| GRAPHOS-DEPLOY-R004 mypy hook type-checks the test suite Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**mypy hook type-checks the test suite.** GraphOS's pre-commit mypy hook type-checks its test suite rather than excluding it, and the type errors that exclusion had hidden are fixed rather than suppressed. | The mypy hook runs against the test suite in continuous integration and passes with zero errors. | requirement | GRAPHOS-DEPLOY | VERIFIED | 689f232dc362 9d8a787b8495 tests/deployment/test_mypy_hook_scope.py:13 |
| GRAPHOS-DEPLOY-R005 Web UI keeps its component package name Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Web UI keeps its component package name.** Operator decision 2026-10-09: only front-end-facing items carry the Graph OS name; the web UI stays the `agent-webui` component (`agent_webui` import, `agent-webui` distribution). GraphOS's import sites, optional web UI package extra, package source reference, release workflow checkout step, preflight checks, and browser-control tests and docs keep referencing `agent-webui`; no package rename cutover is required. | A focused test run and the offline lock check confirm every reference resolves against the `agent-webui` package. | requirement | GRAPHOS-DEPLOY | VERIFIED | d6f16cd447e2 d75db1ea42e8 eaabc7449a93 tests/deployment/test_component_names_and_scripts.py:17 |
| GRAPHOS-DEPLOY-R006 gateway-widgets extra pins a compatible connector floor Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**gateway-widgets extra pins a compatible connector floor.** GraphOS's `gateway-widgets` optional extra declares a minimum version for each fleet connector package equal to the first published release compatible with the agent runtime's current module layout, so installing the extra never pulls a connector package that imports a removed module. | The widget test suite passes when the extra is installed from the published package index. | requirement | GRAPHOS-DEPLOY | VERIFIED | 45283d0137b9 d58ee3e25028 d6f16cd447e2 f42856691f97 tests/gateway/test_gateway_widgets_extra.py:57 |
| GRAPHOS-DEPLOY-R007 GraphOS hosts deployment doctor and skill certification Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**GraphOS hosts deployment doctor and skill certification.** GraphOS hosts the sole deployment doctor, skill-certification, OIDC-certification, skill-validation, and fleet-harness/skill-graph test modules. It incorporates any behavior unique to the agent runtime's former deployment package. Its `pyproject.toml` is the canonical source of console-script registrations for this tooling. No equivalent script remains declared by the agent runtime. Rollup: LANDED when every `GRAPHOS-DEPLOY-R007.<n>` child is LANDED. | A package-layout test confirms the agent runtime's deployment package is absent. It also confirms every related console script resolves to a GraphOS-owned module. | requirement | GRAPHOS-DEPLOY | LANDED | fd761d59a171 |
| GRAPHOS-DEPLOY-R007.1 `agent-utilities-doctor` console-script collision resolved Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**`agent-utilities-doctor` console-script collision resolved.** GraphOS's `pyproject.toml` is the sole declarer of the `agent-utilities-doctor` console script (`graph_os.deployment.doctor:main`). The agent runtime's `pyproject.toml` no longer registers the same script name against its own separate `agent_utilities.deployment.doctor:main`. The agent runtime's `agent_utilities.deployment.doctor` module itself may remain while it still has real non-test importers. Only the duplicate console-script registration is required to be gone. | A package-metadata check confirms exactly one installed distribution declares the `agent-utilities-doctor` entry point, and it resolves to `graph_os.deployment.doctor:main`. | requirement | GRAPHOS-DEPLOY | VERIFIED | d6f16cd447e2 fd761d59a171 tests/deployment/test_component_names_and_scripts.py:40 |
| GRAPHOS-DEPLOY-R007.2 `setup-config` console-script collision resolved Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**`setup-config` console-script collision resolved.** GraphOS's `pyproject.toml` is the sole declarer of the `setup-config` console script (`graph_os.deployment.cli:main`). The agent runtime's `pyproject.toml` no longer registers the same script name against its own separate `agent_utilities.deployment.cli:main`. The agent runtime's `agent_utilities.deployment.cli` module itself may remain while it is still exercised directly (by a test, or via `python -m`). Only the duplicate console-script registration is required to be gone. | A package-metadata check confirms exactly one installed distribution declares the `setup-config` entry point, and it resolves to `graph_os.deployment.cli:main`. | requirement | GRAPHOS-DEPLOY | VERIFIED | d6f16cd447e2 fd761d59a171 tests/deployment/test_component_names_and_scripts.py:49 |
| GRAPHOS-DEPLOY-R007.3 `graph-os-daemon` console-script collision resolved Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**`graph-os-daemon` console-script collision resolved.** GraphOS's `pyproject.toml` is the sole declarer of the `graph-os-daemon` console script (`graph_os.gateway.daemon:main`). The agent runtime's `pyproject.toml` no longer registers the same script name against its own separate `agent_utilities.gateway.daemon:main`. The agent runtime's `agent_utilities.gateway.daemon` module itself may remain while it still has real non-test importers. Only the duplicate console-script registration is required to be gone. | A package-metadata check confirms exactly one installed distribution declares the `graph-os-daemon` entry point, and it resolves to `graph_os.gateway.daemon:main`. | requirement | GRAPHOS-DEPLOY | LANDED | fd761d59a171 |
| GRAPHOS-DEPLOY-R007.4 `agent-utilities-venv` console-script collision resolved Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**`agent-utilities-venv` console-script collision resolved.** GraphOS's `pyproject.toml` is the sole declarer of the `agent-utilities-venv` console script (`graph_os.deployment.venv_sync:main`). The agent runtime's `pyproject.toml` no longer registers the same script name against its own separate `agent_utilities.deployment.venv_sync:main`. The agent runtime's `agent_utilities.deployment.venv_sync` module itself may remain while it still has real non-test importers. Only the duplicate console-script registration is required to be gone. | A package-metadata check confirms exactly one installed distribution declares the `agent-utilities-venv` entry point, and it resolves to `graph_os.deployment.venv_sync:main`. | requirement | GRAPHOS-DEPLOY | LANDED | fd761d59a171 |
| GRAPHOS-DEPLOY-R007.5 `graph-os-release-canary` console-script collision resolved Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**`graph-os-release-canary` console-script collision resolved.** GraphOS's `pyproject.toml` is the sole declarer of the `graph-os-release-canary` console script (`graph_os.deployment.release_canary:main`). The agent runtime's `pyproject.toml` no longer registers the same script name against its own separate `agent_utilities.deployment.release_canary:main`. The agent runtime's `agent_utilities.deployment.release_canary` module itself may remain while it still has a real non-test importer. Only the duplicate console-script registration is required to be gone. | A package-metadata check confirms exactly one installed distribution declares the `graph-os-release-canary` entry point, and it resolves to `graph_os.deployment.release_canary:main`. | requirement | GRAPHOS-DEPLOY | LANDED | fd761d59a171 |
| GRAPHOS-DEPLOY-R008 GraphOS hosts its own boundary modules Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**GraphOS hosts its own boundary modules.** GraphOS hosts its own security request-identity, error-surface, browser-auth and security-policy-middleware modules with their conformance tests. It also hosts its own gateway and runtime health and metrics observability. It also hosts its own profile-guard, install, release-channel, live-mount-guard, paths, workspace and config-admin core modules. It also hosts its own hook-installer, agent-manager-dashboard, release-catalog and gateway-client modules. It also hosts its own connection-registry and engine-discovery modules under `graph_os.fleet`. | A package-layout census confirms these modules are imported only from their GraphOS location. It also confirms the agent runtime no longer declares equivalents. | requirement | GRAPHOS-DEPLOY | LANDED | ae856bc9a101 |
| GRAPHOS-DEPLOY-R009 GraphOS owns hosting/deployment configuration settings Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**GraphOS owns hosting/deployment configuration settings.** GraphOS owns the hosting and deployment configuration settings split out of the agent runtime's monolithic configuration module, while connector base settings move to the connector SDK's own configuration module and agent/model settings remain with the agent runtime. | A configuration-schema test confirms GraphOS resolves its hosting and deployment settings from its own module without importing the agent runtime's configuration internals. | requirement | GRAPHOS-DEPLOY | VERIFIED | ae856bc9a101 |
| GRAPHOS-DEPLOY-R009.1 GraphOS hosts a typed `graph_os.core.config_admin` hosting/deployment settings module Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**GraphOS hosts a typed `graph_os.core.config_admin` hosting/deployment settings module.** GraphOS resolves host, port, deploy-profile and data-dir settings from its own validated, typed module. It has no import of the agent runtime's configuration internals. | A test confirms the module's source has no reference to the agent runtime's configuration module. It also confirms the module resolves documented defaults and environment overrides. It also confirms the module rejects an invalid port or deploy profile. | requirement | GRAPHOS-DEPLOY | VERIFIED | ae856bc9a101 tests/core/test_config_admin.py:17 tests/core/test_config_admin.py:30 tests/core/test_config_admin.py:41 tests/core/test_config_admin.py:57 |
| GRAPHOS-DEPLOY-R010 Ecosystem and repository development skills are published Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Ecosystem and repository development skills are published.** GraphOS publishes an ecosystem-wide development skill and its own repository development skill documenting architecture boundaries, build-host requirements, required gates, contract regeneration, and identity setup for working in this codebase; GraphOS's `AGENTS.md` is trimmed to navigation with a pointer to that skill. | A documentation-freshness check confirms the skill content matches current gate commands and `AGENTS.md` contains the pointer rather than duplicated procedure. | requirement | GRAPHOS-DEPLOY | SPECIFIED | 96e23d7f4ed4 |
| GRAPHOS-DEPLOY-R011 Deployment layout test suite passes in full Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Deployment layout test suite passes in full.** GraphOS's deployment manifest layout passes its full deployment test suite with no failing tests. | The deployment test suite reports all tests passing, including cases that previously failed on this layout. | requirement | GRAPHOS-DEPLOY | LANDED | 2b605acbf3a6 962462cdc788 |
| GRAPHOS-DEPLOY-R012 Pipelines dependency is referenced at main, never pinned Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Pipelines dependency is referenced at main, never pinned.** GraphOS's pre-commit configuration and GitHub Actions workflows reference the shared pipelines repository at its default branch. They do not use a pinned commit. GraphOS therefore automatically tracks pipeline fixes. | A reference-pin lint check fails any pre-commit `rev:` or workflow `uses:` entry for the pipelines repository that names a commit instead of the default branch. | requirement | GRAPHOS-DEPLOY | LANDED | 0f780429fb19 6c4b89f91732 |
| GRAPHOS-DEPLOY-R013 Development and production deployment profiles Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Development and production deployment profiles.** GraphOS's deployment skills provide a development profile using Docker Compose on a single host with no or local identity. They also provide a production profile using Kubernetes/Helm with external or local identity. Each profile runs the graph engine as a sidecar. Each profile enforces an identity mode with a forced first administrator. Each profile applies default authorization policy and selects an appropriate secrets backend. Each profile also performs first-boot verification. These GraphOS-owned skills replace the agent runtime's retired deployment copies. The connector SDK's federation capability replaces any direct graph-database mirror. | A first-boot test provisions each profile. It confirms readiness, administrator creation, and the selected secrets backend before accepting traffic. | requirement | GRAPHOS-DEPLOY | SPECIFIED | 0da5f7440603 2abb9ebb3905 99028d9d9f82 d75db1ea42e8 e9d992980035 |
| GRAPHOS-DEPLOY-R014 Agent runtime split into connector SDK, GraphOS and engine Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Agent runtime split into connector SDK, GraphOS and engine.** The former agent runtime is split into separately published repositories: the connector SDK, GraphOS, and the graph engine, each publishing its own installable package so GraphOS depends on the others only through their public APIs. | GraphOS's dependency manifest pins each split repository's published package rather than a path into the former combined source tree. | requirement | GRAPHOS-DEPLOY | LANDED | fe7c5c9a4a32 |
| GRAPHOS-DEPLOY-R015 AVX2 guard test runs on any hosted runner Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**AVX2 guard test runs on any hosted runner.** GraphOS's AVX2 guard test validates CPU feature-detection logic without asserting that the execution host lacks the AVX2 instruction set, so it passes on both AVX2-capable and non-AVX2 hosts. | The guard test passes in continuous integration on a standard hosted runner in addition to a non-AVX2 target host. | requirement | GRAPHOS-DEPLOY | LANDED | 67a387e5dbed |
| GRAPHOS-DEPLOY-R016 One host daemon process shares the in-pod engine Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**One host daemon process shares the in-pod engine.** A Kubernetes deployment that pins its serving container to the client role runs exactly one separate host-role daemon container in the same pod. The daemon container uses the serving image and source mounts. It runs `graph_os.gateway.daemon` with daemons enabled. It serves no MCP, web UI or messaging intake. It connects to the in-pod engine over the shared Unix socket volume and never spawns an engine. It authenticates with the GraphOS process identity. It shares the task-queue data volume with the serving container. | A manifest contract test asserts exactly one host-role container, the client-role serving container, the daemon entry point, the Unix socket endpoint, the shared volumes and the shared image. A server-side dry run accepts the manifest. A live receipt shows the daemon holding the host lock and the sparse index rising above zero. | requirement | GRAPHOS-DEPLOY | LANDED | 8b20c11b5dc5 eb31b7757681 f3bcee6dfbcf |
| GRAPHOS-DEPLOY-R017 Deployment placement and sequencing go through the engine decision functionality Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Deployment placement and sequencing go through the engine decision functionality.** GraphOS adds no deployment planner. Where to run is one typed Decide question asked of the engine (`EG-DECISION-ENGINE-R046`/`R111`); the ordered fleet-tool steps are an engine-assembled agent graph (`AgentAssemble`, `EG-DECISION-ENGINE-R036`) shown to the operator and confirmed through `graphos.plan/confirm`; manifests are the existing `deploy/` artifacts. Supersedes the deleted agent-utilities planner (AU-BOUNDARY-R002.2) without re-creating it. Rollup: LANDED when every `GRAPHOS-DEPLOY-R017.<n>` child is LANDED. | A package-layout test shows no graph-os plan type or backend selection exists and the children pass. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R017.1 Placement Decide mapping Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Placement Decide mapping.** Add a typed request/response mapping that asks the engine one placement Decide question and returns the engine decision verbatim, with no backend selection in graph-os, in graph_os/deployment/placement.py. Depends on `EG-DECISION-ENGINE-R046`/`R111`; needs the engine prerequisite below. | tests/deployment/test_placement_decide.py: request fields, decision passed through unchanged, no backend names referenced in graph-os. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R017.2 Request assembly for a deployment task Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Request assembly for a deployment task.** Add a function that submits a deployment task to the engine's `AgentAssemble` (`EG-DECISION-ENGINE-R036`, routed per `R044`) in graph_os/deployment/assembly.py and returns the engine's assembled graph unmodified. | tests/deployment/test_deploy_assembly_request.py with a fake engine: task and capabilities sent, graph returned as-is. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R017.3 Present the assembled graph read-only Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Present the assembled graph read-only.** Add a read-only presenter that prints the engine-returned graph for the operator and cannot mutate or dispatch it, in graph_os/deployment/assembly_view.py. | tests/deployment/test_deploy_assembly_view.py: output lists nodes in engine order; presenter has no dispatch path. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R017.4 Confirm through plan/confirm Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Confirm through plan/confirm.** Route operator confirmation of the assembled graph through `graphos.plan/confirm` (rows `GRAPHOS-A2A-R005.1`/`R006.1`) and record the choice with `decide.commit`, in graph_os/deployment/assembly.py calling graph_os/a2a/application.py and graph_os/api/ops/decide.py. | tests/deployment/test_deploy_confirm.py: confirmation goes only through plan/confirm; nothing runs unconfirmed. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R017.5 Typed refusal while unavailable Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Typed refusal while unavailable.** Return a typed refusal when the engine assemble handler or the confirm surface is unavailable (today both are refusal stubs), in graph_os/deployment/assembly.py. | tests/deployment/test_deploy_refusal.py: stub assemble and stub confirm each produce a distinct typed refusal and no side effect. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R017.6 Existing artifact per target Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Existing artifact per target.** Select the existing deploy artifact for a decided target from deploy/environments; add no renderer. Compose, helm and swarm are supported; systemd is explicitly unsupported, in graph_os/deployment/artifacts.py. | tests/deployment/test_deploy_artifacts.py: each of compose, helm, swarm resolves to an existing file, image references are digest-pinned via scripts/check_deployment_image_digests.py, systemd is refused as unsupported. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R017.7 In-process unchanged Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**In-process unchanged.** Keep `start_composed_services` as the in-process path; no wrapper or plan type, verified by a test only. | tests/deployment/test_deployment_in_process.py: live start calls `start_composed_services` with a fake supervisor and composition from `detect_composition`. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R017.8 Thin setup-config subcommand Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Thin setup-config subcommand.** Add a `setup-config deploy` subcommand that asks the engine (rows .1 and .2) and prints the returned decision and assembled graph. It holds no planning logic, in graph_os/deployment/cli.py. | tests/deployment/test_deploy_cli.py: output equals the fake engine's decision and graph. The handler imports no backend or renderer. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R017.9 Checker dispatches on document shape Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Checker dispatches on document shape.** In scripts/check_deployment_image_digests.py, add one dispatch in `_check_resource` so a document with a top-level `services` mapping and no `kind` goes to a new compose/swarm walker while Kubernetes documents are unchanged. | tests/deployment/test_image_digests.py: a Compose fixture is walked; every existing Kubernetes case still passes. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R017.10 Compose/Swarm literal images use the existing grammar Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Compose/Swarm literal images use the existing grammar.** Add the walker `_check_services` in scripts/check_deployment_image_digests.py that passes each service `image` through `_valid_image` and counts it, rejecting a service with no `image`. | tests/deployment/test_image_digests.py: pinned literal accepted, tagged literal and missing image rejected with a `services.<name>.image` location. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R017.11 Template mode accepts the required-variable form Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Template mode accepts the required-variable form.** Add one rule in scripts/check_deployment_image_digests.py: an image of exactly `${NAME:?...}` is accepted and counted as pin-required. `${NAME:-default}` and `${NAME}` are validated or rejected, never accepted blindly. | tests/deployment/test_image_digests.py: `${X:?m}` accepted; `${X:-repo:latest}` and bare `${X}` rejected; `${X:-repo@sha256:<hex>}` accepted. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R017.12 Resolve mode checks the supplied value Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Resolve mode checks the supplied value.** Add a repeatable `--set NAME=value` argument to scripts/check_deployment_image_digests.py that substitutes before validation so the real reference is checked. | tests/deployment/test_image_digests.py: `--set` with a digest passes, with a tag fails, with an unused name is an error. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R017.13 Run the checker on the shipped Compose and Swarm files Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Run the checker on the shipped Compose and Swarm files.** Add one test that runs the script against deploy/compose/compose.yaml and deploy/swarm/stack.yml in template mode and again with a fixture digest via `--set`. | tests/deployment/test_deploy_artifacts.py: both files exit 0 and report one image each; a tag value for GRAPHOS_IMAGE exits 1. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R017.14 Helm pinned and default renders Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Helm pinned and default renders.** Add a values fixture with a digest for `graphos.image`, `engine.image` and one connector, and a test (skipped when `helm` is absent) that renders it and pipes to the script, expecting exit 0 with the graph-os, daemon, engine and connector images checked; a default-values render must exit 1. | tests/deployment/test_helm_image_digests.py: pinned render passes; default render fails on `replace-me`. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R017.15 systemd stays refused Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**systemd stays refused.** Add the typed `unsupported_target` refusal naming the bare-metal reference for `systemd` in graph_os/deployment/artifacts.py (extends R017.6). | tests/deployment/test_deploy_artifacts.py: `systemd` refused, compose/helm/swarm still resolve. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R017.16 Environment policy drives the check Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Environment policy drives the check.** Add one function in graph_os/deployment/artifacts.py that maps `release.tag_policy` from the selected deploy/environments profile to whether the digest check is required (required for `digest-pinned`, skipped with an explicit note for `floating-tag`). | tests/deployment/test_deploy_artifacts.py: prod and test require the check, dev reports it skipped by policy. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R018 Small deployment shares one engine per host Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Small deployment shares one engine per host.** A small GraphOS deployment must start its own engine only when none answers on the host, and every GraphOS or agent server on that host must share one engine. Rollup: LANDED when every `GRAPHOS-DEPLOY-R018.<n>` child is LANDED. | A package-layout test shows no second engine is spawned and the children pass. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R018.1 Engine endpoint type Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Engine endpoint type.** GraphOS must model an engine endpoint as a Unix socket path or a remote URL in graph_os/mcp_server/composition.py. | tests/deployment/test_engine_endpoint.py: both forms parse; an empty or malformed endpoint is rejected. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R018.2 Probe before start Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Probe before start.** `detect_composition` must probe the configured endpoint and report a running engine before any start decision, in graph_os/mcp_server/composition.py. | tests/deployment/test_engine_probe.py: live fake engine detected; dead socket reported absent. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R018.3 Start only when absent Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Start only when absent.** `start_composed_services` must start the engine only when the probe finds none, and must record that it is the owner. | tests/deployment/test_engine_owner.py: absent starts once and records owner; present starts nothing. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R018.4 Second process attaches Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Second process attaches.** A second GraphOS or agent server on the same host must attach to the running engine and spawn none. | tests/deployment/test_engine_attach.py: two processes, one engine, spawn count is one. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R018.5 Owner stands down the engine Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Owner stands down the engine.** The owner must stop the engine it started on exit when no attached client remains, and must leave it running otherwise. | tests/deployment/test_engine_standdown.py: last client exit stops the engine; early owner exit does not. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R018.6 Remote engine skips local start Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Remote engine skips local start.** A configured remote engine URL must skip local start, and GraphOS must refuse to start when that URL carries no verified credential. | tests/deployment/test_remote_engine.py: remote URL starts nothing locally; missing credential gives a typed refusal. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R010.1 Preserve development skill coverage Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Preserve development skill coverage.** Model: The original parent remains the complete contract. Behavior: Retain every original skill topic, architecture boundary, build-host rule, gate, regeneration command and identity setup obligation. Wiring: Use the original documentation-freshness check and AGENTS navigation check. Refusal: New child evidence cannot replace any original acceptance obligation. Evidence: Retain the original parent receipts and require its complete acceptance. | The complete original R010 documentation acceptance remains binding. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R010.2 Keep deployment guidance executable and synchronized Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Keep deployment guidance executable and synchronized.** Model: `DeploymentExample` binds profile, configuration schema, transport, argument vector and expected probe. Behavior: Keep matching deployment examples in the packaged skill, README and documentation, including stdio and streamable HTTP. Wiring: Extend the existing development and deployment skills; derive example fields from the same host declarations and parser. Refusal: Undocumented consumed variables, unsupported commands and divergent profiles fail the documentation check. Evidence: Record example digests and actual parser and probe results. | Extract all three surfaces, parse their examples and start both transport fixtures. An obsolete flag or missing required field fails. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R010.3 Publish complete supported-profile instructions Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Publish complete supported-profile instructions.** Model: Each profile example declares prerequisites, install source, authority setup, startup, probes, logs and shutdown. Behavior: Document production package or pinned-image installation and explicit development editable installation separately. Wiring: Reuse the profile matrix under R013 and public deployment skill references. Refusal: A missing adapter stays unavailable; guidance must not present an unimplemented target as supported. Evidence: Bind each instruction set to its profile digest and repeatable clean-environment commands. | A contributor follows each supported profile from a fresh environment to a real served probe, then performs the documented shutdown. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R013.1 Preserve original profile and first-boot obligations Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Preserve original profile and first-boot obligations.** Model: The original parent remains the complete contract. Behavior: Retain both original profiles, identity modes, forced administrator, policy, secrets, sidecar topology and first-boot checks. Wiring: Keep GraphOS deployment skill ownership and SDK federation replacing direct graph-database mirrors. Refusal: New child evidence cannot replace any original acceptance obligation. Evidence: Retain the original parent receipts and require its complete acceptance. | The original first-boot tests still prove readiness, administrator creation and the chosen secrets backend before traffic. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R013.2 Record explicit component deploy or reuse choices Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Record explicit component deploy or reuse choices.** Model: `ComponentDeploymentChoice` binds component ID, selected action, endpoint reference, profile and operator confirmation. Behavior: Ask separately for every component; select deploy or reuse explicitly. Preserve operator tunings in the resolved configuration. Wiring: Extend `deployment/cli.py:134` and `genesis_environments.py`; submit choices as constraints to existing R017 engine decisions. Refusal: Missing choices, conflicting endpoints and undeclared components refuse before deployment. Evidence: Record the confirmed component inventory and its canonical digest without credentials. | Run onboarding with all-new, all-reused and mixed components. The actual presented choices match the confirmed inventory exactly. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R013.3 Make reused components connect-only Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Make reused components connect-only.** Model: A reuse choice is an immutable no-deployment constraint in the approved request. Behavior: Validate connectivity and compatibility without installing, replacing, configuring remotely or restarting the existing component. Wiring: Apply the constraint before every deployment action under R017 and the SDK effect boundary. Refusal: A plan containing effects for a reused component refuses before any source call. Unreachable reuse never falls back to deployment. Evidence: Record read-only probes and zero create, update, delete, restart and credential-write effects for reused components. | Inject a create or update for a reused service and require zero effects. A healthy reused service connects without mutation. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R013.4 Define the complete deployment target matrix Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Define the complete deployment target matrix.** Model: Each profile binds an explicit target, runtime and privilege triple from the plan matrix. Behavior: Standalone and compose each require the cross-product of daemon-managed and daemonless runtimes with rootful and rootless modes. Wiring: Extend existing profile validation and deployment artifacts; R017 remains the placement and assembly authority. Refusal: Missing target adapters or required privileges yield `unsupported_target`; never silently substitute another runtime. Evidence: Record selected target, privilege mode, package or image digest, capability probe and artifact digest. | Derive cases from every declared triple and require the complete container cross-product. Each cell needs served success and no-effect refusal evidence. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R013.5 Bind confirmed profiles to governed deployment Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Bind confirmed profiles to governed deployment.** Model: Confirmation binds component choices, target, resolved configuration digest, artifact digest and checked actor. Behavior: Present engine-produced placement and ordered steps; admit only the confirmed exact plan before SDK source effects. Wiring: Reuse R017 and GRAPHOS-A2A-R005/R006; their missing deployment-question and confirmation producers remain prerequisites. Refusal: Changed choices, stale artifacts, unavailable authority and unmatched receipts refuse. GraphOS creates no parallel deployment planner. Evidence: Join confirmed request, engine decision, SDK effects and served post-deploy probes. | A valid mixed deployment changes only deploy-marked components. Altered bindings cause zero deployment effects through the real command. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R013.6 Prove component choices and target profiles Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Prove component choices and target profiles.** Model: Seeded component inventories cover deploy, reuse, compatibility and target capability combinations. Behavior: Invoke the actual onboarding command, governed application and served first-boot probes. Wiring: Proposed `tests/deployment/test_component_choices_served.py` uses controlled services and the existing R017 path. Refusal: Mocked plan rendering alone cannot prove no-effect reuse or functional target startup. Evidence: Record exact component effects, resource identities, profile digests, readiness and surviving reused services. | For seed 4110, run 32 mixed inventories plus cases derived from every matrix triple. Omitted privilege cells fail coverage; refused plans cause zero effects. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R018.7 Preserve reuse through engine attachment Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Preserve reuse through engine attachment.** Model: The confirmed engine choice binds the selected endpoint and its compatibility evidence. Behavior: A reuse-marked engine only attaches; a dead endpoint never authorizes a local replacement. All existing R018 children still bind. Wiring: Extend `detect_composition` and `start_composed_services` using the R013 confirmed choice. Refusal: Unavailable or incompatible reuse returns a typed refusal with zero starts. Evidence: Record actual endpoint identity and engine start count across repeated starts. | Two hosts reuse one engine, then repeat with it unavailable. The unavailable case starts zero replacement engines. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-DEPLOY-R018.8 Keep reused resources alive across host shutdown Definition — GRAPHOS-DEPLOY / GRAPHOS-DEPLOY — Portable GraphOS development and deploymentCanonical requirement and verification source**Keep reused resources alive across host shutdown.** Model: Lifecycle ownership distinguishes a created engine from a reused endpoint. Behavior: Stop only resources this start owns under the original last-client rule; never stop a reused service. Wiring: Use the existing composition supervisor and R018.3 through R018.6 ownership contract. Refusal: Unknown ownership refuses destructive cleanup rather than guessing. Evidence: Record shutdown decisions and independent post-exit probes of reused endpoints. | Restart and stop both host clients. The reused engine remains reachable; the original owned-engine last-client tests remain required. | requirement | GRAPHOS-DEPLOY | SPECIFIED | No recorded commit/test evidence |
| GRAPHOS-INGRESS GRAPHOS-INGRESS — Portable public ingress and identity cutover | spec | None | LANDED | No recorded commit/test evidence |
| GRAPHOS-INGRESS-R001 Public ingress rename with Keycloak and OpenBao cutover Definition — GRAPHOS-INGRESS / GRAPHOS-INGRESS — Portable public ingress and identity cutoverCanonical requirement and verification source**Public ingress rename with Keycloak and OpenBao cutover.** GraphOS's public ingress is served from its own hostname with a renamed TLS certificate, ingress resource and secret, backed by an OpenBao-stored key delivered through an ExternalSecret, updated Keycloak redirect URIs, and the corresponding host-path and environment configuration; a time-bounded redirect from the prior hostname is available during cutover. | A served probe completes a browser login through Keycloak against the new hostname and confirms the MCP and REST endpoints respond under the renamed ingress. | requirement | GRAPHOS-INGRESS | LANDED | d35d445334f2 |
| GRAPHOS-INGRESS-R001.1 Typed public-ingress profile model Definition — GRAPHOS-INGRESS / GRAPHOS-INGRESS — Portable public ingress and identity cutoverCanonical requirement and verification source**Typed public-ingress profile model.** A closed-schema, versioned value object (`PublicIngressProfile`) carries the canonical public origin, TLS secret reference, exact callback URI and trusted-proxy identity, independent of `EnvironmentProfile`; it refuses an unknown field, a missing/malformed TLS reference, a malformed callback, an HTTP origin that is not loopback, and a wildcard Host or proxy. | Unit tests (T-IN-01/T-IN-02) show a deterministic redacted render for a valid mapping and a named-key refusal for each malformed/unknown/missing input, with no secret value in any error text. | requirement | GRAPHOS-INGRESS | LANDED | d35d445334f2 |