- AU-CONTEXT23
- AU-CONTROL100
- AU-SEC24
- AU-BOUNDARY212
- AU-QUAL18
- AU-DEV14
- AU-RETIRE13
- AU-INTEGRATION25
- AU-SEMANTIC109
- AU-BASELINE5
- AU-HARNESS144
- AU-FREEZE3
- AU-RETRIEVAL30
- Requirementsall slices in all specs720
- Requirements not donenot VERIFIED587
- Specs not donewhole specs only13
Each spec shows its requirement count. Panel J lists every record.
Requirements (720)
Specs (13)
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 |
|---|---|---|---|---|---|
| AU-CONTEXTAU-CONTEXT — Agent context, retrieval feedback and finance roles | 23 | 13/23 | 11 | SPECIFIED | agent_utilities/core/contextual_model.py:752 implementation: file exists; coverage not verified agent_utilities/knowledge_graph/retrieval/context_compiler.py implementation: file exists; coverage not verified agent_utilities/knowledge_graph/retrieval/context_knapsack.py:303 implementation: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified status.json implementation: file exists; coverage not verified |
| AU-CONTROLAU-CONTROL — Agent control plane | 100 | 37/100 | 15 | SPECIFIED | agent_utilities/agent/factory.py:529 implementation: file exists; coverage not verified agent_utilities/capabilities/fleet_tool_search.py:198 implementation: file exists; coverage not verified agent_utilities/capabilities/fleet_tool_search.py:54 implementation: file exists; coverage not verified agent_utilities/capabilities/fleet_tool_search.py:84 implementation: file exists; coverage not verified agent_utilities/core/cgroup_resources.py:52 implementation: file exists; coverage not verified agent_utilities/decide/consumers/task_planner.py implementation: file exists; coverage not verified agent_utilities/deployment/skill_validation.py:590 implementation: file exists; coverage not verified agent_utilities/graph/builder.py implementation: file exists; coverage not verified agent_utilities/graph/coordination.py:255 implementation: file exists; coverage not verified agent_utilities/graph/coordination.py:51 implementation: file exists; coverage not verified agent_utilities/graph/hierarchical_coordination.py:65 implementation: file exists; coverage not verified agent_utilities/graph/planning/__init__.py:165 implementation: file exists; coverage not verified agent_utilities/knowledge_graph/enrichment/writeback/approval.py:47 implementation: file exists; coverage not verified agent_utilities/mcp/tools/engine_surface_tools.py:1694 implementation: file exists; coverage not verified agent_utilities/orchestration/agent_library.py implementation: file exists; coverage not verified agent_utilities/rlm/sandboxes/_bridge.py:287 implementation: file exists; coverage not verified agent_utilities/rlm/sandboxes/container_fork_backend.py:54 implementation: file exists; coverage not verified agent_utilities/runtime/run_vcs/carrier.py:101 implementation: file exists; coverage not verified agent_utilities/runtime/run_vcs/kernel.py:145 implementation: file exists; coverage not verified agent_utilities/runtime/run_vcs/run_commit.py:30 implementation: file exists; coverage not verified agent_utilities/runtime/run_vcs/run_session.py:39 implementation: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified status.json implementation: file exists; coverage not verified tests/unit/decide/test_task_planner.py test: file exists; coverage not verified tests/unit/knowledge_graph/test_virtual_graph.py test: file exists; coverage not verified tests/unit/test_intent_fleet_ranking_and_ties.py test: file exists; coverage not verified |
| AU-SECAU-SEC — Agent security and governed policy | 24 | 10/24 | 7 | SPECIFIED | agent_utilities/agent/factory.py:1054 implementation: file exists; coverage not verified agent_utilities/capabilities/kg_audit_sink.py:113 implementation: file exists; coverage not verified agent_utilities/security/request_identity.py implementation: file exists; coverage not verified agent_utilities/security/tool_guard.py:383 implementation: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified status.json implementation: file exists; coverage not verified |
| AU-BOUNDARYAU-BOUNDARY — AU boundary deconstruction | 212 | 82/212 | 50 | SPECIFIED | `au-boundary-deconstruction` documentation: file exists; coverage not verified agent_utilities/knowledge_graph/backends/epistemic_graph_backend.py implementation: file exists; coverage not verified agent_utilities/knowledge_graph/retrieval/context_compiler.py implementation: file exists; coverage not verified requirements documentation: file exists; coverage not verified requirements documentation: file exists; coverage not verified requirements documentation: file exists; coverage not verified requirements documentation: file exists; coverage not verified requirements documentation: file exists; coverage not verified requirements documentation: file exists; coverage not verified requirements documentation: file exists; coverage not verified requirements documentation: file exists; coverage not verified requirements documentation: file exists; coverage not verified architecture/component-registry.yml implementation: file exists; coverage not verified deletion and relocation inventory documentation: file exists; coverage not verified deliverable matrix documentation: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified status.json implementation: file exists; coverage not verified |
| AU-QUALAU-QUAL — Reproducible AU boundary and quality gates | 18 | 11/18 | 4 | SPECIFIED | .config/pre-commit.yaml implementation: file exists; coverage not verified agent_utilities/capabilities/kg_audit_sink.py:385 implementation: file exists; coverage not verified agent_utilities/harness/red_team.py:44 implementation: file exists; coverage not verified agent_utilities/harness/reliability_scorers.py implementation: file exists; coverage not verified agent_utilities/mcp/harness_server.py:574 implementation: file exists; coverage not verified scripts/check_liveness.py implementation: file exists; coverage not verified scripts/liveness_deferred.tsv implementation: file exists; coverage not verified scripts/uv_workspace.py implementation: file exists; coverage not verified tests/integration/profiles/test_profile_tiny_zero_dep.py test: file exists; coverage not verified tests/unit/mcp/test_graphos_bootstrap_isolation.py test: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified status.json implementation: file exists; coverage not verified |
| AU-DEVAU-DEV — Public AU development environment and skill lifecycle | 14 | 9/14 | 6 | SPECIFIED | requirements.md documentation: file exists; coverage not verified scripts/uv_workspace.py implementation: file exists; coverage not verified status.json implementation: file exists; coverage not verified |
| AU-RETIREAU-RETIRE — Retire duplicate graph engine authority in AU | 13 | 11/13 | 3 | SPECIFIED | cutover matrix documentation: file exists; coverage not verified Cutover documentation: file exists; coverage not verified Failure and security documentation: file exists; coverage not verified Interfaces and data flow documentation: file exists; coverage not verified Inventory and migration documentation: file exists; coverage not verified deletion and relocation inventory documentation: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified |
| AU-INTEGRATIONAU-INTEGRATION — AU integration and release reliability | 25 | 25/25 | 6 | LANDED | scripts/uv_workspace.py implementation: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified status.json implementation: file exists; coverage not verified |
| AU-SEMANTICAU-SEMANTIC — AU semantic client and generated contract | 109 | 57/109 | 23 | SPECIFIED | agent_utilities/core/model_router.py:111 implementation: file exists; coverage not verified agent_utilities/core/resource_optimizer.py:232 implementation: file exists; coverage not verified agent_utilities/decide/consumers/routing.py:58 implementation: file exists; coverage not verified agent_utilities/harness/agentic_evolution_engine.py:316 implementation: file exists; coverage not verified agent_utilities/knowledge_graph/backends/epistemic_graph_backend.py implementation: file exists; coverage not verified agent_utilities/knowledge_graph/retrieval/context_compiler.py implementation: file exists; coverage not verified tests/gates/test_epistemic_graph_schema_authority_cutover.py test: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified status.json implementation: file exists; coverage not verified |
| AU-BASELINEAU-BASELINE — Baseline ingestion and served ontology content | 5 | 5/5 | 0 | LANDED | scripts/check_complexity_staged.py implementation: file exists; coverage not verified scripts/check_event_loop_blocking.py implementation: file exists; coverage not verified scripts/check_no_env_sprawl.py implementation: file exists; coverage not verified scripts/check_swallowed_errors.py implementation: file exists; coverage not verified spec.md documentation: file exists; coverage not verified test-spec.md documentation: file exists; coverage not verified plan.md#architecture documentation: file exists; coverage not verified plan.md#interfaces-and-data-model documentation: file exists; coverage not verified plan.md#live-integration-path documentation: file exists; coverage not verified requirements table documentation: file exists; coverage not verified |
| AU-HARNESSAU-HARNESS — Harness evolution and governed work | 144 | 12/144 | 8 | SPECIFIED | agent_utilities/capabilities/composition.py:160 implementation: file exists; coverage not verified agent_utilities/capabilities/telemetry_instrumentation.py:40 implementation: file exists; coverage not verified agent_utilities/core/model_concurrency.py:296 implementation: file exists; coverage not verified agent_utilities/core/registry/kg_adapter.py:660 implementation: file exists; coverage not verified agent_utilities/harness/aegis_loop.py:274 implementation: file exists; coverage not verified agent_utilities/harness/assimilation_benchmark.py implementation: file exists; coverage not verified agent_utilities/harness/edit_engine.py:457 implementation: file exists; coverage not verified agent_utilities/harness/harness_gate.py:127 implementation: file exists; coverage not verified agent_utilities/harness/substrate_trainer.py implementation: file exists; coverage not verified agent_utilities/observability/custom_observability.py:850 implementation: file exists; coverage not verified agent_utilities/observability/replay_engine.py:48 implementation: file exists; coverage not verified agent_utilities/observability/replay_engine.py:81 implementation: file exists; coverage not verified agent_utilities/orchestration/agent_runner.py:702 implementation: file exists; coverage not verified agent_utilities/rlm/config.py:60 implementation: file exists; coverage not verified agent_utilities/rlm/repl.py:470 implementation: file exists; coverage not verified agent_utilities/rlm/repl.py:972 implementation: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified status.json implementation: file exists; coverage not verified |
| AU-FREEZEAU-FREEZE — Freeze authoritative AU release evidence | 3 | 3/3 | 0 | LANDED | agent_utilities/_version.py implementation: file exists; coverage not verified scripts/release/assemble_manifest.py implementation: file exists; coverage not verified scripts/release/check_compatibility.py implementation: file exists; coverage not verified scripts/release/generate_component_evidence.py implementation: file exists; coverage not verified scripts/source_freeze_gate.py implementation: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified status.json implementation: file exists; coverage not verified |
| AU-RETRIEVALAU-RETRIEVAL — Reproducible structure-aware retrieval evaluation | 30 | 1/30 | 0 | SPECIFIED | agent_utilities/harness/citation_tracker.py implementation: file exists; coverage not verified agent_utilities/knowledge_graph/retrieval/evaluation_corpus.py implementation: file exists; coverage not verified requirements.md documentation: file exists; coverage not verified status.json implementation: file exists; coverage not verified test-spec.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/agent-utilities / Unassigned (13)
AU-BASELINE: no plan diagram declared.
AU-BOUNDARY: source plan diagrams (Mermaid)
flowchart LR
Client["Browser, CLI, agent package"] --> Host[graph-os served host]
Host --> API[agent_utilities.api]
API --> App[AU agent application]
App --> EGC[Generated EG client]
Host --> EGC
Host --> SDK[Connector SDK runner]
SDK --> EGC
EGC --> EG[EG durable authority]
AU-CONTEXT: source plan diagrams (Mermaid)
flowchart LR
Host[graph-os schedule/UI] --> Role[AU agent role]
Role --> Context[AU context compiler]
Context --> EG["EG retrieval, Decide, finance-core"]
Role --> Claims[Evidence-labelled explanation]
Role --> SDK[SDK read feed and governed effects]
SDK --> EG
EG --> Context
AU-CONTROL: no plan diagram declared.
AU-DEV: no plan diagram declared.
AU-FREEZE: no plan diagram declared.
AU-HARNESS: no plan diagram declared.
AU-INTEGRATION: no plan diagram declared.
AU-QUAL: no plan diagram declared.
AU-RETIRE: no plan diagram declared.
AU-RETRIEVAL: no plan diagram declared.
AU-SEC: source plan diagrams (Mermaid)
flowchart LR
P[Principal] --> G[graph-os verified public boundary]
G --> A[AU actor and session projection]
A --> T[AU tool policy and decision]
T --> E[epistemic-graph final authorization]
E --> L[Durable lease and audit]
S[SDK connector sync] --> E
E --> I[Invalidation event]
I --> C[AU cache]
AU-SEMANTIC: source plan diagrams (Mermaid)
sequenceDiagram
participant Host as graph-os
participant AU as AU application
participant Client as Generated EG client
participant EG as EG schema and state
Host->>AU: execute(verified context, RunSpec)
AU->>Client: inspect/query/validate typed request
Client->>EG: pinned contract digest + scoped request
EG-->>Client: typed result + receipt/provenance
Client-->>AU: exact generated result
AU-->>Host: agent outcome + emitted events
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/agent-utilities / Unassigned
| Spec | Relationship | Target | Evidence |
|---|---|---|---|
| AU-BASELINE | No relationships declared; dependencies unknown | ||
| AU-BOUNDARY | references | `agent-control-plane` | Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/au-boundary-deconstruction/plan.md |
| AU-BOUNDARY | references | `agent-security-policy` | Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/au-boundary-deconstruction/plan.md |
| AU-BOUNDARY | references | `au-boundary-quality` | Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/au-boundary-deconstruction/plan.md |
| AU-BOUNDARY | references | `au-developer-environment` | Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/au-boundary-deconstruction/plan.md |
| AU-BOUNDARY | references | `au-engine-duplicate-retirement` | Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/au-boundary-deconstruction/plan.md |
| AU-BOUNDARY | references | `au-integration-reliability` | Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/au-boundary-deconstruction/plan.md |
| AU-BOUNDARY | references | `au-semantic-client` | Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/au-boundary-deconstruction/plan.md |
| AU-BOUNDARY | references | `harness-evolution` | Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/au-boundary-deconstruction/plan.md |
| AU-BOUNDARY | references | `agent-context-and-finance` | Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/au-boundary-deconstruction/spec.md |
| AU-CONTEXT | references | AU-SEC-01 | Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/agent-context-and-finance/spec.md |
| AU-CONTROL | references | harness-evolution | Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/agent-control-plane/plan.md |
| AU-DEV | No relationships declared; dependencies unknown | ||
| AU-FREEZE | No relationships declared; dependencies unknown | ||
| AU-HARNESS | references | agent control plane | Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/harness-evolution/spec.md |
| AU-INTEGRATION | No relationships declared; dependencies unknown | ||
| AU-QUAL | No relationships declared; dependencies unknown | ||
| AU-RETIRE | references | boundary cutover spec | Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/au-engine-duplicate-retirement/spec.md |
| AU-RETRIEVAL | No relationships declared; dependencies unknown | ||
| AU-SEC | No relationships declared; dependencies unknown | ||
| AU-SEMANTIC | No relationships declared; dependencies unknown | ||
Issues
0 open at capture.
Pull Requests
2 open at capture.
- #282 docs(specs): define current-plan snapshot producer updated 2026-10-12T00:07:58Z
- #281 docs(specs): align context and disclosure consumer boundaries updated 2026-10-12T00:07:56Z
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 (733 rows)
| ID / source | Kind | Parent | State | Commit / test evidence |
|---|---|---|---|---|
| AU-CONTEXT AU-CONTEXT — Agent context, retrieval feedback and finance roles | spec | None | SPECIFIED | No recorded commit/test evidence |
| AU-CONTEXT-R001 RetrievalPath templates feed EG-DECISION-ENGINE-R029 as candidates Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**RetrievalPath templates feed EG-DECISION-ENGINE-R029 as candidates.** agent-utilities keys RetrievalPath templates by task class and composed schema digest and submits them as candidates to EG-DECISION-ENGINE-R029 rather than self-promoting from its own unverified outcomes. Topology-to-skill edges support plan assembly, with ranking, optimization, and feedback owned by epistemic-graph. | Integration tests confirm a submitted RetrievalPath candidate reaches epistemic-graph's decision engine and that agent-utilities performs no local self-promotion. | requirement | AU-CONTEXT | VERIFIED | 88c61dc9164c c563cef1f530 tests/unit/decide/test_retrieval_consumer.py:15 tests/unit/decide/test_retrieval_consumer.py:30 |
| AU-CONTEXT-R002 Corpus re-embedding uses a governed shadow ANN swap Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**Corpus re-embedding uses a governed shadow ANN swap.** A corpus re-embedding request runs as a governed agent-utilities workflow under a capacity lease: it asks epistemic-graph to build a shadow approximate-nearest-neighbor generation, checks population-stability and retrieval-quality receipts, and proposes activation. epistemic-graph performs the atomic swap and can roll it back. | A fault-injection test triggers rollback on a failed stability or quality receipt and confirms the prior ANN generation remains active. | requirement | AU-CONTEXT | VERIFIED | 88c61dc9164c f0f5e51f6b47 tests/unit/decide/test_generation_cycle.py:187 |
| AU-CONTEXT-R003 Embedding admission changes come from reviewed proposals only Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**Embedding admission changes come from reviewed proposals only.** agent-utilities observes never-retrieved content classes and proposes changes to the embedding admission table from that independently observed feedback. It never writes the durable admission policy directly; only epistemic-graph or a human reviewer can accept the proposal. | A unit test confirms a never-retrieved content class produces a proposal record without any direct admission-table write. | requirement | AU-CONTEXT | VERIFIED | 88c61dc9164c c563cef1f530 tests/unit/knowledge_graph/ingestion/test_admission_feedback.py:25 tests/unit/knowledge_graph/ingestion/test_admission_feedback.py:67 |
| AU-CONTEXT-R004 Context sizing solves a certified multi-resolution knapsack Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**Context sizing solves a certified multi-resolution knapsack.** agent-utilities sizes context packages by solving a certified multi-resolution knapsack over exact tokenizer-weighted items against model window, cost, and latency capacity, preserving cited range and source identifiers. It abstains when no admissible package fits the budget. | Unit tests assert correct selection against known-optimal knapsack cases and confirm abstention when no package satisfies all budgets. | requirement | AU-CONTEXT | SPECIFIED | 88c61dc9164c c563cef1f530 tests/retrieval/test_context_knapsack.py:143 tests/retrieval/test_context_knapsack.py:40 |
| AU-CONTEXT-R004.1 Model Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**Model.** `WindowFit` in `agent_utilities/knowledge_graph/retrieval/context_knapsack.py` carries `fits`, counted prompt tokens, received capacity tokens, overage and a closed `verdict`. The context policy and window budget arrive as a received `ContextBudget` from EG-DECISION-ENGINE. `ContextSizer` at `context_knapsack.py:303` lacks this type. | `tests/unit/knowledge_graph/retrieval/test_context_window_fit.py::test_window_fit_fields` | requirement | AU-CONTEXT | SPECIFIED | No recorded commit/test evidence |
| AU-CONTEXT-R004.2 Behavior Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**Behavior.** The sizer must count the whole prompt with its tokenizer. It must compare the count to the received `Capacity.tokens` (`context_knapsack.py:98`). The over-window margin is received from the engine; fallback default 0. A prompt without a countable tokenizer must yield `uncountable`. | `tests/unit/knowledge_graph/retrieval/test_context_window_fit.py::test_over_window_margin_default` | requirement | AU-CONTEXT | SPECIFIED | No recorded commit/test evidence |
| AU-CONTEXT-R004.3 Wiring Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**Wiring.** `compile_model_context` (`agent_utilities/core/contextual_model.py:752`) must apply the received budget inside `sizing_scope`. Its production callers are `contextual_model.py:903` and `context_compiler_serving.py:565`. No production caller checks whole-prompt fit today. | `tests/unit/knowledge_graph/retrieval/test_context_window_fit.py::test_compile_model_context_checks_fit` | requirement | AU-CONTEXT | SPECIFIED | No recorded commit/test evidence |
| AU-CONTEXT-R004.4 Refusal Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**Refusal.** An `over_window` verdict must not truncate silently. The sizer must return a typed `ContextOverWindow` result that names the overage. It must return the prompt to the caller for the engine's plan. An `uncountable` verdict must abstain. | `tests/unit/knowledge_graph/retrieval/test_context_window_fit.py::test_over_window_returns_typed_handoff` | requirement | AU-CONTEXT | SPECIFIED | No recorded commit/test evidence |
| AU-CONTEXT-R004.5 Evidence Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**Evidence.** Each check must write five fields to the run trace: prompt tokens, capacity, overage, verdict and tokenizer identity. The trace must not store the prompt text. | `tests/unit/knowledge_graph/retrieval/test_context_window_fit.py::test_fit_verdict_in_trace` | requirement | AU-CONTEXT | SPECIFIED | No recorded commit/test evidence |
| AU-CONTEXT-R004.6 Hot-path proof Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**Hot-path proof.** The entry point is the served context-compile operation in `context_compiler_serving.py:565`. A prompt larger than the received window must return `ContextOverWindow`. A fitting prompt must compile unchanged. Test path: `tests/integration/test_context_window_fit_served.py`. | `tests/integration/test_context_window_fit_served.py::test_served_over_window_prompt` | requirement | AU-CONTEXT | SPECIFIED | No recorded commit/test evidence |
| AU-CONTEXT-R005 Finance scheduling and a sourced flip-explainer agent Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**Finance scheduling and a sourced flip-explainer agent.** agent-utilities schedules finance backfill and scan work and provides a flip-explainer agent that computes its answer from math first and attaches every claim to a cited source. Scheduling surfaces presented to users are hosted by graph-os. | Unit tests verify the explainer's output always derives from the computed math and that every claim cites a source. | requirement | AU-CONTEXT | LANDED | 88c61dc9164c f0f5e51f6b47 |
| AU-CONTEXT-R005.1 Retrieval/decide-layer work lands under a commit that disclaims this row. No finance-scheduling or flip-explainer code ships Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**Retrieval/decide-layer work lands under a commit that disclaims this row. No finance-scheduling or flip-explainer code ships.** `status.json`'s `landed_in` commit `88c61dc9164c` delivers `AU-CONTEXT-R001`-`R004` (the retrieval/decide consumer layer) and its own commit message states `AU-CONTEXT-R005..R008` are "not part of this slice". No `flip_explainer.py`, finance backfill scheduler, or finance scan scheduler exists anywhere in the tree at `origin/main`. | Commit `88c61dc9164c`'s message names R005..R008 as out of scope. `git ls-tree -r origin/main` contains no `flip_explainer.py`. | requirement | AU-CONTEXT | LANDED | 88c61dc9164c |
| AU-CONTEXT-R005.2 Build finance scheduling and the sourced flip-explainer agent Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**Build finance scheduling and the sourced flip-explainer agent.** agent-utilities implements `flip_explainer.py`, a flip-explainer agent that computes its answer from math first and attaches every claim to a cited source, plus the finance backfill and scan scheduler the parent row describes; scheduling surfaces presented to users remain hosted by graph-os. | Unit tests verify the explainer's output always derives from the computed math and that every claim cites a source. | requirement | AU-CONTEXT | VERIFIED | 0209a00db1f0 0c09b35ea390 tests/unit/finance_agents/test_flip_explainer.py:19 |
| AU-CONTEXT-R006 Paper trading is isolated; live orders need governed approval Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**Paper trading is isolated; live orders need governed approval.** agent-utilities exposes read-only positions and an isolated paper-trading simulation account. Live orders require the SDK's governed write-back contract, a verified human approval lease, account capability, and an exact idempotency key; no agent-utilities model output or UI payload can grant that authority. A finance widget replaces the placeholder widget, and duplicated finance math is removed from agent-utilities. | Negative tests confirm a live order is rejected without an approval lease and idempotency key, and that paper and live paths use isolated accounts. | requirement | AU-CONTEXT | VERIFIED | 0cd7be250b3d 88c61dc9164c |
| AU-CONTEXT-R006.1 agent-utilities keeps finance agent roles only; paper trading stays isolated Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**agent-utilities keeps finance agent roles only; paper trading stays isolated.** agent-utilities exposes read-only positions and an isolated paper-trading simulation account, deletes duplicated finance math/connector modules, and documents that no local model output or UI payload can grant live-order authority. | A negative test confirms the paper path uses an isolated account and that no agent-utilities code path can authorize a live order. | requirement | AU-CONTEXT | VERIFIED | 0cd7be250b3d 636c91a16136 dbe03a6687ca f474735cab25 tests/unit/finance/test_quant_live_order_refusal.py:36 tests/unit/finance/test_quant_live_order_refusal.py:61 |
| AU-CONTEXT-R007 Finance math and feeds move out of agent-utilities Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**Finance math and feeds move out of agent-utilities.** agent-utilities deletes its deterministic finance math and quant tooling, moving the equivalent calculations to epistemic-graph's finance core. Market data, market feeds, crypto, exchange, banking, and payments connectors move to SDK connector packages; agent-utilities retains only the finance agent roles: trading_swarm, debate_engine, investor_debate, research_autopilot, and persona_heuristics. Split: `engine_finance.py` is still the live implementation today, so this lands in two steps; see `AU-CONTEXT-R007.1`/`.2`. | An import census confirms no finance math or connector modules remain in agent-utilities, and parity tests cover the migrated calculations at their new owner. | requirement | AU-CONTEXT | SPECIFIED | 703c3eb9d88d 88c61dc9164c af11c84309ee |
| AU-CONTEXT-R007.1 A boundary test pins the finance-math module set, and a typed delegation seam prefers EG when available Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**A boundary test pins the finance-math module set, and a typed delegation seam prefers EG when available.** `tests/unit/finance/test_r007_finance_module_boundary.py` pins the current `agent_utilities/domains/finance/*.py` module set so it may only shrink, never grow, and `api/finance_delegation.py` gives callers one typed seam (`kelly_size_via_eg_or_local`) that calls EG's finance-core primitives when `resolve_finance_primitives_client()` finds them installed, falling back to the caller-supplied local calculation otherwise. | A test confirms the current module set is a subset of the pinned baseline, confirms the delegation seam falls back to the local calculation while EG's finance-core client is absent, and confirms it would delegate to EG's client if one were installed. | requirement | AU-CONTEXT | VERIFIED | 0209a00db1f0 4eac8c6dc419 af11c84309ee f474735cab25 tests/unit/finance/test_finance_delegation.py:16 tests/unit/finance/test_finance_delegation.py:23 tests/unit/finance/test_finance_delegation.py:41 |
| AU-CONTEXT-R007.2 The local finance-math modules and the fallback branch are deleted after cutover Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**The local finance-math modules and the fallback branch are deleted after cutover.** Once epistemic-graph's finance core has documented, per-method parity evidence for every calculation the pinned module set names, `agent_utilities/domains/finance/**` (excluding the five retained agent-role modules) and `engine_finance.py` are deleted, the delegation seam's local-fallback branch in `finance_delegation.py` is removed, and the pinned baseline in the boundary test shrinks to match, closing `AU-CONTEXT-R007`. | An import census confirms no finance math or connector modules remain in agent-utilities, and parity tests cover the migrated calculations at their new owner. | requirement | AU-CONTEXT | SPECIFIED | 9effc03d5c99 f0f5e51f6b47 |
| AU-CONTEXT-R007.2.1 Delete the local finance-math modules and fallback branch once EG parity evidence exists Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**Delete the local finance-math modules and fallback branch once EG parity evidence exists.** `agent_utilities/domains/finance/**` (excluding the five retained agent-role modules: `trading_swarm`, `debate_engine`, `investor_debate`, `research_autopilot`, `persona_heuristics`) and `agent_utilities/knowledge_graph/orchestration/engine_finance.py` are still present on `origin/main` post-claimed-cutover; the local-fallback branch in `agent_utilities/api/finance_delegation.py` is not removed; `tests/unit/finance/test_r007_finance_module_boundary.py` still pins the pre-cutover module set. This remains blocked on epistemic-graph: `EG-FINANCE-PRIMITIVES-R016` has Pine-parity fixtures only for ATR/SuperTrend, missing SMA, EMA, 200-week SMA, the 20/21 band, and Heikin-Ashi. | An import census confirms no finance math or connector modules remain in agent-utilities beyond the five retained role modules; parity tests cover every migrated calculation at its new owner in epistemic-graph, gated on `EG-FINANCE-PRIMITIVES-R016` delivering full Pine-parity fixtures. | requirement | AU-CONTEXT | SPECIFIED | No recorded commit/test evidence |
| AU-CONTEXT-R008 Finance recommendations are calibrated, cited, and informational Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**Finance recommendations are calibrated, cited, and informational.** agent-utilities produces a calibrated recommendation for each holding or watchlist item, to accumulate, hold, or de-risk, that may abstain when evidence is inadequate and cites its strategy version and supporting evidence. Each recommendation is recorded as an informational-only AnalysisSnapshot, with per-strategy scorecards tracked for comparison. | Unit tests confirm recommendations abstain below a calibration threshold and that every AnalysisSnapshot cites a strategy version and evidence identifiers. | requirement | AU-CONTEXT | VERIFIED | 0cd7be250b3d 88c61dc9164c |
| AU-CONTEXT-R008.1 Typed, calibrated AnalysisSnapshot model with abstention Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**Typed, calibrated AnalysisSnapshot model with abstention.** agent-utilities defines the `AnalysisSnapshot`/`StrategyScorecard` typed model and a `recommend()` builder that abstains when evidence is missing or confidence is below a calibration threshold; `informational_only` is fixed `True` and not settable, and no order-submission entry point exists here. | Unit tests confirm abstention below the calibration threshold and when no evidence is cited, and that a non-abstaining snapshot always carries its strategy version and evidence identifiers. | requirement | AU-CONTEXT | VERIFIED | 0cd7be250b3d af11c84309ee f474735cab25 tests/unit/finance/test_analysis_snapshot_recommendation.py:27 tests/unit/finance/test_analysis_snapshot_recommendation.py:47 tests/unit/finance/test_analysis_snapshot_recommendation.py:64 |
| AU-CONTEXT-R008.2 A real entry point produces recommendations from live holdings Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**A real entry point produces recommendations from live holdings.** agent-utilities wires `recommend()` to the real holdings/watchlist read path (positions, market observations) and a registered tool/agent entry point, replacing any placeholder recommendation output. | An integration test confirms a recommendation for a real holding ID flows through the registered entry point and returns an `AnalysisSnapshot`. | requirement | AU-CONTEXT | VERIFIED | 9effc03d5c99 tests/unit/finance/test_recommend_entrypoint.py:57 tests/unit/finance/test_recommend_entrypoint.py:78 |
| AU-CONTEXT-R008.3 Per-strategy scorecards persist for comparison Definition — AU-CONTEXT / AU-CONTEXT — Agent context, retrieval feedback and finance rolesCanonical requirement and verification source**Per-strategy scorecards persist for comparison.** Each strategy version's `StrategyScorecard` is persisted (not recomputed in-memory per call) so multiple strategies can be compared over time. | A test confirms scorecard state for a strategy version survives across separate `recommend()` calls and is queryable per strategy version. | requirement | AU-CONTEXT | VERIFIED | 9effc03d5c99 tests/unit/finance/test_recommend_entrypoint.py:122 tests/unit/finance/test_recommend_entrypoint.py:92 |
| AU-CONTROL AU-CONTROL — Agent control plane | spec | None | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R001 Layered agent execution stack from task mapping to harness run Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Layered agent execution stack from task mapping to harness run.** agent-utilities implements agent layers L0 through L5 that turn a task into a committed plan obtained from epistemic-graph and execute it through a harness and sandbox abstraction, so the same committed plan can run across different underlying agent harnesses. | Proven by a conformance kit that exercises every layer end to end across each supported harness adapter. | requirement | AU-CONTROL | VERIFIED | c049e325e91d e0420bc5ba59 tests/unit/layers/test_harness_port.py:115 tests/unit/layers/test_harness_port.py:124 tests/unit/layers/test_harness_port.py:504 |
| AU-CONTROL-R002 Component routing through one committed graph-engine decision Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Component routing through one committed graph-engine decision.** agent-utilities selects the model, prompt, skill, tool, harness, account mode, and sandbox for a run by requesting a single committed decision from epistemic-graph rather than choosing them itself, and binds the selected component digests into the resulting run. | Proven by a generated-client contract test asserting routing requests produce one committed decision with bound component digests. | requirement | AU-CONTROL | VERIFIED | 4351f26b3d3b c049e325e91d e0420bc5ba59 tests/unit/decide/test_routing_consumers.py:52 |
| AU-CONTROL-R003 Agent graph composition via epistemic-graph assembly, not an LLM Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Agent graph composition via epistemic-graph assembly, not an LLM.** agent-utilities builds its agent execution graph by calling epistemic-graph's assembly interface through the generated client, and must not compose the graph with a language model or a local shadow solver. | Proven by a source-level gate plus a deterministic fixture test confirming graph construction only calls the generated assembly client. | requirement | AU-CONTROL | VERIFIED | c049e325e91d e0420bc5ba59 tests/unit/decide/test_assembly_consumer.py:46 |
| AU-CONTROL-R004 Abstention escalations re-enter as labelled claims, not proofs Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Abstention escalations re-enter as labelled claims, not proofs.** When agent-utilities abstains on an unknown or unverified premise and escalates to a model or a human for input, that response is recorded as a labelled claim fed back into epistemic-graph, not treated as an authoritative decision or proof. | Proven by a negative test asserting an escalation response cannot authorize execution without a subsequent committed decision. | requirement | AU-CONTROL | VERIFIED | c049e325e91d e0420bc5ba59 tests/unit/decide/test_runner.py:68 |
| AU-CONTROL-R005 Advisory pre-tool risk scoring Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Advisory pre-tool risk scoring.** agent-utilities computes an advisory risk score for a proposed tool call before it executes. It surfaces that score to the caller and to epistemic-graph's decision. It never authorizes or blocks the call itself. | Proven by a unit test. It asserts a high-risk score is advisory only. The score never substitutes for a committed decision or policy check. | requirement | AU-CONTROL | VERIFIED | 47a52e7442bd c049e325e91d e0420bc5ba59 tests/unit/decide/test_risk_consumer.py:11 tests/unit/decide/test_risk_consumer.py:24 |
| AU-CONTROL-R006 Cost-aware routing informed by usage accounting Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Cost-aware routing informed by usage accounting.** agent-utilities' routing requests include accumulated usage and cost accounting from its own event layer as an input to epistemic-graph's decision, so a later run can be routed with awareness of prior spend rather than ignoring it. | Proven by an integration test showing recorded usage data changes a subsequent routing decision's cost inputs. | requirement | AU-CONTROL | VERIFIED | 4351f26b3d3b a1dd4111f04f c049e325e91d |
| AU-CONTROL-R006.1 A production ObservedCost implementer and a caller in routing Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**A production ObservedCost implementer and a caller in routing.** `agent_utilities/decide/consumers/routing.py` defines the `ObservedCost` protocol. No production implementer backed by the usage/cost event layer exists. The functions `route_by_cost`, `route_choice` and `route_model` never receive a real `observed` argument. Routing therefore never sees real usage cost. | An integration test wires a real `ObservedCost` implementer into a routing call. The implementer reads recorded usage events. The test asserts the decision's cost inputs change. | requirement | AU-CONTROL | VERIFIED | 6a43f914f823 tests/unit/decide/test_routing_consumers.py:78 |
| AU-CONTROL-R007 Swarm topology selection routed through Decide Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Swarm topology selection routed through Decide.** agent-utilities selects multi-agent swarm topology, including width, rounds, stop rule, and subagent caps, by requesting a decision from epistemic-graph instead of a local heuristic, covering the topology families delivered under AU-CONTROL-R009 through AU-CONTROL-R020. | Proven by integration tests across the supported topology families confirming each selection traces to a committed decision. | requirement | AU-CONTROL | VERIFIED | a1dd4111f04f c049e325e91d tests/unit/decide/test_topology_consumer.py:145 tests/unit/decide/test_topology_consumer.py:156 |
| AU-CONTROL-R008 Free-text task mapping accepted only as a labelled claim Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Free-text task mapping accepted only as a labelled claim.** When agent-utilities proposes a mapping from a free-text task description to a task IRI, epistemic-graph accepts it only as a labelled claim requiring evidence, never as an authoritative proof of task identity. | Proven by mapping and refusal tests confirming an unproven free-text mapping cannot authorize execution. | requirement | AU-CONTROL | VERIFIED | a1dd4111f04f c049e325e91d fdd333b5545a tests/unit/test_task_classification.py:30 tests/unit/test_task_classification.py:37 tests/unit/test_task_classification.py:65 |
| AU-CONTROL-R009 Swarm topology ontology and schema publication Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Swarm topology ontology and schema publication.** agent-utilities publishes a swarm-topology ontology and SHACL shapes (agent_utilities/knowledge_graph/ontology/swarm_topology/topology.ttl and shapes.ttl) through epistemic-graph's schema attachment interface, with positive and negative fixtures validating the published shapes. | Proven by SHACL positive and negative fixture tests against the published topology shapes. | requirement | AU-CONTROL | VERIFIED | a1dd4111f04f c049e325e91d da99e968d6c7 tests/unit/decide/test_swarm_topology_schema.py:136 tests/unit/decide/test_swarm_topology_schema.py:94 |
| AU-CONTROL-R010 Reference swarm topology templates Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Reference swarm topology templates.** agent-utilities provides a fixed set of reference agent-graph templates in decide/topology/templates.py, covering single agent, pipeline, fan-out/join, supervisor with workers, critique loop, and council, each carrying topology facts consumed by epistemic-graph's decision. | Proven by unit tests confirming each template produces topology facts accepted by the decision contract. | requirement | AU-CONTROL | VERIFIED | a1dd4111f04f c049e325e91d da99e968d6c7 tests/unit/decide/test_swarm_topology_schema.py:164 tests/unit/decide/test_swarm_topology_schema.py:95 |
| AU-CONTROL-R011 Consume the generated topology contract via a pinned dependency Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Consume the generated topology contract via a pinned dependency.** agent-utilities consumes epistemic-graph's topology contract types, including assembly topology requirements and topology facts, through the generated Python client, and updates its pinned epistemic-graph dependency to the revision that introduces them. | Proven by a contract test against the generated client's golden fixtures for the topology types. | requirement | AU-CONTROL | LANDED | c049e325e91d da99e968d6c7 |
| AU-CONTROL-R012 Agent-graph templates validated against topology shape at publish Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Agent-graph templates validated against topology shape at publish.** When agent-utilities publishes an agent-graph template, epistemic-graph validates it against the template topology shape and rejects it immediately if the shape check fails, so an invalid template can never become available. | Proven by a negative test publishing a malformed template and asserting fail-closed rejection before availability. | requirement | AU-CONTROL | LANDED | c049e325e91d |
| AU-CONTROL-R013 Topology options filtered by admissibility derivation Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Topology options filtered by admissibility derivation.** agent-utilities submits a composed-schema digest as part of its topology request and relies on epistemic-graph's derivation of admissible topology options to eliminate any option that is not entailed as admissible before selection. | Proven by a fixture test where an inadmissible topology option is excluded from the candidate set returned to agent-utilities. | requirement | AU-CONTROL | LANDED | 148ef73124d2 c049e325e91d |
| AU-CONTROL-R014 No local topology solver, defer to the validated graph-engine model Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**No local topology solver, defer to the validated graph-engine model.** agent-utilities does not implement its own topology constraint solver. It relies entirely on epistemic-graph's precomputed, oracle-validated model. That model covers feasible width, rounds, lease, deadline, demand and capacity. AU applies it when selecting a topology. | Proven by a source gate confirming no local topology solver exists. A second test cross-checks a brute-force oracle result for small instances. | requirement | AU-CONTROL | VERIFIED | 148ef73124d2 c049e325e91d f764531c7dd3 tests/gates/test_topology_authority_gate.py:25 tests/gates/test_topology_authority_gate.py:30 |
| AU-CONTROL-R015 Topology consumer asks the graph engine, not a local success store Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Topology consumer asks the graph engine, not a local success store.** agent-utilities' topology consumer in decide/consumers/topology.py requests its topology decision from epistemic-graph and builds its admission limits from the resulting decision; the previous local outcome-recording, moving-average, and success-rate reuse logic is removed, and a source gate prevents any component from writing a topology template directly into the graph store. | Proven by a source gate test that fails if a direct topology-template write or the removed local success-rate logic reappears. | requirement | AU-CONTROL | LANDED | 148ef73124d2 c049e325e91d |
| AU-CONTROL-R016 Topology decisions respect capacity headroom at request priority Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Topology decisions respect capacity headroom at request priority.** agent-utilities' topology requests factor in epistemic-graph's capacity status as a headroom observation scoped to the request's priority, and treat an infeasible-lease result as a refusal rather than retrying with a heuristic fallback. | Proven by a negative test asserting a request is refused, not silently retried, when capacity status reports an infeasible lease. | requirement | AU-CONTROL | LANDED | 148ef73124d2 c049e325e91d |
| AU-CONTROL-R017 Single re-decision on capacity denial for topology admission Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Single re-decision on capacity denial for topology admission.** When agent-utilities requests topology capacity admission and it is denied, it requests at most one fresh decision before giving up, and releases any acquired capacity as soon as the run stops rather than holding it until timeout. | Proven by an integration test asserting exactly one re-decision attempt on denial and capacity release on stop. | requirement | AU-CONTROL | VERIFIED | 4a5540dd2e3d 6d8865040871 e78a5cf3de4e tests/unit/decide/test_topology_consumer.py:209 tests/unit/decide/test_topology_consumer.py:223 |
| AU-CONTROL-R018 Subagent allowance negotiated into the run specification Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Subagent allowance negotiated into the run specification.** agent-utilities adds a subagent allowance field to its run specification and negotiates it against each harness adapter's enforcement capability in agent_utilities/layers/contracts.py and negotiation.py, so a harness that cannot enforce a child cap is flagged accordingly before launch. | Proven by the adapter conformance kit asserting the negotiated allowance matches each adapter's actual enforcement flag. | requirement | AU-CONTROL | VERIFIED | 4a5540dd2e3d bd37ae7764a6 d008da7e66d1 tests/unit/layers/test_harness_port.py:199 tests/unit/layers/test_harness_port.py:246 tests/unit/layers/test_harness_port.py:258 |
| AU-CONTROL-R019 Swarm continuation restricted to narrow-only decisions Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Swarm continuation restricted to narrow-only decisions.** agent-utilities' swarm continuation point in decide/consumers/continuation.py evaluates only whether to stop or narrow a run in progress. It checks a stop rule over the run's usage data and never widens the run. It releases capacity whenever the run narrows. | Proven by a unit test. It asserts the continuation point refuses a widen request and releases capacity on narrow. | requirement | AU-CONTROL | LANDED | 21ccce45c2d7 c049e325e91d |
| AU-CONTROL-R020 Learned topology routing term with a benchmark gold set Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Learned topology routing term with a benchmark gold set.** agent-utilities defines a feature schema and a work-market crediting mechanism for an optional learned topology-routing term. It evaluates the term against a benchmark gold set in tests/benchmarks/swarm_topology/. The term is promoted only through the decision engine's promotion gate (EG-DECISION-ENGINE-R040). Its cost offer depends on the expected-cost capability defined by AU-HARNESS-R003. | Proven by the synthetic width-quality benchmark and a promotion gate that blocks use of the learned term before it passes evaluation. | requirement | AU-CONTROL | LANDED | 21ccce45c2d7 33dc0f5e9908 75dc28c16382 c049e325e91d |
| AU-CONTROL-R021 Harness and sandbox access via direct typed ports, not a registrar Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Harness and sandbox access via direct typed ports, not a registrar.** agent-utilities accesses a harness and sandbox through direct, typed port methods. It uses no registrar indirection and no legacy adapter layer. | Proven by focused unit tests exercising the direct port methods and a source check confirming no registrar or legacy adapter path remains. | requirement | AU-CONTROL | LANDED | d8e0d2e999e1 |
| AU-CONTROL-R022 Model selection routed through the committed decision, not ad hoc Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Model selection routed through the committed decision, not ad hoc.** agent-utilities selects which model to use for a run by requesting it from epistemic-graph's committed decision interface, rather than applying an ad hoc or locally hard-coded selection policy. | Proven by the generated-client contract test confirming model selection is bound to the decision's selected component digest. | requirement | AU-CONTROL | LANDED | 4351f26b3d3b c049e325e91d |
| AU-CONTROL-R023 Catalog entries attributed to their originating server Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Catalog entries attributed to their originating server.** agent-utilities' component catalog used for routing records which server each tool or skill entry originates from, so a routing decision and its audit trail can be traced to the correct source server rather than attributed ambiguously. | Proven by a unit test asserting each catalog entry's selection and audit record carries its correct originating-server attribution. | requirement | AU-CONTROL | LANDED | 0d62109b2c36 |
| AU-CONTROL-R024 Durable Agent Library with list, get and save Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Durable Agent Library with list, get and save.** agent-utilities stores each built agent as one Agent Library record in the knowledge graph. A record holds the system prompt, tools, skills, model profile, context policy and role. The record reuses the existing `CallableResource` node and the runnable-skill field contract, so delegation runs a saved agent by name. The agent-webui `/api/enhanced/agent-library` routes and the `agent_library` intent tool read and write through one `AgentLibrary` class. | Proven by unit tests: an agent saved through the library is listed and read back with every field. The intent router lists it through `ask` and saves through a previewed `manage` plan. `ask` cannot save. | requirement | AU-CONTROL | LANDED | 8d94e1c97b28 d10020c23444 |
| AU-CONTROL-R025 Pre-built role agents from packaged fleet prompts Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Pre-built role agents from packaged fleet prompts.** agent-utilities generates one `role` Agent Library record for each packaged prompt blueprint that names an `identity.role` and a directive. The `:Prompt` corpus supplies the blueprints, so generation reads no filesystem path. The shipping package is the record's MCP server. Its ingested tools bind on save. | Proven by unit tests: a role blueprint becomes a saved role agent with its package tools; a blueprint without a role produces no agent. | requirement | AU-CONTROL | LANDED | 8d94e1c97b28 d10020c23444 |
| AU-CONTROL-R026 Assembled agent graphs are committed, published and saved for reuse Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Assembled agent graphs are committed, published and saved for reuse.** After a solved L3 assembly, agent-utilities commits the decision through the bound `commit_context` provider. It then publishes the graph through the bound `publish_context` provider with the committed record as evidence. It saves every solved graph as an `agent_graph` Agent Library record. The record holds the graph draft, the agents, the decision record id and the publish receipt. An uncommitted graph is saved but never published. | Proven by unit tests over the scripted EG client: commit, publish and library save all run for a committed graph. An uncommitted graph is saved and not published. A publish failure keeps the assembled agent. | requirement | AU-CONTROL | LANDED | 8d94e1c97b28 d10020c23444 |
| AU-CONTROL-R027 Task planner answers "How can I execute task X?" as one structured plan Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Task planner answers "How can I execute task X?" as one structured plan.** The plan lists steps, agent count and types, reuse, guardrails, workflow and the DAG. A mapper proposes native task IRIs as a labelled claim. EG assembly supplies the skills, tools, prompt and model of each agent. The EG topology decision supplies the template, the DAG and the slot widths. A capability search finds Agent Library templates and external A2A agents per step. A guardrail source adds policy rules to the control-plane invariants. Every plan element cites its evidence class and its record. A missing port or an EG abstention becomes a named gap. A model never composes a substitute. | Unit tests over scripted EG answers cover a decided plan, an abstention, an unmapped goal and a plan without ports. | requirement | AU-CONTROL | LANDED | 5301b427a6a5 543b8157705e c44206e0d856 |
| AU-CONTROL-R028 The ask intent routes planning questions to the task planner Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**The ask intent routes planning questions to the task planner.** A bare `ask` that starts with "how can I", "what steps", "which agents should" or "plan how" returns the task plan. The result is read-only and carries its routing record. Any caller hint keeps the declared route of the caller. | Routing tests on the intent surface cover planning, non-planning and hinted questions. | requirement | AU-CONTROL | LANDED | 5301b427a6a5 543b8157705e c44206e0d856 |
| AU-CONTROL-R029 Cross-source reports select sources by ontology and read them live Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Cross-source reports select sources by ontology and read them live.** The ontology names the classes in the question. Ontology relations link those classes into one path. Each class on the path uses its approved virtual mapping. The report joins live rows through bind joins along the path. No entity row enters the graph. A row budget marks the report incomplete and never truncates it. A bare `ask` routes such a question to this report when a catalog is installed. | A test with two fake sources proves source selection, live-only reads and fail-closed unapproved and over-budget cases. | requirement | AU-CONTROL | LANDED | 5301b427a6a5 543b8157705e c44206e0d856 |
| AU-CONTROL-R030 Virtual-graph contracts materialize metadata and hot subsets only Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Virtual-graph contracts materialize metadata and hot subsets only.** A source connection names its endpoint by reference and refuses credentials. A metadata contract records discovered entities, fields, relationships and operations under a digest. A virtual mapping names discovered entities and fields only. A mapping serves reads only after approval. Connection, contract and mapping facts become graph facts. Entity rows stay at the source unless a hot subset meets the copy policy. EG-UNIFIED-DATA-PLANE-R037 owns the vocabulary. | Unit tests cover credential refusal, undiscovered-field refusal, metadata-only triples and the hot-subset decision. | requirement | AU-CONTROL | LANDED | 5301b427a6a5 543b8157705e c44206e0d856 |
| AU-CONTROL-R031 `find` ranks fleet tools with native capabilities Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**`find` ranks fleet tools with native capabilities.** A `find(intent=...)` call scores each fleet discovery hit with the native lexical scorer. Fleet hits and native capabilities share one `results` list. Each fleet row names its server and kind. A fleet tool row carries a `how_to_call` that `act(action='fleet.call')` executes. A failed fleet probe appears as `fleet_error`; it never disappears silently. | Unit tests in `tests/unit/test_intent_fleet_ranking_and_ties.py` rank a Docker fleet tool first, check its `how_to_call` and report a failed probe. | requirement | AU-CONTROL | LANDED | 1ff1099e5d57 4c334b7fc9ad b4c99c73265c df00e9a0b560 e822fa6bb112 |
| AU-CONTROL-R032 `act` calls a fleet tool by its server and tool id Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**`act` calls a fleet tool by its server and tool id.** `act(action='<server>.<tool>')` resolves the catalog server and its tool. It mounts the child lazily through the multiplexer. It previews and executes through the same governed path as `fleet.call`. An unknown server or tool returns an actionable error. | Unit tests over a fake multiplexer cover preview, execute, unknown server and unknown tool. | requirement | AU-CONTROL | LANDED | 1ff1099e5d57 28eb7b647b57 e822fa6bb112 |
| AU-CONTROL-R033 A read-only action tie runs the declared default action Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**A read-only action tie runs the declared default action.** When read actions tie for an unpinned `ask` or `why`, the router runs the default of the tool's own `action` parameter. The default must be a declared read action. The tied alternatives stay in the routing record. A tool without a read default still refuses the tie. | Unit tests cover a `graph_explain` tie that runs `explain` and a tie without a read default that refuses. | requirement | AU-CONTROL | LANDED | 1ff1099e5d57 78a53983ae0b |
| AU-CONTROL-R034 An unmatched read intent falls back to the NL planner Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**An unmatched read intent falls back to the NL planner.** When the top capability matches no descriptor term, an unpinned `ask` routes to `nl_query`. The routing record sets `fell_back_to_nl_planner` and states the reason. A pinned tool or an explicit action never falls back. | Unit tests cover the unmatched fallback and the pinned and explicit-action exclusions. | requirement | AU-CONTROL | LANDED | 1ff1099e5d57 78a53983ae0b |
| AU-CONTROL-R035 The signed agent-dispatch envelope carries an enforced allowed-tool-subset field Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**The signed agent-dispatch envelope carries an enforced allowed-tool-subset field.** The signed `AgentTurnEnvelope` produced by `enqueue_agent_turn` carries an explicit allowed-tool-subset field naming the exact tools a caller-filtered assembly admitted, bound into the signature. A harness or carrier reading the envelope enforces that subset at execution time rather than treating it as advisory. An envelope with no allowed-tool-subset field never authorizes a caller-filtered exposure claim by a consumer. This is the dependency a budget-constrained admission door (such as GraphOS's `GRAPHOS-A2A-002`) requires before it can enforce tool-subset exposure end to end. | Proven by a unit test asserting the envelope's signature covers the allowed-tool-subset field and a negative test asserting a consumer cannot claim caller-filtered exposure from an envelope lacking the field. | requirement | AU-CONTROL | SPECIFIED | 8c6fb318c5d3 |
| AU-CONTROL-R035.1 Open the AU-CONTROL-R035 owner row Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Open the AU-CONTROL-R035 owner row.** Agent Utilities records, in `requirements.md` and `spec.md`, that the signed agent-dispatch envelope is missing an allowed-tool-subset field and that graph-os's `GRAPHOS-A2A-002` admission door depends on this row closing. | The row exists in `requirements.md` and is cross-referenced from `spec.md`. | requirement | AU-CONTROL | LANDED | 79a0b3968c7c |
| AU-CONTROL-R035.2 Add and enforce the allowed-tool-subset field Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Add and enforce the allowed-tool-subset field.** Agent Utilities adds an `allowed_tool_subset` field to `AgentTurnEnvelope` (`agent_utilities/orchestration/agent_dispatch.py`), binds it into the `DispatchCarrier` signature payload alongside the envelope's other signed fields, and makes the carrier's consumer-side check reject execution when a tool outside that subset is invoked or when the field is absent from a caller-filtered claim. | A unit test asserts the envelope's signature covers `allowed_tool_subset`; a negative test asserts a consumer cannot claim caller-filtered exposure from an envelope lacking the field — both passing against real code, not just the spec text. | requirement | AU-CONTROL | VERIFIED | 018e9824140f tests/unit/test_agent_dispatch.py:1309 tests/unit/test_agent_dispatch.py:1345 tests/unit/test_agent_dispatch.py:1363 |
| AU-CONTROL-R035.3 Typed `harness_config` envelope field Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Typed `harness_config` envelope field.** `AgentTurnEnvelope` (`agent_utilities/orchestration/agent_dispatch.py:471`) gains a `harness_config` field of type `HarnessConfig` (`AU-HARNESS-R012.1`). The field sits next to `allowed_tool_subset` (`agent_dispatch.py:509`). The default is `None`. | `tests/unit/test_agent_dispatch.py::test_envelope_carries_harness_config`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R035.4 Sign the field Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Sign the field.** `DispatchCarrier` (`agent_dispatch.py:180`) must bind a digest of `harness_config` into its signature payload beside `allowed_tool_subset` (`agent_dispatch.py:210`, `:263`). A changed config must change the signature. | `tests/unit/test_agent_dispatch.py::test_signature_covers_harness_config`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R035.5 Reject a changed field Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Reject a changed field.** `DispatchCarrier.verify` (`agent_dispatch.py:350`) must accept an expected `harness_config` and reject a mismatch. The worker passes the config it applies. | `tests/unit/test_agent_dispatch.py::test_verify_rejects_tampered_harness_config`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R035.6 Refuse an absent field Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Refuse an absent field.** A harness-run job whose envelope has no `harness_config` must be refused at claim time with reason `harness_config_absent`. The worker must not substitute a default. | `tests/unit/test_agent_dispatch_worker.py::test_absent_harness_config_refused`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R035.7 Producers set the field Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Producers set the field.** The three envelope producers (`core/sessions.py:1231`, `mcp/tools/job_tools.py:89`, `integrations/git_resolver.py:234`) must pass the committed `HarnessConfig` into the envelope. A producer with no committed answer must refuse to enqueue. | `tests/unit/test_agent_dispatch.py::test_producers_enqueue_with_committed_config`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R036 Obtain `harness_config` from the engine's `HarnessConfig` decision Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Obtain `harness_config` from the engine's `HarnessConfig` decision.** AU must request the configuration from the engine's `HarnessConfig` decision on the same path that model selection uses. AU must apply the committed answer unchanged and must never compute a configuration locally. An abstention or refusal from the engine must stop the enqueue with a typed reason. | The end-to-end row proves the engine answer reaches the signed envelope. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R036.1 Name the shared path Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Name the shared path.** Model selection today runs `route_model` (`agent_utilities/decide/consumers/routing.py:58`), `decide.choose` (`decide/__init__.py:67`), `DecisionRunner.choose` (`decide/runner.py:218`) and the transport `decide` call (`decide/transport.py:28`). The new consumer must use the same runner and transport. | `tests/unit/test_decide_harness_config.py::test_consumer_uses_shared_runner_and_transport`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R036.2 Typed answer model Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Typed answer model.** `agent_utilities/decide/consumers/harness_config.py` defines `HarnessConfigAnswer` with `context_policy`, the thresholds, `recent_window_fraction`, `plan_scaffold`, `action_space`, the allowed tool subset, premises, why-not entries, resolution kind and typed abstention. Field names must match the engine contract. | `tests/unit/test_decide_harness_config.py::test_answer_model_matches_contract_fixture`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R036.3 Request function Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Request function.** `decide_harness_config` must send the model profile reference, the task class, the usable context budget and the request priority. It returns a `HarnessConfig` or a typed abstention. | `tests/unit/test_decide_harness_config.py::test_request_inputs_and_answer_mapping`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R036.4 Abstention is not a guess Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Abstention is not a guess.** When the answer abstains because a model fact is unmeasured, the consumer must return the abstention with the missing fact name. It must not fill any part from a default. | `tests/unit/test_decide_harness_config.py::test_abstention_carries_missing_fact`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R036.5 Wire into the producers Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Wire into the producers.** The producers in `AU-CONTROL-R035.7` must call `decide_harness_config` before they build the envelope. They must pass the usable budget from the admitted task. | `tests/unit/test_agent_dispatch.py::test_producer_calls_decision_before_envelope`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R036.6 Trace the decision Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Trace the decision.** The committed decision identifier must travel in the envelope and into the run trace, so the `EG` run-trace row can link a run to its decision. | `tests/unit/test_decide_harness_config.py::test_decision_id_in_envelope_and_trace`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R036.7 End-to-end proof Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**End-to-end proof.** A fake engine answers `HarnessConfig`. A producer must enqueue a signed envelope carrying the answer, and the run must apply it. A second case with an abstention must refuse the enqueue. | `tests/harness/test_runloop_envelope_e2e.py::test_decision_to_signed_envelope_to_run`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R037 Skill workflow templates run through one orchestrate call and fill tool gaps by search Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Skill workflow templates run through one orchestrate call and fill tool gaps by search.** AU must instantiate a skill workflow's agent team and fan-out template as one agent graph. AU must fill each unmet tool slot from the installed fleet. AU must refuse the run when no admissible tool exists. | The end-to-end row proves a gap is filled and a second gap refuses. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R037.1 Typed gap model Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Typed gap model.** `agent_utilities/decide/consumers/workflow_gaps.py` defines `WorkflowGap` with slot name, required capability, candidate tool ids and resolution kind. | `tests/unit/test_workflow_gaps.py::test_gap_model_fields`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R037.2 Detect unmet slots Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Detect unmet slots.** `find_workflow_gaps` must compare the template's tool slots with the installed fleet catalog. It must return one `WorkflowGap` per unmet slot. | `tests/unit/test_workflow_gaps.py::test_unmet_slot_becomes_gap`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R037.3 Fill from the committed ranking Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Fill from the committed ranking.** `fill_workflow_gaps` must take candidates from the `find` ranking and apply the engine's committed choice unchanged. It must not rank candidates locally. | `tests/unit/test_workflow_gaps.py::test_fill_applies_committed_choice`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R037.4 Refuse instead of inventing a tool Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Refuse instead of inventing a tool.** When no candidate is admissible, AU must stop the run before graph build. The typed reason must name the slot. AU must not ask a model to invent a tool. | `tests/unit/test_workflow_gaps.py::test_no_candidate_refuses_with_slot`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R037.5 Wire into workflow execution Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Wire into workflow execution.** Locate where `graph_orchestrate` hands a workflow to `execute_workflow`. That call must run `find_workflow_gaps` and `fill_workflow_gaps` before graph assembly. | `tests/unit/test_workflow_gaps.py::test_execute_workflow_fills_gaps_first`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R037.6 End-to-end proof Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**End-to-end proof.** A fake engine and a fake fleet catalog serve a workflow with a missing pull-request tool slot. The run must fill the slot and execute. A second workflow with no matching tool must refuse. | `tests/harness/test_workflow_gap_e2e.py::test_gap_filled_then_refused`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R038 Model-written code runs only in a restricted interpreter Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Model-written code runs only in a restricted interpreter.** Code that a model writes runs in an embedded interpreter that cannot reach the filesystem, environment or network. Only host-controlled external functions give access, and resource limits apply to every run. | See children `AU-CONTROL-R038.1` to `AU-CONTROL-R038.6`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R038.1 Model Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Model.** `SandboxCapabilities` in `agent_utilities/rlm/sandboxes/base.py:44` gains a closed `isolation` field with values `restricted_interpreter`, `wasm`, `container` and `microvm`. Each run carries a `ResourceLimits` record with wall time, memory and call count. | `tests/unit/rlm/test_sandbox_capabilities.py::test_isolation_values_closed`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R038.2 Behavior Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Behavior.** The restricted interpreter must expose only the helpers in `SandboxEnv.helpers`. Each helper is a named, replaceable default and counts its calls against the limit. Filesystem, environment and network names must be absent from the interpreter namespace. | `tests/unit/rlm/test_restricted_interpreter.py::test_only_host_helpers_reachable`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R038.3 Wiring Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Wiring.** `Router.select` at `agent_utilities/rlm/sandboxes/router.py:59` orders the restricted interpreter first for code that needs no library access. Production callers are `agent_utilities/harness/online_scoring.py:106` and `agent_utilities/knowledge_graph/research/change_synthesis.py:276`, which iterate over the chain. | `tests/unit/rlm/test_router.py::test_restricted_interpreter_first`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R038.4 Refusal Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Refusal.** A syntax element the interpreter does not support must raise `SandboxRejected` (`agent_utilities/rlm/sandboxes/base.py:133`) with a reason naming the element. A call over its limit must return a typed `limit_exceeded` result. The router must escalate to the next tier. It must not run the code unrestricted. | `tests/unit/rlm/test_restricted_interpreter.py::test_unsupported_construct_rejected`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R038.5 Evidence Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Evidence.** Each run must record the backend name, the limits applied, the helpers called and the rejection reason in the run trace. A reviewer can then tell which tier ran the code and why it escalated. | `tests/unit/rlm/test_restricted_interpreter.py::test_trace_fields_recorded`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R038.6 Hot-path proof Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Hot-path proof.** The entry point is the metric-scoring run loop at `agent_utilities/harness/online_scoring.py`. A snippet that opens a file must be rejected at the restricted tier. It must then escalate through the router. The trace must name both tiers. | `tests/harness/test_online_scoring_isolation.py::test_file_access_snippet_escalates`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R039 Fan-out sandboxes branch from a warmed parent and refuse typed Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Fan-out sandboxes branch from a warmed parent and refuse typed.** Child sandboxes start from one warmed parent through copy-on-write memory snapshots. A running sandbox may branch into a new parent with a layered diff snapshot. Each child stays isolated and each branch is audited. | See children `AU-CONTROL-R039.1` to `AU-CONTROL-R039.6`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R039.1 Model Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Model.** `BranchRequest` and `BranchResult` in `agent_utilities/rlm/sandboxes/base.py` carry the child identifier, a tag, a mode of `full`, `diff` or `live`, and the new parent handle. A `BranchRefusal` carries a closed reason: `no_snapshot_support`, `unknown_child` or `host_unavailable`. | `tests/unit/rlm/test_branch_models.py::test_branch_models_closed_reasons`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R039.2 Behavior Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Behavior.** A branch must snapshot the running child and register the result as a parent in the warm registry. The source child must keep running. Each child must start with its own namespace and no shared writable state. The default mode is `diff`. | `tests/unit/rlm/test_branch_behavior.py::test_branch_registers_parent`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R039.3 Wiring Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Wiring.** `ForkableSandbox.branch` is defined at `agent_utilities/rlm/sandboxes/base.py:222` and has no production caller today. This row creates the call site in `_fork_fanout` (`agent_utilities/mcp/tools/engine_surface_tools.py:1694`), which calls `branch` when a fan-out branch asks to continue from a running child. | `tests/unit/test_fork_fanout_branch.py::test_fanout_calls_branch`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R039.4 Refusal Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Refusal.** A rung that cannot snapshot must return `BranchRefusal` with reason `no_snapshot_support`. `_fork_fanout` must report the refusal in its payload and must not fall back to a cold start without saying so. | `tests/unit/test_fork_fanout_branch.py::test_unsupported_rung_refuses_typed`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R039.5 Evidence Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Evidence.** Each branch must write an audit record and a metric with the source child, the tag, the mode and the snapshot size. Each refusal must write the closed reason. | `tests/unit/rlm/test_branch_behavior.py::test_branch_audit_and_metric`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R039.6 Hot-path proof Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Hot-path proof.** The entry point is the served fork fan-out operation backed by `_fork_fanout`. A fake rung with snapshot support serves two branches. The test observes a registered parent, an audit record per branch and a typed refusal on a rung without support. | `tests/integration/test_fork_fanout_served.py::test_branch_through_served_fanout`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R040 The harness holds run output uncommitted and applies the verdict it receives Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**The harness holds run output uncommitted and applies the verdict it receives.** Each run writes workspace changes into a held layer. The harness adapts the received `HeldItemVerdict` from graph-os. It applies admitted proposals, drops rejected local layers, and keeps abstained proposals held. The run's durable record is an engine fact (EG-DECISION-ENGINE). | See children `AU-CONTROL-R040.1` to `AU-CONTROL-R040.6`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R040.1 Model Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Model.** `WorkspaceProposal` in `agent_utilities/runtime/run_vcs/proposal.py` (new) holds the run id, the base `FsSnapshot` id and the changed paths with digests. It receives `HeldItemVerdict` from GRAPHOS-A2A-R006, with `outcome` (`admitted`, `rejected`, `abstained`) and `verdict_ref`. The harness preserves these wire values and stores no decision. | `tests/unit/runtime/test_workspace_proposal.py::test_holds_paths_and_digests`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R040.2 Behavior Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Behavior.** The run writes into a layer over the base tree. `FsCarrier.snapshot` (`runtime/run_vcs/carrier.py:121`) captures the layer. The adapter maps `admitted` to apply and `rejected` to drop only the local uncommitted layer. It maps `abstained` to keep held. An unavailable producer or typed refusal also keeps the proposal held, with no filesystem effect. The engine retains its authoritative held-item record. | `tests/unit/runtime/test_workspace_proposal.py::test_admission_outcome_adapter`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R040.3 Wiring Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Wiring.** `RunSession` (`run_session.py:39`) and `FsCarrier` (`carrier.py:101`) have no production caller today. This row creates the call site in the served `execute_agent` operation. The call site holds the layer before the first tool call. `RunSessionRegistry` (`run_session.py:201`) is reached today only by replay at `mcp/tools/state_tools.py:1570`. | `tests/unit/test_execute_agent_proposal.py::test_run_holds_layer`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R040.4 Refusal Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Refusal.** The harness must refuse to apply a verdict whose base snapshot changed. It must return a typed `base_moved` refusal. A missing, unknown or refused verdict must keep the proposal held with no filesystem effect. The adapter must never map `abstained` to `rejected`. | `tests/unit/runtime/test_workspace_proposal.py::test_base_moved_refused`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R040.5 Evidence Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Evidence.** The harness must append a `RunEvent` (`runtime/run_vcs/kernel.py:76`) to the run's `RunEventLog` when it holds, applies or drops a layer. The event carries the original outcome, `verdict_ref`, adapter action and changed-set digest. An unavailable response records its reason without inventing a verdict. The engine stores the durable record. | `tests/unit/runtime/test_workspace_proposal.py::test_apply_events_emitted`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R040.6 Hot-path proof Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Hot-path proof.** The entry point is the served `execute_agent` operation. A run that edits a file must leave the base tree unchanged. A received `admitted` outcome must then apply it. A `rejected` outcome must discard only the local layer. An `abstained` outcome, unavailable response or typed refusal must preserve the held layer and the base tree. | `tests/integration/test_execute_agent_proposal_served.py::test_no_change_before_verdict`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R041 The harness runs agent runtimes isolated and enforces the quota it receives Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**The harness runs agent runtimes isolated and enforces the quota it receives.** The harness provides sandbox isolation, quota enforcement and graceful termination. The engine supplies the quota values (EG-DECISION-ENGINE). | See children `AU-CONTROL-R041.1` to `AU-CONTROL-R041.6`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R041.1 Model Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Model.** `RuntimeQuota` in `agent_utilities/rlm/sandboxes/base.py` (new, next to `SandboxCapabilities` at `:44`) holds wall time, memory bytes, process count and grace seconds. The harness receives it from EG-DECISION-ENGINE. The fallback default grace is 10 seconds. `StopReason` is closed: `completed`, `signal`, `quota_exceeded` and `grace_expired`. | `tests/unit/rlm/test_runtime_quota.py::test_stop_reasons_closed`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R041.2 Behavior Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Behavior.** On `SIGTERM` the runtime must stop accepting calls and let the current call finish. After the received grace period it must kill the process group. The runtime must stop a run that exceeds a received limit. | `tests/unit/rlm/test_runtime_quota.py::test_term_then_kill_after_grace`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R041.3 Wiring Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Wiring.** The container backend (`rlm/sandboxes/container_fork_backend.py:54`) already ends its PID 1 by timeout. Cgroup readers exist at `core/cgroup_resources.py:52`. No quota record reaches either today. This row passes the received `RuntimeQuota` from `_fork_fanout` (`mcp/tools/engine_surface_tools.py:1694`) into the backend start call. | `tests/unit/test_fork_fanout_quota.py::test_quota_reaches_backend`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R041.4 Refusal Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Refusal.** A quota above the host's cgroup limit must return a typed `quota_unavailable` refusal before launch. The runtime must not start unlimited. | `tests/unit/rlm/test_runtime_quota.py::test_over_host_limit_refused`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R041.5 Evidence Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Evidence.** Each run must emit the applied quota, the stop reason and the time from signal to exit as trace events. Unavailable usage stays `unavailable` and never becomes zero. | `tests/unit/rlm/test_runtime_quota.py::test_stop_evidence_recorded`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R041.6 Hot-path proof Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Hot-path proof.** The entry point is the served fork fan-out operation. A fake runtime ignores `SIGTERM`. The test observes a kill after the grace period, the stop reason `grace_expired` and the trace fields. | `tests/integration/test_fork_fanout_served.py::test_signal_ignored_is_killed`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R042 The harness loads only the tools it is given during a run Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**The harness loads only the tools it is given during a run.** The tool registry and on-demand disclosure belong to graph-os (GRAPHOS-FLEET). Tool choice belongs to the engine (EG-DECISION-ENGINE). The harness loads the given tools and refuses a call to any other tool. | See children `AU-CONTROL-R042.1` to `AU-CONTROL-R042.6`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R042.1 Model Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Model.** `DisclosureSet` in `agent_utilities/capabilities/fleet_tool_search.py` (new type) holds the run id and the tool ids the harness was given. It receives each tool id with its schema from GRAPHOS-FLEET. The harness adds no id itself. | `tests/unit/capabilities/test_disclosure_set.py::test_only_received_ids_added`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R042.2 Behavior Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Behavior.** The harness must load each given tool's schema into the run. It must hold the set for the run's lifetime. It ranks and selects nothing. | `tests/unit/capabilities/test_disclosure_set.py::test_loads_given_tools`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R042.3 Wiring Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Wiring.** `fleet_tool_search_capability` (`capabilities/fleet_tool_search.py:198`) has no production caller today. `_apply_defer_tool_loading` (`agent/factory.py:529`) is called at `agent/factory.py:973` for local toolsets only. This row feeds the given tools into the set at `factory.py:973` for every agent built with deferred loading. | `tests/unit/test_agent_factory_disclosure.py::test_given_tools_loaded`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R042.4 Refusal Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Refusal.** A call to a tool id outside the `DisclosureSet` must return a typed `tool_not_disclosed` refusal. The call must not reach the tool. | `tests/unit/capabilities/test_disclosure_set.py::test_undisclosed_call_refused`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R042.5 Evidence Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Evidence.** The harness must emit the number of tools loaded and the number of refused calls as trace events. The engine receives them for its own records. | `tests/unit/capabilities/test_disclosure_set.py::test_disclosure_counts_traced`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R042.6 Hot-path proof Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Hot-path proof.** The entry point is the served `execute_agent` operation. A fake graph-os gives the run one tool. The test observes a successful call to that tool and a refusal for an undisclosed tool. | `tests/integration/test_execute_agent_disclosure_served.py::test_undisclosed_tool_refused`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R043 The harness runs the given fan-out in parallel and returns results Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**The harness runs the given fan-out in parallel and returns results.** Decomposition and routing are engine decisions (EG-DECISION-ENGINE). The harness runs the given subtasks in parallel and returns the results for aggregation. [arXiv:2605.15132] | See children `AU-CONTROL-R043.1` to `AU-CONTROL-R043.6`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R043.1 Model Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Model.** `SubtaskSet` in `agent_utilities/graph/coordination.py` (new type) holds subtasks with an id, a role and an input digest. The harness receives it from EG-DECISION-ENGINE with the `independence` flag already set. The harness decomposes and routes nothing. | `tests/unit/graph/test_subtask_set.py::test_received_set_holds_flag`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R043.2 Behavior Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Behavior.** The runner must start each received subtask on its own sandbox. It must pass no message between them. It must return all results in one `FanoutResult` for aggregation. The fallback width cap is received from the engine. | `tests/unit/graph/test_subtask_set.py::test_no_cross_agent_messages`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R043.3 Wiring Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Wiring.** `AggregationOperator` (`graph/coordination.py:51`) exists at `graph/coordination.py:255` and `graph/hierarchical_coordination.py:65`. No served path hands it parallel results today. This row attaches the runner in `_fork_fanout` (`mcp/tools/engine_surface_tools.py:1694`), after the width AU-CONTROL-R007 receives. | `tests/unit/test_fork_fanout_aggregate.py::test_results_returned`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R043.4 Refusal Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Refusal.** A subtask set without the `independence` flag must return a typed `not_independent` refusal. A failed subtask must appear as a named gap in the result. It must not be dropped. | `tests/unit/graph/test_subtask_set.py::test_unflagged_set_refused`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R043.5 Evidence Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Evidence.** The harness must emit each subtask id, its sandbox and its wall time as trace events. The result must list which subtask produced each part. | `tests/unit/graph/test_subtask_set.py::test_result_provenance`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-CONTROL-R043.6 Hot-path proof Definition — AU-CONTROL / AU-CONTROL — Agent control planeCanonical requirement and verification source**Hot-path proof.** The entry point is the served fork fan-out operation. Three subtasks run on fake rungs. The test observes parallel start, no inter-agent message, one returned result set and a refusal for an unflagged set. | `tests/integration/test_fork_fanout_served.py::test_parallel_subtasks_returned`. | requirement | AU-CONTROL | SPECIFIED | No recorded commit/test evidence |
| AU-SEC AU-SEC — Agent security and governed policy | spec | None | SPECIFIED | No recorded commit/test evidence |
| AU-SEC-R001 Tiny profile grants scoped authority, not blanket admin Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**Tiny profile grants scoped authority, not blanket admin.** The tiny profile issues bounded, scope-checked authority to a local process rather than an unconditional kg:admin grant. Access is restricted to a packaged, process-private, short-lived local channel with no external endpoint or identity, and expired grants are denied on renewal attempts. | Positive and negative profile tests confirm a tiny local process receives only its granted scope and that an admin-level operation outside that scope is denied. | requirement | AU-SEC | VERIFIED | 19109362ddd4 2acbf25f8bb2 51b4b7155fdc c7483960ebb0 tests/integration/profiles/test_tiny_profile_admin_scope.py:64 |
| AU-SEC-R002 Control view failure never falls back to the content graph Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**Control view failure never falls back to the content graph.** When agent-utilities cannot open the __control__ view, knowledge_graph/core/engine.py raises a typed ControlGraphUnavailable error instead of silently continuing against the content graph. No operation can target the content graph as a substitute for an unavailable control view. | An injected control-view failure test confirms a ControlGraphUnavailable error is raised and no content-graph fallback write occurs. | requirement | AU-SEC | VERIFIED | 2acbf25f8bb2 51b4b7155fdc c7483960ebb0 caeeff7c3ef9 tests/unit/knowledge_graph/test_control_backend_binding.py:90 |
| AU-SEC-R003 Caches subscribe to invalidation with volatility-bounded TTL Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**Caches subscribe to invalidation with volatility-bounded TTL.** agent-utilities caches subscribe to authoritative invalidation events and bound their time-to-live by a declared volatility class. A learned change-rate signal may only shorten that TTL, never lengthen it. | Event, loss, and clock-based tests confirm invalidation is observed and that a learned rate never increases TTL beyond its declared bound. | requirement | AU-SEC | VERIFIED | 2acbf25f8bb2 45f3c3459198 51b4b7155fdc c7483960ebb0 tests/unit/caching/test_freshness.py:113 tests/unit/caching/test_freshness.py:128 |
| AU-SEC-R004 AU treats schema drift as a fail-closed typed result Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**AU treats schema drift as a fail-closed typed result.** agent-utilities treats a schema-drift classification from the connector SDK as a typed, fail-closed result at the SDK boundary: an incompatible or breaking report quarantines the affected work without advancing its SourceCheckpoint, following the declared schema evolution policy. agent-utilities never treats its own SHACL shapes as schema authority. | Connector contract tests feed a breaking SchemaDriftReport through the boundary and confirm the SourceCheckpoint does not advance. | requirement | AU-SEC | VERIFIED | 2acbf25f8bb2 51b4b7155fdc 9cc9e08c1a0e c7483960ebb0 tests/unit/knowledge_graph/schema_drift/test_gate.py:107 |
| AU-SEC-R005 AU proposes schema-repair mappings; EG alone activates them Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**AU proposes schema-repair mappings; EG alone activates them.** agent-utilities' governed decision path proposes a repair mapping for quarantined schema drift. It does not construct a candidate GraphSchema or pack, validate instances, run a shadow ingest, or activate a repair. Those steps belong exclusively to epistemic-graph after explicit approval. | A policy test confirms a proposed mapping reaches epistemic-graph for candidate construction. It also confirms that no AU code path performs direct activation. | requirement | AU-SEC | LANDED | 2acbf25f8bb2 9cc9e08c1a0e c7483960ebb0 c7fc09d3d2f6 |
| AU-SEC-R006 Elevation can be requested, approved, and revoked Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**Elevation can be requested, approved, and revoked.** agent-utilities exposes typed, tenant-scoped operations to request, approve, and revoke a temporary capability elevation. They are reachable from UI, A2A, and chat surfaces hosted by graph-os. The requesting agent and any learned policy cannot approve their own elevation; expiry and revocation are enforced at the authorization chokepoint before every protected action. | End to end policy tests cover request, approval by a distinct actor, revocation, and expiry. Each produces an auditable decision record. | requirement | AU-SEC | LANDED | 2acbf25f8bb2 c7483960ebb0 d1b9fc6dc5e5 |
| AU-SEC-R007 Guardrail tightening is automatic; loosening needs approval Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**Guardrail tightening is automatic; loosening needs approval.** agent-utilities evolves guardrail profiles through its governed decision path: a change that tightens the profile within declared bounds may apply automatically, while any loosening requires a live human approval. A request with missing bounds or stale evidence is rejected. | Decision and replay tests confirm automatic tightening within bounds, blocked loosening without approval, and rejection of stale or unbounded proposals. | requirement | AU-SEC | LANDED | 0b70fad31246 2acbf25f8bb2 c7483960ebb0 |
| AU-SEC-R008 AU allowlist is generated from the canonical scope registry Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**AU allowlist is generated from the canonical scope registry.** agent-utilities consumes the canonical, classified scope registry covering user, domain, service-only, approver, and admin classes. It generates its request-identity allowlist directly from it. Documented scopes such as admin:cluster-read, fleet:events, and finance scopes match the registry exactly. An unknown or service-only scope cannot be smuggled through a human-issued token. | A generator-diff test confirms the AU allowlist matches the registry output. It also confirms that scope parity holds between public surfaces and the engine. | requirement | AU-SEC | VERIFIED | 2acbf25f8bb2 c7483960ebb0 eba6b8e9a661 f63aeb608cc2 tests/unit/security/test_scope_registry.py:62 tests/unit/security/test_scope_registry.py:83 |
| AU-SEC-R009 Learned scores never grant security authority Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**Learned scores never grant security authority.** No learned probability, similarity score, or other model-derived confidence value can itself grant or extend authorization in agent-utilities or epistemic-graph. Every authorization decision traces to an explicit policy or approval record. | A static review of authorization code paths confirms no learned-score input participates in a grant decision. | requirement | AU-SEC | VERIFIED | 2acbf25f8bb2 4a5540dd2e3d 8a7a9e0e3fbe tests/unit/security/test_authority_audit.py:25 |
| AU-SEC-R010 The shared tenant hierarchy reads as the service identity Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**The shared tenant hierarchy reads as the service identity.** The process-wide tenant hierarchy snapshot reads `__control__` under the process service session. A request caller never decides it. Callers keep their own tenant scoping in `accessible_graphs`. | `tests/unit/knowledge_graph/core/test_tenant_registry_control_graph.py` proves a `kg:read` user without a `__control__` grant still resolves the chain, and the read runs as the service identity. | requirement | AU-SEC | VERIFIED | 3fb99d2ff295 e2b2152f1396 f63aeb608cc2 tests/unit/knowledge_graph/core/test_tenant_registry_control_graph.py:187 |
| AU-SEC-R011 Task and tool text is screened before it enters a prompt Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**Task and tool text is screened before it enters a prompt.** User input and tool output are validated against typed schemas and screened for injection patterns before they enter a prompt. Sensitive tools stay behind approval. A failed screen refuses the call with a typed reason. | See children `AU-SEC-R011.1` to `AU-SEC-R011.6`. | requirement | AU-SEC | SPECIFIED | No recorded commit/test evidence |
| AU-SEC-R011.1 Model Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**Model.** `ScreenVerdict` in `agent_utilities/orchestration/task_guard.py` carries a source of `user_input` or `tool_output`, a closed reason of `injection_pattern`, `schema_invalid` or `none`, and the matched rule identifier. | `tests/unit/orchestration/test_task_guard.py::test_screen_verdict_fields`. | requirement | AU-SEC | SPECIFIED | No recorded commit/test evidence |
| AU-SEC-R011.2 Behavior Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**Behavior.** The screen must validate structured text against its typed schema first, then scan free text with the injection scanner. Each rule set is a named, replaceable default. Redaction of personal data must run after a pass only. | `tests/unit/orchestration/test_task_guard.py::test_schema_then_scan_order`. | requirement | AU-SEC | SPECIFIED | No recorded commit/test evidence |
| AU-SEC-R011.3 Wiring Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**Wiring.** User input is screened by `screen_and_redact_agent_task` (`agent_utilities/orchestration/task_guard.py:32`), called from `_prepare_agent_task` at `agent_utilities/api/agent_control_plane.py:355`. This row creates the call site that screens tool output in `agent_utilities/capabilities/composition.py:147`, beside the existing input guardrail. | `tests/unit/capabilities/test_tool_output_screen.py::test_tool_output_screened`. | requirement | AU-SEC | SPECIFIED | No recorded commit/test evidence |
| AU-SEC-R011.4 Refusal Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**Refusal.** A failed screen must raise `TaskInjectionRejected` with the closed reason and must not call the model or the tool. A sensitive tool must refuse without a recorded approval, with reason `approval_required`. | `tests/unit/orchestration/test_task_guard.py::test_failed_screen_refuses_typed`. | requirement | AU-SEC | SPECIFIED | No recorded commit/test evidence |
| AU-SEC-R011.5 Evidence Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**Evidence.** Each screen must write the source, the verdict, the rule identifier and the tool name to the run trace. The trace must not store the rejected text. | `tests/unit/orchestration/test_task_guard.py::test_screen_trace_has_no_text`. | requirement | AU-SEC | SPECIFIED | No recorded commit/test evidence |
| AU-SEC-R011.6 Hot-path proof Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**Hot-path proof.** The entry point is the served `execute_agent` operation. A task with an injection pattern must be refused before capability resolution. A tool result with the same pattern must be refused before the next model step. The trace must show both verdicts. | `tests/integration/test_screen_served.py::test_execute_agent_refuses_injection`. | requirement | AU-SEC | SPECIFIED | No recorded commit/test evidence |
| AU-SEC-R012 Tool actions after untrusted content pause until the harness receives an approval, and the run records the influence Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**Tool actions after untrusted content pause until the harness receives an approval, and the run records the influence.** agent-utilities carries the engine's taint mark through the run. It pauses each gated tool action until graph-os returns an approval. It records which content influenced the action. | `See children `AU-SEC-R012.1` to `AU-SEC-R012.6`.` | requirement | AU-SEC | SPECIFIED | No recorded commit/test evidence |
| AU-SEC-R012.1 Model Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**Model.** `ContentInfluence` in `agent_utilities/security/tool_guard.py` carries the content identifier, its source and a received taint mark. The taint mark comes from EG-SRC-AUTH. The approval comes from GRAPHOS-A2A. `ActionClass` reuses the producer values exactly: `egress`, `privileged_call` or `delegation`. No local alias is accepted. | `tests/unit/security/test_tainted_action_gate.py::test_influence_model_fields` | requirement | AU-SEC | SPECIFIED | No recorded commit/test evidence |
| AU-SEC-R012.2 Behavior Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**Behavior.** The run must carry each received taint mark forward. A run holding a tainted mark must pause an action of a received class until it receives an approval. The class list is received; fallback default is all three. | `tests/unit/security/test_tainted_action_gate.py::test_tainted_run_pauses_for_approval` | requirement | AU-SEC | SPECIFIED | No recorded commit/test evidence |
| AU-SEC-R012.3 Wiring Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**Wiring.** The pause at `_requires_approval` (`agent_utilities/security/tool_guard.py:383`) must read the carried taint. Its production caller is `apply_tool_guard_approvals` at `agent_utilities/agent/factory.py:1054`. No taint input reaches that pause today. | `tests/unit/security/test_tainted_action_gate.py::test_requires_approval_reads_taint` | requirement | AU-SEC | SPECIFIED | No recorded commit/test evidence |
| AU-SEC-R012.4 Refusal Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**Refusal.** A gated action without a received approval must raise `ApprovalRequired` with the closed reason `untrusted_influence`. A missing taint mark must count as tainted, never as clean. An unknown action class, including `privileged`, must return typed `invalid_action_class` before any tool effect. | `tests/unit/security/test_tainted_action_gate.py::test_missing_taint_fails_closed` | requirement | AU-SEC | SPECIFIED | No recorded commit/test evidence |
| AU-SEC-R012.5 Evidence Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**Evidence.** Each gated action must write the action class, the identifiers of the influencing content and the approval outcome to the tool-call record (`capabilities/kg_audit_sink.py:113`). The record must not store content text. | `tests/unit/security/test_tainted_action_gate.py::test_influence_in_tool_call_record` | requirement | AU-SEC | SPECIFIED | No recorded commit/test evidence |
| AU-SEC-R012.6 Hot-path proof Definition — AU-SEC / AU-SEC — Agent security and governed policyCanonical requirement and verification source**Hot-path proof.** The entry point is the served `execute_agent` operation. A run reads tainted tool output, then requests each canonical action class. It must pause until it receives approval. The trace must name the influencing content. Test path: `tests/integration/test_tainted_action_served.py`. | `tests/integration/test_tainted_action_served.py::test_served_tainted_egress_pauses` | requirement | AU-SEC | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY AU-BOUNDARY — AU boundary deconstruction | spec | None | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R001 Retire AU's duplicated gateway module Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Retire AU's duplicated gateway module.** Agent Utilities deletes `agent_utilities/gateway/` once graph-os serves equivalent routes and widgets, including the AU-only behavior in `api.py`, `artifacts_api.py`, `registry_api.py`, `registry.py`, `schemas/graph_analyze.py`, `widgets/genius_agent.py`, and `widgets/_optional_client.py`. AU reconciles its drifted `schemas/graph_core` and `ontology_api` files with their graph-os counterparts and removes the `graph-os-daemon` script and the `gateway-widgets` extra. | Route-parity and artifact-tenancy integration tests on graph-os, plus an import census, confirm no AU gateway import remains before the AU gateway tests are deleted. | requirement | AU-BOUNDARY | SPECIFIED | aa5eba73e0f7 |
| AU-BOUNDARY-R001.1 Record what actually landed for the gateway retirement Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Record what actually landed for the gateway retirement.** PR #23 (merge commit `aa5eba73e0f7`) shipped only the boundary ownership and coverage gate scripts (`scripts/check_boundary_owners.py`, `scripts/check_boundary_coverage.py`, `scripts/boundary_inventory.py`) and moved `AU-BOUNDARY-R001` to LANDED in `status.json`. It deleted none of `agent_utilities/gateway/{api.py,artifacts_api.py,registry_api.py,registry.py,schemas/graph_analyze.py,widgets/genius_agent.py,widgets/_optional_client.py}`, all seven of which are still present at `origin/main`. | `git show --stat aa5eba73e0f7` lists only gate scripts and config, and `git ls-tree -r origin/main -- agent_utilities/gateway` shows all seven files still present. | requirement | AU-BOUNDARY | VERIFIED | 65d9961401fd tests/gates/test_boundary_landed_records.py:51 |
| AU-BOUNDARY-R001.2 Delete `agent_utilities/gateway/api.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete `agent_utilities/gateway/api.py`.** Agent Utilities removes the file and repoints or deletes its importers. | `tests/gates/test_boundary_r001_r010_deletion_census.py::test_gateway_api_deleted` passes once the file and its production imports are gone. | requirement | AU-BOUNDARY | VERIFIED | 0eb67c99cf0a tests/gates/test_boundary_r001_r010_deletion_census.py:54 |
| AU-BOUNDARY-R001.3 Delete `agent_utilities/gateway/artifacts_api.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete `agent_utilities/gateway/artifacts_api.py`.** Agent Utilities removes the file and repoints or deletes its importers. | `tests/gates/test_boundary_r001_r010_deletion_census.py::test_gateway_artifacts_api_deleted` passes once the file and its production imports are gone. | requirement | AU-BOUNDARY | VERIFIED | 902f906cac97 tests/gates/test_boundary_r001_3_deleted.py:28 tests/gates/test_boundary_r001_3_deleted.py:35 |
| AU-BOUNDARY-R001.4 Delete `agent_utilities/gateway/registry_api.py` (rollup) Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete `agent_utilities/gateway/registry_api.py` (rollup).** Agent Utilities removes the file and repoints or deletes its importers. Split because `agent_utilities/mcp/kg_server.py` drains the fleet catalog through six private `registry_api` functions for `GET /api/tools` and AU has no replacement for that read, so the deletion needs its own repoint step. Satisfied when `AU-BOUNDARY-R001.4.1` through `AU-BOUNDARY-R001.4.3` are VERIFIED. | `tests/gates/test_boundary_r001_r010_deletion_census.py::test_gateway_registry_api_deleted` passes once the children land. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R001.4.1 Stop mounting `registry_api` routes from `agent_utilities/gateway/graph_api.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Stop mounting `registry_api` routes from `agent_utilities/gateway/graph_api.py`.** Agent Utilities removes the `register_registry_routes` mount (and the matching monkeypatch in `tests/unit/gateway/test_remote_oauth_api.py`), since graph-os serves `/api/registry/*`. | `git grep -n 'registry_api' agent_utilities/gateway/graph_api.py tests/unit/gateway/test_remote_oauth_api.py` finds no match. | requirement | AU-BOUNDARY | VERIFIED | 8bc78cbdfda1 tests/unit/gateway/test_remote_oauth_api.py:194 |
| AU-BOUNDARY-R001.4.2 ROLLUP: repoint the `GET /api/tools` catalog read in `agent_utilities/mcp/kg_server.py` off `registry_api` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**ROLLUP: repoint the `GET /api/tools` catalog read in `agent_utilities/mcp/kg_server.py` off `registry_api`.** Rejected as not bite-sized: `_read_catalog_kind_sync` has no AU replacement and drains the `servers` kind through six private `registry_api` functions (`_KIND_SPECS`, `_MAX_LIMIT`, `_authorized_page`, `_get_catalog_engine`, `_require_catalog_authority`, `_row_key`) that carry the tenant/principal scoping, redaction and SQL construction, and `tests/unit/mcp/test_collapse_tool_endpoints.py` patches those privates. Split into a reader decision, a new tenant-scoped reader with refusal tests, the call-site repoint, and the test update. | Satisfied when children `AU-BOUNDARY-R001.4.2.1` through `AU-BOUNDARY-R001.4.2.4` are VERIFIED. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R001.4.2.1 Record the owner of the `servers` catalog read for `GET /api/tools` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Record the owner of the `servers` catalog read for `GET /api/tools`.** Name the graph-os registry operation to call, or record that AU reads the engine catalog directly, and state how tenant/principal scoping and redaction are preserved. | The decision is recorded in `specs/au-boundary-deconstruction/design.md` and cites the graph-os owner by ID. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R001.4.2.2 Add one typed `servers`-kind catalog reader that does not import `registry_api` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Add one typed `servers`-kind catalog reader that does not import `registry_api`.** One new module under `agent_utilities/mcp/` returning validated rows, fail-closed on missing tenant/principal authority, with refusal tests. Depends on `AU-BOUNDARY-R001.4.2.1`; if the decision is a graph-os registry call, the graph-os endpoint is a graph-os repo change. | New unit tests bound to this ID prove a missing-authority refusal and a paged drain bounded by `_TOOLS_CATALOG_DRAIN_MAX_PAGES`. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R001.4.2.3 Call the new reader from `_read_catalog_kind_sync` in `agent_utilities/mcp/kg_server.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Call the new reader from `_read_catalog_kind_sync` in `agent_utilities/mcp/kg_server.py`.** Remove the `..gateway.registry_api` import and the docstring references. | `git grep -n 'registry_api' agent_utilities/mcp/kg_server.py` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R001.4.2.4 Update `tests/unit/mcp/test_collapse_tool_endpoints.py` to patch the new reader instead of `registry_api` privates Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Update `tests/unit/mcp/test_collapse_tool_endpoints.py` to patch the new reader instead of `registry_api` privates.** | `git grep -n 'registry_api' tests/unit/mcp/test_collapse_tool_endpoints.py` finds no match and the file passes. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R001.4.3 Delete the `registry_api` module and its tests Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete the `registry_api` module and its tests.** Agent Utilities runs `git rm agent_utilities/gateway/registry_api.py`, deletes `tests/unit/gateway/test_registry_api.py` and `tests/unit/gateway/test_registry_catalog_count_scope.py`, and drops the module from `docs/concepts.yaml` and `scripts/check_openapi_coverage.py`. This also removes its `agent_utilities/mcp/multiplexer.py` import (`AU-BOUNDARY-R004.7`). | `tests/gates/test_boundary_r001_r010_deletion_census.py::test_gateway_registry_api_deleted` passes. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R001.5 Delete `agent_utilities/gateway/registry.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete `agent_utilities/gateway/registry.py`.** Agent Utilities removes the file and repoints or deletes its importers. | `tests/gates/test_boundary_r001_r010_deletion_census.py::test_gateway_registry_deleted` passes once the file and its production imports are gone. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R001.6 Delete `agent_utilities/gateway/schemas/graph_analyze.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete `agent_utilities/gateway/schemas/graph_analyze.py`.** Agent Utilities removes the file and repoints or deletes its importers. | `tests/gates/test_boundary_r001_r010_deletion_census.py::test_gateway_schemas_graph_analyze_deleted` passes once the file and its production imports are gone. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R001.7 Delete `agent_utilities/gateway/widgets/genius_agent.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete `agent_utilities/gateway/widgets/genius_agent.py`.** Agent Utilities removes the file and repoints or deletes its importers. | `tests/gates/test_boundary_r001_r010_deletion_census.py::test_gateway_widgets_genius_agent_deleted` passes once the file and its production imports are gone. | requirement | AU-BOUNDARY | VERIFIED | 7717d2e627ab tests/gates/test_boundary_r001_7_deleted.py:22 tests/gates/test_boundary_r001_7_deleted.py:29 |
| AU-BOUNDARY-R001.8 Delete `agent_utilities/gateway/widgets/_optional_client.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete `agent_utilities/gateway/widgets/_optional_client.py`.** Agent Utilities removes the file and repoints or deletes its importers. | `tests/gates/test_boundary_r001_r010_deletion_census.py::test_gateway_widgets_optional_client_deleted` passes once the file and its production imports are gone. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R002 Retire AU's deployment and skill-certification tooling Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Retire AU's deployment and skill-certification tooling.** Agent Utilities deletes `deployment/**` once graph-os owns installation, environment diagnostics, environment-sync, certification, and skill validation and runtime-harness behavior, including `backends.py`, `certification_oidc.py`, `skill_validation*.py`, and the moved `skills/` subpackages. AU removes the console scripts that collide with graph-os entry points or target the moved modules, leaving graph-os as the sole owner of the packaging entry points for this behavior. | Dry-run install and certification tests against the graph-os entry points confirm no AU console script still targets a moved module. | requirement | AU-BOUNDARY | SPECIFIED | db29b2da626e fca0c5ee42b3 |
| AU-BOUNDARY-R002.1 Record what actually landed for the deployment/skill-certification retirement Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Record what actually landed for the deployment/skill-certification retirement.** PR #26 (merge commit `fca0c5ee42b3`) edited `agent_utilities/deployment/{config_generator.py,doctor.py,genesis_environments.py,repo_templates.py}` and moved skill content, and moved `AU-BOUNDARY-R002` to LANDED in `status.json`. It deleted neither `agent_utilities/deployment/backends.py` nor `agent_utilities/deployment/certification_oidc.py`, both of which are still present at `origin/main`. | `git show --stat fca0c5ee42b3` shows no removal of `backends.py`/`certification_oidc.py`, and `git ls-tree -r origin/main -- agent_utilities/deployment` shows both files still present. | requirement | AU-BOUNDARY | LANDED | db29b2da626e |
| AU-BOUNDARY-R002.2 Delete `agent_utilities/deployment/backends.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete `agent_utilities/deployment/backends.py`.** Agent Utilities removes the file and repoints or deletes its importers. | `tests/gates/test_boundary_r002_2_backends_deleted.py::test_deployment_backends_deleted` passes once the file and its production imports are gone. | requirement | AU-BOUNDARY | VERIFIED | db29b2da626e tests/gates/test_boundary_r002_2_backends_deleted.py:34 |
| AU-BOUNDARY-R002.3 ROLLUP: delete `agent_utilities/deployment/certification_oidc.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**ROLLUP: delete `agent_utilities/deployment/certification_oidc.py`.** Rejected as not bite-sized: the module is the live ephemeral HTTPS loopback OIDC authority (`EphemeralLoopbackOidcAuthority`, `AUTHORITY_MODE`, `validated_token_ttl_seconds`) that `deployment/skill_validation.py` and `deployment/skill_validation_assets.py` call at runtime, with no replacement in AU; it is also a `main()` entry for `scripts/certification/loopback_oidc.py` and is named in three release/egress gate path lists. Split into a replacement decision, importer repoints, script/gate-list cleanup, and a final deletion. | Satisfied when children `AU-BOUNDARY-R002.3.1` through `AU-BOUNDARY-R002.3.5` are VERIFIED. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R002.3.1 Record the graph-os owner of the ephemeral loopback OIDC certification authority Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Record the graph-os owner of the ephemeral loopback OIDC certification authority.** Name the graph-os module or operation that replaces `EphemeralLoopbackOidcAuthority`, `AUTHORITY_MODE`, `DEFAULT_TOKEN_TTL_SECONDS` and `validated_token_ttl_seconds`, or record a reviewed deletion reason for the skill-certification flow that consumes them. **Finding: graph-os `main` has no replacement (no `loopback`/`certification_oidc` match in `graph_os`); cross-repo, blocked on a graph-os owner or a reviewed deletion decision. See design.md.** | The replacement (or deletion reason) is recorded in `specs/au-boundary-deconstruction/design.md` and cites the graph-os owner by ID. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R002.3.2 Repoint or remove the `certification_oidc` import in `agent_utilities/deployment/skill_validation.py` and `agent_utilities/deployment/skill_validation_assets.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint or remove the `certification_oidc` import in `agent_utilities/deployment/skill_validation.py` and `agent_utilities/deployment/skill_validation_assets.py`.** Both import the authority symbols named in `AU-BOUNDARY-R002.3.1`. | `git grep -n certification_oidc -- agent_utilities/deployment/skill_validation.py agent_utilities/deployment/skill_validation_assets.py` prints nothing and `tests/gates/test_skill_validation_deployment.py` and `tests/gates/test_skill_certification_assets.py` pass. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R002.3.3 Delete `scripts/certification/loopback_oidc.py` and `tests/unit/scripts/test_loopback_oidc.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete `scripts/certification/loopback_oidc.py` and `tests/unit/scripts/test_loopback_oidc.py`.** The script only wraps `certification_oidc.main`; the test exercises only the module. | Neither file exists and `git grep -n loopback_oidc -- scripts tests` shows no import of them. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R002.3.4 Remove `agent_utilities/deployment/certification_oidc.py` from the path lists in `scripts/check_http_egress_boundary.py` and `scripts/release/check_release_wheel.py`, and its docstring mention in `scripts/security/check_http_egress_boundary_gate.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Remove `agent_utilities/deployment/certification_oidc.py` from the path lists in `scripts/check_http_egress_boundary.py` and `scripts/release/check_release_wheel.py`, and its docstring mention in `scripts/security/check_http_egress_boundary_gate.py`.** | `git grep -n certification_oidc -- scripts` prints nothing and the egress-boundary and release-wheel checks pass. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R002.3.5 Delete `agent_utilities/deployment/certification_oidc.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete `agent_utilities/deployment/certification_oidc.py`.** Also remove it from the three lists in `tests/gates/test_exact_local_release_contract.py`. | `tests/gates/test_boundary_r002_3_certification_oidc_deleted.py::test_deployment_certification_oidc_deleted` passes once the file and its production imports are gone. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003 Retire AU's legacy MCP host and action manifest Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Retire AU's legacy MCP host and action manifest.** Agent Utilities deletes `mcp/kg_server.py`, `mcp/tools/**`, and `mcp/_graphos_action_manifest.py` once every behavior they implement is mapped to an approved graph-os operation or has a recorded, reviewed deletion reason. AU also removes the `_ingest_capabilities` function from `sdd/watcher.py`, deletes or relocates the tests that import these modules, and removes the AU `graph-os` console script. | An action-to-operation parity audit against the approved operation registry, with authorization checks exercised on the real graph-os entry points, shows no unmapped behavior is lost. | requirement | AU-BOUNDARY | SPECIFIED | 2456745c1e4d |
| AU-BOUNDARY-R003.1 Record what actually landed for the legacy MCP host retirement Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Record what actually landed for the legacy MCP host retirement.** Commit `2456745c1e4d` ("feat(gates): boundary ownership and coverage checks") shipped only `scripts/check_boundary_owners.py`, `scripts/check_boundary_coverage.py`, and `scripts/boundary_inventory.py`, and moved `AU-BOUNDARY-R003` to LANDED in `status.json`. It deleted neither `agent_utilities/mcp/kg_server.py` nor `agent_utilities/mcp/_graphos_action_manifest.py`, and left `_ingest_capabilities` in `agent_utilities/sdd/watcher.py`. | `git show --stat 2456745c1e4d` shows only the three gate scripts, and `git ls-tree -r origin/main -- agent_utilities/mcp/kg_server.py agent_utilities/mcp/_graphos_action_manifest.py` lists both files. `git grep -n _ingest_capabilities origin/main -- agent_utilities/sdd/watcher.py` finds the function. | requirement | AU-BOUNDARY | VERIFIED | 65d9961401fd tests/gates/test_boundary_landed_records.py:57 |
| AU-BOUNDARY-R003.5 Decide the per-behavior graph-os operation mapping for `kg_server.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Decide the per-behavior graph-os operation mapping for `kg_server.py`.** Agent Utilities records, for every behavior `kg_server.py` implements, which approved graph-os operation it maps to, or a reviewed deletion reason if none is needed. | The mapping is recorded in this spec as an added table from `kg_server.py` behavior to graph-os operation (or deletion reason). | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.6 Repoint `agent_utilities/mcp/tools/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/mcp/tools/**` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/mcp/tools/**` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.7 Repoint `agent_utilities/mcp/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/mcp/** (excluding tools/)` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/mcp/** (excluding tools/)` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.8 Repoint `agent_utilities/gateway/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/gateway/**` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/gateway/**` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.9 Repoint `agent_utilities/knowledge_graph/core/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/knowledge_graph/core/**` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/knowledge_graph/core/**` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.10 Repoint `agent_utilities/gateway/schemas/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/gateway/schemas/**` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/gateway/schemas/**` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.11 Repoint `agent_utilities/deployment/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/deployment/**` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/deployment/**` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.12 Repoint `agent_utilities/security/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/security/**` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/security/**` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.13 Repoint `agent_utilities/orchestration/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/orchestration/**` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/orchestration/**` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.14 Repoint `agent_utilities/knowledge_graph/ingestion/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/knowledge_graph/ingestion/**` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/knowledge_graph/ingestion/**` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.15 Repoint `agent_utilities/knowledge_graph/retrieval/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/knowledge_graph/retrieval/**` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/knowledge_graph/retrieval/**` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.16 Repoint `agent_utilities/knowledge_graph/backends/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/knowledge_graph/backends/**` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/knowledge_graph/backends/**` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.17 Repoint `agent_utilities/core/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/core/** (excluding registry/)` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/core/** (excluding registry/)` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.18 Repoint `agent_utilities/cli/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/cli/**` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/cli/**` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.19 Repoint `agent_utilities/server/routers/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/server/routers/**` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/server/routers/**` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.20 Repoint `agent_utilities/sdd/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/sdd/**` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/sdd/**` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.21 Repoint `agent_utilities/observability/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/observability/**` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/observability/**` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.22 Repoint `agent_utilities/messaging/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/messaging/**` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/messaging/**` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.23 Repoint `agent_utilities/media/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/media/**` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/media/**` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.24 Repoint `agent_utilities/knowledge_graph/live_artifacts/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/knowledge_graph/live_artifacts/**` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/knowledge_graph/live_artifacts/**` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.25 Repoint `agent_utilities/harness/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/harness/** (including memorydata/)` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/harness/** (including memorydata/)` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.26 Repoint `agent_utilities/ecosystem/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/ecosystem/**` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/ecosystem/**` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.27 Repoint `agent_utilities/core/registry/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/core/registry/**` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/core/registry/**` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.28 Repoint `agent_utilities/claude_harness/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `agent_utilities/claude_harness/**` importers off `agent_utilities/mcp/kg_server.py`.** Agent Utilities calls the graph-os operations decided in AU-BOUNDARY-R003.5 instead. | `git grep -l kg_server agent_utilities/claude_harness/**` finds no match outside tests. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.29 Delete `agent_utilities/mcp/kg_server.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete `agent_utilities/mcp/kg_server.py`.** Every behavior is mapped and every importing package is repointed. | `tests/gates/test_boundary_r001_r010_deletion_census.py::test_mcp_kg_server_deleted` passes. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.3 Delete `agent_utilities/mcp/_graphos_action_manifest.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete `agent_utilities/mcp/_graphos_action_manifest.py`.** Agent Utilities removes the file and repoints or deletes its importers. | `tests/gates/test_boundary_r001_r010_deletion_census.py::test_mcp_graphos_action_manifest_deleted` passes once the file and its production imports are gone. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R003.4 Remove `_ingest_capabilities` from `agent_utilities/sdd/watcher.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Remove `_ingest_capabilities` from `agent_utilities/sdd/watcher.py`.** Agent Utilities deletes the function and repoints or deletes its callers. | `tests/gates/test_boundary_r001_r010_deletion_census.py::test_sdd_watcher_ingest_capabilities_removed` passes once the function and its callers are gone. | requirement | AU-BOUNDARY | VERIFIED | 908c5080c0b5 tests/gates/test_boundary_r003_4.py:29 tests/gates/test_boundary_r003_4.py:55 |
| AU-BOUNDARY-R004 Retire AU's multiplexer family duplicated in graph-os Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Retire AU's multiplexer family duplicated in graph-os.** Agent Utilities deletes its multiplexer modules, including `multiplexer.py`, `child_resilience`, `protocol_compat`, `shared_multiplexer`, `co_service_supervisor`, and `catalog_reconciliation`, once graph-os's fleet module provides equivalent behavior. Host-only modules such as `remote_oauth_broker`, `tasks_extension`, `eunomia_principal`, `harness_server`, `middlewares`, and `skill_coverage` move into graph-os, while `toolset_factory`, `tool_specs`, and `agent_manager` remain in AU. | Per-server attribution and failover tests against the graph-os fleet module confirm no duplicate multiplexer state remains in AU. | requirement | AU-BOUNDARY | SPECIFIED | 2456745c1e4d |
| AU-BOUNDARY-R004.1 Record what actually landed for the multiplexer-family retirement Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Record what actually landed for the multiplexer-family retirement.** Commit `2456745c1e4d` shipped only the boundary ownership and coverage gate scripts and moved `AU-BOUNDARY-R004` to LANDED in `status.json`. It deleted none of the multiplexer family, and `agent_utilities/mcp/multiplexer.py` (plus `agent_utilities/mcp/shared_multiplexer.py`) are still present at `origin/main`. | `git show --stat 2456745c1e4d` shows only gate scripts, and `git ls-tree -r origin/main -- agent_utilities/mcp/multiplexer.py agent_utilities/mcp/shared_multiplexer.py` lists both files. | requirement | AU-BOUNDARY | VERIFIED | 65d9961401fd tests/gates/test_boundary_landed_records.py:70 |
| AU-BOUNDARY-R004.3 Confirm graph-os's fleet module provides parity for `multiplexer.py`'s routing/dispatch API Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Confirm graph-os's fleet module provides parity for `multiplexer.py`'s routing/dispatch API.** The parent row names graph-os's fleet module as the replacement; Agent Utilities verifies the equivalent behavior exists there before any importer is repointed. | A per-server attribution and failover test against the graph-os fleet module passes for every behavior `multiplexer.py` provides. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R004.4 Repoint agent_utilities/mcp/kg_server.py, agent_utilities/mcp/shared_multiplexer.py, and agent_utilities/mcp/tools/intent_tools.py off `agent_utilities/mcp/multiplexer.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint agent_utilities/mcp/kg_server.py, agent_utilities/mcp/shared_multiplexer.py, and agent_utilities/mcp/tools/intent_tools.py off `agent_utilities/mcp/multiplexer.py`.** Agent Utilities imports the graph-os fleet module instead, per AU-BOUNDARY-R004.3. | `git grep -n 'mcp.multiplexer\|mcp\.multiplexer' agent_utilities/mcp/kg_server.py` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R004.5 Repoint agent_utilities/capabilities/fleet_tool_search.py off `agent_utilities/mcp/multiplexer.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint agent_utilities/capabilities/fleet_tool_search.py off `agent_utilities/mcp/multiplexer.py`.** Agent Utilities imports the graph-os fleet module instead, per AU-BOUNDARY-R004.3. | `git grep -n 'mcp.multiplexer\|mcp\.multiplexer' agent_utilities/capabilities/fleet_tool_search.py` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R004.6 Repoint agent_utilities/deployment/doctor.py off `agent_utilities/mcp/multiplexer.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint agent_utilities/deployment/doctor.py off `agent_utilities/mcp/multiplexer.py`.** Agent Utilities imports the graph-os fleet module instead, per AU-BOUNDARY-R004.3. | `git grep -n 'mcp.multiplexer\|mcp\.multiplexer' agent_utilities/deployment/doctor.py` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R004.7 Repoint agent_utilities/gateway/registry_api.py off `agent_utilities/mcp/multiplexer.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint agent_utilities/gateway/registry_api.py off `agent_utilities/mcp/multiplexer.py`.** Agent Utilities imports the graph-os fleet module instead, per AU-BOUNDARY-R004.3. | `git grep -n 'mcp.multiplexer\|mcp\.multiplexer' agent_utilities/gateway/registry_api.py` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R004.8 Repoint agent_utilities/orchestration/agent_runner.py off `agent_utilities/mcp/multiplexer.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint agent_utilities/orchestration/agent_runner.py off `agent_utilities/mcp/multiplexer.py`.** Agent Utilities imports the graph-os fleet module instead, per AU-BOUNDARY-R004.3. | `git grep -n 'mcp.multiplexer\|mcp\.multiplexer' agent_utilities/orchestration/agent_runner.py` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R004.9 Repoint agent_utilities/tools/dynamic_tool_orchestrator.py off `agent_utilities/mcp/multiplexer.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint agent_utilities/tools/dynamic_tool_orchestrator.py off `agent_utilities/mcp/multiplexer.py`.** Agent Utilities imports the graph-os fleet module instead, per AU-BOUNDARY-R004.3. | `git grep -n 'mcp.multiplexer\|mcp\.multiplexer' agent_utilities/tools/dynamic_tool_orchestrator.py` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R004.10 Delete `agent_utilities/mcp/multiplexer.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete `agent_utilities/mcp/multiplexer.py`.** Parity is confirmed and every importer is repointed. | `tests/gates/test_boundary_r001_r010_deletion_census.py::test_mcp_multiplexer_deleted` passes. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R005 Migrate connector packages A-E onto the SDK Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Migrate connector packages A-E onto the SDK.** Connector packages in the A-E range stop importing AU's `mcp`, `core.config`, `core.exceptions`, `core.transport_security`, and `base_utilities` modules and import the agent connector SDK instead. Each package replaces its use of `native_ingest` with the epistemic graph client and drops its dependency on `agent-utilities`. | A per-package import census plus a real read and write receipt against the SDK and the graph client prove each connector no longer depends on AU. | requirement | AU-BOUNDARY | SPECIFIED | a754f1299033 f0f5e51f6b47 |
| AU-BOUNDARY-R005.1 A-E connector import census lands, naming its own blind spot Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**A-E connector import census lands, naming its own blind spot.** PR #150 (commit `79dc21bab`) adds a fleet census scanning connector packages in the A-E range for the banned AU imports and moves `AU-BOUNDARY-R005` to LANDED on a zero-unsanctioned-violator finding; `status.json`'s `landed_in` for the row is itself wrong, pointing at the unrelated `AU-HARNESS-R005.1` merge commit `a754f1299033`, not at any A-E connector change. | The census artifact and PR #150 exist at `origin/main`; `git show --stat a754f1299033` shows only `agent_utilities/harness/generative_model_policy.py`, no connector-package change. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R005.2 Fix the A-E census blind spot and finish the migration Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Fix the A-E census blind spot and finish the migration.** `census(fleet_root,'a','e')` still flags `ansible-tower-mcp`, `audiobookshelf-mcp`, `ciso-assistant-api`, and `data-science-mcp` importing banned AU modules (`mcp`, `core.config`, `core.exceptions`, `core.transport_security`, `base_utilities`); each of these four connector packages drops the banned imports and its `native_ingest` call in favor of the agent connector SDK and the epistemic graph client. | A per-package import census over `ansible-tower-mcp`, `audiobookshelf-mcp`, `ciso-assistant-api`, and `data-science-mcp` shows zero banned imports, plus a real read and write receipt against the SDK and the graph client for each. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R006 Migrate connector packages F-J onto the SDK Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Migrate connector packages F-J onto the SDK.** Connector packages in the F-J range stop importing AU's `mcp`, `core.config`, `core.exceptions`, `core.transport_security`, and `base_utilities` modules and import the agent connector SDK instead. Each package replaces its use of `native_ingest` with the epistemic graph client and drops its dependency on `agent-utilities`. | A per-package import census plus a real read and write receipt against the SDK and the graph client prove each connector no longer depends on AU. | requirement | AU-BOUNDARY | VERIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R006.1 Ship AU's F-J connector import-census gate Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Ship AU's F-J connector import-census gate.** Agent Utilities owns and ships the per-package import census instrument that the F-J connector repos' own migration PRs will be checked against, scanning each sibling connector package in the F-J range for the banned `mcp`, `core.config`, `core.exceptions`, `core.transport_security`, and `base_utilities` imports. The per-package migrations themselves (removing the banned imports in each connector repo) are tracked as further `AU-BOUNDARY-R006.n` rows against those repos and are out of scope for this child. | The census gate correctly classifies a known-compliant package and a known-still-importing package in the F-J range. | requirement | AU-BOUNDARY | VERIFIED | 105559f760c3 5a00da215c55 fe5ca4e239ec tests/gates/test_connector_sdk_import_census_gate.py:35 tests/gates/test_connector_sdk_import_census_gate.py:55 |
| AU-BOUNDARY-R007 Migrate connector packages K-O onto the SDK Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Migrate connector packages K-O onto the SDK.** Connector packages in the K-O range stop importing AU's `mcp`, `core.config`, `core.exceptions`, `core.transport_security`, and `base_utilities` modules and import the agent connector SDK instead. Each package replaces its use of `native_ingest` with the epistemic graph client and drops its dependency on `agent-utilities`. | A per-package import census plus a real read and write receipt against the SDK and the graph client prove each connector no longer depends on AU. | requirement | AU-BOUNDARY | SPECIFIED | a754f1299033 f0f5e51f6b47 |
| AU-BOUNDARY-R007.1 K-O connector import census lands, naming its own blind spot Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**K-O connector import census lands, naming its own blind spot.** PR #150 (commit `79dc21bab`) adds a fleet census scanning connector packages in the K-O range for the banned AU imports and moves `AU-BOUNDARY-R007` to LANDED on a zero-unsanctioned-violator finding; `status.json`'s `landed_in` for the row is itself wrong, pointing at the unrelated `AU-HARNESS-R005.1` merge commit `a754f1299033`, not at any K-O connector change. | The census artifact and PR #150 exist at `origin/main`; `git show --stat a754f1299033` shows only `agent_utilities/harness/generative_model_policy.py`, no connector-package change. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R007.2 Fix the K-O census blind spot and finish the migration Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Fix the K-O census blind spot and finish the migration.** `census(fleet_root,'k','o')` still flags `keycloak-agent`, `langfuse-agent`, `leanix-agent`, `microsoft-agent`, and `opensearch-mcp` importing banned AU modules (`mcp`, `core.config`, `core.exceptions`, `core.transport_security`, `base_utilities`); each of these five connector packages drops the banned imports and its `native_ingest` call in favor of the agent connector SDK and the epistemic graph client. | A per-package import census over `keycloak-agent`, `langfuse-agent`, `leanix-agent`, `microsoft-agent`, and `opensearch-mcp` shows zero banned imports, plus a real read and write receipt against the SDK and the graph client for each. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R008 Migrate connector packages P-S onto the SDK Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Migrate connector packages P-S onto the SDK.** Connector packages in the P-S range, including repository-manager, stop importing AU's `mcp`, `core.config`, `core.exceptions`, `core.transport_security`, and `base_utilities` modules and import the agent connector SDK instead, replacing `native_ingest` with the epistemic graph client and dropping the `agent-utilities` dependency. Repository-manager's own use of merge-queue and concept-reservation governance is covered by a separate requirement and is out of scope here. | A per-package import census plus a real read and write receipt against the SDK and the graph client prove each connector, including repository-manager, no longer depends on AU for transport. | requirement | AU-BOUNDARY | SPECIFIED | a754f1299033 f0f5e51f6b47 |
| AU-BOUNDARY-R008.1 P-S connector import census lands, naming its own blind spot Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**P-S connector import census lands, naming its own blind spot.** PR #150 (commit `79dc21bab`) adds a fleet census scanning connector packages in the P-S range for the banned AU imports and moves `AU-BOUNDARY-R008` to LANDED on a zero-unsanctioned-violator finding; `status.json`'s `landed_in` for the row is itself wrong, pointing at the unrelated `AU-HARNESS-R005.1` merge commit `a754f1299033`, not at any P-S connector change. | The census artifact and PR #150 exist at `origin/main`; `git show --stat a754f1299033` shows only `agent_utilities/harness/generative_model_policy.py`, no connector-package change. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R008.2 Fix the P-S census blind spot and finish the migration Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Fix the P-S census blind spot and finish the migration.** `census(fleet_root,'p','s')` still flags `paperless-ngx-mcp`, `pulselink-mcp`, `repository-manager`, `rom-manager`, and `systems-manager` importing banned AU modules (`mcp`, `core.config`, `core.exceptions`, `core.transport_security`, `base_utilities`); each of these five connector packages drops the banned imports and its `native_ingest` call in favor of the agent connector SDK and the epistemic graph client, with repository-manager's merge-queue/concept-reservation governance remaining out of scope per the parent row. | A per-package import census over `paperless-ngx-mcp`, `pulselink-mcp`, `repository-manager`, `rom-manager`, and `systems-manager` shows zero banned imports, plus a real read and write receipt against the SDK and the graph client for each. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R009 Migrate connector packages T-Z onto the SDK Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Migrate connector packages T-Z onto the SDK.** Connector packages in the T-Z range stop importing AU's `mcp`, `core.config`, `core.exceptions`, `core.transport_security`, and `base_utilities` modules and import the agent connector SDK instead, replacing `native_ingest` with the epistemic graph client and dropping the `agent-utilities` dependency. The universal-skills `agent-package-builder` templates are retargeted onto the SDK for every connector package, not only this range. | A per-package import census plus a real read and write receipt against the SDK and the graph client confirm no connector package, including those generated from the retargeted templates, still imports AU. | requirement | AU-BOUNDARY | VERIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R009.1 Ship AU's T-Z connector import-census gate Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Ship AU's T-Z connector import-census gate.** Agent Utilities owns and ships the per-package import census instrument that the T-Z connector repos' own migration PRs will be checked against, scanning each sibling connector package in the T-Z range for the banned `mcp`, `core.config`, `core.exceptions`, `core.transport_security`, and `base_utilities` imports. The per-package migrations themselves and the `agent-package-builder` template retargeting are tracked as further `AU-BOUNDARY-R009.n` rows and are out of scope for this child. | The census gate correctly classifies a known-compliant package and a known-still-importing package in the T-Z range. | requirement | AU-BOUNDARY | VERIFIED | 5a00da215c55 tests/gates/test_connector_sdk_import_census_gate.py:45 |
| AU-BOUNDARY-R010 Delete AU's SDK-duplicated connector toolkit Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete AU's SDK-duplicated connector toolkit.** Agent Utilities deletes its connector toolkit and HTTP/credential helpers, including `mcp/server_factory`, `mcp/action_dispatch`, `mcp/concurrency`, `mcp/verbose_tools`, `mcp/context_helpers`, `mcp/client_credentials`, `mcp/delegated_auth`, `mcp/httpx_boundary`, `mcp/oauth_log_hygiene`, `core/transport_security`, `core/http_client`, `core/_env`, `core/decorators`, `core/credentials`, `core/exceptions`, `base_utilities.py`, `httpsupport/**`, and the duplicated `security/**` modules, once every connector repository has migrated onto the SDK. AU adds a release gate that fails the release if any connector repository still imports `agent_utilities`, with no compatibility alias retained. | A release-time import scan across all connector repositories shows zero imports of the deleted AU toolkit before the gate is enabled. | requirement | AU-BOUNDARY | SPECIFIED | 2456745c1e4d |
| AU-BOUNDARY-R010.1 Record what actually landed for the connector-toolkit deletion Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Record what actually landed for the connector-toolkit deletion.** `status.json` points `AU-BOUNDARY-R010`'s `landed_in` at commit `2456745c1e4d`, which shipped only the boundary ownership and coverage gate scripts. It deleted none of the listed connector-toolkit modules, and `agent_utilities/base_utilities.py` is still present at `origin/main`. | `git show --stat 2456745c1e4d` shows only gate scripts, and `git ls-tree -r origin/main -- agent_utilities/base_utilities.py` lists the file. | requirement | AU-BOUNDARY | VERIFIED | 635f38f64aca tests/gates/test_boundary_r010_r048_landed_records.py:12 |
| AU-BOUNDARY-R010.3 Decide target module for type coercion helpers (to_boolean, to_integer, to_list, and to_dict) currently in `base_utilities.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Decide target module for type coercion helpers (to_boolean, to_integer, to_list, and to_dict) currently in `base_utilities.py`.** No replacement module is named by the parent row for this group. Agent Utilities records which existing or new module owns it after deletion. | The decision is recorded in this spec as an added note naming the target module for type coercion helpers. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.4 Add type coercion helpers (to_boolean, to_integer, to_list, and to_dict) to the module decided in AU-BOUNDARY-R010.3 Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Add type coercion helpers (to_boolean, to_integer, to_list, and to_dict) to the module decided in AU-BOUNDARY-R010.3.** Agent Utilities implements the group in its new home with equivalent behavior to the `base_utilities.py` originals. | A unit test for each symbol in the group passes against the new module. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.5 Decide target module for env/host helpers (expand_env_vars, is_loopback_url, retrieve_package_name, advertised_self_hosts, and get_library_file_path) currently in `base_utilities.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Decide target module for env/host helpers (expand_env_vars, is_loopback_url, retrieve_package_name, advertised_self_hosts, and get_library_file_path) currently in `base_utilities.py`.** No replacement module is named by the parent row for this group; Agent Utilities records which existing or new module owns it after deletion. | The decision is recorded in this spec as an added note naming the target module for env/host helpers. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.6 Add env/host helpers (expand_env_vars, is_loopback_url, retrieve_package_name, advertised_self_hosts, and get_library_file_path) to the module decided in AU-BOUNDARY-R010.5 Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Add env/host helpers (expand_env_vars, is_loopback_url, retrieve_package_name, advertised_self_hosts, and get_library_file_path) to the module decided in AU-BOUNDARY-R010.5.** Agent Utilities implements the group in its new home with equivalent behavior to the `base_utilities.py` originals. | A unit test for each symbol in the group passes against the new module. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.7 Decide target module for model persistence helpers (safe_save_model and safe_load_model) currently in `base_utilities.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Decide target module for model persistence helpers (safe_save_model and safe_load_model) currently in `base_utilities.py`.** No replacement module is named by the parent row for this group. Agent Utilities records which existing or new module owns it after deletion. | The decision is recorded in this spec as an added note naming the target module for model persistence helpers. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.8 Add model persistence helpers (safe_save_model and safe_load_model) to the module decided in AU-BOUNDARY-R010.7 Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Add model persistence helpers (safe_save_model and safe_load_model) to the module decided in AU-BOUNDARY-R010.7.** Agent Utilities implements the group in its new home with equivalent behavior to the `base_utilities.py` originals. | A unit test for each symbol in the group passes against the new module. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.9 Decide target module for patch helpers (the Patch* family) currently in `base_utilities.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Decide target module for patch helpers (the Patch* family) currently in `base_utilities.py`.** No replacement module is named by the parent row for this group. Agent Utilities records which existing or new module owns it after deletion. | The decision is recorded in this spec as an added note naming the target module for patch helpers. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.10 Add patch helpers (the Patch* family) to the module decided in AU-BOUNDARY-R010.9 Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Add patch helpers (the Patch* family) to the module decided in AU-BOUNDARY-R010.9.** Agent Utilities implements the group in its new home with equivalent behavior to the `base_utilities.py` originals. | A unit test for each symbol in the group passes against the new module. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.11 Decide target module for core runtime helpers (Result, ModuleInfo, get_missing_imports, require_optional_import, get_logger, and ensure_package_installed) currently in `base_utilities.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Decide target module for core runtime helpers (Result, ModuleInfo, get_missing_imports, require_optional_import, get_logger, and ensure_package_installed) currently in `base_utilities.py`.** No replacement module is named by the parent row for this group; Agent Utilities records which existing or new module owns it after deletion. | The decision is recorded in this spec as an added note naming the target module for core runtime helpers. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.12 Add core runtime helpers (Result, ModuleInfo, get_missing_imports, require_optional_import, get_logger, and ensure_package_installed) to the module decided in AU-BOUNDARY-R010.11 Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Add core runtime helpers (Result, ModuleInfo, get_missing_imports, require_optional_import, get_logger, and ensure_package_installed) to the module decided in AU-BOUNDARY-R010.11.** Agent Utilities implements the group in its new home with equivalent behavior to the `base_utilities.py` originals. | A unit test for each symbol in the group passes against the new module. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.13 Repoint agent_utilities/core/config.py and agent_utilities/core/_env.py off `base_utilities.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint agent_utilities/core/config.py and agent_utilities/core/_env.py off `base_utilities.py`.** Agent Utilities imports the migrated symbols from their new homes (per AU-BOUNDARY-R010.3-R010.12) instead of `base_utilities.py`. | `git grep -n base_utilities agent_utilities/core/config.py agent_utilities/core/_env.py` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.14 Repoint agent_utilities/knowledge_graph/core/chunked_drain.py and agent_utilities/knowledge_graph/core/source_sync.py off `base_utilities.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint agent_utilities/knowledge_graph/core/chunked_drain.py and agent_utilities/knowledge_graph/core/source_sync.py off `base_utilities.py`.** Agent Utilities imports the migrated symbols from their new homes (per AU-BOUNDARY-R010.3-R010.12) instead of `base_utilities.py`. | `git grep -n base_utilities agent_utilities/knowledge_graph/core/chunked_drain.py agent_utilities/knowledge_graph/core/source_sync.py` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.15 Repoint agent_utilities/observability/custom_observability.py and agent_utilities/observability/__init__.py off `base_utilities.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint agent_utilities/observability/custom_observability.py and agent_utilities/observability/__init__.py off `base_utilities.py`.** Agent Utilities imports the migrated symbols from their new homes (per AU-BOUNDARY-R010.3-R010.12) instead of `base_utilities.py`. | `git grep -n base_utilities agent_utilities/observability/custom_observability.py agent_utilities/observability/__init__.py` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.16 Repoint agent_utilities/mcp/check_env_var_drift.py, agent_utilities/mcp/multiplexer.py, and agent_utilities/mcp/server_factory.py off `base_utilities.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint agent_utilities/mcp/check_env_var_drift.py, agent_utilities/mcp/multiplexer.py, and agent_utilities/mcp/server_factory.py off `base_utilities.py`.** Agent Utilities imports the migrated symbols from their new homes (per AU-BOUNDARY-R010.3-R010.12) instead of `base_utilities.py`. | `git grep -n base_utilities agent_utilities/mcp/check_env_var_drift.py agent_utilities/mcp/multiplexer.py agent_utilities/mcp/server_factory.py` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.17 Repoint agent_utilities/agent/factory.py off `base_utilities.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint agent_utilities/agent/factory.py off `base_utilities.py`.** Agent Utilities imports the migrated symbols from their new homes (per AU-BOUNDARY-R010.3-R010.12) instead of `base_utilities.py`. | `git grep -n base_utilities agent_utilities/agent/factory.py` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.18 Repoint agent_utilities/graph/builder.py off `base_utilities.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint agent_utilities/graph/builder.py off `base_utilities.py`.** Agent Utilities imports the migrated symbols from their new homes (per AU-BOUNDARY-R010.3-R010.12) instead of `base_utilities.py`. | `git grep -n base_utilities agent_utilities/graph/builder.py` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.19 Repoint agent_utilities/httpsupport/client.py off `base_utilities.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint agent_utilities/httpsupport/client.py off `base_utilities.py`.** Agent Utilities imports the migrated symbols from their new homes (per AU-BOUNDARY-R010.3-R010.12) instead of `base_utilities.py`. | `git grep -n base_utilities agent_utilities/httpsupport/client.py` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.20 Repoint agent_utilities/__init__.py off `base_utilities.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint agent_utilities/__init__.py off `base_utilities.py`.** Agent Utilities imports the migrated symbols from their new homes (per AU-BOUNDARY-R010.3-R010.12) instead of `base_utilities.py`. | `git grep -n base_utilities agent_utilities/__init__.py` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.21 Repoint agent_utilities/protocols/source_connectors/registry.py off `base_utilities.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint agent_utilities/protocols/source_connectors/registry.py off `base_utilities.py`.** Agent Utilities imports the migrated symbols from their new homes (per AU-BOUNDARY-R010.3-R010.12) instead of `base_utilities.py`. | `git grep -n base_utilities agent_utilities/protocols/source_connectors/registry.py` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.22 Repoint agent_utilities/rlm/config.py off `base_utilities.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint agent_utilities/rlm/config.py off `base_utilities.py`.** Agent Utilities imports the migrated symbols from their new homes (per AU-BOUNDARY-R010.3-R010.12) instead of `base_utilities.py`. | `git grep -n base_utilities agent_utilities/rlm/config.py` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.23 Repoint agent_utilities/server/app.py off `base_utilities.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint agent_utilities/server/app.py off `base_utilities.py`.** Agent Utilities imports the migrated symbols from their new homes (per AU-BOUNDARY-R010.3-R010.12) instead of `base_utilities.py`. | `git grep -n base_utilities agent_utilities/server/app.py` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.24 Repoint agent_utilities/tools/tool_registry.py off `base_utilities.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint agent_utilities/tools/tool_registry.py off `base_utilities.py`.** Agent Utilities imports the migrated symbols from their new homes (per AU-BOUNDARY-R010.3-R010.12) instead of `base_utilities.py`. | `git grep -n base_utilities agent_utilities/tools/tool_registry.py` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R010.25 Delete `agent_utilities/base_utilities.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete `agent_utilities/base_utilities.py`.** All symbol groups have a new home and every importer is repointed. | `tests/gates/test_boundary_r001_r010_deletion_census.py::test_base_utilities_deleted` passes. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R011 Delete AU's source lifecycle and certification code Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete AU's source lifecycle and certification code.** Agent Utilities deletes `protocols/source_connectors/**`, `protocols/universal_connector.py`, `kg/integrations/connector_certification`, `kg/integrations/connector_source_attestation`, its certification command line interface, and `kg/ontology/connector_manifest` and `kg/ontology/connector_manifest_gate`, once the agent connector SDK owns cursors, conflict handling, mapping, and certification. AU removes the `graph-os-certify-connector` script and graph-os's import sites are repointed to the SDK. | Cursor, conflict, mapping, and certification conformance tests against the SDK confirm equivalent behavior before the AU modules are deleted. | requirement | AU-BOUNDARY | SPECIFIED | 2456745c1e4d |
| AU-BOUNDARY-R011.2 ROLLUP: superseded by AU-BOUNDARY-R011.2.1...AU-BOUNDARY-R011.2.5 Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**ROLLUP: superseded by AU-BOUNDARY-R011.2.1...AU-BOUNDARY-R011.2.5.** Delete `protocols/universal_connector.py`. Not deletable in one bite: the 1,025-line module is a live read-only SQL/MongoDB connector (`read`, `health_check`, `introspect`) used by two production importers and two test files, and `agent-connector-sdk` has no equivalent yet. | Superseded; see child rows. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R011.2.1 Add the read-only multi-database connector (SQL and MongoDB: `read`, `health_check`, `introspect`) to `agent-connector-sdk` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Add the read-only multi-database connector (SQL and MongoDB: `read`, `health_check`, `introspect`) to `agent-connector-sdk`**, with conformance tests equivalent to `tests/unit/protocols/test_universal_connector.py`. | `agent-connector-sdk` exports the connector and its conformance tests pass in that repo. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R011.2.2 Repoint `protocols/source_connectors/connectors/database.py` to the SDK database connector Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `protocols/source_connectors/connectors/database.py` to the SDK database connector.** | `git grep -l universal_connector agent_utilities/protocols/source_connectors` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R011.2.3 Repoint `tools/db_tools.py` to the SDK database connector Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `tools/db_tools.py` to the SDK database connector.** | `git grep -l universal_connector agent_utilities/tools` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R011.2.4 Repoint `tests/unit/protocols/test_database_connector_connection_profile.py` and `tests/unit/test_db_tools.py` to the SDK connector, and delete `tests/unit/protocols/test_universal_connector.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Repoint `tests/unit/protocols/test_database_connector_connection_profile.py` and `tests/unit/test_db_tools.py` to the SDK connector, and delete `tests/unit/protocols/test_universal_connector.py`** (moved to the SDK in R011.2.1); also update `docs/concepts.yaml` and `docs/pillars/4_ecosystem_peripherals/ECO-4.33-Native_Database_Traversal.md`. | `git grep -l universal_connector tests docs` finds no match. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R011.2.5 Delete `protocols/universal_connector.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete `protocols/universal_connector.py`** once it has zero importers. | `tests/gates/test_boundary_r011_universal_connector_deleted.py::test_universal_connector_module_absent` passes. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R011.3 Delete the `protocols/source_connectors/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete the `protocols/source_connectors/**` package** (base, checkpoint, registry, permission_sync, http_safety, tool_schema, `connectors/`) and fix its importers, once the SDK owns cursor/conflict/mapping handling. | `tests/gates/test_boundary_r011_source_connectors_deleted.py::test_source_connectors_package_absent` passes. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R011.4 Delete `knowledge_graph/integrations/connector_certification.py`, `connector_certification_cli.py`, and `connector_source_attestation.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete `knowledge_graph/integrations/connector_certification.py`, `connector_certification_cli.py`, and `connector_source_attestation.py`** and fix their importers, once the SDK owns certification. | `tests/gates/test_boundary_r011_certification_deleted.py::test_certification_modules_absent` passes. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R011.5 Delete `knowledge_graph/ontology/connector_manifest.py`, `connector_manifest_gate.py`, and `connector_manifests/ Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete `knowledge_graph/ontology/connector_manifest.py`, `connector_manifest_gate.py`, and `connector_manifests/**`, and remove the `graph-os-certify-connector` script**, once graph-os's import sites are repointed to the SDK. | `tests/gates/test_boundary_r011_manifest_deleted.py::test_manifest_modules_and_script_absent` passes. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R012 Delete the second EG projection and leftover shims Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete the second EG projection and leftover shims.** Agent Utilities deletes `protocols/epistemic_operations/**` and the `control_plane/` shim, so that every caller reaches durable graph state through the `epistemic_graph` client directly, with no second Python-side graph projection. | Cross-source tests exercising the generated EG client as the sole projection confirm the deleted modules have no remaining caller. | requirement | AU-BOUNDARY | LANDED | 34a849a78973 7b653dd102b9 |
| AU-BOUNDARY-R013 Restrict graph-os to AU's public API only Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Restrict graph-os to AU's public API only.** Agent Utilities widens its public surface so that graph-os imports AU exclusively through `agent_utilities.api`, adding new public ports for the import sites graph-os currently reaches through internal modules. AU's layout test fence is updated so a non-API import of AU by graph-os fails. | An AST-based import census across graph-os, backed by a served agent operation exercised end to end, shows every graph-os import of AU goes through `agent_utilities.api`. | requirement | AU-BOUNDARY | SPECIFIED | 4a5540dd2e3d 5b4e8d0a31d0 tests/unit/test_api_messaging.py:12 |
| AU-BOUNDARY-R013.1 Export `persistence_reference` from `agent_utilities.api.persistence_privacy` with an import test Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Export `persistence_reference` from `agent_utilities.api.persistence_privacy` with an import test.** Re-export from `agent_utilities/security/persistence_privacy` so graph-os stops importing the internal module. Unblocks graph-os rows `GRAPHOS-HOST-R007.2.1` to `GRAPHOS-HOST-R007.2.3` (graph-os change follows in graph-os). Rollup: `AU-BOUNDARY-R013`. | An import test asserts the names resolve from `agent_utilities.api.persistence_privacy` and are the same objects as the internal definitions. | requirement | AU-BOUNDARY | VERIFIED | a2616c523584 tests/unit/test_api_persistence_privacy.py:11 |
| AU-BOUNDARY-R013.2 Export `Orchestrator` from `agent_utilities.api.orchestration` with an import test Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Export `Orchestrator` from `agent_utilities.api.orchestration` with an import test.** Re-export from `agent_utilities/orchestration/manager` so graph-os stops importing the internal module. Unblocks graph-os rows `GRAPHOS-HOST-R007.2.1` to `GRAPHOS-HOST-R007.2.3` (graph-os change follows in graph-os). Rollup: `AU-BOUNDARY-R013`. | An import test asserts the names resolve from `agent_utilities.api.orchestration` and are the same objects as the internal definitions. | requirement | AU-BOUNDARY | VERIFIED | a2616c523584 tests/unit/test_api_orchestration.py:11 |
| AU-BOUNDARY-R013.3 Export the `work_durability` module from `agent_utilities.api.work_durability` with an import test Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Export the `work_durability` module from `agent_utilities.api.work_durability` with an import test.** Re-export from `agent_utilities/knowledge_graph/core` so graph-os stops importing the internal module. Unblocks graph-os rows `GRAPHOS-HOST-R007.2.1` to `GRAPHOS-HOST-R007.2.3` (graph-os change follows in graph-os). Rollup: `AU-BOUNDARY-R013`. | An import test asserts the names resolve from `agent_utilities.api.work_durability` and are the same objects as the internal definitions. | requirement | AU-BOUNDARY | VERIFIED | 811ea6463bb6 tests/unit/test_api_work_durability.py:11 |
| AU-BOUNDARY-R013.4 Export `KIND_ORCHESTRATOR_TASK`, `AgentTurnEnvelope`, `enqueue_agent_turn` from `agent_utilities.api.agent_dispatch` with an import test Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Export `KIND_ORCHESTRATOR_TASK`, `AgentTurnEnvelope`, `enqueue_agent_turn` from `agent_utilities.api.agent_dispatch` with an import test.** Re-export from `agent_utilities/orchestration/agent_dispatch` so graph-os stops importing the internal module. Unblocks graph-os rows `GRAPHOS-HOST-R007.2.1` to `GRAPHOS-HOST-R007.2.3` (graph-os change follows in graph-os). Rollup: `AU-BOUNDARY-R013`. | An import test asserts the names resolve from `agent_utilities.api.agent_dispatch` and are the same objects as the internal definitions. | requirement | AU-BOUNDARY | VERIFIED | 811ea6463bb6 tests/unit/test_api_agent_dispatch.py:11 |
| AU-BOUNDARY-R013.5 Export `trace_id` from `agent_utilities.api.trace_ontology` with an import test Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Export `trace_id` from `agent_utilities.api.trace_ontology` with an import test.** Re-export from `agent_utilities/observability/trace_ontology` so graph-os stops importing the internal module. Unblocks graph-os rows `GRAPHOS-HOST-R007.2.1` to `GRAPHOS-HOST-R007.2.3` (graph-os change follows in graph-os). Rollup: `AU-BOUNDARY-R013`. | An import test asserts the names resolve from `agent_utilities.api.trace_ontology` and are the same objects as the internal definitions. | requirement | AU-BOUNDARY | VERIFIED | bafa21805b51 tests/unit/test_api_trace_ontology.py:11 |
| AU-BOUNDARY-R013.6 Export `ACTION_APPROVAL_KIND`, `approval_lease_to_props` from `agent_utilities.api.action_policy` with an import test Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Export `ACTION_APPROVAL_KIND`, `approval_lease_to_props` from `agent_utilities.api.action_policy` with an import test.** Re-export from `agent_utilities/orchestration/action_policy` so graph-os stops importing the internal module. Unblocks graph-os rows `GRAPHOS-HOST-R007.2.1` to `GRAPHOS-HOST-R007.2.3` (graph-os change follows in graph-os). Rollup: `AU-BOUNDARY-R013`. | An import test asserts the names resolve from `agent_utilities.api.action_policy` and are the same objects as the internal definitions. | requirement | AU-BOUNDARY | VERIFIED | bafa21805b51 tests/unit/test_api_action_policy.py:11 |
| AU-BOUNDARY-R013.7 Export `ElevationRequest`, `ElevationApproval`, `ElevationRevocation` from `agent_utilities.api.elevation` with an import test Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Export `ElevationRequest`, `ElevationApproval`, `ElevationRevocation` from `agent_utilities.api.elevation` with an import test.** Re-export from `agent_utilities/security/elevation` so graph-os stops importing the internal module. Unblocks graph-os rows `GRAPHOS-HOST-R007.2.1` to `GRAPHOS-HOST-R007.2.3` (graph-os change follows in graph-os). Rollup: `AU-BOUNDARY-R013`. | An import test asserts the names resolve from `agent_utilities.api.elevation` and are the same objects as the internal definitions. | requirement | AU-BOUNDARY | VERIFIED | 2a5643693ab7 tests/unit/test_api_elevation.py:11 |
| AU-BOUNDARY-R013.8 Export `ElevationService`, `ElevationSurface` from `agent_utilities.api.elevation` with an import test Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Export `ElevationService`, `ElevationSurface` from `agent_utilities.api.elevation` with an import test.** Re-export from `agent_utilities/security/elevation` so graph-os stops importing the internal module. Unblocks graph-os rows `GRAPHOS-HOST-R007.2.1` to `GRAPHOS-HOST-R007.2.3` (graph-os change follows in graph-os). Rollup: `AU-BOUNDARY-R013`. | An import test asserts the names resolve from `agent_utilities.api.elevation` and are the same objects as the internal definitions. | requirement | AU-BOUNDARY | VERIFIED | 2a5643693ab7 tests/unit/test_api_elevation.py:18 |
| AU-BOUNDARY-R013.9 Export `LiveArtifactStore`, `get_live_artifact_store`, `LiveArtifact` from `agent_utilities.api.live_artifacts` with an import test Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Export `LiveArtifactStore`, `get_live_artifact_store`, `LiveArtifact` from `agent_utilities.api.live_artifacts` with an import test.** Re-export from `agent_utilities/knowledge_graph/live_artifacts/store.py` and `models.py` so graph-os stops importing the internal module. The store relocates to the epistemic graph under AU-BOUNDARY-R045, so the public export keeps the same names across that move. Unblocks graph-os row `GRAPHOS-GWC-R002.1` (graph-os change follows in graph-os). Rollup: `AU-BOUNDARY-R013`. | An import test asserts the names resolve from `agent_utilities.api.live_artifacts` and are the same objects as the internal definitions. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R013.10 Export `RefreshService`, `RefreshResult` from `agent_utilities.api.live_artifacts` with an import test Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Export `RefreshService`, `RefreshResult` from `agent_utilities.api.live_artifacts` with an import test.** Re-export from `agent_utilities/knowledge_graph/live_artifacts/refresh.py` so graph-os stops importing the internal module. Unblocks graph-os row `GRAPHOS-GWC-R002.1` (graph-os change follows in graph-os). Rollup: `AU-BOUNDARY-R013`. | An import test asserts the names resolve from `agent_utilities.api.live_artifacts` and are the same objects as the internal definitions. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R014 Move graph-os boundary modules out of AU Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move graph-os boundary modules out of AU.** Agent Utilities moves its graph-os-only boundary modules into graph-os, including `security/request_identity`, `security/error_surface`, `security/browser_auth`, `security/security_policy_middleware`, `security/auth`, `security/conformance/**`, its `observability` health and metrics modules, `core/profile_guard`, `core/unified_install`, `core/release_channel`, `core/live_mount_guard`, `core/paths`, `core/workspace`, `core/workspace_config`, `core/config_admin`, `core/frontend_providers`, `ecosystem/hook_installer`, `ecosystem/agent_manager_dashboard`, `release_catalogs.py`, `gateway_client/**`, and `kg/readiness.py`; `kg/core/connection_registry` and `kg/core/engine_mcp_discovery` move into graph-os's fleet module. | Principal, tenant, and context preservation tests plus deny-path tests against the moved graph-os modules confirm equivalent behavior before the AU copies are deleted. | requirement | AU-BOUNDARY | SPECIFIED | 3254358d61d6 63731a44a881 6ffbecc433c4 8b3510fcb2eb d09cad07e875 |
| AU-BOUNDARY-R014.2 Move `knowledge_graph/readiness.py` to graph-os Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move `knowledge_graph/readiness.py` to graph-os** and delete the AU copy, fixing its importers, once graph-os's readiness module proves equivalent. | `tests/gates/test_boundary_r014_readiness_moved.py::test_readiness_module_absent_from_au` passes. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R015 Move the agent HTTP and A2A/ACP host out of AU Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move the agent HTTP and A2A/ACP host out of AU.** Agent Utilities moves `server/**` and `protocols/a2a`, `protocols/a2a_config`, `protocols/a2a_graph_skill`, `protocols/acp_adapter`, and `protocols/agui_emitter` into graph-os's A2A and web-UI hosting modules. AU deletes `protocols/a2a_epistemic.py`, because its broker and storage form a second task store, and drops the `agent-utilities-acp` script. | Endpoint and cancellation parity tests against the graph-os host confirm no AU listener remains active. | requirement | AU-BOUNDARY | SPECIFIED | 2456745c1e4d |
| AU-BOUNDARY-R015.2 Delete `protocols/a2a_epistemic.py` and drop the `agent-utilities-acp` script Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete `protocols/a2a_epistemic.py` and drop the `agent-utilities-acp` script**, fixing any importers, since it is a redundant second task store with no graph-os replacement to wait on. | `tests/gates/test_boundary_r015_a2a_epistemic_deleted.py::test_a2a_epistemic_module_and_script_absent` passes. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R016 Split AU's monolithic configuration module Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Split AU's monolithic configuration module.** Agent Utilities splits `core/config.py` so that connector base settings move to the agent connector SDK's configuration module and hosting and deployment settings move to graph-os, while agent and model settings remain in AU. | A configuration fixture matrix exercised against all three owners shows no duplicate environment reader remains. | requirement | AU-BOUNDARY | VERIFIED | 13655b508554 |
| AU-BOUNDARY-R016.1 Gate AU's retained config.py against duplicate environment readers Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Gate AU's retained config.py against duplicate environment readers.** Agent Utilities adds a regression gate over its own root, `core/config.py`, asserting that no environment variable name is read by more than one call site, as the invariant AU's agent-and-model-settings portion must keep once connector base settings move to the SDK and hosting settings move to graph-os. Moving the connector-base and hosting settings out to the SDK and graph-os owners is tracked as further `AU-BOUNDARY-R016.n` rows against those repos and is out of scope for this child. | The gate fails on an injected duplicate reader and passes on the current `core/config.py`. | requirement | AU-BOUNDARY | VERIFIED | 5a00da215c55 fe5ca4e239ec tests/gates/test_config_duplicate_reader_gate.py:65 tests/gates/test_config_duplicate_reader_gate.py:71 |
| AU-BOUNDARY-R017 Split messaging behavior and authority across AU, graph-os, and EG Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Split messaging behavior and authority across AU, graph-os, and EG.** Agent Utilities keeps agent presence, subscriptions, `ActionPolicy`, and command and planning decisions in `messaging/bus.py` and `orchestration/action_policy.py`, exposed behind `agent_utilities.api.messaging`, while graph-os serves the channel adapters, listener, service, daemon, polling, reaper, and host routing. `messaging/bus_log.py` remains a verified-tenant, sanitized-envelope adapter in AU, and the epistemic graph becomes the sole authority for durable message append, partition reads, cursors, dead letters, and depth; AU drops the `agent-utilities-messaging` script. | Delivery, replay, ordering, authorization, and outage tests across the split boundary confirm parity with the prior combined behavior. | requirement | AU-BOUNDARY | VERIFIED | 4a5540dd2e3d 5b4e8d0a31d0 tests/unit/test_api_messaging.py:25 |
| AU-BOUNDARY-R018 Replace the AU graph engine facade with the EG client Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Replace the AU graph engine facade with the EG client.** Agent Utilities deletes its graph engine facade, including `kg/core/engine.py`, `kg/core/engine_tasks.py`, `kg/core/engine_ingestion.py`, `kg/core/engine_memory.py`, `kg/core/engine_task_query.py`, `kg/core/engine_resolver.py`, `kg/core/engine_transport.py`, `kg/core/engine_lock.py`, `kg/core/engine_breaker.py`, `kg/facade.py`, and `kg/orchestration/engine_*.py`, once the generated epistemic graph client provides the same operations. | Tests confirming no remaining Python-side graph authority or fallback path, run against the generated EG client, gate the deletion. | requirement | AU-BOUNDARY | SPECIFIED | 8b325ddf1818 8c6fb318c5d3 |
| AU-BOUNDARY-R018.1 Ship a typed inventory of the AU-BOUNDARY-R018 facade modules Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Ship a typed inventory of the AU-BOUNDARY-R018 facade modules.** Agent Utilities records, as a parametrized pytest inventory, exactly which engine-facade modules `kg/core/engine.py`, `kg/core/engine_tasks.py`, `kg/core/engine_ingestion.py`, `kg/core/engine_memory.py`, `kg/core/engine_task_query.py`, `kg/core/engine_resolver.py`, `kg/core/engine_transport.py`, `kg/core/engine_lock.py`, `kg/core/engine_breaker.py`, `kg/facade.py`, and `kg/orchestration/engine_*.py` still exist as duplicates of EG's native engine, with a refusal test that fails if a listed module disappears without the inventory being updated in the same change. | `tests/.../test_boundary_r018_r022_eg_duplicate_inventory.py` passes and fails closed on an unrecorded module removal. | requirement | AU-BOUNDARY | LANDED | 8b325ddf1818 |
| AU-BOUNDARY-R018.2 Delete the AU-BOUNDARY-R018 facade modules Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete the AU-BOUNDARY-R018 facade modules.** Agent Utilities deletes `kg/core/engine.py`, `kg/core/engine_tasks.py`, `kg/core/engine_ingestion.py`, `kg/core/engine_memory.py`, `kg/core/engine_task_query.py`, `kg/core/engine_resolver.py`, `kg/core/engine_transport.py`, `kg/core/engine_lock.py`, `kg/core/engine_breaker.py`, `kg/facade.py`, and `kg/orchestration/engine_*.py` — all still present as of 2026-10-09 — once the generated EG client proves equivalent operations. | Tests confirming no remaining Python-side graph authority or fallback path, run against the generated EG client, gate the deletion. The files above are absent from the tree. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R019 Replace AU's graph-compute and state facades with the EG client Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Replace AU's graph-compute and state facades with the EG client.** Agent Utilities deletes `kg/core/graph_compute`, `kg/core/session`, `kg/core/epistemic_row`, `kg/core/ogm`, `kg/core/company_brain`, `kg/core/company_brain_runtime`, and `core/registry/kg_adapter.py`, replacing them with one typed epistemic graph composition kept in `api/`. | Connection-scope isolation, compute-budget enforcement, and typed-error-parity tests against the generated EG client confirm equivalence before the facades are deleted. | requirement | AU-BOUNDARY | SPECIFIED | 8b325ddf1818 8c6fb318c5d3 |
| AU-BOUNDARY-R019.1 Ship a typed inventory of the AU-BOUNDARY-R019 facade modules Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Ship a typed inventory of the AU-BOUNDARY-R019 facade modules.** Agent Utilities records, as a parametrized pytest inventory, exactly which graph-compute/state-facade modules `kg/core/graph_compute.py`, `kg/core/session.py`, `kg/core/epistemic_row.py`, `kg/core/ogm.py`, `kg/core/company_brain.py`, `kg/core/company_brain_runtime.py`, and `core/registry/kg_adapter.py` still exist as duplicates of EG's native engine, with a refusal test that fails if a listed module disappears without the inventory being updated in the same change. | `tests/.../test_boundary_r018_r022_eg_duplicate_inventory.py` passes and fails closed on an unrecorded module removal. | requirement | AU-BOUNDARY | VERIFIED | 0fbe4bf46720 8b325ddf1818 tests/gates/test_boundary_r018_r022_eg_duplicate_inventory.py:178 tests/gates/test_boundary_r018_r022_eg_duplicate_inventory.py:185 |
| AU-BOUNDARY-R019.2 Delete the AU-BOUNDARY-R019 facade modules Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete the AU-BOUNDARY-R019 facade modules.** Agent Utilities deletes `kg/core/graph_compute.py`, `kg/core/session.py`, `kg/core/epistemic_row.py`, `kg/core/ogm.py`, `kg/core/company_brain.py`, `kg/core/company_brain_runtime.py`, and `core/registry/kg_adapter.py` — all still present as of 2026-10-09 — replacing them with the typed epistemic graph composition in `api/`. | Connection-scope isolation, compute-budget enforcement, and typed-error-parity tests against the generated EG client confirm equivalence. The files above are absent from the tree. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R020 Move durable work, queues, and state to EG Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move durable work, queues, and state to EG.** Agent Utilities deletes `kg/core/work_durability`, `kg/core/kafka_queue_backend`, `kg/core/postgres_queue_backend`, `kg/core/queue_backend`, `kg/core/worker_scheduler`, `kg/core/chunked_drain`, `kg/core/ingest_routing`, `kg/core/ingest_profile`, `kg/core/event_backend`, `kg/core/knowledge_stream`, `kg/core/bitemporal`, `kg/core/kg_versioning`, `kg/ingest_worker`, `kg/analytics_worker`, `core/shared_resource_leases.py`, `core/state_store`, and `core/chat_persistence`, moving durable jobs, resource leases, and state to the epistemic graph. AU drops the `kg-ingest-worker` and `graph-os-analytics-worker` scripts. | Claim-fencing, restart, idempotency, and tenant-isolation tests against the epistemic graph's durable job and lease handling confirm parity before deletion. | requirement | AU-BOUNDARY | SPECIFIED | 8b325ddf1818 8c6fb318c5d3 92974bae8c3e |
| AU-BOUNDARY-R020.1 Ship a typed inventory of the AU-BOUNDARY-R020 durable-work modules Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Ship a typed inventory of the AU-BOUNDARY-R020 durable-work modules.** Agent Utilities records, as a parametrized pytest inventory, exactly which durable work/queue/state modules `kg/core/work_durability.py`, `kg/core/kafka_queue_backend.py`, `kg/core/postgres_queue_backend.py`, `kg/core/queue_backend.py`, `kg/core/worker_scheduler.py`, `kg/core/chunked_drain.py`, `kg/core/ingest_routing.py`, `kg/core/ingest_profile.py`, `kg/core/event_backend.py`, `kg/core/knowledge_stream.py`, `kg/core/bitemporal.py`, `kg/core/kg_versioning.py`, `kg/ingest_worker.py`, `kg/analytics_worker.py`, `core/shared_resource_leases.py`, `core/state_store.py`, and `core/chat_persistence.py` still exist as duplicates of EG's native engine, with a refusal test that fails if a listed module disappears without the inventory being updated in the same change. | `tests/.../test_boundary_r018_r022_eg_duplicate_inventory.py` passes and fails closed on an unrecorded module removal. | requirement | AU-BOUNDARY | LANDED | 8b325ddf1818 |
| AU-BOUNDARY-R020.2 Move the AU-BOUNDARY-R020 durable-work modules and drop their scripts Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move the AU-BOUNDARY-R020 durable-work modules and drop their scripts.** Agent Utilities deletes `kg/core/work_durability.py`, `kg/core/kafka_queue_backend.py`, `kg/core/postgres_queue_backend.py`, `kg/core/queue_backend.py`, `kg/core/worker_scheduler.py`, `kg/core/chunked_drain.py`, `kg/core/ingest_routing.py`, `kg/core/ingest_profile.py`, `kg/core/event_backend.py`, `kg/core/knowledge_stream.py`, `kg/core/bitemporal.py`, `kg/core/kg_versioning.py`, `kg/ingest_worker.py`, `kg/analytics_worker.py`, `core/shared_resource_leases.py`, `core/state_store.py`, and `core/chat_persistence.py` — all still present as of 2026-10-09 — and drops the `kg-ingest-worker` and `graph-os-analytics-worker` scripts, moving durable jobs, resource leases, and state to the epistemic graph. | Claim-fencing, restart, idempotency, and tenant-isolation tests against the epistemic graph's durable job and lease handling confirm parity; the files above and both scripts are absent. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R021 Move graph tenancy, topology, and admission to EG Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move graph tenancy, topology, and admission to EG.** Agent Utilities deletes `kg/core/tenant_sharing`, `kg/core/tenant_registry`, `kg/core/tenant_engine_pool`, `kg/core/shard_topology`, `kg/core/cluster_discovery`, `kg/core/placement_catalog`, `kg/core/secured_reads`, `kg/core/cypher_scoping`, `kg/core/cypher_scope_vars`, `kg/core/bounded_read`, `kg/core/host_lock`, `kg/core/file_lock`, its `security/system_rbac_admission`, `security/tenant_rbac_admission`, and `security/engine_rbac_admission` modules, `admission_authority`, its admission command line interfaces, `permissions_kernel`, and `entitlements`, moving identity, RBAC admission, and graph access-control isolation authority to the epistemic graph. | Cross-tenant denial tests and authoritative graph-selection tests against the epistemic graph's admission path confirm fail-closed behavior before deletion. | requirement | AU-BOUNDARY | SPECIFIED | 8b325ddf1818 8c6fb318c5d3 d330871d37af |
| AU-BOUNDARY-R021.1 Ship a typed inventory of the AU-BOUNDARY-R021 tenancy/admission modules Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Ship a typed inventory of the AU-BOUNDARY-R021 tenancy/admission modules.** Agent Utilities records, as a parametrized pytest inventory, exactly which tenancy/topology/admission modules `kg/core/tenant_sharing.py`, `kg/core/tenant_registry.py`, `kg/core/tenant_engine_pool.py`, `kg/core/shard_topology.py`, `kg/core/cluster_discovery.py`, `kg/core/placement_catalog.py`, `kg/core/secured_reads.py`, `kg/core/cypher_scoping.py`, `kg/core/cypher_scope_vars.py`, `kg/core/bounded_read.py`, `kg/core/host_lock.py`, `kg/core/file_lock.py`, `security/system_rbac_admission.py`, `security/tenant_rbac_admission.py`, `security/engine_rbac_admission.py`, `security/admission_authority.py`, its admission command line interfaces (`security/system_admission_cli.py`, `security/tenant_admission_cli.py`), `security/permissions_kernel.py`, and `security/entitlements.py` still exist as duplicates of EG's native engine, with a refusal test that fails if a listed module disappears without the inventory being updated in the same change. | `tests/.../test_boundary_r018_r022_eg_duplicate_inventory.py` passes and fails closed on an unrecorded module removal. | requirement | AU-BOUNDARY | LANDED | 8b325ddf1818 |
| AU-BOUNDARY-R021.2 Delete the AU-BOUNDARY-R021 tenancy/admission modules Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete the AU-BOUNDARY-R021 tenancy/admission modules.** Agent Utilities deletes `kg/core/tenant_sharing.py`, `kg/core/tenant_registry.py`, `kg/core/tenant_engine_pool.py`, `kg/core/shard_topology.py`, `kg/core/cluster_discovery.py`, `kg/core/placement_catalog.py`, `kg/core/secured_reads.py`, `kg/core/cypher_scoping.py`, `kg/core/cypher_scope_vars.py`, `kg/core/bounded_read.py`, `kg/core/host_lock.py`, `kg/core/file_lock.py`, `security/system_rbac_admission.py`, `security/tenant_rbac_admission.py`, `security/engine_rbac_admission.py`, `security/admission_authority.py`, its admission command line interfaces, `security/permissions_kernel.py`, and `security/entitlements.py` — all still present as of 2026-10-09 — moving identity, RBAC admission, and graph access-control isolation authority to the epistemic graph. | Cross-tenant denial tests and authoritative graph-selection tests against the epistemic graph's admission path confirm fail-closed behavior; the files above are absent from the tree. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R022 Retire AU's reasoning and graph-analytics duplicates Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Retire AU's reasoning and graph-analytics duplicates.** Agent Utilities deletes its reasoning and analytics modules once each has proven native coverage in the epistemic graph, including `kg/core/formal_reasoning_core`, `kg/core/graph_primitives`, `kg/core/inference_engine`, `kg/core/reasoner`, `kg/core/semantic_subsumption`, the `kg/core/topological_*` modules, `kg/core/spectral_navigator`, `kg/core/synergy_engine`, `kg/core/analogy_engine`, `kg/core/hypergraph`, `kg/core/blast_radius`, `kg/core/nl_query`, `kg/core/hydration`, `kg/core/maintainer`, `kg/core/world_model`, `kg/core/ownership_claim`, `kg/core/fingerprint`, and the `kg/maintenance`, `kg/id_management`, `kg/argumentation`, and `kg/actions` subpackages. | Method-by-method golden comparisons against the epistemic graph's native implementation prove parity for each module before its AU copy is deleted. | requirement | AU-BOUNDARY | SPECIFIED | 8b325ddf1818 8c6fb318c5d3 |
| AU-BOUNDARY-R022.1 Ship a typed inventory of the AU-BOUNDARY-R022 reasoning/analytics modules Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Ship a typed inventory of the AU-BOUNDARY-R022 reasoning/analytics modules.** Agent Utilities records, as a parametrized pytest inventory, exactly which reasoning/analytics modules `kg/core/formal_reasoning_core.py`, `kg/core/graph_primitives.py`, `kg/core/inference_engine.py`, `kg/core/reasoner.py`, `kg/core/semantic_subsumption.py`, `kg/core/topological_analysis_engine.py`, `kg/core/topological_partition.py`, `kg/core/spectral_navigator.py`, `kg/core/synergy_engine.py`, `kg/core/analogy_engine.py`, `kg/core/hypergraph.py`, `kg/core/blast_radius.py`, `kg/core/nl_query.py`, `kg/core/hydration.py`, `kg/core/maintainer.py`, `kg/core/world_model.py`, `kg/core/ownership_claim.py`, `kg/core/fingerprint.py`, and the `kg/maintenance`, `kg/id_management`, `kg/argumentation`, and `kg/actions` subpackages still exist as duplicates of EG's native engine, with a refusal test that fails if a listed module disappears without the inventory being updated in the same change. | `tests/.../test_boundary_r018_r022_eg_duplicate_inventory.py` passes and fails closed on an unrecorded module removal. | requirement | AU-BOUNDARY | LANDED | 8b325ddf1818 |
| AU-BOUNDARY-R022.2 Delete the AU-BOUNDARY-R022 reasoning/analytics modules Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete the AU-BOUNDARY-R022 reasoning/analytics modules.** Agent Utilities deletes `kg/core/formal_reasoning_core.py`, `kg/core/graph_primitives.py`, `kg/core/inference_engine.py`, `kg/core/reasoner.py`, `kg/core/semantic_subsumption.py`, `kg/core/topological_analysis_engine.py`, `kg/core/topological_partition.py`, `kg/core/spectral_navigator.py`, `kg/core/synergy_engine.py`, `kg/core/analogy_engine.py`, `kg/core/hypergraph.py`, `kg/core/blast_radius.py`, `kg/core/nl_query.py`, `kg/core/hydration.py`, `kg/core/maintainer.py`, `kg/core/world_model.py`, `kg/core/ownership_claim.py`, `kg/core/fingerprint.py`, and the `kg/maintenance`, `kg/id_management`, `kg/argumentation`, and `kg/actions` subpackages — all still present as of 2026-10-09 — once each has proven native coverage in the epistemic graph. | Method-by-method golden comparisons against the epistemic graph's native implementation prove parity; the files and subpackages above are absent from the tree. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R023 Split ingestion commit and derivation into EG Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Split ingestion commit and derivation into EG.** Agent Utilities moves the commit and derivation half of `kg/ingestion/**` to the epistemic graph's source-ingest path, including `envelope_ingest`, `change_envelope`, `evidence_spine`, `semantic_event_model`, `object_centric_derivation`, `process_conformance`, `embedding_admission`, `gpu_slot_scheduler`, `promotion`, `supersession`, `dead_letter`, `hydration_manifest`, `skill_workflow_ingest`, and `governed_documentation`. `ingestion/engine.py` is dissolved across its destination owners, and AU retains only model-backed candidate claims. | Atomic cursor-and-receipt tests, including a failure-rollback case showing no AU-side writer remains, confirm parity before the AU modules are deleted. | requirement | AU-BOUNDARY | VERIFIED | 4a5540dd2e3d 743e98cda405 tests/gates/test_boundary_r023_r034_relocation_inventory.py:199 |
| AU-BOUNDARY-R024 Move enterprise source synchronization to the SDK Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move enterprise source synchronization to the SDK.** Agent Utilities moves `kg/core/source_sync.py` to become a runner on the agent connector SDK, backed by the epistemic graph's source-ingest path and manifest presets. AU also moves `kg/ingestion/external_graph*`, `kg/ingestion/graphql_connection`, `kg/ingestion/debezium_envelope`, `kg/ingestion/event_log_adapter`, `kg/ingestion/ocel_adapter`, `kg/governance_import.py`, `ecosystem/ea_clients.py`, `data_prep/**`, `kg/core/connection_profiler`, `kg/core/data_prep_runtime`, and `kg/core/source_resolver`. | Full-sync, delta-sync, reconcile, and withdrawal-receipt tests against the SDK runner confirm parity before the AU modules are deleted. | requirement | AU-BOUNDARY | SPECIFIED | 4a5540dd2e3d 743e98cda405 tests/gates/test_boundary_r023_r034_relocation_inventory.py:200 |
| AU-BOUNDARY-R024.2 Move `knowledge_graph/core/source_sync.py` to the agent connector SDK as a runner Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move `knowledge_graph/core/source_sync.py` to the agent connector SDK as a runner** and delete the AU copy, fixing its importers, once the SDK runner proves full-sync/delta-sync/reconcile parity. | `tests/gates/test_boundary_r024_source_sync_moved.py::test_source_sync_module_absent_from_au` passes. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R024.3 Move `knowledge_graph/governance_import.py` to the SDK Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move `knowledge_graph/governance_import.py` to the SDK** and delete the AU copy, fixing its importers, once the SDK's governance-import path proves parity. | `tests/gates/test_boundary_r024_governance_import_moved.py::test_governance_import_module_absent_from_au` passes. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R025 Move document, conversation, and feed sources to the SDK Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move document, conversation, and feed sources to the SDK.** Agent Utilities moves the repository-indexer module in `kg/core/` (the single `*_indexer` module there), `kg/core/conversation_ingestion`, `kg/ingestion/web_fetch`, `kg/ingestion/package_install_ingest`, `kg/ingestion/repo_*`, the top-level `ingestion/**`, `automation/worldmodel_pipeline`, `automation/feed_sources`, `automation/file_watcher`, `sdd/watcher.py`, the non-model half of `kg/kb/**`, `kg/extraction/readers*`, `kg/extraction/pdf`, and `ecosystem/media/**` to the agent connector SDK. | Typed source-envelope tests and recovery tests after an interrupted source read confirm parity before the AU modules are deleted. | requirement | AU-BOUNDARY | VERIFIED | 4a5540dd2e3d 743e98cda405 tests/gates/test_boundary_r023_r034_relocation_inventory.py:201 |
| AU-BOUNDARY-R026 Move vendor enrichment extractors and write-back to the SDK Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move vendor enrichment extractors and write-back to the SDK.** Agent Utilities moves `kg/enrichment/extractors/**` to become connector-manifest presets and SDK adapters, moves `kg/enrichment/writeback/**` behind the SDK's write-back module and the epistemic graph's governed write-back path, and moves `enrichment/git_history` and `enrichment/source_adapters` to the SDK's repository adapter. | Vendor-transport, schema-mapping, and conflict tests against the SDK and the epistemic graph's governed write-back confirm parity before the AU modules are deleted. | requirement | AU-BOUNDARY | LANDED | 00234474001c 0e44186eac39 743e98cda405 |
| AU-BOUNDARY-R027 Move deterministic enrichment and derivation to EG Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move deterministic enrichment and derivation to EG.** Agent Utilities moves `kg/enrichment/semantic`, `kg/enrichment/relation_projection`, `kg/enrichment/materialize`, `kg/enrichment/git_coupling`, `kg/enrichment/graph_collapse`, `kg/enrichment/provenance`, `kg/assimilation/**`, `kg/etl/**`, `kg/streams/**`, and `kg/memory/timeseries/**` to the epistemic graph. | Golden-output comparisons confirm no model-dependent graph writer remains in AU after the modules are deleted. | requirement | AU-BOUNDARY | VERIFIED | 4a5540dd2e3d 743e98cda405 tests/gates/test_boundary_r023_r034_relocation_inventory.py:202 |
| AU-BOUNDARY-R028 Move remaining graph standardization and security modules to EG (rollup) Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move remaining graph standardization and security modules to EG (rollup).** Agent Utilities moves its remaining EG-bound modules to the epistemic graph, including `kg/standardization/**` except drift handling, `kg/infra/**`, `kg/quantum/**`, `kg/security/**`, `protocols/enterprise/**`, `ecosystem/ard_*`, `observability/trace_ontology`, `observability/self_ingest`, `observability/audit_logger`, `governance/relational_authority.py`, and `research/placement_mining.py`. Split by code root into `AU-BOUNDARY-R028.1`-`.8`; this parent lands when every child lands. | Public method coverage tests against the epistemic graph confirm every moved capability is reachable before the matching AU import is deleted. | requirement | AU-BOUNDARY | LANDED | 4d0883da01d2 5c70aeb872d9 743e98cda405 8edddc8b0a00 9fec85433f51 |
| AU-BOUNDARY-R028.1 Retire `kg/standardization/{cohorts,consolidation,standards}.py` (excludes `drift.py`) Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Retire `kg/standardization/{cohorts,consolidation,standards}.py` (excludes `drift.py`).** Delete once EG exposes an equivalent client; today `drift.py` (retained) imports `read_assets` from `cohorts.py` and `drift_score`/`standard_node_id` from `standards.py`, and `kg/ontology/__init__.py` plus `mcp/tools/{evolution_tools,ontology_tools}.py` import `standards.py` directly in production, so the cut is blocked on an EG client existing and `drift.py` being ported to call it. | A consumer test confirms the three files are deleted, `drift.py` calls the EG client for the same data, and the production importers resolve through EG. | requirement | AU-BOUNDARY | LANDED | 4d0883da01d2 |
| AU-BOUNDARY-R028.2 Retire `kg/infra/{placement_optimizer,inventory_collector}.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Retire `kg/infra/{placement_optimizer,inventory_collector}.py`.** Delete the two modules and the package `__init__.py` that only re-exports them. Corrected: `mcp/tools/analysis_tools.py` is a real production caller (`optimize_from_graph`/`collect_and_persist`), in addition to the test importers. The deletion is blocked on that caller moving to an EG client. | An import census confirms no production or test caller remains after deletion. | requirement | AU-BOUNDARY | VERIFIED | 32bdd70f5ea4 |
| AU-BOUNDARY-R028.2.1 Pin the `kg/infra` production-importer set Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Pin the `kg/infra` production-importer set.** A census test records today's one production importer (`mcp/tools/analysis_tools.py`) so the set can only shrink as callers are redirected ahead of `AU-BOUNDARY-R028.2`'s deletion. | `tests/gates/test_r028x_module_census.py::test_r028_2_1_infra_importer_set_has_not_grown` fails on a grown set and passes today. | requirement | AU-BOUNDARY | VERIFIED | 32bdd70f5ea4 4a5540dd2e3d tests/gates/test_r028x_module_census.py:125 |
| AU-BOUNDARY-R028.3 Retire `kg/quantum/{budget,__init__}.py` and `observability/quantum_trace.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Retire `kg/quantum/{budget,__init__}.py` and `observability/quantum_trace.py`.** Delete all three files; none has a production importer, no MCP tool wires `reserve_quantum_budget`/`QuantumBudgetExceeded`/`persist_quantum_job`, and no test file exercises them. | An import census confirms no caller and no test referenced the deleted symbols before removal. | requirement | AU-BOUNDARY | VERIFIED | 8c6fb318c5d3 8edddc8b0a00 tests/gates/test_r028_3_r028_4_retirement.py:27 |
| AU-BOUNDARY-R028.4 Retire `kg/security/{cognitive_trap_defense,policy_ingestor,graph_validator,rule_ingestor}.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Retire `kg/security/{cognitive_trap_defense,policy_ingestor,graph_validator,rule_ingestor}.py`.** `cognitive_trap_defense.py` has only a test importer and deletes cleanly. `policy_ingestor.py` and `rule_ingestor.py` are production-imported by `kg/core/engine_ingestion.py`, and `graph_validator.py` by `kg/pipeline/phases/validate.py`, with no EG client equivalent found, so those three remain until EG exposes one. | A consumer test confirms `cognitive_trap_defense.py` is deleted and the remaining three either call an EG client or are reported blocked. | requirement | AU-BOUNDARY | VERIFIED | 5c70aeb872d9 8c6fb318c5d3 9fec85433f51 tests/gates/test_r028_3_r028_4_retirement.py:57 |
| AU-BOUNDARY-R028.5 Retire `protocols/enterprise/{__init__,read_models}.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Retire `protocols/enterprise/{__init__,read_models}.py`.** Delete both files; only `tests/unit/protocols/enterprise/test_read_models_github_gitlab.py` imports the package, with no production caller (the `read_models` field on `core/frontend_providers.py`'s descriptor is an unrelated same-named attribute, not an import). | An import census confirms no production or test caller remains after deletion. | requirement | AU-BOUNDARY | LANDED | 4d0883da01d2 |
| AU-BOUNDARY-R028.6 Retire `observability/{trace_ontology,self_ingest,audit_logger}.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Retire `observability/{trace_ontology,self_ingest,audit_logger}.py`.** Blocked: all three are core, heavily used production primitives (`trace_ontology.trace_id`/`RunTrace`/`ToolCall` alone has over 100 production call sites across orchestration, capabilities, harness and mcp) with no EG client equivalent found; migrating callers is a multi-file rewrite outside one lane. | A consumer test confirms every production call site resolves through an EG client before the AU modules are deleted. | requirement | AU-BOUNDARY | VERIFIED | 26b087dd3b2f |
| AU-BOUNDARY-R028.6.1 Pin the `observability/{trace_ontology,self_ingest,audit_logger}` production-importer set Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Pin the `observability/{trace_ontology,self_ingest,audit_logger}` production-importer set.** A census test records today's ~49 production importers so the set can only shrink as callers are redirected ahead of `AU-BOUNDARY-R028.6`'s deletion. | `tests/gates/test_r028x_module_census.py::test_r028_6_1_observability_triad_importer_set_has_not_grown` fails on a grown set and passes today. | requirement | AU-BOUNDARY | VERIFIED | 26b087dd3b2f 32bdd70f5ea4 4a5540dd2e3d tests/gates/test_r028x_module_census.py:136 |
| AU-BOUNDARY-R028.7 Retire `governance/relational_authority.py` and `.json` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Retire `governance/relational_authority.py` and `.json`.** Blocked: no Python module imports it outside its own test and `scripts/security/check_relational_authority.py`, but that script is an active fail-closed CI gate auto-discovered by `scripts/security/run_contract_checks.py`'s `check_*.py` glob, documented in `docs/architecture/relational-authority.md`; no EG equivalent exists yet, so retiring it now would remove a live governance gate with nothing to replace it. | A consumer test confirms the EG equivalent gate runs in CI before the AU module, its gate script and the ADR are deleted. | requirement | AU-BOUNDARY | VERIFIED | 26b087dd3b2f |
| AU-BOUNDARY-R028.7.1 Pin the `governance/relational_authority` importer set Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Pin the `governance/relational_authority` importer set.** A census test records that no module under `agent_utilities/` imports it (the live blocker is `scripts/security/check_relational_authority.py`, outside the package), so the in-package set can only shrink further. | `tests/gates/test_r028x_module_census.py::test_r028_7_1_relational_authority_importer_set_has_not_grown` fails on a grown set and passes today. | requirement | AU-BOUNDARY | VERIFIED | 26b087dd3b2f 32bdd70f5ea4 4a5540dd2e3d tests/gates/test_r028x_module_census.py:159 |
| AU-BOUNDARY-R028.8 Retire `kg/research/placement_mining.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Retire `kg/research/placement_mining.py`.** Blocked: production-imported by `kg/core/engine_tasks.py` and `mcp/tools/state_tools.py`, with no EG client equivalent found. | A consumer test confirms both production importers resolve through an EG client before the AU module is deleted. | requirement | AU-BOUNDARY | VERIFIED | 26b087dd3b2f 32bdd70f5ea4 |
| AU-BOUNDARY-R028.8.1 Pin the `kg/research/placement_mining` production-importer set Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Pin the `kg/research/placement_mining` production-importer set.** A census test records today's six production importers (corrected: also `knowledge_graph/research/candidate_insight.py`, `knowledge_graph/research/loop_controller.py`, and `orchestration/action_policy.py`, beyond the two named in `AU-BOUNDARY-R028.8`) so the set can only shrink. | `tests/gates/test_r028x_module_census.py::test_r028_8_1_placement_mining_importer_set_has_not_grown` fails on a grown set and passes today. | requirement | AU-BOUNDARY | VERIFIED | 26b087dd3b2f 32bdd70f5ea4 4a5540dd2e3d tests/gates/test_r028x_module_census.py:171 |
| AU-BOUNDARY-R029 Move the ontology object model to EG Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move the ontology object model to EG.** Agent Utilities moves `kg/ontology/**` to the epistemic graph, except the files kept for AU's own semantic typing, the hand-written emitters covered by a separate requirement, and the SDK manifest files. The move includes `object_set`, `property_types`, `derived_properties`, `links`, `functions/**`, `edits/**`, `indexing/**`, `classification_claims`, `permissioning*`, `document_processing`, `schema_graph`, `ops_causal_crosswalk`, `repository_provenance`, `style_lint`, the `*_objects` modules, and `object_path`; `sync_conflict` and `leanix_metamodel` move to the agent connector SDK instead. | Exact source-identity and graph-isomorphism tests against the epistemic graph confirm no AU RDF parser remains after the deletion. | requirement | AU-BOUNDARY | VERIFIED | 4a5540dd2e3d 743e98cda405 tests/gates/test_boundary_r023_r034_relocation_inventory.py:203 |
| AU-BOUNDARY-R030 Move hand-written ontology emitters behind EG pack compilation Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move hand-written ontology emitters behind EG pack compilation.** Agent Utilities puts its hand-written RDF, OWL, and SHACL text emitters behind epistemic graph pack compilation, moving `ontology/value_types`, `ontology/interfaces`, `ontology/manifest_compiler`, `extraction/schema_discovery.py`, `core/ontology_publisher.py`, `scripts/scaffold_ontology_leg.py`, and the declared semantic validation in connector certification. AU keeps only typed declarations, and connector-manifest-to-ontology compilation becomes pack compilation in the epistemic graph. | Conflict tests comparing the typed AU declaration against the generated epistemic-graph artifact confirm equivalence before the emitters are deleted. | requirement | AU-BOUNDARY | SPECIFIED | 1446fc4c3db5 5e15da9f9e40 743e98cda405 bcdde1ec1a57 c7fc09d3d2f6 |
| AU-BOUNDARY-R030.1 Record what has already landed for the emitter cutover Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Record what has already landed for the emitter cutover.** The SDK half landed as `agent_connector_sdk.manifest.ontology_pack.compile_manifest_ontology`, and AU's compile-before-sync gate (`connector_manifest_gate._compiled_manifest_graph`) already calls it instead of rendering Turtle locally. `agent_utilities/knowledge_graph/ontology/manifest_compiler.py` is not yet deleted because `scripts/generate_connector_manifests.py`, `scripts/update_ontology_lock.py`, `scripts/generate_native_connector_manifest.py`, and `agent_utilities/knowledge_graph/domain_packs/pack_loader.py` still import it directly, and `extraction/schema_discovery.py`, `core/ontology_publisher.py`, and `scripts/scaffold_ontology_leg.py` do not exist yet. | `tests/gates/test_boundary_r036_r047_relocation_census.py` (or an equivalent R030 census) records this importer set so a future edit notices drift. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R030.2 Wire `scripts/generate_connector_manifests.py` off the local manifest compiler Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Wire `scripts/generate_connector_manifests.py` off the local manifest compiler.** Point its call site at `agent_connector_sdk.manifest.ontology_pack.compile_manifest_ontology` instead of importing `agent_utilities/knowledge_graph/ontology/manifest_compiler.py` directly. | `tests/unit/knowledge_graph/ontology/test_generate_connector_manifests_uses_sdk_pack.py` confirms the script no longer imports the local compiler. | requirement | AU-BOUNDARY | VERIFIED | 6825115f4ac3 tests/unit/knowledge_graph/ontology/test_generate_connector_manifests_uses_sdk_pack.py:34 |
| AU-BOUNDARY-R030.3 Wire `scripts/update_ontology_lock.py` off the local manifest compiler Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Wire `scripts/update_ontology_lock.py` off the local manifest compiler.** Point its call site at `agent_connector_sdk.manifest.ontology_pack.compile_manifest_ontology` instead of importing `agent_utilities/knowledge_graph/ontology/manifest_compiler.py` directly. | `tests/unit/knowledge_graph/ontology/test_update_ontology_lock_uses_sdk_pack.py` confirms the script no longer imports the local compiler. | requirement | AU-BOUNDARY | VERIFIED | 62e0b302ed8e tests/unit/knowledge_graph/ontology/test_update_ontology_lock_uses_sdk_pack.py:24 tests/unit/knowledge_graph/ontology/test_update_ontology_lock_uses_sdk_pack.py:29 |
| AU-BOUNDARY-R030.4 Wire `scripts/generate_native_connector_manifest.py` off the local manifest compiler Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Wire `scripts/generate_native_connector_manifest.py` off the local manifest compiler.** Point its call site at `agent_connector_sdk.manifest.ontology_pack.compile_manifest_ontology` instead of importing `agent_utilities/knowledge_graph/ontology/manifest_compiler.py` directly. | `tests/unit/knowledge_graph/ontology/test_generate_native_connector_manifest_uses_sdk_pack.py` confirms the script no longer imports the local compiler. | requirement | AU-BOUNDARY | VERIFIED | c5d1bf3f8286 tests/unit/knowledge_graph/ontology/test_generate_native_connector_manifest_uses_sdk_pack.py:28 tests/unit/knowledge_graph/ontology/test_generate_native_connector_manifest_uses_sdk_pack.py:33 |
| AU-BOUNDARY-R030.5 Wire `agent_utilities/knowledge_graph/domain_packs/pack_loader.py` off the local manifest compiler Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Wire `agent_utilities/knowledge_graph/domain_packs/pack_loader.py` off the local manifest compiler.** Point its call site at `agent_connector_sdk.manifest.ontology_pack.compile_manifest_ontology` instead of importing `agent_utilities/knowledge_graph/ontology/manifest_compiler.py` directly. | `tests/unit/knowledge_graph/domain_packs/test_pack_loader_uses_sdk_pack.py` confirms the loader no longer imports the local compiler. | requirement | AU-BOUNDARY | VERIFIED | d93381eba0db tests/unit/knowledge_graph/domain_packs/test_pack_loader_uses_sdk_pack.py:22 tests/unit/knowledge_graph/domain_packs/test_pack_loader_uses_sdk_pack.py:34 |
| AU-BOUNDARY-R030.6 Delete `agent_utilities/knowledge_graph/ontology/manifest_compiler.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete `agent_utilities/knowledge_graph/ontology/manifest_compiler.py`.** Remove the module once `AU-BOUNDARY-R030.2`–`R030.5` leave it with zero importers. | An import census confirms no production or test caller remains before the file is deleted. | requirement | AU-BOUNDARY | VERIFIED | c4c654815738 tests/gates/test_au_boundary_r030_6_deleted.py:16 |
| AU-BOUNDARY-R030.7 Add `agent_utilities/knowledge_graph/core/ontology_publisher.py` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Add `agent_utilities/knowledge_graph/core/ontology_publisher.py`.** Add the typed AU declaration publisher that feeds the epistemic graph's pack compiler, replacing the hand-written emitter path. | `tests/unit/knowledge_graph/core/test_ontology_publisher.py` exercises the publisher against a fixture declaration. | requirement | AU-BOUNDARY | VERIFIED | c0dc104b77a9 tests/unit/knowledge_graph/core/test_ontology_publisher.py:22 tests/unit/knowledge_graph/core/test_ontology_publisher.py:31 |
| AU-BOUNDARY-R031 Replace AU's graph-schema DTOs with EG-generated types Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Replace AU's graph-schema DTOs with EG-generated types.** Agent Utilities replaces `models/knowledge_graph`, `models/schema_definition`, `models/evidence_bundle`, `models/knowledge_pack`, `models/codemap`, `models/graph`, `models/knowledge_base`, `models/schema_pack*`, and `models/schema_packs/**` with epistemic-graph-generated types. `kg/domain_packs/**` is moved once the shared pack loader has been cut over to the generated types. | Exact contract-digest checks and unknown-field rejection tests confirm no hand-copied model remains after the DTOs are replaced. | requirement | AU-BOUNDARY | VERIFIED | 4a5540dd2e3d 743e98cda405 tests/gates/test_boundary_r023_r034_relocation_inventory.py:204 |
| AU-BOUNDARY-R032 Delete AU's legacy SPARQL backend and setup path Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Delete AU's legacy SPARQL backend and setup path.** Agent Utilities deletes `kg/backends/sparql/**`, `kg/setup/**`, the `setup-databases` script, and `kg/integrations/stardog_sync` and `kg/integrations/sparql_ingestor`, because the external SPARQL stores they target are already legacy and unaffected by AU's broader federation work. | Tests confirming no runtime or command line caller remains, and that a typed unavailable response is returned for the removed path, gate the deletion. | requirement | AU-BOUNDARY | LANDED | 743e98cda405 a05257fb6541 |
| AU-BOUNDARY-R033 Move external graph and database federation to EG Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move external graph and database federation to EG.** Agent Utilities moves all of its remaining external graph and database backends into the epistemic graph as federation and mirror targets, including `fanout_backend`, `postgresql_backend`, `cypher_transpiler`, `age_backend`, `contrib/**`, `mirror_target`, `outbox`, `brain_guarded_backend`, `trino_backend`, and `spark_jobs`. None of these backends are deleted outright; each becomes a federated source reachable through the epistemic graph. | Scoped foreign-source query tests and a fail-closed outage test against the epistemic graph's federation path confirm parity before the AU backends are deleted. | requirement | AU-BOUNDARY | VERIFIED | 4a5540dd2e3d 743e98cda405 tests/gates/test_boundary_r023_r034_relocation_inventory.py:205 |
| AU-BOUNDARY-R034 Move retrieval engines to EG Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move retrieval engines to EG.** Agent Utilities moves its retrieval engines to the epistemic graph, including `kg/retrieval/hybrid_retriever`, `kg/retrieval/semantic_retrieval_engine`, `kg/retrieval/neural_reranker`, `kg/retrieval/hierarchical_document_retriever`, `kg/retrieval/memory_retriever`, `kg/retrieval/code_context`, `kg/retrieval/code_metrics`, `kg/retrieval/graph_engineering`, `kg/retrieval/analytics_job_registry`, `kg/retrieval/temporal_semantic_id`, `kg/retrieval/embedding_versioning`, `kg/retrieval/generative_recommender`, `kg/retrieval/iterative_expansion`, `kg/retrieval/lineage`, `kg/retrieval/direct_corpus`, `kg/retrieval/latent_topology_rag`, `kg/retrieval/reasoning_reranker`, `kg/retrieval/autocut`, `kg/neural/**`, and `kg/search/**`. AU retains context compilation and the capability index. | Same-snapshot tenant and source proofs plus cited-ranking parity tests against the epistemic graph confirm equivalence before the retrieval modules are deleted. | requirement | AU-BOUNDARY | VERIFIED | 4a5540dd2e3d 743e98cda405 tests/gates/test_boundary_r023_r034_relocation_inventory.py:206 |
| AU-BOUNDARY-R035 Re-home the schema-drift package before it lands Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Re-home the schema-drift package before it lands.** Agent Utilities places the schema-drift gate, shape, classify, and report steps in the agent connector SDK's connector-sync runner, running between drain and apply. AU moves `candidate.py`'s SHACL rendering, `contract_store`, and `activation` to the epistemic graph rather than keeping them in AU. | A quarantine test showing no cursor advance on a rejected candidate, paired with an approved-activation test, confirms the moved behavior before the AU-side SHACL rendering is deleted. | requirement | AU-BOUNDARY | LANDED | 5e15da9f9e40 bcfbc23cd1e6 c7fc09d3d2f6 |
| AU-BOUNDARY-R036 Move the usage fact store to EG Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move the usage fact store to EG.** Agent Utilities moves `usage/**` off its local SQLite and SQL analytics store so that usage becomes durable, tenant-scoped facts with provenance in the epistemic graph; AU only emits usage events, and graph-os's usage API reads from the epistemic graph. | Restart tests, tenant-scoped read tests, and a duplicate-event test against the epistemic graph's usage facts confirm durability before the AU store is deleted. | requirement | AU-BOUNDARY | LANDED | 795afc53f54d 8ea6bd529b0f |
| AU-BOUNDARY-R036.1 Pin the usage-store relocation inventory Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Pin the usage-store relocation inventory.** A typed, parametrized census test records the AU `usage/` paths pending move to the epistemic graph's usage facts (`usage/backend.py`, `usage/authorization.py`, `usage/backends`), so the set is provable from AU's side before deletion. | `tests/gates/test_boundary_r036_r047_relocation_census.py::test_inventoried_relocation_still_present` fails if a listed path disappears without this inventory being updated in the same change. | requirement | AU-BOUNDARY | LANDED | 795afc53f54d |
| AU-BOUNDARY-R037 Move development-governance tooling to repository-manager Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move development-governance tooling to repository-manager.** Agent Utilities moves its development-governance modules, including merge-queue sequencing, concept-reservation tracking, and related coordination code, out of `governance/**` and into `agents/repository-manager`, since repository-manager's commit and task-queue code are the only consumers. | Recovery testing of an interrupted merge-queue operation, plus a check that zero AU governance import remains, confirms the move before the AU modules are deleted. | requirement | AU-BOUNDARY | LANDED | 795afc53f54d |
| AU-BOUNDARY-R037.1 Pin the governance-tooling relocation inventory Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Pin the governance-tooling relocation inventory.** A typed, parametrized census test records the AU `governance/` modules pending move to repository-manager (`concept_allocator.py`, `concept_hierarchy.py`, `concept_lineage.py`), so the set is provable from AU's side before deletion. | `tests/gates/test_boundary_r036_r047_relocation_census.py::test_inventoried_relocation_still_present` fails if a listed path disappears without this inventory being updated in the same change. | requirement | AU-BOUNDARY | LANDED | 795afc53f54d |
| AU-BOUNDARY-R038 Add a cross-owner component registry and path guard Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Add a cross-owner component registry and path guard.** Agent Utilities adds graph-os and SDK boundary seeds, plus owner manifests, to `architecture/component-registry*`, closing the coverage gaps left by the existing AU and EG seams. AU adds a generated gate that fails when AU declares a console script whose module belongs to graph-os, or when new AU code lands outside an AU-owned destination path. | A hermetic test using public checkout fixtures and no live service shows the new gate rejects a wrong-owner module or script addition. | requirement | AU-BOUNDARY | LANDED | 8821aee3c37f aa5eba73e0f7 |
| AU-BOUNDARY-R039 Move front ends off AU internals Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move front ends off AU internals.** Agent Utilities ensures that the front ends layered on top of it, a web UI, a chat assistant front end, and a terminal UI, import only `agent_utilities.api`, graph-os, or the epistemic graph client, with no direct import of AU internals. This folds into the graph-os web UI's broader rebrand. | An import census across each front end plus an end-to-end user route exercised against the rebranded web UI confirm no AU-internal import remains. | requirement | AU-BOUNDARY | LANDED | 795afc53f54d |
| AU-BOUNDARY-R039.1 Pin AU's public front-end import surface Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Pin AU's public front-end import surface.** A typed, parametrized census test records the `agent_utilities/api/` modules external front ends (web UI, chat front end, terminal UI) are allowed to import, so a shrink of that surface is caught on the AU side before the front-end import census goes stale. | `tests/gates/test_boundary_r036_r047_relocation_census.py::test_front_end_surface_module_still_present` fails if a listed surface module disappears without the front-end import census being updated in the same change. | requirement | AU-BOUNDARY | LANDED | 795afc53f54d |
| AU-BOUNDARY-R040 Move agent memory and the learning engine to EG Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move agent memory and the learning engine to EG.** Agent Utilities moves `knowledge_graph/memory/**`, except `timeseries/`, entirely into the epistemic graph: agent memory, the learning engine, reinforcement-learning memory, and the media store. AU becomes a thin epistemic-graph client for agent-run memory, and `media_store` becomes a thin client as well. | A trusted-migration-and-quarantine test, plus a scoped read and a restart test against the epistemic graph's memory store, confirm durability before the AU modules are deleted. | requirement | AU-BOUNDARY | LANDED | 795afc53f54d |
| AU-BOUNDARY-R040.1 Pin the agent-memory relocation inventory Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Pin the agent-memory relocation inventory.** A typed, parametrized census test records the AU `knowledge_graph/memory/` paths pending move to the epistemic graph (`agent_context.py`, `learning_engine.py`, `memory_engine.py`, `rlm_memory.py`, `media_store.py`, `distillation.py`, `lifecycle.py`, `observer.py`), so the set is provable from AU's side before deletion. | `tests/gates/test_boundary_r036_r047_relocation_census.py::test_inventoried_relocation_still_present` fails if a listed path disappears without this inventory being updated in the same change. | requirement | AU-BOUNDARY | LANDED | 795afc53f54d |
| AU-BOUNDARY-R041 Finance modules that produced fabricated data are removed Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Finance modules that produced fabricated data are removed.** agent-utilities does not retain trade_journal, the strategy_export, strategy_sharing, and strategy_engine modules, streaming, market_feeds, market_data, crypto_connector, exchange_bridge, banking and its models, payments, `knowledge_graph/core/quant_tasks.py`, the candle rule sets, the credit dividend and Merton-KMV specifics, the sentiment lexicon, or the copy-trade gating and exit rules, because they produced fabricated data such as synthetic prediction-market prices, mock exchange fills, and a fixed Sharpe ratio. | A repository import census confirms none of these modules exist in agent-utilities and that no caller references them. | requirement | AU-BOUNDARY | LANDED | dbe24ea1b0d3 |
| AU-BOUNDARY-R042 Every package directory has one recorded disposition Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Every package directory has one recorded disposition.** Each directory in the top two levels under `agent_utilities/` has exactly one row in the deletion and relocation inventory in `coverage.md`, stating keep, delete, or relocate with the destination repository, and no row is undecided. A repository check fails when a directory exists without a row or a row names a path that is not in the tree. | A tree-versus-inventory test fails on an unlisted directory, an undecided row, or a stale path. | requirement | AU-BOUNDARY | LANDED | 2456745c1e4d 29d80148b462 8821aee3c37f a4079bc8d2ed |
| AU-BOUNDARY-R043 Retained agent surface is declared and import-bounded Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Retained agent surface is declared and import-bounded.** The inventory names the packages Agent Utilities keeps as its agent library — agent execution and orchestration (`agent/`, `graph/`, `capabilities/`, `patterns/`, `workflows/`, `tools/`, `core/checkpoint/`, `core/execution/`), evaluation and self-improvement (`harness/`, `measurement/`, `rlm/`), runtime and developer tooling (`runtime/`, `cli/`, `claude_harness/`, `integrations/`, `analysis/`, `agent_chat/`), and prompts, pricing and policy data (`prompts/`, `prompting/`, `pricing/`, `policies/`) — or assigns any of them elsewhere. Retained packages import the engine only through its public client and contain no serving, storage, or graph-compute implementation. | An import-boundary test over the retained packages rejects engine-internal, storage, and serving imports. | requirement | AU-BOUNDARY | LANDED | 8a45ab8013ad fdeabad709b3 |
| AU-BOUNDARY-R044 Fleet, scaling and deployment modules leave orchestration Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Fleet, scaling and deployment modules leave orchestration.** The fleet reconciler, autoscaler, scaling-authority, and deploy-watch modules in `orchestration/` receive an explicit owner in the inventory; fleet, scaling, and deployment behavior is served by graph-os and does not remain in Agent Utilities, while the agent runner and its planning code stay. Callers use the graph-os operation or the retained runner, never a moved module. | A caller census finds no Agent Utilities import of a moved fleet, scaling, or deployment module, and graph-os consumer tests cover the moved behavior. | requirement | AU-BOUNDARY | LANDED | 795afc53f54d |
| AU-BOUNDARY-R044.1 Pin the orchestration relocation inventory Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Pin the orchestration relocation inventory.** A typed, parametrized census test records the AU `orchestration/` modules pending move to graph-os (`agent_activation.py`, `agent_digital_twin.py`, `action_policy.py`), so the set is provable from AU's side before deletion, while the agent runner and its planning code stay out of this inventory. | `tests/gates/test_boundary_r036_r047_relocation_census.py::test_inventoried_relocation_still_present` fails if a listed path disappears without this inventory being updated in the same change. | requirement | AU-BOUNDARY | LANDED | 795afc53f54d |
| AU-BOUNDARY-R045 Unplaced knowledge-graph packages receive file-level owners Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Unplaced knowledge-graph packages receive file-level owners.** `knowledge_graph/distillation/`, `adaptation/`, `pipeline/`, `search_synthesis/`, `shapes/`, and `live_artifacts/` each receive a disposition, and the partly covered packages `retrieval/`, `research/`, `core/`, `enrichment/`, `extraction/`, `kb/`, `ingestion/`, `backends/`, `domain_packs/`, `orchestration/`, `ontology/`, and the files directly under `knowledge_graph/` list every file with its owner. Model-backed extraction, research, and retrieval-planning code that Agent Utilities keeps is named by path; everything else moves to the engine or the connector SDK or is deleted. | The inventory check confirms every tracked file under `knowledge_graph/` maps to exactly one owner, and parity tests cover each moved or deleted module. | requirement | AU-BOUNDARY | LANDED | 795afc53f54d |
| AU-BOUNDARY-R045.1 Pin the unplaced knowledge_graph package relocation inventory Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Pin the unplaced knowledge_graph package relocation inventory.** A typed, parametrized census test records the AU `knowledge_graph/` packages pending move to the epistemic graph (`distillation`, `adaptation`, `pipeline`, `search_synthesis`, `shapes`, `live_artifacts`), so the set is provable from AU's side before the file-level owner audit in this row's main acceptance criterion runs. | `tests/gates/test_boundary_r036_r047_relocation_census.py::test_inventoried_relocation_still_present` fails if a listed path disappears without this inventory being updated in the same change. | requirement | AU-BOUNDARY | LANDED | 795afc53f54d |
| AU-BOUNDARY-R046 Partly covered packages list every file with its owner Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Partly covered packages list every file with its owner.** `observability/`, `core/`, `core/registry/`, `messaging/`, `messaging/backends/`, `security/`, `skills/`, `models/`, `mcp/`, `ecosystem/`, `automation/`, `sdd/`, `domains/finance/`, and the top-level modules of `agent_utilities/` list every file with keep, delete, or relocate and the destination, replacing descriptions such as “the duplicated modules” with exact paths. | The inventory check confirms no tracked file in these packages lacks an owner and no requirement refers to them only by description. | requirement | AU-BOUNDARY | LANDED | 795afc53f54d |
| AU-BOUNDARY-R047 Engine-facing adapters and caches are thin clients or removed Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Engine-facing adapters and caches are thin clients or removed.** `kvcache/`, `numeric/`, `caching/`, and `media/` either become thin clients over the engine's public interface or are deleted as duplicates of engine behavior; none keeps its own durable store, numeric kernel, or cache authority. | Differential tests against the engine show equal results for retained adapters, and a census shows no second store or kernel implementation. | requirement | AU-BOUNDARY | LANDED | 795afc53f54d fed30c0982ae |
| AU-BOUNDARY-R047.1 Pin the engine-facing-adapter relocation inventory Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Pin the engine-facing-adapter relocation inventory.** A typed, parametrized census test records the AU `kvcache/`, `numeric/`, `caching/`, and `media/` packages pending the thin-client cutover against the epistemic graph's public interface, so the set is provable from AU's side before deletion or conversion. | `tests/gates/test_boundary_r036_r047_relocation_census.py::test_inventoried_relocation_still_present` fails if a listed path disappears without this inventory being updated in the same change. | requirement | AU-BOUNDARY | LANDED | 795afc53f54d |
| AU-BOUNDARY-R048 Domain models, shapes, assets and skill content are placed Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Domain models, shapes, assets and skill content are placed.** The domain packages (`domains/government/`, `domains/hr/`, `domains/law/`, `domains/medical/`, `models/domains/`) relocate to the epistemic graph as typed domain packs and are then deleted from Agent Utilities; the MCP tool in `mcp/tools/analysis_tools.py` that reads the HR workforce models moves separately to graph-os with MCP tool hosting. `ontology/shapes/`, `images/`, `data/`, `protocols/voice_supply_chain/`, and the skill-content directories under `skills/` each receive an owner: kept as agent content, published as engine packs, moved to the shared skills repository, or deleted. | The inventory check shows each directory placed, and pack or skill validation passes in the receiving repository. | requirement | AU-BOUNDARY | SPECIFIED | 49b087cb97e4 fca0c5ee42b3 |
| AU-BOUNDARY-R048.1 `images/` is already relocated Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**`images/` is already relocated.** `agent_utilities/images/` no longer exists on `origin/main`; it has already been deleted/relocated, closing that one directory of `AU-BOUNDARY-R048`. | `git ls-tree -r origin/main -- agent_utilities/images` returns empty. | requirement | AU-BOUNDARY | VERIFIED | 635f38f64aca tests/gates/test_boundary_r010_r048_landed_records.py:18 |
| AU-BOUNDARY-R048.2 Relocate `domains/government/` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Relocate `domains/government/`.** Move `agent_utilities/domains/government/` to its epistemic-graph domain pack and delete it from Agent Utilities, fixing any importer left pointing at the old path. | A census test shows no remaining `agent_utilities/domains/government/` path and no AU import of it. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R048.3 Relocate `domains/hr/` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Relocate `domains/hr/`.** Move `agent_utilities/domains/hr/` to its epistemic-graph domain pack and delete it from Agent Utilities, fixing any importer left pointing at the old path. | A census test shows no remaining `agent_utilities/domains/hr/` path and no AU import of it. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R048.4 Relocate `domains/law/` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Relocate `domains/law/`.** Move `agent_utilities/domains/law/` to its epistemic-graph domain pack and delete it from Agent Utilities, fixing any importer left pointing at the old path. | A census test shows no remaining `agent_utilities/domains/law/` path and no AU import of it. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R048.5 Relocate `domains/medical/` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Relocate `domains/medical/`.** Move `agent_utilities/domains/medical/` to its epistemic-graph domain pack and delete it from Agent Utilities, fixing any importer left pointing at the old path. | A census test shows no remaining `agent_utilities/domains/medical/` path and no AU import of it. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R048.6 Relocate `models/domains/` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Relocate `models/domains/`.** Move `agent_utilities/models/domains/` to its epistemic-graph domain pack and delete it from Agent Utilities, fixing any importer left pointing at the old path. | A census test shows no remaining `agent_utilities/models/domains/` path and no AU import of it. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R048.7 Move the HR workforce MCP tool to graph-os Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Move the HR workforce MCP tool to graph-os.** `agent_utilities/mcp/tools/analysis_tools.py`, which reads HR workforce models, moves to graph-os with MCP tool hosting and is deleted from Agent Utilities. | A census test shows `agent_utilities/mcp/tools/analysis_tools.py` no longer exists and graph-os serves the equivalent tool. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R048.8 Assign an owner to `ontology/shapes/` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Assign an owner to `ontology/shapes/`.** `agent_utilities/ontology/shapes/` is kept as agent content, published as an engine pack, moved to the shared skills repository, or deleted — one disposition is recorded and acted on. | The inventory check shows `ontology/shapes/` has one recorded disposition and the directory matches it. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R048.9 Assign an owner to `data/` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Assign an owner to `data/`.** `agent_utilities/data/` is kept as agent content, published as an engine pack, moved to the shared skills repository, or deleted — one disposition is recorded and acted on. | The inventory check shows `data/` has one recorded disposition and the directory matches it. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R048.10 Assign an owner to `protocols/voice_supply_chain/` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Assign an owner to `protocols/voice_supply_chain/`.** `agent_utilities/protocols/voice_supply_chain/` is kept as agent content, published as an engine pack, moved to the shared skills repository, or deleted — one disposition is recorded and acted on. | The inventory check shows `protocols/voice_supply_chain/` has one recorded disposition and the directory matches it. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R048.11 Assign an owner to the skill-content directories under `skills/` Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Assign an owner to the skill-content directories under `skills/`.** Each skill-content directory under `agent_utilities/skills/` is kept as agent content, published as an engine pack, moved to the shared skills repository, or deleted — one disposition per directory is recorded and acted on. | The inventory check shows every `skills/` content directory has one recorded disposition and pack/skill validation passes in the receiving repository where relocated. | requirement | AU-BOUNDARY | SPECIFIED | No recorded commit/test evidence |
| AU-BOUNDARY-R049 Every AU write-back sink runs through the SDK governed write-back contract Definition — AU-BOUNDARY / AU-BOUNDARY — AU boundary deconstructionCanonical requirement and verification source**Every AU write-back sink runs through the SDK governed write-back contract.** `run_writeback` builds one canonical SDK `SourceChangeSet` per sink invocation. It runs that change set through `DurableWritableConnector`, with each AU sink wrapped as a `WriteBackTransport`. The SDK validates the digest, expiry, field scope, base version and authorization before a live sink call. A live apply reserves an audit record and appends its attempt to a durable `WriteBackLedger`. A sink failure during apply is recorded as an uncertain outcome. `graph_writeback` and every other `run_writeback` caller reach sinks only through this path. `dry_run=True` stays the default, and the per-sink enable flag stays fail-closed. This is the first step of AU-BOUNDARY-R026; the sinks move to SDK packs later. | `tests/unit/knowledge_graph/enrichment/test_writeback_governed.py` proves the dry-run route and the applied and uncertain receipts. It also proves SDK refusal before the sink for denied authorization and a stale version. The existing write-back suites pass unchanged. | requirement | AU-BOUNDARY | LANDED | 00234474001c 0e44186eac39 |
| AU-QUAL AU-QUAL — Reproducible AU boundary and quality gates | spec | None | SPECIFIED | No recorded commit/test evidence |
| AU-QUAL-R001 Liveness deferrals fail visibly when they expire Definition — AU-QUAL / AU-QUAL — Reproducible AU boundary and quality gatesCanonical requirement and verification source**Liveness deferrals fail visibly when they expire.** Every liveness deferral in agent-utilities carries a visible owner and review date, and an expired deferral fails a deterministic hosted or scheduled check with a clear message rather than aging unnoticed. The guardrail-liveness gate enforces this on every entry. | A time-frozen unit test advances past a deferral's review date and confirms the scheduled check fails with an actionable message. | requirement | AU-QUAL | LANDED | c15d278239d3 |
| AU-QUAL-R002 Tiny-profile RBAC and bootstrap-isolation tests cover real code Definition — AU-QUAL / AU-QUAL — Reproducible AU boundary and quality gatesCanonical requirement and verification source**Tiny-profile RBAC and bootstrap-isolation tests cover real code.** The tiny profile's gateway test asserts that a disallowed write is denied under zero-container serving. The bootstrap-isolation tests patch the actual public seams in agent-utilities' MCP bootstrap module rather than functions that no longer exist. Evidence resolves the liveness deferrals for formal_reasoning_core.py and models/knowledge_graph.py. Nobody extends them again. | The named test suite passes against the current gateway and bootstrap code. Both named liveness deferrals show a resolved, evidenced status. | requirement | AU-QUAL | LANDED | ce632099b6b9 |
| AU-QUAL-R003 Connector validation uses EG's composed GraphSchema Definition — AU-QUAL / AU-QUAL — Reproducible AU boundary and quality gatesCanonical requirement and verification source**Connector validation uses EG's composed GraphSchema.** Connector validation in agent-utilities validates incoming data against epistemic-graph's composed GraphSchema and returns typed errors. It never loads or treats agent-utilities' own SHACL shapes pack as the source of schema authority. | A contract test confirms connector validation calls the composed GraphSchema and that no AU-owned shapes pack is consulted during validation. | requirement | AU-QUAL | LANDED | 50f312aeb06c c62dfed3c869 |
| AU-QUAL-R004 Named AU test failures are fixed, not skipped Definition — AU-QUAL / AU-QUAL — Reproducible AU boundary and quality gatesCanonical requirement and verification source**Named AU test failures are fixed, not skipped.** agent-utilities fixes its placement-mining, trace-miner, claim-flywheel, policy-drift, ingestion, and observability test failures with causal tests rather than skips. Widget tests that need connector packages have those packages declared and provisioned rather than skipped, and the assimilation-benchmark tests pass with seeded randomness after the numpy-to-epistemic-graph random-number-generator move. | The full named test list runs green in continuous integration with no skip markers added to mask a failure. | requirement | AU-QUAL | LANDED | 0fa2df86ace4 4771f8a9ee09 576cf41ee890 |
| AU-QUAL-R005 Test files are included in mypy with real fixes Definition — AU-QUAL / AU-QUAL — Reproducible AU boundary and quality gatesCanonical requirement and verification source**Test files are included in mypy with real fixes.** agent-utilities' mypy configuration includes tests/ rather than excluding it, and every reported error is resolved with a correct type rather than a new type: ignore comment, an Any cast, or an additional exclusion. Errors are worked through in small, owned source-directory batches until the exclusion is fully removed. | A mypy configuration diff confirms the test exclusion is removed and a clean mypy run covers all test files with zero new ignores. | requirement | AU-QUAL | LANDED | d9d7cc7b59c0 ed6485573f1e |
| AU-QUAL-R005.1 Remaining scope of AU-QUAL-R005 (slice .1): Test files are included in mypy with real fixes Definition — AU-QUAL / AU-QUAL — Reproducible AU boundary and quality gatesCanonical requirement and verification source**Remaining scope of AU-QUAL-R005 (slice .1): Test files are included in mypy with real fixes.** Child slice of `AU-QUAL-R005` (see tasks.md). | A mypy configuration diff confirms the test exclusion is removed and a clean mypy run covers all test files with zero new ignores | requirement | AU-QUAL | LANDED | f25a287bac6c |
| AU-QUAL-R005.2 Remaining scope of AU-QUAL-R005 (slice .2): Test files are included in mypy with real fixes Definition — AU-QUAL / AU-QUAL — Reproducible AU boundary and quality gatesCanonical requirement and verification source**Remaining scope of AU-QUAL-R005 (slice .2): Test files are included in mypy with real fixes.** Child slice of `AU-QUAL-R005` (see tasks.md). | A mypy configuration diff confirms the test exclusion is removed and a clean mypy run covers all test files with zero new ignores | requirement | AU-QUAL | VERIFIED | d9d7cc7b59c0 |
| AU-QUAL-R005.2.1 Per-directory grandchild slice of AU-QUAL-R005.2 — `tests/unit/patterns/` Definition — AU-QUAL / AU-QUAL — Reproducible AU boundary and quality gatesCanonical requirement and verification source**Per-directory grandchild slice of AU-QUAL-R005.2 — `tests/unit/patterns/`.** The mypy pre-commit hook's exclusion is narrowed so `tests/unit/patterns/` is included in mypy coverage, and any real type errors mypy reports there are fixed with a correct type rather than an ignore, an `Any` cast, or a further exclusion. Remaining test directories are tracked as further `AU-QUAL-R005.2.n` grandchildren in tasks.md. | The mypy pre-commit hook's `exclude` regex no longer matches `tests/unit/patterns/`, and a mypy run against that directory reports zero errors with zero new ignores. | requirement | AU-QUAL | VERIFIED | d9d7cc7b59c0 tests/unit/quality/test_mypy_config_includes_patterns_dir.py:33 tests/unit/quality/test_mypy_config_includes_patterns_dir.py:41 |
| AU-QUAL-R006 A privacy check covers the final tree and commit history Definition — AU-QUAL / AU-QUAL — Reproducible AU boundary and quality gatesCanonical requirement and verification source**A privacy check covers the final tree and commit history.** Before code reaches a public remote, agent-utilities runs a privacy check across the complete working tree and every commit message, confirming no credential, private path, or internal identifier is present. | The privacy check runs as a required gate and fails the build when it finds a disallowed pattern in tracked content or commit messages. | requirement | AU-QUAL | VERIFIED | 0fa2df86ace4 4a5540dd2e3d 576cf41ee890 tests/gates/test_tracked_privacy_commit_history.py:112 tests/gates/test_tracked_privacy_commit_history.py:88 |
| AU-QUAL-R007 Liveness placeholder detector ignores documentation prose Definition — AU-QUAL / AU-QUAL — Reproducible AU boundary and quality gatesCanonical requirement and verification source**Liveness placeholder detector ignores documentation prose.** The guardrail-liveness placeholder detector does not flag a trigger phrase that appears in a docstring or comment describing an accurate, documented design decision; it flags only code bodies whose only substantive content is an unimplemented placeholder. | A regression test feeds the detector a prose docstring containing a trigger phrase and confirms no false-positive finding is raised, alongside a true-positive case that still fails. | requirement | AU-QUAL | VERIFIED | 4a5540dd2e3d f93efd64d001 tests/gates/test_liveness_analyzer_compat.py:163 tests/gates/test_liveness_analyzer_compat.py:174 |
| AU-QUAL-R008 Liveness reconciler rescues exact service-registry targets Definition — AU-QUAL / AU-QUAL — Reproducible AU boundary and quality gatesCanonical requirement and verification source**Liveness reconciler rescues exact service-registry targets.** The liveness reconciler reads the literal `_SERVICE_DEFINITIONS` registry without importing services. It rescues only the effective target for each capability; a later row replaces an earlier one. A nonliteral registry, a malformed row, or an unrelated dictionary rescues nothing. | Fixture tests confirm last-row-wins rescue and no rescue for a nonliteral registry. A parity test compares the static targets with real registry dispatch. | requirement | AU-QUAL | LANDED | cf1cdce6a6e4 eb077e60c21b |
| AU-QUAL-R009 Red-team runs follow the received probe sequence and emit trace events, and abstain without a scorer verdict Definition — AU-QUAL / AU-QUAL — Reproducible AU boundary and quality gatesCanonical requirement and verification source**Red-team runs follow the received probe sequence and emit trace events, and abstain without a scorer verdict.** agent-utilities runs the probe sequence it receives and emits each attack, transform and scorer verdict as trace events. A run with no received scorer verdict reports abstention and never pass. [arXiv:2605.04019] | `See children `AU-QUAL-R009.1` to `AU-QUAL-R009.6`.` | requirement | AU-QUAL | SPECIFIED | No recorded commit/test evidence |
| AU-QUAL-R009.1 Model Definition — AU-QUAL / AU-QUAL — Reproducible AU boundary and quality gatesCanonical requirement and verification source**Model.** `ProbeResult` at `agent_utilities/harness/red_team.py:44` gains `transform`, `scorer_id` and a received `verdict`. EG-DECISION-ENGINE-R138 produces the attack, transform and scorer records and the verdict. GRAPHOS-OPS carries them to the harness. The optional engine `ProbeVerdict` retains `resisted`, `compromised` or `inconclusive` unchanged. Separate local `execution_status` values are `completed` and `abstained`; `abstained` is never a scoring verdict. `RedTeamReport` (`red_team.py:56`) counts execution abstentions separately. | `tests/unit/harness/test_red_team_evidence.py::test_probe_result_verdict_fields` | requirement | AU-QUAL | SPECIFIED | No recorded commit/test evidence |
| AU-QUAL-R009.2 Behavior Definition — AU-QUAL / AU-QUAL — Reproducible AU boundary and quality gatesCanonical requirement and verification source**Behavior.** `RedTeamRunner.assess` (`red_team.py:149`) must run the given probes in order. Without a received verdict, it records `execution_status=abstained`, reason `no_scorer_verdict` and no verdict. A target error records reason `probe_execution_failed` without inventing a verdict. Defense-rate counts exclude execution abstentions and engine `inconclusive` verdicts. | `tests/unit/harness/test_red_team_evidence.py::test_no_scorer_abstains` | requirement | AU-QUAL | SPECIFIED | No recorded commit/test evidence |
| AU-QUAL-R009.3 Wiring Definition — AU-QUAL / AU-QUAL — Reproducible AU boundary and quality gatesCanonical requirement and verification source**Wiring.** `red_team_assess` (`agent_utilities/mcp/harness_server.py:574`) must emit the events through the audit sink record at `capabilities/kg_audit_sink.py:385`. `RedTeamRunner.run` (`red_team.py:175`) has no production caller today; this row creates the call site in the same tool. | `tests/unit/harness/test_red_team_evidence.py::test_assess_writes_trace_evidence` | requirement | AU-QUAL | SPECIFIED | No recorded commit/test evidence |
| AU-QUAL-R009.4 Refusal Definition — AU-QUAL / AU-QUAL — Reproducible AU boundary and quality gatesCanonical requirement and verification source**Refusal.** A run without received verdicts records an execution abstention with reason `no_scorer_verdict`. Without conclusive engine verdicts, the defense rate stays absent. Missing scores and execution failures must never become `resisted` or `compromised`. | `tests/unit/harness/test_red_team_evidence.py::test_all_abstained_is_not_pass` | requirement | AU-QUAL | SPECIFIED | No recorded commit/test evidence |
| AU-QUAL-R009.5 Evidence Definition — AU-QUAL / AU-QUAL — Reproducible AU boundary and quality gatesCanonical requirement and verification source**Evidence.** Each probe emits the attack, transform and scorer identifiers plus the response digest. Separate trace fields carry the unchanged optional engine verdict, execution status and reason. A second run with the same inputs must emit equal events. | `tests/unit/harness/test_red_team_evidence.py::test_evidence_reproduces` | requirement | AU-QUAL | SPECIFIED | No recorded commit/test evidence |
| AU-QUAL-R009.6 Hot-path proof Definition — AU-QUAL / AU-QUAL — Reproducible AU boundary and quality gatesCanonical requirement and verification source**Hot-path proof.** The entry point is the served `red_team_assess` operation. Each received engine verdict must trace unchanged, including `inconclusive`. Missing verdicts and target errors must trace execution abstentions with no fabricated verdict. Test path: `tests/integration/test_red_team_assess_served.py`. | `tests/integration/test_red_team_assess_served.py::test_served_assess_records_evidence` | requirement | AU-QUAL | SPECIFIED | No recorded commit/test evidence |
| AU-DEV AU-DEV — Public AU development environment and skill lifecycle | spec | None | SPECIFIED | No recorded commit/test evidence |
| AU-DEV-R001 A development skill documents AU's contribution workflow Definition — AU-DEV / AU-DEV — Public AU development environment and skill lifecycleCanonical requirement and verification source**A development skill documents AU's contribution workflow.** agent-utilities provides and keeps current a development skill that documents its architecture boundaries, supported build hosts, quality gates, contract regeneration, and identity setup, alongside equivalent per-repository skills for epistemic-graph, graph-os, and the connector SDK. Each repository's AGENTS.md is trimmed to navigation and a pointer into its development skill. | A skill-content check confirms each listed development skill documents the required topics and that no AGENTS.md duplicates that content. | requirement | AU-DEV | SPECIFIED | ed6485573f1e |
| AU-DEV-R001.1 typed DevelopmentSkillTopicInventory model (agent_utilities/skills/dev_skill_topics.py) that refuses a skill missing any required topic, plus its refusal test ( Definition — AU-DEV / AU-DEV — Public AU development environment and skill lifecycleCanonical requirement and verification source**typed DevelopmentSkillTopicInventory model (agent_utilities/skills/dev_skill_topics.py) that refuses a skill missing any required topic, plus its refusal test (.** Child slice of `AU-DEV-R001` (see tasks.md). | A skill-content check confirms each listed development skill documents the required topics and that no AGENTS.md duplicates that content | requirement | AU-DEV | LANDED | c48cba9d3f95 f25a287bac6c |
| AU-DEV-R001.2 The real agent-utilities-development skill declares every `DevelopmentSkillTopicInventory` required topic Definition — AU-DEV / AU-DEV — Public AU development environment and skill lifecycleCanonical requirement and verification source**The real agent-utilities-development skill declares every `DevelopmentSkillTopicInventory` required topic.** Applies the AU-DEV-R001.1 model to the checked-in `agent-utilities-development` SKILL.md (not a synthetic fixture). Auditing the sibling epistemic-graph/graph-os/connector-sdk skills and trimming each repository's AGENTS.md remain `AU-DEV-R001.3+`. | `tests/unit/skills/test_dev_skill_topics_audit.py` builds `DevelopmentSkillTopicInventory` from the real SKILL.md's declared topics and asserts it does not refuse. | requirement | AU-DEV | VERIFIED | c48cba9d3f95 tests/unit/skills/test_dev_skill_topics_audit.py:35 |
| AU-DEV-R001.3 Audit the sibling development skills and trim each AGENTS.md Definition — AU-DEV / AU-DEV — Public AU development environment and skill lifecycleCanonical requirement and verification source**Audit the sibling development skills and trim each AGENTS.md.** Remaining scope of `AU-DEV-R001` after `.2`: apply the `DevelopmentSkillTopicInventory` audit to the epistemic-graph, graph-os and agent-connector-sdk development skills and trim each repository's AGENTS.md to the contract the skill now owns. | A test loads each sibling SKILL.md through `DevelopmentSkillTopicInventory` and asserts every required topic is declared; each AGENTS.md links its development skill instead of restating it. | requirement | AU-DEV | SPECIFIED | No recorded commit/test evidence |
| AU-DEV-R002 Deployment and genesis tooling move to graph-os Definition — AU-DEV / AU-DEV — Public AU development environment and skill lifecycleCanonical requirement and verification source**Deployment and genesis tooling move to graph-os.** agent-utilities deletes its agent-os-genesis workflow and agent-utilities-deployment skill once graph-os hosts their replacements covering single-host Docker Compose and Kubernetes/Helm deployment, identity modes with a forced first administrator, per-mode secret backends, and first-boot verification. Symlinks, AGENTS.md references, and the workspace navigation index are updated to point at the graph-os skills. | A repository check confirms the AU deployment and genesis copies no longer exist and that a fresh deployment following the graph-os skill passes first-boot verification. | requirement | AU-DEV | LANDED | 29d80148b462 |
| AU-DEV-R003 Skill inventory refresh stays deterministic after moves Definition — AU-DEV / AU-DEV — Public AU development environment and skill lifecycleCanonical requirement and verification source**Skill inventory refresh stays deterministic after moves.** agent-utilities' source-to-installed skill inventory detects a moved or renamed graph-os provider skill and a stale installed copy, and its refresh is idempotent: it prints its plan before mutating anything and verifies the resulting hashes and IDs so the skill remains discoverable in both Codex and the runtime XDG skill path after an ecosystem refactor. | A refresh test renames a source skill, runs the inventory refresh, and confirms the installed copy is updated and discoverable with matching hashes in both environments. | requirement | AU-DEV | SPECIFIED | ed6485573f1e |
| AU-DEV-R003.1 typed SkillInventoryRefreshEntry model (agent_utilities/skills/inventory_refresh_model.py) that refuses a refresh which mutates before printing its plan, or cla Definition — AU-DEV / AU-DEV — Public AU development environment and skill lifecycleCanonical requirement and verification source**typed SkillInventoryRefreshEntry model (agent_utilities/skills/inventory_refresh_model.py) that refuses a refresh which mutates before printing its plan, or cla.** Child slice of `AU-DEV-R003` (see tasks.md). | A refresh test renames a source skill, runs the inventory refresh, and confirms the installed copy is updated and discoverable with matching hashes in both environments | requirement | AU-DEV | LANDED | c48cba9d3f95 f25a287bac6c |
| AU-DEV-R003.2 The real runtime XDG skills refresh prints its plan before mutating and verifies hashes through `SkillInventoryRefreshEntry` Definition — AU-DEV / AU-DEV — Public AU development environment and skill lifecycleCanonical requirement and verification source**The real runtime XDG skills refresh prints its plan before mutating and verifies hashes through `SkillInventoryRefreshEntry`.** `agent_utilities.skills.inventory_refresh_runtime` wires the AU-DEV-R003.1 model to the real `install_unified()` skills leg: it prints the planned action per registered provider before mutating, then builds one refusal-checked entry per provider from the real installed marker. The Codex discovery path remains `AU-DEV-R003.3+`. | `tests/unit/skills/test_inventory_refresh_runtime.py` confirms the plan is printed and the XDG tree is untouched before the real refresh runs, and that the resulting entries do not raise. | requirement | AU-DEV | VERIFIED | c48cba9d3f95 tests/unit/skills/test_inventory_refresh_runtime.py:10 tests/unit/skills/test_inventory_refresh_runtime.py:26 |
| AU-DEV-R003.3 ROLLUP: Codex skill discovery path joins the refresh inventory (superseded by AU-DEV-R003.3.1...AU-DEV-R003.3.3) Definition — AU-DEV / AU-DEV — Public AU development environment and skill lifecycleCanonical requirement and verification source**ROLLUP: Codex skill discovery path joins the refresh inventory (superseded by AU-DEV-R003.3.1...AU-DEV-R003.3.3).** Not bite-sized: `agent_utilities` has no Codex skill discovery path at all (only Codex hook registration in `ecosystem/hook_installer.py` and MCP registration in `deployment/codex_registration.py`; `install_unified()` writes only the XDG skills tree), so the path must be defined, materialized, then refreshed. Remaining scope of `AU-DEV-R003` after `.2`: the Codex discovery path is refreshed through the same plan-before-mutate, hash-verified `SkillInventoryRefreshEntry` flow as the XDG leg. | A unit test asserts the Codex leg prints its plan before mutating and refuses a hash mismatch. | requirement | AU-DEV | SPECIFIED | No recorded commit/test evidence |
| AU-DEV-R003.3.1 Define the Codex skill discovery path Definition — AU-DEV / AU-DEV — Public AU development environment and skill lifecycleCanonical requirement and verification source**Define the Codex skill discovery path.** Add one typed resolver `codex_skills_dir()` (honouring `CODEX_HOME`, defaulting to `~/.codex/skills`) beside `unified_skills_dir()` with its validation and refusal tests for link-like or unsafe directories. | A unit test asserts the resolved path under `CODEX_HOME` and refusal of a symlinked root. | requirement | AU-DEV | VERIFIED | 87539533cf33 tests/unit/core/test_codex_skills_dir.py:10 tests/unit/core/test_codex_skills_dir.py:19 |
| AU-DEV-R003.3.2 Materialize registered skill providers into the Codex path Definition — AU-DEV / AU-DEV — Public AU development environment and skill lifecycleCanonical requirement and verification source**Materialize registered skill providers into the Codex path.** Wire `install_unified()` to also write each registered provider's managed marker and assets under `codex_skills_dir()`, reusing `_materialize_provider`. | A unit test asserts a registered provider is installed under the Codex path with a managed marker. | requirement | AU-DEV | VERIFIED | 4d6f3ab2ae2b tests/unit/core/test_codex_skills_install.py:38 tests/unit/core/test_codex_skills_install.py:56 tests/unit/core/test_codex_skills_install.py:75 |
| AU-DEV-R003.3.3 Codex leg prints its plan before mutating and refuses a hash mismatch Definition — AU-DEV / AU-DEV — Public AU development environment and skill lifecycleCanonical requirement and verification source**Codex leg prints its plan before mutating and refuses a hash mismatch.** Extend `inventory_refresh_runtime` with a Codex leg that prints per-provider plan lines before mutating and builds `SkillInventoryRefreshEntry` from the Codex marker. | A unit test asserts the Codex plan prints before mutation and a hash mismatch raises. | requirement | AU-DEV | SPECIFIED | No recorded commit/test evidence |
| AU-DEV-R003.3.4 Define the Claude Code skills discovery path Definition — AU-DEV / AU-DEV — Public AU development environment and skill lifecycleCanonical requirement and verification source**Define the Claude Code skills discovery path.** Add `claude_skills_dir()` beside `codex_skills_dir()` (honouring `CLAUDE_CONFIG_DIR`, defaulting to `~/.claude/skills`) through one shared `_harness_skills_dir` resolver with the same relative, link-like, and non-directory refusals. | A unit test asserts the path under `CLAUDE_CONFIG_DIR`/`HOME` and refusal of a relative, symlinked, or non-directory root. | requirement | AU-DEV | VERIFIED | d330871d37af tests/unit/core/test_claude_skills_install.py:35 tests/unit/core/test_claude_skills_install.py:46 |
| AU-DEV-R003.3.5 One harness-target install feeds Claude and Codex together Definition — AU-DEV / AU-DEV — Public AU development environment and skill lifecycleCanonical requirement and verification source**One harness-target install feeds Claude and Codex together.** Generalize the Codex-only install into `_install_harness_skills` driven by a `HARNESS_TARGETS` table (codex, claude), reusing `_install_registration`, `_materialize_provider` and `_prune_removed_managed`; `install_unified()` reports a `claude_skills` key next to `codex_skills`. | A unit test asserts one `install_unified()` call materializes the same provider into both harness directories and pruning removes only managed-marker directories. | requirement | AU-DEV | VERIFIED | d330871d37af tests/unit/core/test_claude_skills_install.py:67 tests/unit/core/test_claude_skills_install.py:91 |
| AU-RETIRE AU-RETIRE — Retire duplicate graph engine authority in AU | spec | None | SPECIFIED | No recorded commit/test evidence |
| AU-RETIRE-R001 Complete inventory and retirement of duplicate graph engine code Definition — AU-RETIRE / AU-RETIRE — Retire duplicate graph engine authority in AUCanonical requirement and verification source**Complete inventory and retirement of duplicate graph engine code.** AU produces a complete, reconciled inventory of every knowledge_graph module, giving each one a single disposition of retained for agent/planning use, migrated to the engine, migrated to an SDK, or deleted as a duplicate. Modules proven to duplicate the engine's native OWL/SPARQL/compute authority, including `knowledge_graph/core/graph_compute.py`, `knowledge_graph/core/formal_reasoning_core.py`, `knowledge_graph/backends/sparql/`, and any OWL bridge or backend module, are deleted once a parity-verified epistemic-graph client replaces them. | An inventory audit confirms no knowledge_graph module lacks a disposition, and before/after parity tests on a synthetic graph show the deleted modules have no remaining import or caller. | requirement | AU-RETIRE | SPECIFIED | 4a5540dd2e3d 6a408267e403 tests/unit/knowledge_graph/test_retirement_inventory.py:24 |
| AU-RETIRE-R001.1 Census recorded no safe disposition yet for `graph_compute.py` or `formal_reasoning_core.py` Definition — AU-RETIRE / AU-RETIRE — Retire duplicate graph engine authority in AUCanonical requirement and verification source**Census recorded no safe disposition yet for `graph_compute.py` or `formal_reasoning_core.py`.** The 2026-10-08 census found `knowledge_graph/core/graph_compute.py` (`GraphComputeEngine`, 281 non-test importers) is load-bearing core infrastructure, not an isolable duplicate, and every exported symbol of `knowledge_graph/core/formal_reasoning_core.py` has a real caller or registered capability; neither has a disposition assigned, and no code was cut for either. This is a factual record of the census outcome, not new work. | `specs/au-engine-duplicate-retirement/tasks.md` records the census outcome verbatim; both files remain present and imported on `origin/main`. | requirement | AU-RETIRE | LANDED | 6a408267e403 |
| AU-RETIRE-R001.2 Open the cross-repo spec item enumerating EG-native equivalents Definition — AU-RETIRE / AU-RETIRE — Retire duplicate graph engine authority in AUCanonical requirement and verification source**Open the cross-repo spec item enumerating EG-native equivalents.** Open one spec item against epistemic-graph that lists, per exported AU symbol in `graph_compute.py` and `formal_reasoning_core.py`, either its EG-native equivalent operation or "no replacement exists" — the census's named next step, and the blocker for any AU-side deletion slice on either file. | The epistemic-graph spec item exists, is linked back from this row, and names an EG-native equivalent or "no replacement exists" for every exported symbol in both files. | requirement | AU-RETIRE | SPECIFIED | No recorded commit/test evidence |
| AU-RETIRE-R002 Enrichment edges carry a provenance rung and confidence Definition — AU-RETIRE / AU-RETIRE — Retire duplicate graph engine authority in AUCanonical requirement and verification source**Enrichment edges carry a provenance rung and confidence.** Each enrichment edge in agent_utilities/knowledge_graph/enrichment/models.py records an explicit provenance rung distinguishing a directly extracted relationship from an inferred one, plus a confidence value, instead of leaving certainty to ride opportunistically in free-form properties. When two edges would write the same relationship, the edge with the more certain rung is kept. | Unit tests confirm edge rungs order from most to least certain, a less-certain write cannot overwrite a more-certain edge, and deduplication keeps the more certain edge. | requirement | AU-RETIRE | LANDED | d165697978b7 |
| AU-RETIRE-R003 OBO ontology terms ingest as typed ReferenceTerm individuals Definition — AU-RETIRE / AU-RETIRE — Retire duplicate graph engine authority in AUCanonical requirement and verification source**OBO ontology terms ingest as typed ReferenceTerm individuals.** AU ingests OBO ontology terms from GO biological process, UBERON/CL, ENVO, PATO and ChEBI as ReferenceTerm individuals keyed by their CURIE, aggregates GO annotations into a taxonCapableOf relation, and types ChEBI nutrient-role entries as kg:Nutrient. | Integration tests load each OBO source and assert the resulting ReferenceTerm, taxonCapableOf and kg:Nutrient individuals match the expected CURIEs and types. | requirement | AU-RETIRE | LANDED | 6a408267e403 |
| AU-RETIRE-R003.1 Typed ReferenceTerm model refuses an invalid CURIE Definition — AU-RETIRE / AU-RETIRE — Retire duplicate graph engine authority in AUCanonical requirement and verification source**Typed ReferenceTerm model refuses an invalid CURIE.** `ReferenceTerm` refuses a `curie` that is not `PREFIX:local_id` shaped or whose prefix does not match its declared `source`. | Unit tests assert a non-CURIE identifier and a source-mismatched CURIE both raise `ValidationError` referencing AU-RETIRE-R003. | requirement | AU-RETIRE | LANDED | 82c3c3016b15 f25a287bac6c |
| AU-RETIRE-R003.2 Ingest raw OBO records into keyed, deduplicated ReferenceTerm individuals Definition — AU-RETIRE / AU-RETIRE — Retire duplicate graph engine authority in AUCanonical requirement and verification source**Ingest raw OBO records into keyed, deduplicated ReferenceTerm individuals.** `ingest_reference_terms` turns an iterable of raw OBO term records into `ReferenceTerm` individuals keyed by CURIE, validating each record through `ReferenceTerm` and keeping the first record when a CURIE repeats. | Unit tests assert ingest keys individuals by CURIE, keeps the first of a repeated CURIE, and propagates `ValidationError` for an invalid record. | requirement | AU-RETIRE | VERIFIED | 82c3c3016b15 tests/unit/knowledge_graph/ontology/test_reference_term.py:29 tests/unit/knowledge_graph/ontology/test_reference_term.py:40 tests/unit/knowledge_graph/ontology/test_reference_term.py:51 |
| AU-RETIRE-R003.3 Load the real OBO sources and aggregate taxonCapableOf / kg:Nutrient Definition — AU-RETIRE / AU-RETIRE — Retire duplicate graph engine authority in AUCanonical requirement and verification source**Load the real OBO sources and aggregate taxonCapableOf / kg:Nutrient.** Remaining scope of `AU-RETIRE-R003` after the `.1` model and `.2` keyed ingest: load GO biological process, UBERON/CL, ENVO, PATO and ChEBI through `ingest_reference_terms`, aggregate GO annotations into a `taxonCapableOf` relation, and type ChEBI nutrient-role entries as `kg:Nutrient`. | Integration tests load each OBO source and assert the resulting ReferenceTerm, taxonCapableOf and kg:Nutrient individuals match the expected CURIEs and types. | requirement | AU-RETIRE | LANDED | 82c3c3016b15 |
| AU-RETIRE-R004 Fix doubled node_type text in embedding composition Definition — AU-RETIRE / AU-RETIRE — Retire duplicate graph engine authority in AUCanonical requirement and verification source**Fix doubled node_type text in embedding composition.** The derived text composed for embedding in enrichment/semantic.py does not duplicate a bare node_type label; a node with no other descriptive fields produces a single label such as "Order" rather than a doubled string such as "Order and Order". | A unit test asserts the composed embedding text for a node carrying only node_type equals the single label, not a duplicated compound string. | requirement | AU-RETIRE | VERIFIED | bc7bba33932d f0f5e51f6b47 tests/unit/knowledge_graph/enrichment/test_entity_text_bare_node_type.py:38 |
| AU-RETIRE-R005 Per-stage timing instrumentation across the full ingest path Definition — AU-RETIRE / AU-RETIRE — Retire duplicate graph engine authority in AUCanonical requirement and verification source**Per-stage timing instrumentation across the full ingest path.** The code and repository ingest path in enrichment/pipeline.py and the repository-indexer module in core/ records per-stage timing through the same ingest-profile instrumentation already used on the document path, covering stages such as enumeration, parsing and resolution, filtering, call resolution, community detection, card generation, embedding and write, so ingest duration is measurable end to end. | Unit tests assert each pipeline stage emits a timing record through the ingest-profile instrumentation, and a full ingest run reports a non-zero duration for every stage. | requirement | AU-RETIRE | LANDED | dd925ea09bf7 |
| AU-RETIRE-R006 Delta ingest reaps nodes for deleted files Definition — AU-RETIRE / AU-RETIRE — Retire duplicate graph engine authority in AUCanonical requirement and verification source**Delta ingest reaps nodes for deleted files.** The incremental delta ingest path in ingestion/engine.py removes graph nodes for files that were deleted from the source, so a deleted file leaves no stale node behind after a delta run. | An integration test deletes a previously ingested file, runs a delta ingest, and asserts the corresponding node no longer exists in the graph. | requirement | AU-RETIRE | VERIFIED | 42f6dada3749 4a5540dd2e3d 5822ee9bef09 bc7bba33932d tests/unit/knowledge_graph/test_ingestion_perf_optimizations.py:362 tests/unit/knowledge_graph/test_ingestion_perf_optimizations.py:380 tests/unit/knowledge_graph/test_ingestion_perf_optimizations.py:393 |
| AU-RETIRE-R007 Deterministic embedding admission classifier at the ingest chokepoint Definition — AU-RETIRE / AU-RETIRE — Retire duplicate graph engine authority in AUCanonical requirement and verification source**Deterministic embedding admission classifier at the ingest chokepoint.** The embedding admission classifier in ingestion/embedding_admission.py deterministically excludes lockfile, generated, vendored, minified and binary content, excludes typed SQL/CDC columns such as enums, foreign keys, timestamps, booleans and numerics, and excludes exact-duplicate content by hash, while its structured-token rule stays narrow enough that ordinary hyphenated entity names still reach the embedder. The classifier is enforced at the single envelope-preparation chokepoint so no connector can bypass it. | Unit and integration tests against the real chokepoint confirm each exclusion class is skipped, duplicate content is deduplicated, and a known set of ordinary entity names still reach the embedder. | requirement | AU-RETIRE | LANDED | 82eff59f049d |
| AU-RETIRE-R008 Sequence ingestion-economics work ahead of file relocation Definition — AU-RETIRE / AU-RETIRE — Retire duplicate graph engine authority in AUCanonical requirement and verification source**Sequence ingestion-economics work ahead of file relocation.** Design work on ingestion timing, edge provenance and embedding admission lands against AU's current ingestion/engine.py, enrichment/pipeline.py and the repository-indexer module in core/ and is inherited by any later relocation of those files, rather than the two efforts proceeding as independent, unreconciled changes to the same files. | A review confirms the ingestion-economics changes are merged before any in-scope module is migrated out of AU, with no conflicting concurrent rewrite of the same files. | requirement | AU-RETIRE | LANDED | 6a408267e403 |
| AU-INTEGRATION AU-INTEGRATION — AU integration and release reliability | spec | None | LANDED | No recorded commit/test evidence |
| AU-INTEGRATION-R001 Clustered mode deliberately refuses local-only agent writes Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**Clustered mode deliberately refuses local-only agent writes.** In clustered mode, direct writes to AgentComponent, AgentLibrary, AgentGraph, AgentTemplate and ConnectorPack are deliberately refused through an explicit local-only method list in the mutation planner (src/server/mutation/plan.rs), not as an accidental side effect, and the inventory of clustered-refused mutation methods stays complete. | An inventory test asserts every local-only mutation method is enumerated and refused when running in clustered mode. | requirement | AU-INTEGRATION | VERIFIED | 34481f825411 42f6dada3749 daa321626142 tests/unit/orchestration/test_agent_library.py:204 tests/unit/test_native_cypher_routing.py:294 |
| AU-INTEGRATION-R002 Control graph auto-creation and messaging intake propagation Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**Control graph auto-creation and messaging intake propagation.** The reserved __control__ graph is created automatically, or a typed error is returned, before the first WorkItem is processed on a fresh engine, rather than failing silently, and the messaging_intake_enabled setting is threaded through to InProcessBackend.apply so it actually takes effect. | Unit tests cover a fresh engine's first WorkItem against the control graph and confirm that toggling messaging_intake_enabled changes InProcessBackend.apply's behavior. | requirement | AU-INTEGRATION | LANDED | 46da005a6c4c |
| AU-INTEGRATION-R003 Reconcile previously tracked fixes against current main Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**Reconcile previously tracked fixes against current main.** AU's dependency, contract-generation and test-baseline fixes are verified as already present and tested at the current merged head rather than tracked as separate pending work, so no duplicate fix remains open against code that already carries it. | A source and test audit at the current merged head confirms each fix is present in code and covered by an existing test, with no separate pending fix left open for the same defect. | requirement | AU-INTEGRATION | LANDED | eabd68d558c0 |
| AU-INTEGRATION-R004 Remove the unintended nltk dependency from AU's lock Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**Remove the unintended nltk dependency from AU's lock.** AU's dependency lock does not pull in nltk indirectly for AU itself. Any nltk dependency is declared by the extra that actually needs it rather than leaking into AU's base lock. | A lockfile audit confirms no nltk entry appears outside the dependency set of the extra that declares it. | requirement | AU-INTEGRATION | VERIFIED | 5061f520d040 eabd68d558c0 tests/unit/release/test_lock_no_nltk.py:11 |
| AU-INTEGRATION-R005 Contract compatibility hook validates against a pinned artifact Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**Contract compatibility hook validates against a pinned artifact.** The epistemic-graph contract-compatibility hook validates AU's code against a pinned, published EG contract artifact, never by reading a sibling repository checkout from the local filesystem. | The hook runs correctly with no sibling repository present and still detects a deliberately introduced contract mismatch. | requirement | AU-INTEGRATION | LANDED | c15d278239d3 |
| AU-INTEGRATION-R006 epistemic-graph is a core AU dependency Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**epistemic-graph is a core AU dependency.** epistemic-graph[full] is declared as a core, always-installed AU dependency rather than an opt-in extra. | A dependency-manifest check confirms epistemic-graph[full] appears in AU's base dependency set with no extras flag required to install it. | requirement | AU-INTEGRATION | LANDED | eabd68d558c0 |
| AU-INTEGRATION-R007 Gold-set generation is synthetic, not manually labelled Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**Gold-set generation is synthetic, not manually labelled.** Gold-set generation for retrieval and evaluation work is produced synthetically by construction, consistent with evaluation requirement EG-DECISION-ENGINE-R053, and AU does not maintain a separate manual or human-labelling pipeline for this data. | An audit confirms the synthetic gold-set generator produces the required evaluation data and that no parallel manual-labelling process exists in AU. | requirement | AU-INTEGRATION | LANDED | e48977329379 |
| AU-INTEGRATION-R008 Regression baseline stays green with EG installed Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**Regression baseline stays green with EG installed.** AU's regression baseline, including tests for lazy configuration attribute resolution, shared-resource-lease fencing, Cypher session boundary handling, model-factory routing, the sessions gateway, and deployment-backend threading timeouts, passes with EG installed. | The full test baseline, including each of these specific tests, passes with EG installed. | requirement | AU-INTEGRATION | LANDED | ff819b4cc434 |
| AU-INTEGRATION-R009 Resolve expired liveness deferrals with recorded evidence Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**Resolve expired liveness deferrals with recorded evidence.** AU's liveness gate carries no expired deferral: unused modules such as api/sparql_server.py, protocols/dataflows.py and protocols/quant_agent.py are removed, the harness/memorydata deferral is resolved, and ecosystem/agent_manager_dashboard.py is wired to a live caller, each with evidence recorded against its deferral. | The liveness gate runs with zero expired deferrals, and each resolved item's deletion or live-wiring evidence is checked in. | requirement | AU-INTEGRATION | LANDED | c15d278239d3 |
| AU-INTEGRATION-R010 Kafka enqueue-only-proof contract runs and passes honestly Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**Kafka enqueue-only-proof contract runs and passes honestly.** The engine-owned Kafka enqueue-only-proof contract executes its build, unconstrained and constrained steps to completion without being short-circuited by an earlier failing tier, and AU reports its result as external dependency evidence rather than claiming it as AU-authored proof. | The constrained-parallelism gate runs end to end and all three Kafka steps complete with a zero exit code, visible in the run log. | requirement | AU-INTEGRATION | LANDED | 35fde39bdb9d |
| AU-INTEGRATION-R011 Prove disposability before pruning a branch checkout Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**Prove disposability before pruning a branch checkout.** Before a development branch or its local checkout is removed, its commits and any uncommitted changes must be shown to already exist in an accepted public branch, or recorded in an explicit recovery artifact; having zero commits ahead of main is not by itself proof that a checkout is disposable. | A checkout audit records, for each candidate removal, either its containment in an accepted branch or a retained recovery reference, before the checkout is deleted. | requirement | AU-INTEGRATION | LANDED | 79694ed969b6 |
| AU-INTEGRATION-R012 External-graph contract check follows relocated docs Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**External-graph contract check follows relocated docs.** AU's external-graph contract check keeps covering the two documents that moved out of AU by requiring an equivalent content-marker and environment-literal check exist in their new location, rather than silently covering zero documents once they move. | A test proves the relocated check fails against a deliberately broken input, and AU's own check inventory shows no orphaned entry for the moved documents. | requirement | AU-INTEGRATION | LANDED | 37eadb5dab34 |
| AU-INTEGRATION-R013 Privacy gate accepts canonical automation author identities Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**Privacy gate accepts canonical automation author identities.** AU's author-identity privacy gate accepts the exact canonical automation author identities, including the fully qualified Claude and Codex identities, as valid commit authors, instead of rejecting any author name that contains the bare word used inside those identities. | A test commits using each canonical identity string and confirms the gate accepts it, while an unrelated bare token, leaked credential, or private endpoint is still rejected. | requirement | AU-INTEGRATION | LANDED | 37eadb5dab34 |
| AU-INTEGRATION-R014 Benchmark query-serving improvements against the existing path Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**Benchmark query-serving improvements against the existing path.** Any proposed AI predicate-grouping, prompt or key-value reuse, or GPU-fairness improvement is measured against AU's existing typed query and model-serving path before integration, preserving tenant and purpose authorization gates, and is adopted only as an optimization inside that path rather than as a second independent query or storage authority. A component whose access control relies on a single shared token rather than a verified per-tenant, per-purpose identity does not meet the bar for integration. | A benchmark compares the candidate against the existing serving path on identical workloads, and an authorization test confirms tenant and purpose gates are enforced before any integration is accepted. | requirement | AU-INTEGRATION | LANDED | 35fde39bdb9d 64d317c9e385 |
| AU-INTEGRATION-R014.1 Remaining scope of AU-INTEGRATION-R014 (slice .1): Benchmark query-serving improvements against the existing path Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**Remaining scope of AU-INTEGRATION-R014 (slice .1): Benchmark query-serving improvements against the existing path.** Child slice of `AU-INTEGRATION-R014` (see tasks.md). | A benchmark compares the candidate against the existing serving path on identical workloads, and an authorization test confirms tenant and purpose gates are enforced before any integration is accepted | requirement | AU-INTEGRATION | LANDED | 64d317c9e385 |
| AU-INTEGRATION-R015 Remove the unused legacy ontology publisher surface Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**Remove the unused legacy ontology publisher surface.** AU removes the unused ontology_publisher module, the Fuseki/Stardog publish schedule token, the related vendor configuration, and the doctor, health and widget surfaces and documentation referencing them once no live caller exists, verified against a full module and catalog inventory. AU does not reintroduce a local named-graph publisher; if atomic named-graph publication is needed, the engine exposes the single method for it. | A caller and catalog census confirms zero remaining references to the removed publisher, schedule token, and related configuration, and the targeted test suite for the surrounding module continues to pass. | requirement | AU-INTEGRATION | LANDED | 23920f0ed817 acab91a1b198 |
| AU-INTEGRATION-R016 Published ontology-deletion commit matches its source patch Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**Published ontology-deletion commit matches its source patch.** The publicly published commit that deletes all local ontology files and local semantic-authority code is verifiably the same change, by patch content rather than only by message, as the corresponding source change it replaces, with both the focused and the expanded ontology overlay test suites passing at that commit. | A patch-identity comparison confirms the published commit's patch matches the source change, and both the focused and expanded overlay test suites pass. | requirement | AU-INTEGRATION | LANDED | 43197d7c65a3 |
| AU-INTEGRATION-R017 Published source history is an ancestor of main Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**Published source history is an ancestor of main.** AU's publicly published source history is fully contained within the ancestry of the local main branch, so public history is a strict subset of main rather than a divergent line. | A history-ancestry check confirms each published commit is reachable as an ancestor of local main. | requirement | AU-INTEGRATION | LANDED | 43197d7c65a3 |
| AU-INTEGRATION-R018 Public docs site passes the full documentation gate suite Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**Public docs site passes the full documentation gate suite.** AU's public documentation site matches the canonical README and theme, presents its home page in present tense, has zero orphan pages with full page-count parity against the site navigation, builds under strict MkDocs settings, and passes the current-only, privacy, accessibility, theme, workflow and version gates. | The documentation build and its current-only, privacy, accessibility, theme, workflow and version gates all run green against the published site, and a page-count and orphan-page check confirms full coverage. | requirement | AU-INTEGRATION | LANDED | 35fde39bdb9d 64d317c9e385 bf0a31f534e1 |
| AU-INTEGRATION-R018.1 Remaining scope of AU-INTEGRATION-R018 (slice .1): Public docs site passes the full documentation gate suite Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**Remaining scope of AU-INTEGRATION-R018 (slice .1): Public docs site passes the full documentation gate suite.** Child slice of `AU-INTEGRATION-R018` (see tasks.md). | The documentation build and its current-only, privacy, accessibility, theme, workflow and version gates all run green against the published site, and a page-count and orphan-page check confirms full coverage | requirement | AU-INTEGRATION | LANDED | 64d317c9e385 |
| AU-INTEGRATION-R019 Messaging direct turns use a configured budget and never discard an over-budget run Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**Messaging direct turns use a configured budget and never discard an over-budget run.** The direct/chat reply budget comes from `MESSAGING_DIRECT_REPLY_BUDGET_S` (default 60 s), not a literal. Direct turns stay interactive. When a messaging turn passes its budget, the run continues. Its final reply is sent once as a follow-up message to the same chat. The timeout text states that the reply follows. | Unit tests prove the setting sets the direct budget. A test proves an overrun returns the follow-up notice and delivers the late reply exactly once. | requirement | AU-INTEGRATION | VERIFIED | 003679966f78 42f6dada3749 f94a3c109517 tests/unit/messaging/test_direct_reply_budget.py:20 tests/unit/messaging/test_direct_reply_budget.py:30 tests/unit/messaging/test_direct_reply_budget.py:39 |
| AU-INTEGRATION-R020 Outbound chat text never carries the run envelope Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**Outbound chat text never carries the run envelope.** One helper turns a run result into outbound text. It accepts a dict or JSON string envelope and returns only `output`. The envelope key set is shared with the renderer. `run_summary` stays for logs and trace links. | A regression test feeds the exact leaked Telegram envelope and asserts only the answer text. A second test unwraps every key the renderer emits. | requirement | AU-INTEGRATION | VERIFIED | 42f6dada3749 6778d5dfd79b b1fd0469c010 tests/unit/messaging/test_run_envelope_unwrap.py:29 tests/unit/messaging/test_run_envelope_unwrap.py:36 tests/unit/messaging/test_run_envelope_unwrap.py:43 |
| AU-INTEGRATION-R021 An aggregate ask answers with its own rows, never a silent empty answer Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**An aggregate ask answers with its own rows, never a silent empty answer.** `nl_planner.nl_query` recognizes the engine's "without a governed node id" denial of a sql/sparql aggregate projection and steers its bounded retry to the cypher dialect, the one dialect the engine authorizes for an aggregate/grouped read. `EvidenceBundle.from_nl_query` folds a successful result's first rows into `answer_candidate`, not just a row count. An execution denial that exhausts every retry still surfaces through the `error` field; it never reports as an empty, successful-looking answer. | Unit tests cover a sql-denied aggregate self-correcting to a successful cypher aggregate, an exhausted retry surfacing its denial through `error`, and `EvidenceBundle.from_nl_query` mapping aggregate rows into `answer_candidate`. | requirement | AU-INTEGRATION | LANDED | 00220bc40313 671acde661a3 |
| AU-INTEGRATION-R022 The maintenance scheduler syncs every configured connector source on an interval Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**The maintenance scheduler syncs every configured connector source on an interval.** A recurring sweep enumerates the sources `sync_source` knows (its registry/dispatch table in `source_sync.py`), skips unconfigured ones exactly as the existing `_*_configured()` checks do, and dispatches `sync_source(engine, name, mode="delta")` for each configured one — not just the three hardcoded research-feed sources (rss/freshrss/arxiv). One source failing does not stop the others. | A test with a fake engine and a monkeypatched registry proves configured sources are dispatched, unconfigured ones are skipped, and one source raising does not stop the rest from running. | requirement | AU-INTEGRATION | VERIFIED | 0f6916669b59 7475a78b2fb3 tests/unit/core/test_connector_sync_sweep.py:19 tests/unit/core/test_connector_sync_sweep.py:63 |
| AU-INTEGRATION-R023 Native ChangeEnvelope mutations carry only the fields the engine contract allows Definition — AU-INTEGRATION / AU-INTEGRATION — AU integration and release reliabilityCanonical requirement and verification source**Native ChangeEnvelope mutations carry only the fields the engine contract allows.** The mutation dict `_native_mutation()` builds for `client.changes.apply()` in `envelope_ingest.py` contains only `epistemic_graph.client`'s closed mutation fields (`batch_id`, `graph`, `idempotency_key`, `operations`, `outbox`, plus the optional `placement_epoch`, `expected_graph_version`, `fencing_token`); `schema_version`, `context`, `tenant` and `created_at_ms` are never drafted into it, since the engine mints tenant, context and timing from the already-verified session rather than accepting them from the caller. | The mutation built through the real `_native_mutation()`/`ingest_envelope()` path has a key set that is a subset of `epistemic_graph.client._CHANGE_MUTATION_REQUIRED` / `_CHANGE_MUTATION_OPTIONAL` and passes that module's own `_closed_mapping` validator offline. | requirement | AU-INTEGRATION | VERIFIED | 6a43f914f823 tests/unit/knowledge_graph/ingestion/test_native_envelope_ingest.py:615 |
| AU-SEMANTIC AU-SEMANTIC — AU semantic client and generated contract | spec | None | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R001 OntologyLifecycle.set_active() fails closed, not a silent local fallback Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**OntologyLifecycle.set_active() fails closed, not a silent local fallback.** `OntologyLifecycle.set_active()` must not silently instantiate a local fallback implementation in place of the EG-served ontology lifecycle method; when that served method cannot be reached it fails closed instead of masking the condition. | A fault test forces the EG ontology-lifecycle method to be unavailable. It asserts `set_active()` raises rather than returning a local fallback instance. | requirement | AU-SEMANTIC | LANDED | 2648d0b28ad0 42f6dada3749 43197d7c65a3 |
| AU-SEMANTIC-R002 AU verifies domain-pack class names against EG's schema-class list Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**AU verifies domain-pack class names against EG's schema-class list.** AU resolves every domain-pack class and property reference through EG's served graph-schema-classes read. It refuses to use a reference to an unknown class. It does not only flag the reference as unverified. | A negative test that references an unknown class in a domain pack asserts AU refuses it. AU does not merely record it as unverified. | requirement | AU-SEMANTIC | VERIFIED | 0e5fc3801885 2648d0b28ad0 tests/unit/knowledge_graph/domain_packs/test_pack_loader.py:355 tests/unit/knowledge_graph/domain_packs/test_pack_loader.py:365 |
| AU-SEMANTIC-R003 AU's knowledge_graph shape files are published to the EG pack or removed Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**AU's knowledge_graph shape files are published to the EG pack or removed.** Every SHACL shape file under `knowledge_graph/shapes/` is either published into the EG-validated schema pack so EG applies it during validation, or deleted from AU together with the tests that reference it; AU holds no SHACL shape outside a published pack. | The previously skipped shape tests run and pass against EG-served validation, or are deleted along with the removed shape file. | requirement | AU-SEMANTIC | LANDED | 83a157bf120b |
| AU-SEMANTIC-R004 AU's remaining SHACL shape files move into EG-owned schema packs Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**AU's remaining SHACL shape files move into EG-owned schema packs.** AU's `knowledge_graph/shapes/*.ttl` files and `ontology/shapes/governance.shapes.ttl` are removed from AU and hosted only in EG-owned schema packs or sources. AU references each shape by IRI and performs no local SHACL parsing. | A forbidden-file census confirms the shape files are absent from AU and shape references resolve only through the EG-served contract. | requirement | AU-SEMANTIC | LANDED | 981194f50ab4 afe05ab38e0f |
| AU-SEMANTIC-R005 Ontology lifecycle, integrity and schema parsing become EG client calls Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Ontology lifecycle, integrity and schema parsing become EG client calls.** `knowledge_graph/ontology/lifecycle.py`, `ontology_integrity.py`, the pack/schema loaders (`domain_packs/pack_loader.py`, `models/schema_pack_loader.py`) and `extraction/extraction_schema.py` no longer parse or hash RDF/OWL/RDFS locally. Each becomes a typed call to the generated EG ontology-inspection client. | Generated-client conformance tests and a forbidden-import census confirm no local graph parsing remains in these modules. | requirement | AU-SEMANTIC | LANDED | 83a157bf120b |
| AU-SEMANTIC-R006 AU removes rdflib and submits typed payloads to EG instead Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**AU removes rdflib and submits typed payloads to EG instead.** AU's runtime modules that build RDF documents for validation, including the harness, workflow, SHACL, connector-certification, connector-manifest and team-sharing gates, submit typed request payloads to the generated EG client instead of constructing RDF graphs; the `rdflib` dependency and its extras are removed from AU. Split: size score above 6, more than 2 code roots named, each gate module has independent call sites and tests; children land one gate module at a time. | `tests/gates/test_epistemic_graph_schema_authority_cutover.py` statically forbids `rdflib`, `pyshacl`, `owlrl` and `owlready2` imports across AU runtime and test code. | requirement | AU-SEMANTIC | SPECIFIED | b8ef12acba3c |
| AU-SEMANTIC-R006.1 The harness gate submits a typed payload instead of an rdflib graph Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The harness gate submits a typed payload instead of an rdflib graph.** `agent_utilities/harness/harness_gate.py` no longer imports `rdflib`; it builds the EG `shacl_validate_ad_hoc` request from a typed payload (dict/dataclass of parsed fields) rather than an `rdflib.Graph()`. | A forbidden-import test over `harness_gate.py` fails on any `rdflib` import, and the gate's existing validation tests still pass against the typed payload path. | requirement | AU-SEMANTIC | LANDED | b8ef12acba3c |
| AU-SEMANTIC-R006.2 The workflow gate submits a typed payload instead of an rdflib graph Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The workflow gate submits a typed payload instead of an rdflib graph.** `agent_utilities/knowledge_graph/core/workflow_gate.py` no longer imports `rdflib`; it builds its EG validation request from a typed payload rather than an `rdflib.Graph()`. | A forbidden-import test over `workflow_gate.py` fails on any `rdflib` import, and the gate's existing tests still pass against the typed payload path. | requirement | AU-SEMANTIC | VERIFIED | eb94d8306a5b tests/unit/knowledge_graph/test_workflow_gate.py:201 tests/unit/knowledge_graph/test_workflow_gate.py:218 tests/unit/knowledge_graph/test_workflow_gate.py:236 |
| AU-SEMANTIC-R006.3 The SHACL pipeline gate and pack loader submit typed payloads instead of rdflib graphs Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The SHACL pipeline gate and pack loader submit typed payloads instead of rdflib graphs.** `agent_utilities/knowledge_graph/pipeline/phases/shacl_gate.py` and `agent_utilities/knowledge_graph/domain_packs/pack_loader.py` no longer import `rdflib`; each builds its EG request from a typed payload rather than an `rdflib.Graph()`. | A forbidden-import test over both modules fails on any `rdflib` import, and their existing tests still pass against the typed payload path. | requirement | AU-SEMANTIC | VERIFIED | f235aa252a91 tests/unit/knowledge_graph/pipeline/phases/test_shacl_gate_no_rdflib.py:22 tests/unit/knowledge_graph/pipeline/phases/test_shacl_gate_no_rdflib.py:51 tests/unit/knowledge_graph/pipeline/phases/test_shacl_gate_no_rdflib.py:76 |
| AU-SEMANTIC-R006.4 The connector-certification gate submits a typed payload instead of an rdflib graph Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The connector-certification gate submits a typed payload instead of an rdflib graph.** `agent_utilities/knowledge_graph/integrations/connector_certification.py` no longer imports `rdflib`; it builds its EG validation request from a typed payload rather than an `rdflib.Graph()`. | A forbidden-import test over `connector_certification.py` fails on any `rdflib` import, and the gate's existing tests still pass against the typed payload path. | requirement | AU-SEMANTIC | VERIFIED | 98efc7009d5f tests/unit/knowledge_graph/integrations/test_connector_certification_no_rdflib.py:17 tests/unit/knowledge_graph/integrations/test_connector_certification_no_rdflib.py:27 |
| AU-SEMANTIC-R006.5 The connector-manifest gate and generation scripts submit typed payloads instead of rdflib graphs Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The connector-manifest gate and generation scripts submit typed payloads instead of rdflib graphs.** `agent_utilities/knowledge_graph/ontology/connector_manifest_gate.py` and the `scripts/generate_connector_manifests.py`/`generate_native_connector_manifest.py`/`check_connector_capability_bundles.py`/`generate_connector_capability_bundles.py` scripts no longer import `rdflib`. Each builds its EG request from a typed payload rather than an `rdflib.Graph()`. | Rollup: closes when children R006.5.1 to R006.5.5 are all verified. The gate module is EG-dependent (canonical hash), the scripts are independent call sites. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R006.5.1 connector_manifest_gate.py submits typed payloads instead of an rdflib graph Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**connector_manifest_gate.py submits typed payloads instead of an rdflib graph.** `agent_utilities/knowledge_graph/ontology/connector_manifest_gate.py` no longer imports `rdflib`; `_compiled_manifest_graph` and the integrity hash use a typed payload. Depends on epistemic-graph: it must serve a canonical (URDNA2015-equivalent) ontology hash for a Turtle payload, because `ontology_integrity.canonical_hash` is the only rdflib consumer and has no engine-native replacement yet. | A forbidden-import test over `connector_manifest_gate.py` fails on any `rdflib` import, and its existing tests still pass against the typed payload path. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R006.5.2 generate_connector_manifests.py submits typed payloads instead of an rdflib graph Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**generate_connector_manifests.py submits typed payloads instead of an rdflib graph.** `scripts/generate_connector_manifests.py` no longer imports `rdflib`; its ontology class/property extraction and hashing consume typed payloads. Depends on epistemic-graph for the canonical ontology hash. | A forbidden-import test over `generate_connector_manifests.py` fails on any `rdflib` import, and its existing tests still pass against the typed payload path. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R006.5.3 generate_native_connector_manifest.py submits typed payloads instead of an rdflib graph Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**generate_native_connector_manifest.py submits typed payloads instead of an rdflib graph.** `scripts/generate_native_connector_manifest.py` no longer imports `rdflib`; its integrity digest uses the typed canonical-hash payload. Depends on epistemic-graph for the canonical ontology hash. | A forbidden-import test over `generate_native_connector_manifest.py` fails on any `rdflib` import, and its existing tests still pass against the typed payload path. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R006.5.4 check_connector_capability_bundles.py submits typed payloads instead of an rdflib graph Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**check_connector_capability_bundles.py submits typed payloads instead of an rdflib graph.** `scripts/check_connector_capability_bundles.py` no longer imports `rdflib`; the `sh:targetClass` check reads the shapes via a typed payload or the existing text extraction. | A forbidden-import test over `check_connector_capability_bundles.py` fails on any `rdflib` import, and its existing tests still pass against the typed payload path. | requirement | AU-SEMANTIC | VERIFIED | 4463e2ba37cc tests/unit/scripts/test_check_connector_capability_bundles_no_rdflib.py:25 tests/unit/scripts/test_check_connector_capability_bundles_no_rdflib.py:35 |
| AU-SEMANTIC-R006.5.5 generate_connector_capability_bundles.py submits typed payloads instead of an rdflib graph Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**generate_connector_capability_bundles.py submits typed payloads instead of an rdflib graph.** `scripts/generate_connector_capability_bundles.py` no longer imports `rdflib`; shapes parsing uses a typed payload or text extraction. | A forbidden-import test over `generate_connector_capability_bundles.py` fails on any `rdflib` import, and its existing tests still pass against the typed payload path. | requirement | AU-SEMANTIC | VERIFIED | fd044131b941 tests/unit/scripts/test_generate_connector_capability_bundles_no_rdflib.py:19 tests/unit/scripts/test_generate_connector_capability_bundles_no_rdflib.py:29 |
| AU-SEMANTIC-R006.6 The team-sharing gate, remaining ontology modules and `rdflib` dependency removal close R006 Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The team-sharing gate, remaining ontology modules and `rdflib` dependency removal close R006.** `agent_utilities/knowledge_graph/core/ontological_team_sharing.py`, `extraction/extraction_schema.py`, `observability/portfolio_intelligence.py`, `ontology/ontology_integrity.py` and `scripts/format_ttl.py`/`update_ontology_lock.py` no longer import `rdflib`, and the `rdflib` dependency and its extras are removed from AU's packaging metadata, closing `AU-SEMANTIC-R006`. | `tests/gates/test_epistemic_graph_schema_authority_cutover.py` statically forbids `rdflib`, `pyshacl`, `owlrl` and `owlready2` imports across AU runtime and test code, and passes with `rdflib` absent from AU's dependency metadata. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R007 AU tests drop pyshacl and assert through EG shape validation Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**AU tests drop pyshacl and assert through EG shape validation.** AU test files no longer import `pyshacl` or use an `importorskip('pyshacl')` guard that silently skips the assertion; every shape assertion runs against the EG-served `shacl_validate_ad_hoc` method or a committed validation path. | A forbidden-import census over AU tests fails on any `pyshacl` import, and the affected tests execute, rather than skip, against served EG validation. | requirement | AU-SEMANTIC | LANDED | 981194f50ab4 afe05ab38e0f |
| AU-SEMANTIC-R008 Reasoning-topology selection uses a served policy, not a local outcome store Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Reasoning-topology selection uses a served policy, not a local outcome store.** `agent_utilities/graph/reasoning/topology.py` selects a reasoning-graph topology, such as chain-of-thought or tree-of-thought, through a served, calibrated decision policy with explicit abstention rather than from its own self-reported outcome store; the local exponential-moving-average outcome store is deleted. Split producer-first: no served topology-decision-policy op exists yet to call; see `AU-SEMANTIC-R008.1`/`.2`. | `check_topology_authority.py` is extended to fail if topology selection reads from a local outcome store instead of the served decision policy. | requirement | AU-SEMANTIC | SPECIFIED | b8ef12acba3c |
| AU-SEMANTIC-R008.1 A typed topology decision-policy client contract fails closed while no served policy exists Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**A typed topology decision-policy client contract fails closed while no served policy exists.** `api/topology_decision_policy_client.py` declares the typed request/response shape (including an explicit abstention response) and `TopologyDecisionPolicyClient` Protocol `topology.py` will call once a served, calibrated decision policy is available, and `resolve_topology_decision_policy_client()` raises `TopologyDecisionPolicyUnavailableError` rather than falling back to the local EMA outcome store while no such policy is served. | A test confirms `resolve_topology_decision_policy_client()` raises with no served policy client installed, and that the Protocol/dataclasses have the declared shape including the abstention case. | requirement | AU-SEMANTIC | VERIFIED | b8ef12acba3c tests/unit/api/test_topology_decision_policy_client.py:16 tests/unit/api/test_topology_decision_policy_client.py:31 tests/unit/api/test_topology_decision_policy_client.py:40 tests/unit/api/test_topology_decision_policy_client.py:55 tests/unit/api/test_topology_decision_policy_client.py:66 |
| AU-SEMANTIC-R008.2 Topology selection consumes the served decision policy and the local outcome store is deleted Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Topology selection consumes the served decision policy and the local outcome store is deleted.** Once a served, calibrated topology decision policy is reachable, `topology.py`'s `record_topology_outcome`/selection path is wired to call `resolve_topology_decision_policy_client()` instead of writing the local exponential-moving-average outcome store, and the EMA store is deleted, closing `AU-SEMANTIC-R008`. | `check_topology_authority.py` is extended to fail if topology selection reads from a local outcome store instead of the served decision policy. | requirement | AU-SEMANTIC | SPECIFIED | b8ef12acba3c |
| AU-SEMANTIC-R008.2.2 `topology.py` calls the served decision-policy client instead of the local EMA store Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**`topology.py` calls the served decision-policy client instead of the local EMA store.** `record_topology_outcome()` in `agent_utilities/graph/reasoning/topology.py` is wired to call `resolve_topology_decision_policy_client()` for its outcome update and the selection path consumes the client's decision, rather than reading/writing the local EMA state. **BLOCKED (epistemic-graph):** the installed engine client has no `epistemic_graph.generated.reasoning_policy` module and no `ReasoningPolicyClient.select_topology` method (the served `select_topology` decision-policy op), so `resolve_topology_decision_policy_client()` fails closed with `TopologyDecisionPolicyUnavailableError`; wiring `topology.py` to it would make selection permanently unavailable. Unblock by landing the served `select_topology` op and regenerated client in epistemic-graph. | A test confirms `record_topology_outcome()` calls `resolve_topology_decision_policy_client()` and performs no local EMA read/write. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R008.2.3 The local EMA outcome-store code is deleted from `topology.py` Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The local EMA outcome-store code is deleted from `topology.py`.** Once `AU-SEMANTIC-R008.2.2` lands, the now-dead local exponential-moving-average state and its helper code are removed from `agent_utilities/graph/reasoning/topology.py`. | `check_topology_authority.py` passes with no local-outcome-store code present in `topology.py`. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R009 The local engine facade is deleted in favor of the generated EG client Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The local engine facade is deleted in favor of the generated EG client.** AU removes its local engine facade and orchestration modules, including `kg/core/engine.py` and its task, ingestion, memory, query, resolver, transport, lock and breaker companions, `kg/facade.py`, and `kg/orchestration/engine_*.py`, and reaches the equivalent functionality only through the generated EG client. Split producer-first: this requirement depends on EG's not-yet-shipped `runnable_skill_derivation` op (tracked by `EG-REPO-INGEST-R002`'s `skill_workflow_ingest` capability); see `AU-SEMANTIC-R009.1`/`.2`. | A caller-inventory and import census confirm every public entry point that used the deleted facade now resolves through the generated client with equivalent authorization and error semantics. | requirement | AU-SEMANTIC | LANDED | 703c3eb9d88d |
| AU-SEMANTIC-R009.1 A typed `runnable_skill_derivation` client contract fails closed while EG's op is absent Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**A typed `runnable_skill_derivation` client contract fails closed while EG's op is absent.** `api/skill_derivation_client.py` declares the typed request/response shape and `RunnableSkillDerivationClient` Protocol AU will call once EG's generated `SourceIngest` client exposes `runnable_skill_derivation` (producer: `EG-REPO-INGEST-R002`), and `resolve_runnable_skill_derivation_client()` raises `RunnableSkillDerivationUnavailableError` rather than deriving locally or returning a default while that op is absent. | A test confirms `resolve_runnable_skill_derivation_client()` raises with EG's generated client absent or lacking the op, and that the Protocol/dataclasses have the declared shape. | requirement | AU-SEMANTIC | LANDED | 4eac8c6dc419 |
| AU-SEMANTIC-R009.2 AU's engine-facade callers consume the shipped `runnable_skill_derivation` op Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**AU's engine-facade callers consume the shipped `runnable_skill_derivation` op.** Once `EG-REPO-INGEST-R002` ships `runnable_skill_derivation` on the generated `SourceIngest` client, `resolve_runnable_skill_derivation_client()` is wired to the real call, and the local engine-facade modules this requirement names are deleted, closing `AU-SEMANTIC-R009`. Split: wiring the real call and deleting the facade (`kg/core/engine.py` and its task/ingestion/memory/query/resolver/transport/lock/breaker companions, `kg/facade.py`, `kg/orchestration/engine_*.py`) are independent steps with more than 2 code roots in the deletion; see `AU-SEMANTIC-R009.2.1`/`.2.2`. | A caller-inventory and import census confirm every public entry point that used the deleted facade now resolves through the generated client with equivalent authorization and error semantics. | requirement | AU-SEMANTIC | LANDED | b8ef12acba3c |
| AU-SEMANTIC-R009.2.1 `resolve_runnable_skill_derivation_client()` wires the real call when EG's op is present Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**`resolve_runnable_skill_derivation_client()` wires the real call when EG's op is present.** `api/skill_derivation_client.py`'s resolver calls the installed generated `SourceIngestClient.runnable_skill_derivation` method and returns its typed response when the op is present on the installed client, continuing to raise `RunnableSkillDerivationUnavailableError` only while it is genuinely absent (import failure or missing attribute); it no longer refuses a detected, present op. | A test installs a fake generated client exposing `runnable_skill_derivation` and asserts the resolver returns a working client that delegates to it, while a test with the op absent still raises. | requirement | AU-SEMANTIC | VERIFIED | b8ef12acba3c tests/unit/api/test_skill_derivation_client.py:63 |
| AU-SEMANTIC-R009.2.2 The local engine-facade modules are deleted once callers consume the wired client Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The local engine-facade modules are deleted once callers consume the wired client.** `kg/core/engine.py` and its task, ingestion, memory, query, resolver, transport, lock and breaker companions, `kg/facade.py`, and `kg/orchestration/engine_*.py` are deleted, and every caller that used them is migrated to `resolve_runnable_skill_derivation_client()` or the generated EG client directly, closing `AU-SEMANTIC-R009.2` and `AU-SEMANTIC-R009`. | A caller-inventory and import census confirm every public entry point that used the deleted facade now resolves through the generated client with equivalent authorization and error semantics. | requirement | AU-SEMANTIC | LANDED | b8ef12acba3c |
| AU-SEMANTIC-R010 Graph-compute and session facades route through the generated EG client Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Graph-compute and session facades route through the generated EG client.** AU's graph-compute and session modules, including `kg/core/graph_compute.py`, `session.py`, `epistemic_row.py`, `ogm.py`, the `company_brain*` modules, and `core/registry/kg_adapter.py`, are replaced by calls into the generated EG client, with AU keeping exactly one typed composition of that client under `api/`. | Caller-parity tests confirm callers of the removed facades now use the single `api/` client composition with equivalent behavior. | requirement | AU-SEMANTIC | LANDED | 5d44f029d3fd |
| AU-SEMANTIC-R010.1 AU holds one typed composition of the generated EG client for graph-compute/session ops Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**AU holds one typed composition of the generated EG client for graph-compute/session ops.** AU defines `GraphComputeClient`/`GeneratedGraphComputeSurface` under `api/graph_compute_client.py` as the single typed model callers will compose against for the surface `kg/core/graph_compute.py`, `session.py`, `epistemic_row.py`, `ogm.py`, the `company_brain*` modules, and `core/registry/kg_adapter.py` currently serve locally; it holds no local graph-compute/session logic of its own. | A negative test confirms construction fails closed with `GraphComputeClientUnavailable` when the installed EG client is `None` or does not implement the required surface, and succeeds and delegates when it does. | requirement | AU-SEMANTIC | LANDED | 5d44f029d3fd |
| AU-SEMANTIC-R011 Durable jobs, queues and state move to EG Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Durable jobs, queues and state move to EG.** AU's durable-work modules, including `kg/core/work_durability.py` and its queue-backend, scheduler, drain, ingest-routing, event and bitemporal companions, its ingest/analytics worker entry points, `core/shared_resource_leases.py`, and `core/state_store.py`/`chat_persistence.py`, are replaced by calls to EG's served durable-job, capacity-lease and state methods; AU holds no durable queue or state authority of its own. | A restart/fault test confirms durable work and state survive through EG rather than a local store, and the removed worker scripts are absent. | requirement | AU-SEMANTIC | SPECIFIED | b881d5bca432 |
| AU-SEMANTIC-R011.2 Delete `agent_utilities/knowledge_graph/core/queue_backend.py` Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Delete `agent_utilities/knowledge_graph/core/queue_backend.py`.** The local queue-backend abstraction is removed and its importers switched to the EG-served durable-job path. | A forbidden-module census confirms `knowledge_graph/core/queue_backend.py` is absent and prior importers' tests pass against the EG path. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R011.3 Delete `agent_utilities/knowledge_graph/core/kafka_queue_backend.py` Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Delete `agent_utilities/knowledge_graph/core/kafka_queue_backend.py`.** The local Kafka queue-backend implementation is removed and its importers switched to the EG-served durable-job path. | A forbidden-module census confirms `knowledge_graph/core/kafka_queue_backend.py` is absent and prior importers' tests pass against the EG path. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R011.4 Delete `agent_utilities/knowledge_graph/core/postgres_queue_backend.py` Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Delete `agent_utilities/knowledge_graph/core/postgres_queue_backend.py`.** The local Postgres queue-backend implementation is removed and its importers switched to the EG-served durable-job path. | A forbidden-module census confirms `knowledge_graph/core/postgres_queue_backend.py` is absent and prior importers' tests pass against the EG path. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R011.5 Delete `agent_utilities/knowledge_graph/core/worker_scheduler.py` (rollup of R011.5.1 to R011.5.5) Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Delete `agent_utilities/knowledge_graph/core/worker_scheduler.py` (rollup of R011.5.1 to R011.5.5).** The local work-item scheduler companion is removed and its importers switched to the EG-served durable-job path. | A forbidden-module census confirms `knowledge_graph/core/worker_scheduler.py` is absent and prior importers' tests pass against the EG path. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R011.5.1 Repoint `engine_tasks.py` off the local worker scheduler Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Repoint `engine_tasks.py` off the local worker scheduler.** `knowledge_graph/core/engine_tasks.py` stops importing `WorkerRegistry`, `AdmissionPolicy`, `scheduler_config_from_env`, `resolve_engine_shard_writers` and `durable_shard_writers` from `worker_scheduler.py` (five import sites) and takes worker admission, lane floors and shard-writer width from EG's served durable-job and capacity-lease methods. | A census confirms ``engine_tasks.py`` no longer imports `knowledge_graph/core/worker_scheduler`, and its tests pass against the EG-served path. **BLOCKED on an epistemic-graph capability:** the installed client and EG origin/main serve only `SubmitWorkItem` admission and resource capacity leases (`_validate_capacity_lease_fences`); they serve no worker registry (`WorkerRegistry`), no reserved-worker fair admission decision (`AdmissionPolicy`), no scheduler config / lane-floor policy (`scheduler_config_from_env`) and no shard-writer width (`resolve_engine_shard_writers`, `durable_shard_writers`). EG must add those served methods before this row can be delivered. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R011.5.2 Repoint `ingest_routing.py` off the local worker scheduler Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Repoint `ingest_routing.py` off the local worker scheduler.** `knowledge_graph/core/ingest_routing.py` stops importing `durable_shard_writers` and reads the engine's shard-writer width from the EG-served path. | A census confirms ``ingest_routing.py`` no longer imports `knowledge_graph/core/worker_scheduler`, and its tests pass against the EG-served path. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R011.5.3 Repoint scheduler tests, part 1 Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Repoint scheduler tests, part 1.** `tests/unit/knowledge_graph/test_worker_scheduler.py` and `test_admission_policy_live_path.py` are deleted or rewritten against the EG-served admission path. | A census confirms `those tests` no longer imports `knowledge_graph/core/worker_scheduler`, and its tests pass against the EG-served path. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R011.5.4 Repoint scheduler tests, part 2 Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Repoint scheduler tests, part 2.** `test_ingest_graph_routing.py`, `test_ingest_tail_optimization.py`, `test_workitem_claim_metrics.py` and `tests/unit/mcp/test_graphos_bootstrap_isolation.py` stop patching or importing `worker_scheduler`. | A census confirms `those tests` no longer imports `knowledge_graph/core/worker_scheduler`, and its tests pass against the EG-served path. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R011.5.5 Delete the module once no importer remains Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Delete the module once no importer remains.** `knowledge_graph/core/worker_scheduler.py` is removed along with its entries in `docs/concepts.yaml`, `docs/architecture/*.md`, `scripts/constrained_parallelism_gate.sh` and the R020 duplicate inventory, and a `@pytest.mark.spec` deletion test binds the absence. | A forbidden-module census confirms `knowledge_graph/core/worker_scheduler.py` is absent and nothing under `agent_utilities/` or `scripts/` imports it. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R011.6 Delete `agent_utilities/knowledge_graph/core/chunked_drain.py` Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Delete `agent_utilities/knowledge_graph/core/chunked_drain.py`.** The local drain companion is removed and its importers switched to the EG-served durable-job path. | A forbidden-module census confirms `knowledge_graph/core/chunked_drain.py` is absent and prior importers' tests pass against the EG path. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R011.7 Delete `agent_utilities/knowledge_graph/core/ingest_routing.py` Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Delete `agent_utilities/knowledge_graph/core/ingest_routing.py`.** The local ingest-routing companion is removed and its importers switched to the EG-served durable-job path. | A forbidden-module census confirms `knowledge_graph/core/ingest_routing.py` is absent and prior importers' tests pass against the EG path. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R011.8 Delete `agent_utilities/knowledge_graph/core/bitemporal.py` (rollup of R011.8.1 to R011.8.5) Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Delete `agent_utilities/knowledge_graph/core/bitemporal.py` (rollup of R011.8.1 to R011.8.5).** The local bitemporal companion is removed once every importer is repointed to a served replacement. | A forbidden-module census confirms `knowledge_graph/core/bitemporal.py` is absent and nothing under `agent_utilities/` or `scripts/` imports it. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R011.8.1 Repoint `core/engine.py` off local bitemporal stamping Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Repoint `core/engine.py` off local bitemporal stamping.** `engine.py` stops importing `stamp_bitemporal` (two sites: node and relationship creation) and takes `storage_time`/`event_time`/`valid_from`/`valid_to` stamping from the EG-served write path. | A census confirms `engine.py` no longer imports `knowledge_graph/core/bitemporal`, and its tests pass against the served path. **BLOCKED on a served replacement:** the installed epistemic-graph client and EG origin/main serve no write-time bitemporal stamping (`stamp_bitemporal`); EG must add it before this row can be delivered, and the caller must not be made to fail closed in its place. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R011.8.2 Repoint `memory/learning_engine.py` off local bitemporal stamping Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Repoint `memory/learning_engine.py` off local bitemporal stamping.** `learning_engine.py` stops importing `stamp_bitemporal` (two sites) and gets edit-edge validity stamping from the EG-served write path. | A census confirms `learning_engine.py` no longer imports `knowledge_graph/core/bitemporal`, and its tests pass against the served path. **BLOCKED on a served replacement:** the installed epistemic-graph client and EG origin/main serve no write-time bitemporal stamping (`stamp_bitemporal`); EG must add it before this row can be delivered, and the caller must not be made to fail closed in its place. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R011.8.3 Repoint writeback and envelope ingest off source-validity stamping Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Repoint writeback and envelope ingest off source-validity stamping.** `enrichment/writeback/core.py` (`stamp_bitemporal`) and `ingestion/envelope_ingest.py` (`stamp_valid_from_source`, `stamp_valid_until_from_source`) stop importing the local module and take valid-from/valid-until stamping from the EG-served ingest path. | A census confirms those files no longer imports `knowledge_graph/core/bitemporal`, and its tests pass against the served path. **BLOCKED on a served replacement:** the installed epistemic-graph client and EG origin/main serve no source-reported valid-from/valid-until stamping (`stamp_valid_from_source`, `stamp_valid_until_from_source`); EG must add it before this row can be delivered, and the caller must not be made to fail closed in its place. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R011.8.4 Repoint `orchestration/engine_query.py` off local as-of filtering and supersession Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Repoint `orchestration/engine_query.py` off local as-of filtering and supersession.** `engine_query.py` stops importing `filter_as_of`, `resolve_precedence` and `supersede` and uses EG's served as-of read and supersession methods. | A census confirms `engine_query.py` no longer imports `knowledge_graph/core/bitemporal`, and its tests pass against the served path. **BLOCKED on a served replacement:** the installed epistemic-graph client and EG origin/main serve no as-of row filter (`filter_as_of`) or event-time contradiction precedence/supersession (`resolve_precedence`, `supersede`); EG must add it before this row can be delivered, and the caller must not be made to fail closed in its place. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R011.8.5 Delete the module once no importer remains Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Delete the module once no importer remains.** `knowledge_graph/core/bitemporal.py` is removed along with `tests/unit/knowledge_graph/test_kg_2_11_bitemporal.py` and its entry in `tests/gates/test_boundary_r018_r022_eg_duplicate_inventory.py`, and a `@pytest.mark.spec` deletion test binds the absence. | A forbidden-module census confirms `knowledge_graph/core/bitemporal.py` is absent and nothing under `agent_utilities/` or `scripts/` imports it. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R011.9 Delete `agent_utilities/knowledge_graph/ingest_worker.py` Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Delete `agent_utilities/knowledge_graph/ingest_worker.py`.** The local ingest-worker entry point is removed in favor of the EG-served durable-job path. | A forbidden-module census confirms `knowledge_graph/ingest_worker.py` is absent. | requirement | AU-SEMANTIC | VERIFIED | b02e3995039e tests/gates/test_semantic_r011_9_deleted.py:19 tests/gates/test_semantic_r011_9_deleted.py:29 tests/gates/test_semantic_r011_9_deleted.py:60 |
| AU-SEMANTIC-R011.10 Delete `agent_utilities/knowledge_graph/analytics_worker.py` Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Delete `agent_utilities/knowledge_graph/analytics_worker.py`.** The local analytics-worker entry point is removed in favor of the EG-served durable-job path. | A forbidden-module census confirms `knowledge_graph/analytics_worker.py` is absent. | requirement | AU-SEMANTIC | VERIFIED | 92974bae8c3e tests/gates/test_semantic_r011_10_deleted.py:33 tests/gates/test_semantic_r011_10_deleted.py:42 tests/gates/test_semantic_r011_10_deleted.py:62 |
| AU-SEMANTIC-R011.11 Delete `agent_utilities/core/shared_resource_leases.py` Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Delete `agent_utilities/core/shared_resource_leases.py`.** The local capacity-lease module is removed and its importers switched to EG's served capacity-lease methods. | A forbidden-module census confirms `core/shared_resource_leases.py` is absent and prior importers' tests pass against the EG path. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R011.12 Delete `agent_utilities/core/state_store.py` Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Delete `agent_utilities/core/state_store.py`.** The local state-store module is removed and its importers switched to EG's served state methods. | A forbidden-module census confirms `core/state_store.py` is absent and prior importers' tests pass against the EG path. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R011.13 Delete `agent_utilities/core/chat_persistence.py` Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Delete `agent_utilities/core/chat_persistence.py`.** The local chat-persistence module is removed and its importers switched to EG's served state methods. | A forbidden-module census confirms `core/chat_persistence.py` is absent and prior importers' tests pass against the EG path. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R012 Tenancy, topology and admission authority move to EG Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Tenancy, topology and admission authority move to EG.** AU's tenancy, shard-topology, cluster-discovery, scoped-read and admission modules, including `tenant_sharing.py`, `tenant_registry.py`, `tenant_engine_pool.py`, `shard_topology.py`, `cluster_discovery.py`, `placement_catalog.py`, `secured_reads.py`, `cypher_scoping.py`, `host_lock.py`, `file_lock.py`, the `security/*_rbac_admission` modules, `admission_authority.py`, `permissions_kernel.py` and `entitlements.py`, are replaced by calls to EG's served identity-RBAC-admission and graph-ACL-isolation capabilities. | Negative tenant-isolation and admission tests confirm access decisions are made by the served EG capability and fail closed when it is unavailable. | requirement | AU-SEMANTIC | LANDED | 8b325ddf1818 |
| AU-SEMANTIC-R013 Reasoning and analytics duplicates are deleted only with proven EG parity Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Reasoning and analytics duplicates are deleted only with proven EG parity.** AU's local reasoning and graph-analytics modules, including `formal_reasoning_core.py`, `graph_primitives.py`, `inference_engine.py`, `reasoner.py`, `semantic_subsumption.py`, the topological, spectral, synergy, analogy, hypergraph, blast-radius, natural-language-query, hydration, world-model, ownership-claim and fingerprint modules, and the `kg/maintenance`, `id_management`, `argumentation` and `actions` packages, are deleted only after each one has documented, per-method parity evidence against its EG-native replacement. Split: size score above 6, more than 2 code roots named; children land the typed migration-scope manifest first, then per-module parity reports and deletion one group at a time. | A per-method parity report pairs each deleted AU function with its EG-native replacement and a passing equivalence test before the deletion lands. | requirement | AU-SEMANTIC | VERIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R013.1 The AU-SEMANTIC-R013 core-reasoning migration scope is a typed, validated manifest Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The AU-SEMANTIC-R013 core-reasoning migration scope is a typed, validated manifest.** `agent_utilities/core/r013_migration_scope.py` enumerates the core reasoning modules (`formal_reasoning_core.py`, `graph_primitives.py`, `inference_engine.py`, `reasoner.py`, `semantic_subsumption.py`) in this first slice of the R013 migration scope as a typed tuple of repository-relative paths, with a validator that fails loud when a listed path is absent from the checkout, so the scope cannot silently drift from the requirement prose before the per-method parity reports and deletion children land. | `tests/unit/core/test_r013_migration_scope.py` asserts every listed path exists in the checkout and that the validator refuses (raises) on a manifest naming a missing path. | requirement | AU-SEMANTIC | VERIFIED | 1558cd9d0726 tests/unit/core/test_r013_migration_scope.py:17 tests/unit/core/test_r013_migration_scope.py:23 tests/unit/core/test_r013_migration_scope.py:28 |
| AU-SEMANTIC-R014 Ingestion commit and derivation logic moves to EG's SourceIngest Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Ingestion commit and derivation logic moves to EG's SourceIngest.** The EG-owned half of AU's ingestion pipeline, including envelope ingest, change envelope, evidence spine, semantic event model, object-centric derivation, process conformance, embedding admission, GPU slot scheduling, promotion, supersession, dead letter, hydration manifest, skill/workflow ingest and governed documentation, is removed from AU and performed by the generated `SourceIngest` method on EG; `kg/ingestion/engine.py` is dissolved rather than kept as a single module. | Caller-parity tests confirm ingestion commit and derivation reach the served `SourceIngest` method with no remaining AU authority over the deleted modules. | requirement | AU-SEMANTIC | LANDED | 743e98cda405 |
| AU-SEMANTIC-R015 Enterprise source sync becomes an SDK runner over EG SourceIngest Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Enterprise source sync becomes an SDK runner over EG SourceIngest.** `kg/core/source_sync.py` is replaced by an SDK-hosted runner that calls EG's `SourceIngest` method and EG-provided manifest presets. The related external-graph, GraphQL-connection, Debezium-envelope, event-log and OCEL adapters, `governance_import.py`, `ecosystem/ea_clients.py`, `data_prep/**`, and `core/connection_profiler.py`/`data_prep_runtime.py`/`source_resolver.py` move out of AU accordingly. Split producer-first: this requirement depends on EG's not-yet-shipped `workflow_derivation` op (tracked by `EG-REPO-INGEST-R002`'s `skill_workflow_ingest` capability). See `AU-SEMANTIC-R015.1`/`.2`. | Source-ingestion ACL/admission negative tests confirm a denied source fails closed through the SDK runner and served EG manifest. | requirement | AU-SEMANTIC | LANDED | 703c3eb9d88d |
| AU-SEMANTIC-R015.1 A typed `workflow_derivation` client contract fails closed while EG's op is absent Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**A typed `workflow_derivation` client contract fails closed while EG's op is absent.** `api/workflow_derivation_client.py` declares the typed request/response shape and `WorkflowDerivationClient` Protocol the SDK-hosted source-sync runner will call once EG's generated `SourceIngest` client exposes `workflow_derivation` (producer: `EG-REPO-INGEST-R002`), and `resolve_workflow_derivation_client()` raises `WorkflowDerivationUnavailableError` rather than deriving locally via `kg/core/source_sync.py` or returning a default while that op is absent. | A test confirms `resolve_workflow_derivation_client()` raises with EG's generated client absent or lacking the op, and that the Protocol/dataclasses have the declared shape. | requirement | AU-SEMANTIC | LANDED | 4eac8c6dc419 |
| AU-SEMANTIC-R015.2 The SDK-hosted source-sync runner consumes the shipped `workflow_derivation` op Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The SDK-hosted source-sync runner consumes the shipped `workflow_derivation` op.** Once `EG-REPO-INGEST-R002` ships `workflow_derivation` on the generated `SourceIngest` client, `resolve_workflow_derivation_client()` is wired to the real call and `kg/core/source_sync.py` and its listed adapters are removed from AU, closing `AU-SEMANTIC-R015`. Split producer-first: this requirement depends on EG's not-yet-shipped `workflow_derivation` op; `AU-SEMANTIC-R015.2.1` ships the typed migration-scope manifest the later cutover-and-deletion child builds against once the producer op ships. | Source-ingestion ACL/admission negative tests confirm a denied source fails closed through the SDK runner and served EG manifest. | requirement | AU-SEMANTIC | VERIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R015.2.1 The AU-SEMANTIC-R015.2 migration scope is a typed, validated manifest Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The AU-SEMANTIC-R015.2 migration scope is a typed, validated manifest.** `agent_utilities/core/r015_2_migration_scope.py` enumerates `kg/core/source_sync.py` and its named adapters (`governance_import.py`, `ecosystem/ea_clients.py`, `connection_profiler.py`, `data_prep_runtime.py`, `source_resolver.py`) as a typed tuple of repository-relative paths, with a validator that fails loud when a listed path is absent from the checkout, so the scope cannot silently drift from the requirement prose before the EG-producer-blocked cutover and deletion land. | `tests/unit/core/test_r015_2_migration_scope.py` asserts every listed path exists in the checkout and that the validator refuses (raises) on a manifest naming a missing path. | requirement | AU-SEMANTIC | VERIFIED | 1558cd9d0726 tests/unit/core/test_r015_2_migration_scope.py:17 tests/unit/core/test_r015_2_migration_scope.py:23 tests/unit/core/test_r015_2_migration_scope.py:28 |
| AU-SEMANTIC-R016 Document, session and feed source ingestion moves to the SDK Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Document, session and feed source ingestion moves to the SDK.** AU's document, repository, feed and conversation-ingestion modules, including its hosted-repository indexer, `conversation_ingestion.py`, `kg/ingestion/web_fetch.py`/`package_install_ingest.py`/`repo_*`, the top-level `ingestion/**`, `automation/worldmodel_pipeline.py`/`feed_sources.py`/`file_watcher.py`, `sdd/watcher.py`, the non-model-backed half of `kg/kb/**`, `kg/extraction/readers*`/`pdf`, and `ecosystem/media/**`, move to the connector SDK. Split: size score above 6, more than 2 code roots named, and cross-repo (AU → connector SDK). Children land producer (SDK) first, then the AU importer switch and deletion; `AU-SEMANTIC-R016.1` ships the AU-side typed migration-scope manifest the later children build against. | Caller-parity tests confirm document, session and feed ingestion reach the SDK connector path with equivalent behavior after the AU modules are removed. | requirement | AU-SEMANTIC | LANDED | 76d440ff79dc |
| AU-SEMANTIC-R016.1 The AU-SEMANTIC-R016 migration scope is a typed, validated manifest Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The AU-SEMANTIC-R016 migration scope is a typed, validated manifest.** `agent_utilities/core/r016_migration_scope.py` enumerates the AU modules in the R016 migration scope as a typed tuple of repository-relative paths, with a validator that fails loud when a listed path is absent from the checkout, so the scope cannot silently drift from the requirement prose before the SDK copy and AU deletion children land. | `tests/unit/core/test_r016_migration_scope.py` asserts every listed path exists in the checkout and that the validator refuses (raises) on a manifest naming a missing path. | requirement | AU-SEMANTIC | LANDED | 117359dabc9a 1558cd9d0726 76d440ff79dc |
| AU-SEMANTIC-R017 Vendor enrichment extraction and writeback move to the SDK and EG Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Vendor enrichment extraction and writeback move to the SDK and EG.** AU's vendor-enrichment extractors under `kg/enrichment/extractors/**` become SDK manifest presets and adapters, its writeback logic under `kg/enrichment/writeback/**` moves behind the SDK `writeback/` module and EG's served `WriteBack` method, and `enrichment/git_history.py`/`source_adapters.py` move into the SDK's repository adapter. | Caller-parity and generated-contract tests confirm enrichment and writeback calls reach the SDK/EG path with no remaining AU-local writeback authority. | requirement | AU-SEMANTIC | LANDED | 2e5c8d7f2d8b |
| AU-SEMANTIC-R018 Deterministic derivation modules move to EG Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Deterministic derivation modules move to EG.** AU's deterministic derivation modules, including `kg/enrichment/semantic.py`/`relation_projection.py`/`materialize.py`/`git_coupling.py`/`graph_collapse.py`/`provenance.py`, `kg/assimilation/**`, `kg/etl/**`, `kg/streams/**`, and the time-series portion of `kg/memory/**`, are removed from AU and performed by EG. Split: size score above 6, more than 2 code roots named. `AU-SEMANTIC-R018.1` ships the typed migration-scope manifest for the named `kg/enrichment` modules the later deletion and forbidden-module-census children build against. | Caller-parity tests and a forbidden-module census confirm the deleted paths resolve only through the served EG derivation methods. | requirement | AU-SEMANTIC | VERIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R018.1 The AU-SEMANTIC-R018 enrichment migration scope is a typed, validated manifest Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The AU-SEMANTIC-R018 enrichment migration scope is a typed, validated manifest.** `agent_utilities/core/r018_migration_scope.py` enumerates the named `kg/enrichment` derivation modules (`semantic.py`, `relation_projection.py`, `materialize.py`, `git_coupling.py`, `graph_collapse.py`, `provenance.py`) in this first slice of the R018 migration scope as a typed tuple of repository-relative paths, with a validator that fails loud when a listed path is absent from the checkout, so the scope cannot silently drift from the requirement prose before the `kg/assimilation`/`kg/etl`/`kg/streams` children, deletion, and forbidden-module census land. | `tests/unit/core/test_r018_migration_scope.py` asserts every listed path exists in the checkout and that the validator refuses (raises) on a manifest naming a missing path. | requirement | AU-SEMANTIC | VERIFIED | 1558cd9d0726 tests/unit/core/test_r018_migration_scope.py:17 tests/unit/core/test_r018_migration_scope.py:23 tests/unit/core/test_r018_migration_scope.py:28 |
| AU-SEMANTIC-R019 Remaining EG-bound standardization, infra and governance modules move out Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Remaining EG-bound standardization, infra and governance modules move out.** AU's remaining EG-bound modules, including `kg/standardization/**` excluding drift detection, `kg/infra/**`, `kg/quantum/**`, `kg/security/**`, `protocols/enterprise/**`, the `ecosystem/ard_*` modules, `observability/trace_ontology.py`/`self_ingest.py`/`audit_logger.py`, `governance/relational_authority.py`, and `research/placement_mining.py`, are removed from AU and their function is performed by EG. | A forbidden-module census and caller-parity tests confirm these modules are absent from AU and equivalent behavior is served by EG. | requirement | AU-SEMANTIC | SPECIFIED | 2e5c8d7f2d8b |
| AU-SEMANTIC-R019.2 Delete `agent_utilities/observability/trace_ontology.py` Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Delete `agent_utilities/observability/trace_ontology.py`.** The local trace-ontology module (including `TraceCursor`/`load_trace_cursor`) is removed and its importers switched to EG's served equivalent. | A forbidden-module census confirms `observability/trace_ontology.py` is absent and prior importers' tests pass against the EG path. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R019.3 Delete `agent_utilities/observability/self_ingest.py` Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Delete `agent_utilities/observability/self_ingest.py`.** The local self-ingest module is removed and its importers switched to EG's served equivalent. Split: four production importers (`__main__.py`, `gateway/daemon.py`, `orchestration/engine.py`, `observability/__init__.py`) and two test files (`tests/unit/test_self_ingest.py`, `tests/gates/test_r028x_module_census.py`) need log-handler install and `emit_run_trace` behaviour that has no served EG replacement yet. Each importer is repointed in its own child before the module is deleted. See `AU-SEMANTIC-R019.3.1` to `.5`. | A forbidden-module census confirms `observability/self_ingest.py` is absent and prior importers' tests pass against the EG path. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R019.3.1 `__main__.py` installs self-ingest logging through the EG-served client Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**`__main__.py` installs self-ingest logging through the EG-served client.** `agent_utilities/__main__.py`'s `install_self_ingest_logging` call is repointed; the missing replacement is an EG-served OTLP log and RunTrace ingestion client (a generated `SelfIngest`/telemetry-ingest op on the EG client or SDK), which no served EG surface provides today, so this caller must be repointed to it once it ships and must not be stubbed or made to fail closed. | A test asserts `agent_utilities/__main__.py` does not import `observability.self_ingest`. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R019.3.2 `gateway/daemon.py` installs self-ingest logging through the EG-served client Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**`gateway/daemon.py` installs self-ingest logging through the EG-served client.** `agent_utilities/gateway/daemon.py`'s `install_self_ingest_logging` call is repointed; the missing replacement is an EG-served OTLP log and RunTrace ingestion client (a generated `SelfIngest`/telemetry-ingest op on the EG client or SDK), which no served EG surface provides today, so this caller must be repointed to it once it ships and must not be stubbed or made to fail closed. | A test asserts `gateway/daemon.py` does not import `observability.self_ingest`. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R019.3.3 `orchestration/engine.py` exports run traces through the EG-served client Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**`orchestration/engine.py` exports run traces through the EG-served client.** `_export_self_ingest_run_trace`'s `emit_run_trace` call is repointed; the missing replacement is an EG-served OTLP log and RunTrace ingestion client (a generated `SelfIngest`/telemetry-ingest op on the EG client or SDK), which no served EG surface provides today, so this caller must be repointed to it once it ships and must not be stubbed or made to fail closed. | A test asserts `orchestration/engine.py` does not import `observability.self_ingest`. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R019.3.4 `observability/__init__.py` no longer re-exports the self-ingest sink API Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**`observability/__init__.py` no longer re-exports the self-ingest sink API.** The `from .self_ingest import ...` block and the matching `__all__` entries are removed after every consumer of those names is repointed; the missing replacement is an EG-served OTLP log and RunTrace ingestion client (a generated `SelfIngest`/telemetry-ingest op on the EG client or SDK), which no served EG surface provides today, so this caller must be repointed to it once it ships and must not be stubbed or made to fail closed. | A test asserts `observability/__init__.py` does not import `self_ingest`. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R019.3.5 `observability/self_ingest.py` is deleted Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**`observability/self_ingest.py` is deleted.** With no importer left after `AU-SEMANTIC-R019.3.1` to `.4`, the module, `tests/unit/test_self_ingest.py`, its entries in `tests/gates/test_r028x_module_census.py`, and its `docs/concepts.yaml` references are removed. | A forbidden-module census confirms `observability/self_ingest.py` is absent and nothing under `agent_utilities/` or `scripts/` imports it. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R019.4 Delete `agent_utilities/observability/audit_logger.py` Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Delete `agent_utilities/observability/audit_logger.py`.** The local audit-logger module is removed and its importers switched to EG's served equivalent. | A forbidden-module census confirms `observability/audit_logger.py` is absent and prior importers' tests pass against the EG path. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R019.5 Delete `agent_utilities/governance/relational_authority.py` Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Delete `agent_utilities/governance/relational_authority.py`.** The local relational-authority module is removed and its importers switched to EG's served equivalent. | A forbidden-module census confirms `governance/relational_authority.py` is absent and prior importers' tests pass against the EG path. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R019.6 Delete `agent_utilities/knowledge_graph/research/placement_mining.py` Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Delete `agent_utilities/knowledge_graph/research/placement_mining.py`.** The local placement-mining module is removed and its importers switched to EG's served equivalent. Split: three production importer surfaces (`core/engine_tasks.py`, `research/loop_controller.py`, `mcp/tools/state_tools.py`) plus the generated action manifests, the `PLACEMENT_CONTROL_LOOP_ENABLED` flag and five test files have no EG replacement to repoint to, so each surface is removed in its own child before the module itself is deleted; see `AU-SEMANTIC-R019.6.1` to `.4`. | A forbidden-module census confirms `knowledge_graph/research/placement_mining.py` is absent and prior importers' tests pass against the EG path. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R019.6.1 The reactive placement-mining tick is removed from the engine scheduler Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The reactive placement-mining tick is removed from the engine scheduler.** `_placement_mining_subscription`/`_tick_placement_mining_reactive` and the `placement_mining_reactive` maintenance job registration in `knowledge_graph/core/engine_tasks.py`, and its job-name entry in `core/schedule_engine.py`, are removed along with `tests/unit/graph/test_engine_subscription_reactive.py`'s placement-mining case and the related `test_concept_matcher.py` note. | A test asserts `engine_tasks.py` and `schedule_engine.py` contain no `placement_mining` reference and the engine's scheduled-job set no longer lists `placement_mining_reactive`. | requirement | AU-SEMANTIC | VERIFIED | 6b889c64f003 tests/gates/test_au_semantic_r019_6_1_tick_removed.py:18 tests/gates/test_au_semantic_r019_6_1_tick_removed.py:24 |
| AU-SEMANTIC-R019.6.2 The `placement_control` stage and its setting are removed from the loop controller and config Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The `placement_control` stage and its setting are removed from the loop controller and config.** Split: the setting is referenced by seven files (`research/loop_controller.py`, `core/config.py`, `research/placement_mining.py` and the tests `test_loop_controller.py`, `test_config.py`, `test_config_generator.py`, `test_placement_mining.py`), more than one bite-sized change; see `AU-SEMANTIC-R019.6.2.1` and `.2`. | A test asserts a loop cycle report has no `placement_control` key and `config` has no `placement_control_loop_enabled` field. | requirement | AU-SEMANTIC | VERIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R019.6.2.1 The `placement_control` stage is removed from the loop controller Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The `placement_control` stage is removed from the loop controller.** The `placement_control` report key, its `stage(...)` call and docstring mentions in `knowledge_graph/research/loop_controller.py` are removed, with `test_run_one_cycle_placement_control_uses_typed_opt_in` in `tests/unit/knowledge_graph/test_loop_controller.py`. | A test asserts a `run_one_cycle` report has no `placement_control` key. | requirement | AU-SEMANTIC | VERIFIED | 8e7d9986a683 tests/unit/knowledge_graph/test_loop_controller.py:590 |
| AU-SEMANTIC-R019.6.2.2 The `placement_control_loop_enabled` setting is removed from config Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The `placement_control_loop_enabled` setting is removed from config.** The field in `core/config.py`, its opt-in read in `placement_control_loop` (`research/placement_mining.py`, which then requires an explicit `enabled`), `tests/unit/core/test_config.py`'s typed-opt-in test, `test_config_reference_exposes_placement_control_opt_in` in `tests/unit/deployment/test_config_generator.py` and the config monkeypatches in `tests/unit/knowledge_graph/test_placement_mining.py` are removed or updated. Depends on `AU-SEMANTIC-R019.6.2.1`. | A test asserts `AgentConfig` has no `placement_control_loop_enabled` field. | requirement | AU-SEMANTIC | VERIFIED | bb4178637fc9 tests/unit/core/test_config.py:20 |
| AU-SEMANTIC-R019.6.3 The `graph_loops` `placement_control` action is removed Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The `graph_loops` `placement_control` action is removed.** Split: removing the action changes `mcp/tools/state_tools.py` and three generated artifacts (`mcp/_graphos_action_manifest.py`, `docs/capabilities-power.json`/`.md`, `knowledge_graph/retrieval/capabilities-power.json`), and the generators (`scripts/gen_graphos_manifest.py`, `scripts/gen_capability_power.py`) only reproduce the committed manifests in an environment that has the full engine tool surface installed (a bare worktree venv drops the `engine_*` tools and rewrites unrelated entries); see `AU-SEMANTIC-R019.6.3.1` and `.2`. | A test asserts the `graph_loops` action list and generated manifests no longer name `placement_control`. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R019.6.3.1 The `placement_control` action and its parameters are removed from `graph_loops` Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The `placement_control` action and its parameters are removed from `graph_loops`.** `_loops_placement_control_action`, its dispatch entry, the action-list description text, the `placement_scan_limit`/`placement_canary_tolerance` fields of `_LoopsParams` and the tool signature, and their pass-through, are removed from `mcp/tools/state_tools.py`. | A test asserts `mcp/tools/state_tools.py` contains no `placement_control`, `placement_scan_limit` or `placement_canary_tolerance`. | requirement | AU-SEMANTIC | VERIFIED | e21a74412b1b tests/unit/mcp/test_graph_loops_placement_removed.py:12 |
| AU-SEMANTIC-R019.6.3.2 The generated manifests are regenerated without `placement_control` Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The generated manifests are regenerated without `placement_control`.** Run `scripts/gen_graphos_manifest.py` and `scripts/gen_capability_power.py --write` in an environment with the full tool surface (engine tools present) so only the `graph_loops_placement_control` entry and the `placement_control` parameter text change in `mcp/_graphos_action_manifest.py`, `docs/capabilities-power.json`/`.md` and `knowledge_graph/retrieval/capabilities-power.json`. Depends on `AU-SEMANTIC-R019.6.3.1`. | A test asserts the action manifest and the three capability catalogs name no `placement_control`. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R019.6.4 `knowledge_graph/research/placement_mining.py` is deleted Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**`knowledge_graph/research/placement_mining.py` is deleted.** With no importer left after `AU-SEMANTIC-R019.6.1` to `.3`, the module, `tests/unit/knowledge_graph/test_placement_mining.py` and its entries in `tests/gates/test_r028x_module_census.py` and `tests/unit/observability/test_trace_ontology.py` are removed. | A forbidden-module census confirms `knowledge_graph/research/placement_mining.py` is absent and nothing under `agent_utilities/` or `scripts/` imports it. | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R020 The ontology object model moves to EG Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The ontology object model moves to EG.** AU's ontology object-model modules under `kg/ontology/**`, including `object_set`, `property_types`, `derived_properties`, `links`, `functions/**`, `edits/**`, `indexing/**`, `classification_claims`, `permissioning*`, `document_processing`, `schema_graph`, `ops_causal_crosswalk`, `repository_provenance`, `style_lint`, the `*_objects` modules and `object_path`, move to EG, apart from the files retained for the AU-SEMANTIC-R021 emitter cut and the SDK manifest files; `sync_conflict` and `leanix_metamodel` move to the SDK instead. Split: size score above 6, more than 2 code roots named. Children land the typed migration-scope manifest first, then the EG copy and the AU importer switch and deletion; `AU-SEMANTIC-R020.1` ships the AU-side migration-scope manifest. | A forbidden-module census and generated-client conformance tests confirm the ontology object model resolves through EG with AU retaining no local authority. | requirement | AU-SEMANTIC | VERIFIED | 5a201ecff633 |
| AU-SEMANTIC-R020.1 The AU-SEMANTIC-R020 migration scope is a typed, validated manifest Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The AU-SEMANTIC-R020 migration scope is a typed, validated manifest.** `agent_utilities/core/r020_migration_scope.py` enumerates the AU ontology object-model modules in the R020 migration scope (excluding the AU-SEMANTIC-R021 emitter-cut files, the SDK manifest files, and `sync_conflict`/`leanix_metamodel`) as a typed tuple of repository-relative paths, with a validator that fails loud when a listed path is absent from the checkout, so the scope cannot silently drift from the requirement prose before the EG copy and deletion children land. | `tests/unit/core/test_r020_migration_scope.py` asserts every listed path exists in the checkout and that the validator refuses (raises) on a manifest naming a missing path. | requirement | AU-SEMANTIC | VERIFIED | 5a201ecff633 tests/unit/core/test_r020_migration_scope.py:17 tests/unit/core/test_r020_migration_scope.py:23 tests/unit/core/test_r020_migration_scope.py:28 |
| AU-SEMANTIC-R021 AU's hand-written RDF/OWL/SHACL emitters move behind EG pack compilation Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**AU's hand-written RDF/OWL/SHACL emitters move behind EG pack compilation.** AU's hand-written ontology emitters (`ontology/value_types.py`/`interfaces.py`/`manifest_compiler.py`/`leanix_metamodel.py`), `extraction/schema_discovery.py`, `core/ontology_publisher.py`, `scripts/scaffold_ontology_leg.py`, and the declared-semantic-validation step in connector certification are removed; AU keeps only typed declarations, and connector-manifest-to-ontology compilation runs as EG pack compilation. | A forbidden-import census and a generated-contract test confirm AU emits no RDF/OWL/SHACL text and that manifest compilation succeeds through the EG pack-compilation path. | requirement | AU-SEMANTIC | LANDED | 2e5c8d7f2d8b 5a201ecff633 9f04ed59f946 |
| AU-SEMANTIC-R021.1 `core/ontology_publisher.py` is removed Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**`core/ontology_publisher.py` is removed.** AU's `core/ontology_publisher.py` RDF/OWL/SHACL publisher, and its one caller in `setup/database_environment.py`, are removed; AU emits no RDF/OWL/SHACL text from this module. | A forbidden-import census confirms `core/ontology_publisher.py` is absent from AU and nothing imports it. | requirement | AU-SEMANTIC | LANDED | 023174b91e2e |
| AU-SEMANTIC-R021.2 `extraction/schema_discovery.py` moves behind EG pack compilation Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**`extraction/schema_discovery.py` moves behind EG pack compilation.** AU's `extraction/schema_discovery.py` hand-written schema-discovery emitter is removed; connector-manifest-to-ontology compilation runs as EG pack compilation instead. | A forbidden-import census and a generated-contract test confirm `extraction/schema_discovery.py` is absent and manifest compilation succeeds through the EG pack-compilation path. | requirement | AU-SEMANTIC | LANDED | 690785a51851 |
| AU-SEMANTIC-R021.3 The `ontology/` hand-written emitters move behind EG pack compilation Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The `ontology/` hand-written emitters move behind EG pack compilation.** AU's `ontology/value_types.py`, `interfaces.py`, `manifest_compiler.py` and `leanix_metamodel.py` hand-written RDF/OWL/SHACL emitters are removed; AU keeps only typed declarations. | A forbidden-import census confirms these four modules are absent from AU and connector certification's declared-semantic-validation step runs through EG pack compilation instead. | requirement | AU-SEMANTIC | LANDED | 472e6ab23472 |
| AU-SEMANTIC-R021.4 `scripts/scaffold_ontology_leg.py` and its connector-certification step are removed Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**`scripts/scaffold_ontology_leg.py` and its connector-certification step are removed.** AU's `scripts/scaffold_ontology_leg.py` scaffolding script and the declared-semantic-validation step in connector certification that calls it are removed. | A forbidden-import census confirms the script and its certification step are absent from AU. | requirement | AU-SEMANTIC | LANDED | 023174b91e2e 690785a51851 |
| AU-SEMANTIC-R022 Graph-schema DTOs become EG-generated types Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Graph-schema DTOs become EG-generated types.** AU's hand-maintained graph-schema models, including `models/knowledge_graph.py`/`schema_definition.py`/`evidence_bundle.py`/`knowledge_pack.py`/`codemap.py`/`graph.py`/`knowledge_base.py`, `models/schema_pack*`, and `models/schema_packs/**`, are replaced by EG-generated types, followed by `kg/domain_packs/**` once AU-SEMANTIC-R005 has removed `pack_loader`. | Model-level unit tests assert callers use the EG-generated DTOs, and a duplicate-type census finds no second hand-written definition. | requirement | AU-SEMANTIC | LANDED | c23e42b6ed43 |
| AU-SEMANTIC-R022.1 Typed composition of the generated graph-schema DTO surface Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Typed composition of the generated graph-schema DTO surface.** `api/graph_schema_types.py` adds `GraphSchemaTypes`, the one typed composition callers of `models/knowledge_graph.py`/`schema_definition.py`/`evidence_bundle.py` will build EG-generated DTO instances through, failing closed with `GraphSchemaTypesUnavailable` when the installed EG client is `None` or missing the required constructor surface. | A unit test asserts `GraphSchemaTypes.for_client` refuses a missing/partial EG client and delegates DTO construction when the surface is present; call-site migrations are separate `.2`+ children. | requirement | AU-SEMANTIC | LANDED | da51647a7383 |
| AU-SEMANTIC-R023 Legacy SPARQL backend and setup modules are deleted Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Legacy SPARQL backend and setup modules are deleted.** AU deletes `kg/backends/sparql/**`, `kg/setup/**` including its database-setup script, and `kg/integrations/stardog_sync.py`/`sparql_ingestor.py`, since these address only already-legacy external SPARQL stores that are out of scope for the federation covered by AU-SEMANTIC-R024. | A file census confirms the listed modules and script are absent from AU. | requirement | AU-SEMANTIC | LANDED | a05257fb6541 |
| AU-SEMANTIC-R024 External graph and database backends move into EG as federation sources Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**External graph and database backends move into EG as federation sources.** AU's remaining external graph/database backend modules, including `fanout_backend`, `postgresql_backend`, `cypher_transpiler`, `age_backend`, `contrib/**`, `mirror_target`, `outbox`, `brain_guarded_backend`, `trino_backend` and `spark_jobs`, covering Postgres/AGE, Neo4j, FalkorDB, the fan-out mirror, Trino and Spark, move into EG as federation and mirror targets; none of them are deleted outright. | Caller-parity tests and a forbidden-module census confirm each backend resolves through the EG federation path with equivalent behavior. | requirement | AU-SEMANTIC | LANDED | 274d4c375294 |
| AU-SEMANTIC-R025 Retrieval and neural-search engines move to EG Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Retrieval and neural-search engines move to EG.** AU's retrieval and neural-search modules, including the hybrid, semantic, reranking, hierarchical-document, memory, code-context, lineage and autocut retrievers under `kg/retrieval/**`, `kg/neural/**`, and the OpenSearch change-data-capture indexer in `kg/search/**`, move to EG; AU retains only context compilation and the capability index. | Tenant-scoped served-read tests confirm retrieval resolves through EG with AU keeping no local retrieval authority beyond context compilation. | requirement | AU-SEMANTIC | LANDED | c23e42b6ed43 |
| AU-SEMANTIC-R025.1 Typed composition of the generated EG retrieval surface Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Typed composition of the generated EG retrieval surface.** `api/retrieval_client.py` adds `RetrievalClient`, the one typed composition AU's retained context-compilation call sites will route hybrid/semantic/rerank retrieval through, failing closed with `RetrievalClientUnavailable` when the installed EG client is `None` or missing the required surface. | A unit test asserts `RetrievalClient.for_client` refuses a missing/partial EG client and delegates when the surface is present; call-site migrations are separate `.2`+ children. | requirement | AU-SEMANTIC | LANDED | c23e42b6ed43 da51647a7383 |
| AU-SEMANTIC-R026 The schema-drift package is re-homed before it lands Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**The schema-drift package is re-homed before it lands.** AU's unlanded `kg/schema_drift/` package is re-homed so that its drift gate (`gate`, `shape`, `classify`, `report`) runs inside the SDK's connector-sync runner between drain and apply, and its `candidate.py` SHACL rendering, `contract_store` and `activation` move to EG instead of running inside AU. | A forbidden-SHACL-rendering census confirms AU no longer renders SHACL in `candidate.py`, and an integration test confirms the drift gate runs correctly from the SDK runner. | requirement | AU-SEMANTIC | LANDED | 5e15da9f9e40 |
| AU-SEMANTIC-R027 Capability-gap checks must search the target system's own vocabulary Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Capability-gap checks must search the target system's own vocabulary.** Before concluding that a capability is missing from the generated EG client, the check searches EG's own public surface, such as its method catalog, generated contract or documentation, under EG's own naming, rather than grepping EG source for AU's internal names; a zero-match search for AU vocabulary is not treated as proof the capability does not exist. | A capability-gap determination records which EG-side surface was searched, under EG's own terms, before any migration work is filed against it. | requirement | AU-SEMANTIC | LANDED | c23e42b6ed43 |
| AU-SEMANTIC-R027.1 Typed capability-gap record refuses an unverified "missing" verdict Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Typed capability-gap record refuses an unverified "missing" verdict.** `api/capability_gap_check.py` adds `CapabilityGapResult`/`EGSurfaceSearch`, the typed record of an EG-side surface search (method catalog, generated contract, or documentation); `CapabilityGapResult.determine` raises `CapabilityGapUnverified` when a "missing" verdict carries no recorded EG-side search. | A unit test asserts a "missing" verdict is refused without a recorded search and accepted once one is attached; the migration-filing call sites are separate `.2`+ children. | requirement | AU-SEMANTIC | LANDED | c23e42b6ed43 da51647a7383 |
| AU-SEMANTIC-R028 Configured embedding dimension must match the deployed model's output size Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Configured embedding dimension must match the deployed model's output size.** The `kg_embedding_dim` setting in `agent_utilities/core/config.py`, overridable via `KG_EMBEDDING_DIM`, must equal the actual output dimensionality of the configured embedding model, since the PostgreSQL, AGE and Neo4j backends and the schema-definition and ontology document-processing/property-type modules all size their vector columns from this one setting; a mismatch between the configured value and the model's real dimension must be caught rather than silently applied. | A negative test asserts `configured_embedding_dimension()`/`validate_embedding_vectors` fail loud on a dimension mismatch instead of silently degrading enrichment. | requirement | AU-SEMANTIC | LANDED | 12e4a7fe9749 |
| AU-SEMANTIC-R029 Evolution runs apply a received per-stage model allocation and record cost in the trace Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Evolution runs apply a received per-stage model allocation and record cost in the trace.** agent-utilities applies the allocation it receives from EG-DECISION-ENGINE to each stage of a multi-step evolution run. It records each stage's model and cost in the run trace. [arXiv:2604.07725] | `See children `AU-SEMANTIC-R029.1` to `AU-SEMANTIC-R029.6`.` | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R029.1 Model Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Model.** `StageAllocation` in `agent_utilities/harness/agentic_evolution_engine.py` carries the stage, the received model identifier and the observed cost. `RunBudget` carries the received total cost limit. EG-DECISION-ENGINE produces both the allocation and the limit. | `tests/unit/harness/test_stage_model_allocation.py::test_stage_allocation_fields` | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R029.2 Behavior Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Behavior.** The engine must apply the received model for each stage. It must stop when the received `RunBudget` is spent. It must not choose a model itself. | `tests/unit/harness/test_stage_model_allocation.py::test_applies_received_allocation` | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R029.3 Wiring Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Wiring.** `run_evolution_cycle` (`agent_utilities/harness/agentic_evolution_engine.py:316`) must apply the allocation for each stage. Its production caller is `_analysis_action_evolve_variants` at `agent_utilities/mcp/tools/analysis_tools.py:976`. No stage model is applied there today. | `tests/unit/harness/test_stage_model_allocation.py::test_cycle_calls_allocation` | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R029.4 Refusal Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Refusal.** When the received budget cannot cover a stage, the engine must refuse with the typed reason `budget_exhausted`. When no allocation is received, the engine must abstain and must not default to the strongest model. | `tests/unit/harness/test_stage_model_allocation.py::test_budget_exhausted_refuses` | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R029.5 Evidence Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Evidence.** Each stage must write its model identifier, cost and the running total to the run trace through the `trace_id` already accepted at `agent_utilities/harness/agentic_evolution_engine.py:316`. | `tests/unit/harness/test_stage_model_allocation.py::test_allocation_in_trace` | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-SEMANTIC-R029.6 Hot-path proof Definition — AU-SEMANTIC / AU-SEMANTIC — AU semantic client and generated contractCanonical requirement and verification source**Hot-path proof.** The entry point is the served `evolve_variants` analysis action. A run given an allocation with one stronger stage must apply that model there and record cost for each stage. Test path: `tests/integration/test_stage_allocation_served.py`. | `tests/integration/test_stage_allocation_served.py::test_served_evolve_variants_allocation` | requirement | AU-SEMANTIC | SPECIFIED | No recorded commit/test evidence |
| AU-BASELINE AU-BASELINE — Baseline ingestion and served ontology content | spec | None | LANDED | No recorded commit/test evidence |
| AU-BASELINE-R001 The daemon role starts baseline ingestion in the background after boot Definition — AU-BASELINE / AU-BASELINE — Baseline ingestion and served ontology contentCanonical requirement and verification source**The daemon role starts baseline ingestion in the background after boot.** `start_background_daemons` starts one `KG-Baseline-Ingest` thread under the verified daemon session. The thread plans and enqueues WorkItems, then ends. A launch or planning error logs once and never propagates. `KG_BASELINE_INGEST=0` disables it, and `KG_DEV_MODE` silences it with the other daemons. | Unit tests prove one start per engine, the off switch, a swallowed launch error and a swallowed planning error. | requirement | AU-BASELINE | LANDED | 06a3810b9373 f9b25e33b179 |
| AU-BASELINE-R002 The baseline covers grounding content only Definition — AU-BASELINE / AU-BASELINE — Baseline ingestion and served ontology contentCanonical requirement and verification source**The baseline covers grounding content only.** It enqueues one prompt-library WorkItem, one `skill_workflows` WorkItem per configured skill provider and one `codebase` WorkItem per in-scope workspace repository, capped by `KG_BASELINE_MAX_CODEBASES`. Skill targets name a provider, never a machine path. The baseline never calls `source_sync source=all`. | Unit tests prove the planned legs, the provider targets, the `core`, `all`, list and `none` scopes, the cap and a workspace scan failure that keeps the other legs. | requirement | AU-BASELINE | LANDED | 06a3810b9373 |
| AU-BASELINE-R003 Baseline ingestion is idempotent and isolated per item Definition — AU-BASELINE / AU-BASELINE — Baseline ingestion and served ontology contentCanonical requirement and verification source**Baseline ingestion is idempotent and isolated per item.** Each leg reuses a content-hash delta ingest path. A target with a live WorkItem is deduplicated by `submit_task`. One rejected item never blocks the others. | Unit tests prove per-item rejection reporting. Existing delta tests cover the reused prompt, skill and code ingest paths. | requirement | AU-BASELINE | LANDED | 06a3810b9373 |
| AU-BASELINE-R004 AU orders ingestion by the EG stage sequence Definition — AU-BASELINE / AU-BASELINE — Baseline ingestion and served ontology contentCanonical requirement and verification source**AU orders ingestion by the EG stage sequence.** The table maps S1 to `fast`, S2 and S3 to `medium`, and S4 to S6 to `slow_heavy`. Each AU task type has an entry stage. The baseline enqueues in class order at the class priority bucket and stamps leg, class and stage on each WorkItem. | Unit tests prove the stage table, the task-type routing, the priority buckets and the stamped metadata. | requirement | AU-BASELINE | LANDED | 06a3810b9373 |
| AU-BASELINE-R005 Factory-built fleet servers serve ontology providers as MCP resources Definition — AU-BASELINE / AU-BASELINE — Baseline ingestion and served ontology contentCanonical requirement and verification source**Factory-built fleet servers serve ontology providers as MCP resources.** `create_mcp_server` registers each `agent_utilities.ontology_providers` root through the SDK `register_ontology_resources` helper. Ontology files become `ontology://` resources and shape files become `shapes://` resources. One bad provider is skipped with a warning. | Unit tests read the resources through an MCP client and prove the skip and the degrade-to-zero paths. | requirement | AU-BASELINE | LANDED | 06a3810b9373 |
| AU-HARNESS AU-HARNESS — Harness evolution and governed work | spec | None | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R001 Capability-gated capture of policy trajectories Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Capability-gated capture of policy trajectories.** AU attests a model provider's capability before capturing anything. The provider exposes chosen-token log probabilities, an immutable behavior-policy version, and a fixed tokenizer/decode identity. AU then records each terminal trajectory in the engine's existing content-addressed blob store. The record holds frozen sampler log probabilities, version, action mask, reward and provenance. It reuses the existing trajectory start/step and WorkItem authority rather than inventing new storage. Capture, training and promotion are three independent controls that default to off. No gradients or saved model-weight bytes are written to the graph. | Capability and default-off negative tests confirm capture refuses unsupported, closed or unversioned providers, and that training and promotion stay off until each is explicitly enabled. | requirement | AU-HARNESS | VERIFIED | 3279dcc7d1d7 42f6dada3749 fdeabad709b3 tests/unit/harness/test_policy_evolution.py:189 tests/unit/harness/test_policy_evolution.py:213 tests/unit/harness/test_policy_evolution.py:234 |
| AU-HARNESS-R002 External training path supports an optional KLPO method Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**External training path supports an optional KLPO method.** AU extends its provider-capability and job-receipt model to support an optional KLPO training method alongside GRPO, DPO and SFT. The initial experiment produces only a new LoRA adapter artifact rather than overwriting a base model. Training runs as externally leased jobs that protect the existing inference service-level objective. Any serving-pointer promotion requires a passing held-out evaluation. Training and promotion stay off until their receipts pass. | Injected-dispatcher and receipt tests confirm a KLPO job emits a valid run receipt. They confirm that promotion is blocked until held-out evaluation passes. | requirement | AU-HARNESS | VERIFIED | 37a3800dd3b1 42f6dada3749 fdeabad709b3 tests/unit/harness/test_substrate_trainer.py:148 |
| AU-HARNESS-R003 Graph-driven work market on Gap and WorkItem contracts Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Graph-driven work market on Gap and WorkItem contracts.** An evidence signal atomically upserts a single canonical Gap and its corresponding WorkItem through the typed engine contract. AU derives a versioned work offer, including expected utility, closure probability, cost, uncertainty, blast radius, cooldown and dependencies, from that evidence; the engine's Decide contract ranks legal offers with an initial deterministic utility-rate function and commits its decision record; and only then does the existing fenced WorkItem claim, progress-tracking and terminal-outcome authority admit execution. Selection runs from event triggers plus a bounded periodic reconciliation pass, with no separate AU-side sort or scheduler. | A fixture test shows one evidence signal produces exactly one Gap and one claimable WorkItem, and that execution only proceeds after a committed Decide record exists. | requirement | AU-HARNESS | VERIFIED | 42f6dada3749 d1fdedd885f3 d856d0bd92f6 fdeabad709b3 tests/unit/knowledge_graph/test_work_market.py:83 |
| AU-HARNESS-R004 AU proposes corrections through the graph, never writes Git directly Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**AU proposes corrections through the graph, never writes Git directly.** AU records a proposed gap, specification, change and supporting evidence through the typed engine contract and submits it for authorization; AU itself never creates a Git checkout, applies a patch, or commits a change directly. Only after an authorized correction is materialized through repository-manager and an immutable receipt is re-ingested does the originating gap become eligible to resolve, and AU removes its own local publishing and direct-Git code paths along with any dual-write fallback. Split (score > 6, cross-cutting: typed model, authorization routing, repository-manager materialization, receipt ingestion, and removal of `change_publisher`'s direct-Git path each touch distinct code roots): `AU-HARNESS-R004.1` ships the typed proposal model first; later children route it through authorization, materialize it, ingest the receipt, and retire the direct-Git path. | A source gate confirms no AU code path writes to Git directly, and an end-to-end test shows a gap only resolves after a materialization receipt is ingested. | requirement | AU-HARNESS | VERIFIED | 26bfecfbde1a |
| AU-HARNESS-R004.1 Typed correction-proposal model Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Typed correction-proposal model.** AU defines a typed `CorrectionProposal` (gap reference, specification, change reference, evidence, lifecycle status) and a typed `MaterializationReceipt`, with no Git-side fields (no repo path, worktree, branch, commit sha, patch or diff). Construction validates required fields and known statuses and refuses a proposal carrying any direct-Git metadata field. A `materialized` proposal is eligible to resolve only once it carries a `MaterializationReceipt`. | Validation tests cover every required field and the unknown-status case; refusal tests cover a missing receipt on `materialized` status and a proposal carrying a direct-Git metadata field. | requirement | AU-HARNESS | VERIFIED | 068bd9c17859 42f6dada3749 tests/knowledge_graph/research/test_correction_proposal.py:31 tests/knowledge_graph/research/test_correction_proposal.py:47 tests/knowledge_graph/research/test_correction_proposal.py:53 |
| AU-HARNESS-R005 Defer generative model work pending evidence-backed need Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Defer generative model work pending evidence-backed need.** AU defers requesting a microGPT-style generative model, in-engine autograd, a generative UQL-producing model, or a KLPO loss implementation until a separate evidence-backed need demonstrates held-out benefit, cost and safety. In the meantime, AU reuses the existing typed Decide ladder, covering legal-option derivation, calibrated probabilities, cost-sensitive optimal choice, provenance, abstention, natural-language templating and constrained UQL generation, and does not treat a bounded resident scorer as authorization for a generative model. | A review confirms no generative or autograd model work proceeds without an approved held-out benefit, cost and safety record, and Decide-ladder tests cover legal-option derivation, calibration, abstention and constrained UQL output. | requirement | AU-HARNESS | VERIFIED | 42f6dada3749 a754f1299033 tests/harness/test_generative_model_policy.py:20 |
| AU-HARNESS-R006 Statistical scoring head ranks work-market offers Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Statistical scoring head ranks work-market offers.** AU defines a feature schema and slate-crediting method and builds a gold evaluation set to fit and evaluate a scoring head for work-market offers, promoting it only through the governed promotion gate; offer expected cost is computed from the Decide-based work-market design. A synthetic width-quality benchmark exercises the scorer end to end. | Benchmarks measure scorer quality against the synthetic width-quality fixture, and head-promotion tests confirm promotion only occurs through the governed gate. | requirement | AU-HARNESS | VERIFIED | 42f6dada3749 75dc28c16382 c0e12b7034f3 tests/unit/knowledge_graph/test_work_market.py:202 tests/unit/knowledge_graph/test_work_market.py:243 |
| AU-HARNESS-R007 One typed L4 harness port Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**One typed L4 harness port.** AU defines one `HarnessPort` protocol between L3 agent graphs and runtimes. A port has a `name` and an async `run` method. `run` takes a frozen `HarnessRequest` and returns a frozen `RunOutcome`. The outcome carries status, final text, structured output, exit code, transcript reference, diff stat, usage, cost, model, duration and error. A port that cannot start returns a typed `refused` outcome. A new runtime, such as a LangGraph runner, is one class registered by name. No stub adapter ships for it. | A shared conformance check passes for every shipped adapter. A strictness test rejects an unknown status and any mutation. | requirement | AU-HARNESS | VERIFIED | 05d0acdf70b2 3df03825a497 42f6dada3749 579815031bcd b15fd573cb5b tests/unit/layers/test_harness_port.py:116 tests/unit/layers/test_harness_port.py:125 tests/unit/layers/test_harness_port.py:135 |
| AU-HARNESS-R008 Native harness over the pydantic-ai path Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Native harness over the pydantic-ai path.** The `native` adapter calls `run_agent` unchanged and requests its run-summary envelope. That path keeps typed tool calls, structured output, token accounting, Langfuse and OTel trace export and the RunTrace write. The adapter maps the envelope into a `RunOutcome` and marks it recorded. It enforces the request timeout and never writes a second trace. | Tests with an injected runner prove the call arguments, envelope mapping, JSON output parsing, degraded failure text and typed timeout. | requirement | AU-HARNESS | LANDED | 579815031bcd b15fd573cb5b |
| AU-HARNESS-R009 Claude Code headless harness Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Claude Code headless harness.** The `claude-code` adapter runs `claude -p --output-format json` once per request. Flags are pinned: strict MCP configuration, project setting sources only, an explicit permission mode and the MCP configuration file. The MCP configuration names graph-os as its only server, so every MCP tool call goes through graph-os. The prompt goes on standard input. The working directory is the provided worktree. A timeout kills the whole process group. The child receives only an allowlisted environment plus explicit variables. The adapter reads the final JSON result object and never scrapes the terminal interface. It reports exit code, final text, session transcript reference, read-only diff stat, token usage, cost and model. It refuses before launch without a worktree, configuration file or executable. | Tests use a fake executable script. They prove the pinned arguments, working directory, standard-input prompt and environment allowlist. They also prove success, error, unparseable output, timeout kill, refusals and diff stat. No test calls the real CLI. | requirement | AU-HARNESS | LANDED | 579815031bcd b15fd573cb5b |
| AU-HARNESS-R010 Per-node harness selection and L5 recording Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Per-node harness selection and L5 recording.** `AgentSpec` carries a `harness` field with default `native` and an optional worktree. The parallel engine keeps its in-process path for `native` nodes. It runs every other node through the registered port. An unknown harness name raises an error and never falls back. Each non-native `RunOutcome` feeds the existing ordered RunTrace writer and the usage recorder. A native outcome already carries its RunTrace and is not written again. | Tests prove default selection, selection by field, the unknown-name error, parallel-engine dispatch, request mapping and the L5 writer calls. | requirement | AU-HARNESS | LANDED | 579815031bcd b15fd573cb5b |
| AU-HARNESS-R011 Run outcomes feed propose-only prompt evolution Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Run outcomes feed propose-only prompt evolution.** The existing native optimization sweep runs a `prompt_evolution` target. For each known agent prompt, AU reads new `RunTrace` outcomes past a durable per-agent trace cursor. AU turns them into reference-only training rows and runs a pluggable program optimizer. The default optimizer is the native `eg-program` job, which owns the DSPy-family optimizers. AU records the result as a `PromptVersion` node with status `proposal` and a `was_derived_from` edge to every source trace. AU never writes the prompt file and never promotes the version. One pending candidate per agent blocks further candidates until review. No DSPy package is imported or required. | Unit tests with a graph double and a fake optimizer prove provenance and propose-only behavior. They also prove cursor resume, idle cases and failure isolation. One test drives the default native optimizer through a fake engine. A sweep test proves the scheduled dispatch. | requirement | AU-HARNESS | LANDED | 755db4bb36b8 b15fd573cb5b e9a23c4a2f57 |
| AU-HARNESS-R012 Run-loop configuration comes from the envelope only Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Run-loop configuration comes from the envelope only.** The run loop must read its harness configuration from the signed dispatch envelope and from no other source. A run with no `harness_config` must end in a typed refusal. The loop must never apply a built-in default policy. | The end-to-end row proves one envelope reaches the loop. Negative rows prove refusal without the field. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R012.1 `HarnessConfig` model Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**`HarnessConfig` model.** `agent_utilities/layers/harness_config.py` defines a frozen `HarnessConfig` with `context_policy` (`none`, `elide`, `elide_then_summarize`), `soft_threshold`, `hard_threshold`, `recent_window_fraction`, `plan_scaffold`, `action_space` (`tool_set`, `shell_only`), `allowed_tool_subset`, `stuck_reminder_after` (default 5), `stuck_terminate_after` (default 8), `tool_result_max_chars` and `context_budget_tokens`. The model must reject `soft_threshold` at or above `hard_threshold`. The model must reject any fraction outside 0 to 1. | `tests/harness/test_harness_config.py::test_config_frozen_and_thresholds_ordered`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R012.2 Carry the config on `HarnessRequest` Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Carry the config on `HarnessRequest`.** `agent_utilities/layers/harness_port.py:39` gains a `harness_config` field, and `NativeHarness.run` (`harness_native.py:116`) passes it to `run_agent`. A request without it returns the existing typed `refused` outcome with reason `harness_config_absent`. | `tests/harness/test_harness_native.py::test_request_without_config_is_refused`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R012.3 `run_agent` accepts and applies the config Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**`run_agent` accepts and applies the config.** `run_agent` (`agent_utilities/orchestration/agent_runner.py:702`) gains a `harness_config` parameter beside `allowed_tools`. It builds one `HarnessRuntime` after `validate_tool_contract` (`agent_runner.py:783`). The runtime must hold the config, the counters and the termination reason for that run. | `tests/harness/test_harness_runtime.py::test_run_agent_builds_runtime_from_config`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R012.4 Worker reads the envelope field Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Worker reads the envelope field.** `_run_agent_turn_kind` (`agent_utilities/orchestration/agent_dispatch_worker.py:1764`) must read the signed `harness_config` from the claimed `AgentTurnEnvelope`. It must then pass the config to `run_agent`. The worker must refuse the job when the carrier rejects the signature. It must also refuse when the field is absent. | `tests/unit/test_agent_dispatch_worker.py::test_worker_passes_envelope_harness_config`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R012.5 End-to-end proof of the envelope path Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**End-to-end proof of the envelope path.** One test enqueues an `AgentTurnEnvelope` through `enqueue_agent_turn` (`agent_dispatch.py:737`). A worker claims it and `run_agent` runs a scripted model. The test must assert that the applied config in the trace equals the signed config. | `tests/harness/test_runloop_envelope_e2e.py::test_envelope_config_reaches_run_loop`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R013 Context manager with elision and summarization Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Context manager with elision and summarization.** One `ContextManager` capability must keep the preamble and the recent window verbatim. At the soft threshold it must replace stale tool observations in the middle region with stubs. At the hard threshold it must fold the oldest middle events into a running summary. The manager must read thresholds from `harness_config` only. It ships no recall tool by default. The source study measured a median of zero recall calls and no accuracy gain. The loop must end a run that still exceeds the budget with the typed termination `context_overflow`. | The end-to-end row drives a scripted run across both thresholds and asserts the live capability fired. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R013.1 Reuse decision: one implementation Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Reuse decision: one implementation.** `ContextManager` replaces `MementoCompaction` (`agent_utilities/capabilities/memento.py:154`) in `default_runtime_capabilities` (`capabilities/composition.py:102`). The `memento_compaction` parameter (`agent/factory.py:666`, `:921`) is removed. The manager reuses `enforce_tool_pair_safety` (`capabilities/compaction/_shared.py:61`) and the `before_model_request` hook (`memento.py:243`). `ToolOutputEviction` (`capabilities/eviction.py:28`) stays, because it bounds one oversized result and does not manage history. | `tests/unit/test_composition.py::test_default_capabilities_hold_one_context_manager`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R013.2 Token counter against the budget Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Token counter against the budget.** `ContextManager` must measure the message list in tokens and compare it with `context_budget_tokens` before each model request. The manager must record the peak as `peakContextTokens` on the runtime. | `tests/harness/test_context_manager.py::test_peak_tokens_tracked`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R013.3 Region split Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Region split.** The manager must split messages into the preamble (system prompt and task), the middle region and the recent window. The recent window must cover `recent_window_fraction` of the budget and at least the last two turns. A tool call and its return must never fall on opposite sides of a boundary. | `tests/harness/test_context_manager.py::test_regions_keep_tool_pairs_together`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R013.4 Elision at the soft threshold Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Elision at the soft threshold.** When usage reaches `soft_threshold` times the budget, the manager must replace each stale tool observation in the middle region with a stub naming the tool, its arguments and the original size. The manager must leave the preamble and the recent window unchanged. | `tests/harness/test_context_manager.py::test_elision_stubs_middle_observations_only`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R013.5 Summarization at the hard threshold Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Summarization at the hard threshold.** When usage still reaches `hard_threshold` times the budget after elision, the manager must act. It must fold the oldest middle events into one running summary message. The summary call must use the run's own model and must count toward `costUsd`. | `tests/harness/test_context_manager.py::test_summarization_folds_oldest_middle`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R013.6 Policy gating Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Policy gating.** A `context_policy` of `none` must attach no manager. A policy of `elide` must never summarize. Only `elide_then_summarize` may call the model for a summary. | `tests/harness/test_context_manager.py::test_policy_gates_each_mechanism`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R013.7 Typed `context_overflow` termination Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Typed `context_overflow` termination.** The loop must catch two cases. In the first, the history exceeds the budget after both mechanisms. In the second, the provider rejects the request for length. The loop must end the run with `terminationReason` `context_overflow` and the partial output. It must never surface an unhandled provider error. | `tests/harness/test_context_manager.py::test_overflow_is_typed_termination`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R013.8 Mechanism counters Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Mechanism counters.** The manager must increment `elisionCount` and `summarizationCount` on the runtime for each event it performs. | `tests/harness/test_context_manager.py::test_counters_increment`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R013.9 End-to-end proof Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**End-to-end proof.** A scripted `run_agent` with a small budget must take its `harness_config` from an envelope. It must show one elision, one summarization and a final answer. A second case with an impossible budget must end in `context_overflow`. | `tests/harness/test_context_manager_e2e.py::test_live_run_elides_summarizes_and_overflows`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R013.10 Behavior Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Behavior.** Each summary the manager writes must carry a quality score from a judge. The judge checks retained values, methods and validation steps. A score below `summary_min_score` (default 0.7) must trigger one regeneration before the summary replaces the raw block. | `tests/harness/test_context_summary_quality.py::test_low_score_regenerates_once`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R013.11 Wiring Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Wiring.** The quality check attaches in `ContextManager.before_model_request`, which replaces the hook at `agent_utilities/capabilities/memento.py:243`. The model request path of `run_agent` (`agent_runner.py:702`) calls it on every turn. | `tests/harness/test_context_summary_quality.py::test_hook_runs_on_every_request`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R013.12 Refusal Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Refusal.** A summary that still scores below `summary_min_score` after regeneration must not replace the raw block. The manager must keep the raw block and record a `summary_rejected` observation. | `tests/harness/test_context_summary_quality.py::test_second_failure_keeps_raw_block`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R013.13 Model Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Model.** A `SummaryNode` holds a summary text, the identifiers of its source messages and a parent link. Nodes form a directed acyclic graph. Every node must resolve to its original messages without loss. | `tests/harness/test_context_summary_dag.py::test_node_resolves_to_sources`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R013.14 Behavior Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Behavior.** The manager must retrieve the original messages of any summary node on demand. Summaries of summaries must keep pointers to the same originals. Retrieval must never call the model. | `tests/harness/test_context_summary_dag.py::test_nested_summary_expands_to_originals`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R013.15 Behavior Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Behavior.** When a tool result or subgraph exceeds `large_output_chars` (default 20000), the run loop must store it in a named run variable. The model request receives a stub with the variable name, size and a 500-character head. A read-slice tool returns ranges of the variable. | `tests/harness/test_large_output_variable.py::test_oversize_result_becomes_variable`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R013.16 Wiring Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Wiring.** The variable store attaches where the truncation guard of `AU-HARNESS-R016.6` runs, ahead of `ToolOutputEviction` (`agent_utilities/capabilities/eviction.py:28`). The run loop calls it for every tool result. The read-slice tool registers beside `update_plan`. | `tests/harness/test_large_output_variable.py::test_store_runs_before_eviction`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R013.17 Refusal Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Refusal.** A slice request outside the stored length must return a typed `slice_out_of_range` observation. The raw output must never enter the model request when a variable holds it. | `tests/harness/test_large_output_variable.py::test_bad_slice_refused_raw_never_injected`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R013.18 Evidence Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Evidence.** The runtime must record `summaryRegenerationCount`, `summaryRejectedCount` and `variableStoredCount` in the run trace. Each counter follows the write path of `AU-HARNESS-R017.4`. | `tests/harness/test_run_trace_fields.py::test_summary_and_variable_counters`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R013.19 Hot-path proof Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Hot-path proof.** The entry point is the run loop through `run_agent` with an envelope `harness_config`. A scripted run has an oversize tool result and a poor first summary. It must end with a final answer and the three counters set. | `tests/harness/test_context_manager_quality_e2e.py::test_run_loop_summary_quality_and_variable`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R014 Plan scaffold as run state Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Plan scaffold as run state.** When `plan_scaffold` is `on`, the run loop must register an `update_plan` tool and inject the current plan into each model request. The plan must never enter stored history. This scaffold is run state that the model edits. It never composes agents, tools or models, so `AU-CONTROL-R027` stays the only planner. | The end-to-end row proves the plan appears in each request and in no stored message. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R014.1 `PlanState` model Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**`PlanState` model.** `agent_utilities/layers/harness_plan.py` defines a frozen `PlanItem` (text, status `pending`, `in_progress`, `done`) and a `PlanState` holding the items of one run. Updates must replace the whole list. | `tests/harness/test_harness_plan.py::test_plan_state_replaces_list`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R014.2 `update_plan` tool Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**`update_plan` tool.** The loop registers `update_plan` only when `plan_scaffold` is `on`. The tool must validate its argument against `PlanItem` and return the new plan as its observation. Malformed input returns a typed error observation. | `tests/harness/test_harness_plan.py::test_update_plan_tool_gated_by_config`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R014.3 Per-turn injection outside history Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Per-turn injection outside history.** A `before_model_request` hook must append the rendered plan to the outgoing request only. The hook must not write the plan to the stored message list. The `ContextManager` must not count stored plan text twice. | `tests/harness/test_harness_plan.py::test_plan_injected_not_stored`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R014.4 Planner boundary Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Planner boundary.** The scaffold module must import nothing from `agent_utilities/decide/consumers/task_planner.py`. The tool must never name an agent, a skill or a model. | `tests/harness/test_harness_plan.py::test_scaffold_imports_no_planner`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R014.5 End-to-end proof Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**End-to-end proof.** A scripted run with the scaffold on must call `update_plan` twice. Every captured model request must contain the plan, and the stored history must contain none of it. | `tests/harness/test_harness_plan_e2e.py::test_plan_in_every_request_never_in_history`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R015 Action space applied at tool registration Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Action space applied at tool registration.** The run loop must apply `action_space` and `allowed_tool_subset` when it registers tools. In `shell_only` it must register one shell tool and nothing else from the tool set. In `tool_set` it must register only the tools in the subset. A call to any other tool must return a typed refusal as an observation. | The end-to-end row proves both modes against the live registration path. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R015.1 Registration filter Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Registration filter.** `run_agent` must filter the tools it passes to the agent by `allowed_tool_subset` after `validate_tool_contract` (`agent_runner.py:783`). The filter must run before the first model request. | `tests/harness/test_action_space.py::test_registration_filters_to_subset`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R015.2 `shell_only` mode Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**`shell_only` mode.** In `shell_only` the loop must register the shell tool alone, plus `update_plan` when the scaffold is on. The mode must be a registration decision and must not rewrite tool descriptions. | `tests/harness/test_action_space.py::test_shell_only_registers_one_tool`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R015.3 Call-time refusal Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Call-time refusal.** A tool call outside the allowed set must return a `tool_not_allowed` observation naming the tool. The tool must never start. The refusal must reuse the carrier check at `agent_dispatch.py:445`. | `tests/harness/test_action_space.py::test_out_of_set_call_returns_refusal_observation`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R015.4 End-to-end proof Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**End-to-end proof.** A scripted model calls an allowed and a disallowed tool in `tool_set` mode, then runs in `shell_only` mode. The test must assert registered names, the refusal observation and no side effect. | `tests/harness/test_action_space_e2e.py::test_live_registration_and_refusal`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R016 Run guards Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Run guards.** The loop must detect stuck runs, append diagnostics to edit results, enforce read-before-write, return tool errors as observations, truncate tool results and run read-only tools in parallel. Each guard must emit a counter in the trace. | Each child names its own proof. The end-to-end row drives all guards in one scripted run. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R016.1 Stuck reminder Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Stuck reminder.** After `stuck_reminder_after` identical tool calls in a row, the loop must append one reminder to the next observation. Identity is the tool name plus canonical arguments. | `tests/harness/test_run_guards.py::test_reminder_after_identical_calls`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R016.2 Stuck termination Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Stuck termination.** After `stuck_terminate_after` identical failing calls, the loop must end the run with `terminationReason` `stuck`. A success between calls resets the count. | `tests/harness/test_run_guards.py::test_stuck_termination_after_failing_repeats`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R016.3 Post-edit diagnostics Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Post-edit diagnostics.** After an edit tool succeeds, the loop must run the diagnostics command for the edited file and append its output to the edit result. A missing diagnostics command must append nothing and raise nothing. | `tests/harness/test_run_guards.py::test_edit_result_carries_diagnostics`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R016.4 Read-before-write Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Read-before-write.** The loop must record a content hash for each file a read tool returns. A write tool must refuse a file never read or changed since the read. The refusal is a typed observation. | `tests/harness/test_run_guards.py::test_write_requires_fresh_read_hash`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R016.5 Tool errors as observations Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Tool errors as observations.** A tool exception must become an `error` observation to the model. The loop must continue. Only a cancellation may propagate. | `tests/harness/test_run_guards.py::test_tool_error_becomes_observation`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R016.6 Result truncation Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Result truncation.** The loop must truncate any tool result longer than `tool_result_max_chars` and mark the cut. This guard is separate from `ToolOutputEviction` and must run first. | `tests/harness/test_run_guards.py::test_long_result_truncated_with_marker`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R016.7 Parallel read-only tools Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Parallel read-only tools.** When one model turn requests two or more tools, the loop must run those marked `read_only` concurrently and the rest in order. The marker comes from the connector contract's `read_only` field, read as `readOnlyHint` at `agent_utilities/mcp/connector_surface.py:73`. A tool with no marker runs serially. | `tests/harness/test_run_guards.py::test_read_only_tools_run_concurrently`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R016.8 End-to-end proof Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**End-to-end proof.** A scripted run must trigger a reminder, a diagnostics append, a refused write, a truncation and a parallel read batch. It must then end with `stuck`. | `tests/harness/test_run_guards_e2e.py::test_all_guards_fire_in_live_loop`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R017 Run trace with termination reason and counters Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Run trace with termination reason and counters.** Every run must write one typed termination reason and the brief's counters through the existing RunTrace export. The loop must never write a second trace store. | The end-to-end row reads the persisted trace for each termination reason. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R017.1 `TerminationReason` enum Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**`TerminationReason` enum.** `harness_runtime.py` defines `final_answer`, `context_overflow`, `stuck`, `step_budget` and `error`. A run must end with exactly one value. A second assignment must raise. | `tests/harness/test_harness_runtime.py::test_single_termination_reason`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R017.2 Map existing exits Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Map existing exits.** Each exit path of `run_agent` must set a reason. The `UsageLimits` breach from `_direct_run_usage_limits` (`agent_runner.py:4450`) must map to `step_budget`. Every other exception must map to `error`. | `tests/harness/test_harness_runtime.py::test_every_exit_sets_reason`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R017.3 Counters Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Counters.** The runtime must hold `peakContextTokens`, `contextBudgetTokens`, `elisionCount`, `summarizationCount`, `turnCount`, `toolCallCount`, `costUsd` and the applied `harness_config`. | `tests/harness/test_harness_runtime.py::test_counters_cover_brief`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R017.4 Write through `_record_execution_trace` Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Write through `_record_execution_trace`.** `_record_execution_trace` (`agent_runner.py:5305`) gains these fields. Its ordered wrapper at `agent_runner.py:5453` must carry them to the engine. The engine run-trace vocabulary owns the field names, so this row follows the `EG` run-trace vocabulary row. | `tests/harness/test_run_trace_fields.py::test_trace_write_carries_reason_and_counters`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R017.5 Non-native path Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Non-native path.** `record_outcome` in `harness_record.py` must write the same reason for a non-native `RunOutcome`. The reason `error` applies when the adapter reports none. | `tests/harness/test_run_trace_fields.py::test_non_native_outcome_has_reason`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R017.6 End-to-end proof Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**End-to-end proof.** Five scripted runs, one per reason, must each persist one trace with the right reason through a fake engine. | `tests/harness/test_run_trace_e2e.py::test_each_reason_persisted`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R018 Matched ablation runner Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Matched ablation runner.** AU must run one task set repeatedly with one component varied and compare task-paired outcomes. It must report success rate, cost per task and overflow rate. It must submit the measured model facts to the engine as a governed proposal. No ablation or McNemar code exists today, so the runner is new code. | The end-to-end row runs a synthetic task set through two arms and reaches a submitted proposal. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R018.1 Arm and task-set types Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Arm and task-set types.** `agent_utilities/harness/ablation.py` defines a frozen `AblationArm` (component name, `harness_config`) and a frozen `TaskSet` (task ids, fixed seed). Two arms must differ in exactly one `HarnessConfig` field. The runner must refuse arms that differ in more. | `tests/harness/test_ablation.py::test_arms_differ_in_one_component`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R018.2 Paired execution Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Paired execution.** For each task the runner must run both arms through `run_agent` and record outcome, cost, `terminationReason` and counters. The stored records come from the trajectory capture of `AU-HARNESS-R001`. | `tests/harness/test_ablation.py::test_paired_outcomes_recorded`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R018.3 Exact McNemar test Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Exact McNemar test.** The runner computes the exact two-sided binomial test on discordant pairs. Zero discordant pairs must give a p-value of 1. | `tests/harness/test_ablation.py::test_exact_mcnemar_known_values`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R018.4 Benjamini-Hochberg correction Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Benjamini-Hochberg correction.** The runner adjusts the p-values of all compared components at false-discovery rate 0.05 and reports which differences hold. | `tests/harness/test_ablation.py::test_bh_adjustment`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R018.5 Report Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Report.** The report lists success rate, mean cost per task and overflow rate per arm. It also lists `contextWindowTokens`, `shellProficiency` and `stoppingBehaviour` derived from the run. A value without enough pairs is reported as `insufficient`. | `tests/harness/test_ablation.py::test_report_fields_and_insufficient`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R018.6 Governed proposal Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Governed proposal.** The runner must submit each measured fact to the engine as a proposal that cites its run identifier. It must never write the fact itself. The engine writes the fact through the `EG` run-trace rows for the measured-fact write. | `tests/harness/test_ablation.py::test_facts_submitted_as_proposals_only`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R018.7 End-to-end proof Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**End-to-end proof.** A synthetic task set over two arms must produce a report and one proposal per fact through a fake engine. | `tests/harness/test_ablation_e2e.py::test_two_arms_to_proposal`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R019 Studied sources become compared, admitted proposals Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Studied sources become compared, admitted proposals.** AU runs one study pipeline: a paper, repository or article becomes a feature record, a capability comparison and a reviewed proposal. AU must not write code, specs or prompts from a study directly. | `tests/harness/test_study_pipeline.py::test_end_to_end` drives a fake source to a pending proposal. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R019.1 Locate and wire the study attach point Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Locate and wire the study attach point.** The first child locates the entry beside `agent_utilities/harness/assimilation_benchmark.py` and wires `study_pipeline.run_study` into the evolution sweep. | `test_study_pipeline.py::test_sweep_dispatch`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R019.2 Typed `StudySource` and `FeatureRecord` Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Typed `StudySource` and `FeatureRecord`.** `agent_utilities/harness/study_models.py` defines `StudySource` (kind, locator, content digest) and `FeatureRecord` (source, claim, mechanism, evidence span). Records without an evidence span are refused. | `test_study_models.py::test_span_required`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R019.3 Study intake deduplicates by content digest Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Study intake deduplicates by content digest.** `study_intake.fetch_once` reads each source through its declared contract (scholarx for papers, archive for pages) and skips a digest already studied. It must not copy the source body into the graph; it stores the digest and locator. | `test_study_intake.py::test_duplicate_digest_skipped`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R019.4 Batch study scales to ten times the source count Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Batch study scales to ten times the source count.** `study_batch.run_batch` processes sources in bounded concurrency set by the compute governor. One failed source must not stop the batch and yields a typed failure row. | `test_study_batch.py::test_one_failure_isolated` with 100 fake sources. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R019.5 Capability comparison matrix against the platform Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Capability comparison matrix against the platform.** `study_compare.compare` asks the engine for matching capabilities per feature and returns a verdict of `covered`, `gap` or `exceeds`. AU must not keep a private capability inventory. | `test_study_compare.py::test_verdicts_from_engine_double`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R019.6 Matrix report lists every feature with its verdict Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Matrix report lists every feature with its verdict.** `study_compare.render_matrix` emits one row per feature and source, including `covered` rows. A study with no extractable feature reports `no_features`, not an empty success. | `test_study_compare.py::test_no_features_abstains`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R019.7 Gap features become proposals only Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Gap features become proposals only.** `study_propose.propose` records each `gap` as a proposal node linked by `was_derived_from` to its feature records. AU must not edit a repository, spec or prompt, and must not promote a proposal. | `test_study_propose.py::test_propose_only_no_writes`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R019.8 One open proposal per feature blocks duplicates Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**One open proposal per feature blocks duplicates.** `study_propose.propose` must skip a gap whose feature digest has an open or rejected proposal. It must return the existing proposal ID. | `test_study_propose.py::test_duplicate_gap_blocked`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R019.9 Admission requires a measured lift Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Admission requires a measured lift.** `study_admit.admit` must refuse a reviewed proposal that lacks a baseline-versus-candidate benchmark result from the assimilation benchmark suite. A refusal names the missing measurement. | `test_study_admit.py::test_unmeasured_refused`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R019.10 Admission is a governed decision, not an AU choice Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Admission is a governed decision, not an AU choice.** `study_admit.admit` sends the benchmark result to the engine decision service and applies the returned verdict. AU must not rank or accept proposals itself. | `test_study_admit.py::test_verdict_applied_from_engine`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R019.11 Research goals drive source discovery Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Research goals drive source discovery.** `study_discover.discover` reads active goals from the engine and queries declared feeds, scholarx and prompt folders for new sources. It must stop at a per-run source cap of 50. | `test_study_discover.py::test_cap_and_goal_filter`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R019.12 Background study yields to interactive work Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Background study yields to interactive work.** `study_batch.run_batch` must pause when the compute governor reports interactive load, and resume from its cursor without repeating a source. | `test_study_batch.py::test_pause_resume_cursor`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R020 Parallel workers share a typed workspace Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Parallel workers share a typed workspace.** A wide search must run its workers against one shared workspace. The workspace holds the subtask checklist, the target schema and one result slot per worker. Results conform to the schema or the engine refuses them. A synthesizer must read results by reference. | tests/harness/test_parallel_workspace_e2e.py drives the rollup end to end. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R020.1 Model Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Model.** `ParallelWorkspace` in `agent_utilities/graph/parallel_workspace.py` holds a checklist, a frozen result schema, one `WorkerSlot` per worker and a version counter. Each slot holds a status, a typed result and a conflict note. | `tests/harness/test_parallel_workspace.py::test_workspace_model_frozen_schema`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R020.2 Behavior Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Behavior.** Each worker reads the other slots before it starts a subtask and skips a subtask another slot already covers. Two slots with the same key and different values must raise a `conflict` entry for the synthesizer. | `tests/harness/test_parallel_workspace.py::test_duplicate_skipped_conflict_recorded`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R020.3 Behavior Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Behavior.** The run must bound concurrency by `max_parallel_workers` (default 8) and each worker by `worker_timeout_seconds` (default 120). After `breaker_after_failures` consecutive failures (default 3) the breaker must stop new workers. | `tests/harness/test_parallel_workspace.py::test_bound_timeout_and_breaker`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R020.4 Behavior Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Behavior.** The synthesizer reads typed slot objects programmatically and never receives worker output as prompt text. Strategy is `flat` up to 8 workers, `hierarchical` above that, and `progressive` when total output exceeds `progressive_output_chars` (default 60000). | `tests/harness/test_parallel_workspace.py::test_strategy_chosen_by_count_and_size`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R020.5 Wiring Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Wiring.** `parallel_batch_processor` (`agent_utilities/graph/_router_impl.py:1772`) builds the workspace and passes it to each worker. The router step `_dispatch_parallel_batch` (`_router_impl.py:1677`) calls it in production. | `tests/harness/test_parallel_workspace.py::test_batch_processor_builds_workspace`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R020.6 Refusal Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Refusal.** A worker result that violates the schema must be refused with a typed `schema_violation` row. The slot stays open. The breaker counts the refusal as a failure. | `tests/harness/test_parallel_workspace.py::test_schema_violation_refused`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R020.7 Evidence Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Evidence.** The run trace must record the strategy chosen, worker count, conflict count, refusal count and breaker state. Each field follows the write path of `AU-HARNESS-R017.4`. | `tests/harness/test_parallel_workspace.py::test_trace_records_strategy_and_breaker`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R020.8 Hot-path proof Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Hot-path proof.** The entry point is the served graph run through `_dispatch_parallel_batch`. A run has four fake workers, one schema violation and one conflict. It must end with a synthesized result and a trace. | `tests/harness/test_parallel_workspace_e2e.py::test_router_batch_to_synthesis`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R021 Evaluation gates separate safety from accuracy Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Evaluation gates separate safety from accuracy.** Evaluation of model-backed work must report accuracy and a safety measure apart. A judge score is trusted only while an independent outcome agrees. A recommendation reaches human approval only after a bounds and provenance check. | tests/harness/test_eval_gates_e2e.py drives the rollup end to end. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R021.1 Model Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Model.** `EvalGateReport` in `agent_utilities/harness/eval_gates.py` holds accuracy, `safetyErrorRate`, `judgeScore`, `independentOutcome`, a divergence value and a typed verdict `promote`, `hold` or `refuse`. | `tests/harness/test_eval_gates.py::test_report_fields_and_verdicts`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R021.2 Behavior Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Behavior.** `safetyErrorRate` counts confident, high-risk or evidence-contradicting errors over all answers. A rollup must not be promoted when accuracy rises and `safetyErrorRate` rises by more than `safety_regression_margin` (default 0.01). | `tests/harness/test_eval_gates.py::test_accuracy_gain_with_safety_regression_held`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R021.3 Behavior Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Behavior.** Divergence is the judge score trend minus the independent outcome trend over the last `divergence_window` runs (default 20). A divergence above `divergence_threshold` (default 0.15) must flag exploitation onset. | `tests/harness/test_eval_gates.py::test_divergence_flags_onset`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R021.4 Behavior Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Behavior.** Before surfacing a recommendation, the gate must check every value against its declared bound. It must also check provenance. Pluggable scorers for length, pattern and schema feed the same report. | `tests/harness/test_eval_gates.py::test_bounds_provenance_and_scorers`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R021.5 Wiring Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Wiring.** `ContinuousEvaluationEngine.evaluate` (`agent_utilities/harness/continuous_evaluation_engine.py:1103`) calls the gate once per round. The ablation report of `AU-HARNESS-R018.5` reads the same report. This row creates the call site at that function. | `tests/harness/test_eval_gates.py::test_evaluate_calls_gate`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R021.6 Refusal Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Refusal.** A run whose judge score rises while the independent outcome does not must be refused as evidence. A recommendation with missing provenance or an out-of-bound value must be refused and escalated. | `tests/harness/test_eval_gates.py::test_divergent_run_and_unbounded_recommendation_refused`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R021.7 Evidence Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Evidence.** The report must persist to the graph as evidence with its run identifiers and the verdict reason. A refusal must carry the premise that triggered it. | `tests/harness/test_eval_gates.py::test_report_persisted_with_premise`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R021.8 Hot-path proof Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Hot-path proof.** The entry point is the evaluation round through `ContinuousEvaluationEngine.evaluate`. A scripted round with rising judge score and flat outcome must produce a `refuse` verdict and a persisted report. | `tests/harness/test_eval_gates_e2e.py::test_round_refuses_divergent_run`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R022 Run experience becomes reusable skills Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Run experience becomes reusable skills.** AU must distill finished runs into action-level experiences and task-level skills. It consolidates them across at least three rollouts and retrieves them by current context. Usage outcomes update their standing without any change to model parameters. | tests/harness/test_experience_distill_e2e.py drives the rollup end to end. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R022.1 Model Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Model.** `ExperienceRecord` and `SkillCandidate` in `agent_utilities/knowledge_graph/distillation/experience_models.py` hold a kind (`action` or `task`), source run identifiers, a context key, a use count and a success count. | `tests/harness/test_experience_models.py::test_records_typed`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R022.2 Behavior Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Behavior.** Consolidation merges records from at least `min_rollouts` runs (default 3) that share a context key. A task whose workflow succeeds `skill_after_successes` times (default 3) must scaffold a skill directory that the graph references, not copies. | `tests/harness/test_experience_distill.py::test_consolidation_and_scaffold`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R022.3 Behavior Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Behavior.** Retrieval ranks records by context-key match and success rate. After each use, the outcome must update the use count and success count of the retrieved record. | `tests/harness/test_experience_distill.py::test_retrieval_and_feedback`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R022.4 Wiring Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Wiring.** The distiller attaches to `SkillGraphPipeline` at `agent_utilities/knowledge_graph/distillation/skill_graph_pipeline.py:836`, and `record_outcome` in `harness_record.py` calls it after each run. This row creates the call site in `record_outcome`. | `tests/harness/test_experience_distill.py::test_record_outcome_calls_distiller`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R022.5 Refusal Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Refusal.** A candidate from fewer than `min_rollouts` runs, or one without a source run identifier, must be refused with a typed `insufficient_evidence` row. A skill with a success rate under 0.5 after 10 uses must be retired. | `tests/harness/test_experience_distill.py::test_insufficient_evidence_and_retirement`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R022.6 Evidence Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Evidence.** Each record must link by `was_derived_from` to its source run traces. The run trace must record which records were retrieved for the run. | `tests/harness/test_experience_distill.py::test_provenance_and_retrieval_trace`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R022.7 Hot-path proof Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Hot-path proof.** The entry point is the run loop through `run_agent`. Three scripted successful runs must scaffold one skill, and a fourth run must retrieve it and update its use count. | `tests/harness/test_experience_distill_e2e.py::test_three_runs_scaffold_and_fourth_retrieves`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R023 Replay a received run program against observed state Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Replay a received run program against observed state.** The run loop must replay a program received from the engine. It must check observed state before each action and refuse on mismatch with a typed `deviation`. [arXiv:2606.17929] | tests/harness/test_run_program_e2e.py drives the rollup end to end. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R023.1 Model Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Model.** `RunProgram` and `ProgramStep` in `agent_utilities/harness/run_program.py` are new. They are received from EG-DECISION-ENGINE as admitted by GRAPHOS-A2A. A step holds a `precondition` over observed state, one tool action and an `expected_effect`. The nearest existing code is `ReplayManifest` and `InteractionRecord` (`agent_utilities/observability/replay_engine.py:20`, `:36`), which hold no preconditions. | `tests/harness/test_run_program.py::test_program_model_fields`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R023.2 Behavior Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Behavior.** The replayer checks each step precondition against observed state before the action. A match performs the action with no model call. `precondition_matcher` is a replaceable default. | `tests/harness/test_run_program.py::test_replay_without_model_calls`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R023.3 Behavior Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Behavior.** A mismatch ends the replay with a typed `deviation`. The replayer then returns control to the agent with the performed prefix. | `tests/harness/test_run_program.py::test_deviation_hands_back`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R023.4 Wiring Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Wiring.** `run_agent` (`agent_utilities/orchestration/agent_runner.py:702`) asks the engine for a program by task signature before its first model request. A received program replays, and a deviation falls through to the existing agent path. No production caller reaches `ReplayManifest` or `DistributedReplayEngine` today (`replay_engine.py:48` has no production caller). This row creates the call site in `run_agent`. | `tests/harness/test_run_program.py::test_run_agent_replays_received_program`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R023.5 Refusal Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Refusal.** The replayer must refuse a program that the engine did not mark admitted. It must refuse a step whose precondition fails. Both cases give a typed row, `program_not_admitted` or `deviation`, and the agent path runs. | `tests/harness/test_run_program.py::test_unadmitted_program_not_replayed`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R023.6 Evidence Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Evidence.** The run trace must record `programId`, `replayed`, `deviationStep` and `modelCallsAvoided`. Each field follows the write path of `AU-HARNESS-R017.4`. | `tests/harness/test_run_program.py::test_trace_fields_for_replay`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R023.7 Hot-path proof Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Hot-path proof.** The entry point is the run loop through `run_agent`. A scripted engine returns an admitted program for one task. The run must finish with zero model calls. A run with a changed screen state must deviate and finish through the agent. | `tests/harness/test_run_program_e2e.py::test_received_program_replays_then_deviates`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R024 Emit a span for every agent call, graph step and tool call Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Emit a span for every agent call, graph step and tool call.** The run loop must emit one connected span tree per run to the engine trace sink. The engine owns the trace records. | tests/harness/test_end_to_end_trace_e2e.py drives the rollup end to end. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R024.1 Model Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Model.** `RunSpanContract` in `agent_utilities/observability/run_span_contract.py` is new. It receives the span kinds and required attributes from EG-ORCH-VOCAB. Fallback defaults are `agent_call`, `tool_call`, `orchestration_step`, `flow_diagram` and `experience_read`. Required attributes are run id, node id, parent span id, tool name and decision id. Existing instrumentation is `build_fleet_instrumentation` (`agent_utilities/capabilities/telemetry_instrumentation.py:40`) and `setup_otel` (`agent_utilities/observability/custom_observability.py:850`). Neither fixes kinds or attributes. | `tests/harness/test_end_to_end_trace.py::test_span_kinds_and_attributes`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R024.2 Behavior Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Behavior.** Each graph orchestration step opens a span under the run span. Each tool call opens a child span. The flow diagram attaches to the run span as one attribute when `trace_flow_diagram` is on (default on). | `tests/harness/test_end_to_end_trace.py::test_step_tool_and_diagram_spans`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R024.3 Behavior Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Behavior.** Each span carries a model request digest, tool arguments and a result digest. The engine uses them to replay a step. A named default `span_attribute_redactor` drops content when content capture is off. | `tests/harness/test_end_to_end_trace.py::test_spans_carry_replay_digests`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R024.4 Wiring Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Wiring.** `default_runtime_capabilities` (`agent_utilities/capabilities/composition.py:160`) already attaches the instrumentation, and every `run_agent` call reaches it. Graph steps in `_dispatch_parallel_batch` (`agent_utilities/graph/_router_impl.py:1677`) and the tool path open no spans today. This row creates those call sites. `DistributedReplayEngine.record_step` (`replay_engine.py:81`) has no production caller today. | `tests/harness/test_end_to_end_trace.py::test_graph_step_opens_span`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R024.5 Refusal Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Refusal.** With no collector configured the run must continue and record a typed `trace_export_disabled` observation once. The emitter must drop and count a span that lacks a required attribute. A dropped span must never fail the run. | `tests/harness/test_end_to_end_trace.py::test_no_collector_and_incomplete_span`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R024.6 Evidence Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Evidence.** The runtime must record `spanCount`, `droppedSpanCount` and `traceId` in the run trace. Each field follows the write path of `AU-HARNESS-R017.4`. | `tests/harness/test_end_to_end_trace.py::test_trace_id_in_run_trace`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R024.7 Hot-path proof Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Hot-path proof.** The entry point is a served graph run through `_dispatch_parallel_batch` with a scripted model and an in-memory span exporter. The test must find one connected trace holding the agent, tool and orchestration spans and the diagram attribute. | `tests/harness/test_end_to_end_trace_e2e.py::test_served_run_exports_connected_trace`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R025 Make each harness edit a revertible change that carries a declared prediction Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Make each harness edit a revertible change that carries a declared prediction.** The loop must declare a prediction before each edit. It must apply the verdict it receives from the engine. [arXiv:2604.25850] | tests/harness/test_harness_edit_prediction_e2e.py drives the rollup end to end. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R025.1 Model Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Model.** `HarnessEditRecord` in `agent_utilities/harness/harness_edit_record.py` is new. It holds the changed file paths and a version-control revision. It holds a `DeclaredPrediction`: the task ids expected to flip and the direction. It holds the verdict `pending`, `verified`, `falsified` or `unverified`, received from EG-DECISION-ENGINE. Nearest code: `HarnessGate.check` (`agent_utilities/harness/harness_gate.py:127`) gates concentration only. `rollback_prompt` (`agent_utilities/core/registry/kg_adapter.py:660`) reverts prompts only. | `tests/harness/test_harness_edit_record.py::test_record_fields_and_verdicts`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R025.2 Behavior Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Behavior.** After the next round the loop sends the task outcomes and the prediction to the engine. The engine returns the verdict. `verification_rounds` and `min_flip_fraction` are received from the engine; fallback defaults are 1 and 0.5. | `tests/harness/test_harness_edit_record.py::test_verdict_received_from_engine`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R025.3 Behavior Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Behavior.** The loop applies an `unverified` or `falsified` verdict as a version-control revert of exactly the recorded files. The revert is itself a recorded change. No other file is touched. | `tests/harness/test_harness_edit_record.py::test_revert_touches_only_recorded_files`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R025.4 Wiring Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Wiring.** `AegisLoop` (`agent_utilities/harness/aegis_loop.py:91`, gate call at `:274`) is the production caller of `HarnessGate`. This row creates the call site that opens a `HarnessEditRecord` before each edit and closes it after the next round. Edits by `apply_edits` (`agent_utilities/harness/edit_engine.py:457`) have no declared prediction today. | `tests/harness/test_harness_edit_record.py::test_aegis_loop_opens_and_closes_record`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R025.5 Refusal Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Refusal.** The loop must refuse an edit with no declared prediction. It must also refuse an edit that touches a path outside its declared files. Both cases give a typed `prediction_missing` row before the edit applies. | `tests/harness/test_harness_edit_record.py::test_edit_without_prediction_refused`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R025.6 Evidence Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Evidence.** The loop must send the record to the engine. It holds the revision, prediction, verdict and run identifiers of both rounds. A revert links to its edit by `was_derived_from`. | `tests/harness/test_harness_edit_record.py::test_record_sent_with_runs`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R025.7 Hot-path proof Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Hot-path proof.** The entry point is one evolution round through `AegisLoop` with a scripted engine verdict. A scripted round applies two edits. One verdict is `verified` and one is `falsified`. The test must show one kept edit, one reverted file and two sent records. | `tests/harness/test_harness_edit_prediction_e2e.py::test_failed_prediction_is_reverted`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R026 Apply parallel-map primitives and recursive decomposition within received limits Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Apply parallel-map primitives and recursive decomposition within received limits.** The harness must fan an operation over a collection and split an over-window prompt into snippets. It must stop at the depth, cost and concurrency limits received from the engine. [arXiv:2512.24601] | tests/harness/test_bounded_decomposition_e2e.py drives the rollup end to end. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R026.1 Model Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Model.** `MapPrimitive` and `DecompositionBudget` in `agent_utilities/rlm/bounded_map.py` are new. A primitive names an operation, a collection reference and a result schema. A budget holds `max_depth`, `max_items`, `max_cost_usd` and `max_model_calls`, received from EG-DECISION-ENGINE. Fallback defaults apply only when the engine gives none. Existing code: `map_concurrent` (`agent_utilities/core/model_concurrency.py:296`) fans out with no budget, and `RLMConfig.max_depth` (`agent_utilities/rlm/config.py:60`) bounds depth only. | `tests/harness/test_bounded_map.py::test_primitive_and_budget_fields`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R026.2 Behavior Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Behavior.** The harness runs a primitive over the collection with one result slot per item. The item count is fixed before the run starts. `max_items` is received from the engine; fallback default 1000. A sub-call that spawns a further primitive consumes one depth level. | `tests/harness/test_bounded_map.py::test_map_stops_with_fixed_item_count`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R026.3 Behavior Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Behavior.** The engine marks a prompt as over the window using `context_window_fraction` (fallback default 0.8). The harness then stores the prompt as a variable. It gives the model the variable metadata and the primitives, never the text. Results combine programmatically through `run_full_rlm` (`agent_utilities/rlm/repl.py:972`). | `tests/harness/test_bounded_map.py::test_oversize_prompt_becomes_variable`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R026.4 Wiring Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Wiring.** `RLMEnvironment.run_parallel_sub_calls` (`agent_utilities/rlm/repl.py:470`) is the implementation. It has no production caller today. This row creates the call site inside `run_full_rlm`, which production reaches from `agent_utilities/graph/_router_impl.py:811` and `agent_utilities/graph/parallel_engine.py:1535`. The primitives replace unbounded loops in the sandbox namespace. | `tests/harness/test_bounded_map.py::test_run_full_rlm_uses_primitives`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R026.5 Refusal Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Refusal.** The sandbox must refuse a model-written loop over a collection. The refusal is a typed `loop_refused` observation that names the primitive to use. A breach of the depth, item, cost or call limit must end the work. The result is a typed `budget_exhausted` value. | `tests/harness/test_bounded_map.py::test_model_loop_refused_and_budget_breach_typed`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R026.6 Evidence Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Evidence.** The run trace must record `decompositionDepth`, `mapItemCount`, `subCallCount`, `decompositionCostUsd` and the budget outcome. Each field follows the write path of `AU-HARNESS-R017.4`. | `tests/harness/test_bounded_map.py::test_decomposition_fields_traced`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-HARNESS-R026.7 Hot-path proof Definition — AU-HARNESS / AU-HARNESS — Harness evolution and governed workCanonical requirement and verification source**Hot-path proof.** The entry point is the planning step through `_router_impl.py:811`. It uses a scripted model, scripted limits and a prompt of 3 times the window. The test must show a combined answer and no raw prompt in any request. It must also show one refused loop and a cost under the limit. | `tests/harness/test_bounded_decomposition_e2e.py::test_oversize_prompt_answered_within_budget`. | requirement | AU-HARNESS | SPECIFIED | No recorded commit/test evidence |
| AU-FREEZE AU-FREEZE — Freeze authoritative AU release evidence | spec | None | LANDED | No recorded commit/test evidence |
| AU-FREEZE-R001 Canonical AU release-evidence freeze manifest Definition — AU-FREEZE / AU-FREEZE — Freeze authoritative AU release evidenceCanonical requirement and verification source**Canonical AU release-evidence freeze manifest.** AU generates a canonical, machine-readable freeze manifest from one exact Git commit, covering repository URL, tree hash, version, tracked source digest, lock and manifest hashes, the generated EG client digest, build toolchain and timestamp, and binds it to the build artifact digest and each mandatory scanner and test result together with its immutable CI run URL. | Regenerating the manifest at the same commit produces byte-identical output except for a separately declared observation timestamp, and a dirty working tree or an unknown input fails generation. | requirement | AU-FREEZE | LANDED | 4059a262d70e |
| AU-FREEZE-R002 Quarantine unresolved scanner findings from the freeze Definition — AU-FREEZE / AU-FREEZE — Freeze authoritative AU release evidenceCanonical requirement and verification source**Quarantine unresolved scanner findings from the freeze.** A scanner finding that has not been remediated and merged is kept quarantined, separate from the frozen evidence set, so an unresolved finding cannot be counted as a passing mandatory scanner result. | A qualification check confirms the freeze blocks when an in-scope candidate still has a quarantined, unresolved scanner finding. | requirement | AU-FREEZE | LANDED | 4059a262d70e |
| AU-FREEZE-R003 CI installs the engine from the EG release wheel Definition — AU-FREEZE / AU-FREEZE — Freeze authoritative AU release evidenceCanonical requirement and verification source**CI installs the engine from the EG release wheel.** The `gates` job installs the Linux engine wheel from the epistemic-graph `engine-main` prerelease. It verifies the wheel against `SHA256SUMS` and records the source commit. An unavailable release falls back to the PyPI floor with a warning. The PyPI resolvability job stays advisory. | A `gates` run summary names the engine source commit, and `epistemic_graph` imports in the test environment. | requirement | AU-FREEZE | LANDED | 4059a262d70e 64d317c9e385 |
| AU-RETRIEVAL AU-RETRIEVAL — Reproducible structure-aware retrieval evaluation | spec | None | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R001 Benchmark structure-aware retrieval against served hybrid search Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Benchmark structure-aware retrieval against served hybrid search.** AU benchmarks constrained section-leaf selection against hierarchical-document retrieval and the production hybrid vector-plus-graph retrieval path, using a versioned synthetic fixture corpus and optionally held-out ecosystem documents, under identical visible candidate sets and token budgets, measuring citation validity, visibility correctness, p50/p95 latency and index/update cost. | A reproducible benchmark report compares all methods on the fixture corpus with Recall@1/3, nDCG, citation-validity and latency metrics, and adoption requires a statistically defensible gain on a held-out set with no visibility or citation regression. | requirement | AU-RETRIEVAL | LANDED | 64d317c9e385 |
| AU-RETRIEVAL-R002 Studied retrieval techniques enter only through the benchmark Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Studied retrieval techniques enter only through the benchmark.** AU must run a technique proposed by the study pipeline through the `AU-RETRIEVAL-R001` harness under identical candidate sets and budgets. AU must refuse admission without a paired result. | `tests/retrieval/test_study_admission.py` proves refusal without a result and acceptance with one. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R003 Iterative memory expansion stops at a declared budget and abstains Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Iterative memory expansion stops at a declared budget and abstains.** Agent memory access expands from cues through associative tags to content. It prunes paths using the evidence gathered so far and stops at a declared expansion budget. An exhausted budget returns abstention with the partial path. | See children `AU-RETRIEVAL-R003.1` to `AU-RETRIEVAL-R003.6`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R003.1 Model Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Model.** `ExpansionBudget` holds a maximum step count, a maximum node count and a token cap. `ExpansionPath` holds the ordered cue, tag and content nodes with the evidence score of each step. Both live in `agent_utilities/knowledge_graph/retrieval/`. | `tests/retrieval/test_memory_expansion.py::test_budget_and_path_types`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R003.2 Behavior Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Behavior.** Each step must expand the best-scoring frontier node, then prune paths whose evidence score falls below a named, replaceable threshold. Expansion must stop on enough evidence or on any budget limit [arXiv:2606.06036]. | `tests/retrieval/test_memory_expansion.py::test_prune_and_stop_rules`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R003.3 Wiring Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Wiring.** The expansion attaches to `retrieve_hybrid_budgeted` (`agent_utilities/knowledge_graph/retrieval/hybrid_retriever.py:1898`), which calls `retrieve_hybrid` today. This row creates the call site that passes cue nodes into the expansion when the caller requests memory mode. | `tests/retrieval/test_memory_expansion.py::test_memory_mode_reaches_expansion`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R003.4 Refusal Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Refusal.** An exhausted budget must return `RetrievalAbstention` with reason `expansion_budget_exhausted` and the partial `ExpansionPath`. The retriever must not return the partial path as an answer. | `tests/retrieval/test_memory_expansion.py::test_exhausted_budget_abstains`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R003.5 Evidence Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Evidence.** The retrieval trace must record the steps taken, the nodes pruned, the budget spent and the stop reason. The paired benchmark in `AU-RETRIEVAL-R001` must report these fields. | `tests/retrieval/test_memory_expansion.py::test_trace_budget_fields`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R003.6 Hot-path proof Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Hot-path proof.** The entry point is the served memory retrieval operation. A cue with enough evidence must answer within budget. A cue in a sparse graph must abstain with the partial path. The test observes the trace for both. | `tests/retrieval/test_memory_expansion_served.py::test_served_memory_retrieval_budget`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R004 The generation loop requests more evidence when told it is insufficient, then abstains with a typed refusal Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**The generation loop requests more evidence when told it is insufficient, then abstains with a typed refusal.** The loop receives the sufficiency verdict and the fallback policy from the engine. It must request another round on `insufficient`. Under strict fallback it must abstain and never answer. | See children `AU-RETRIEVAL-R004.1` to `AU-RETRIEVAL-R004.6`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R004.1 Model Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Model.** The loop receives `EvidenceSufficiency` (`sufficient`, `insufficient`) and `FallbackPolicy` (`lenient`, `strict`) from `EG-FEDERATED-QUERY`. The round limit is received from the engine; fallback default 2. The harness defines no sufficiency rule. | `tests/retrieval/test_insufficient_evidence.py::test_loop_receives_verdict_and_policy`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R004.2 Behavior Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Behavior.** `ExecutableRagProgram.run` (`executable_rag.py:236`) must request another round when the verdict is `insufficient`. It must stop requesting at the received round limit. Then the received policy applies. `lenient` returns the extractive answer. `strict` abstains. | `tests/retrieval/test_insufficient_evidence.py::test_loop_requests_rounds_then_applies_policy`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R004.3 Wiring Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Wiring.** The run loop reads the verdict where it now reads the marker test at `executable_rag.py:256` and `executable_rag.py:266`. `HybridRetriever.retrieve_executable` (`hybrid_retriever.py:1917`) passes the received policy. Its production caller is `_analysis_action_executable_rag` (`analysis_tools.py:2294`). | `tests/retrieval/test_insufficient_evidence.py::test_policy_reaches_answer_step`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R004.4 Refusal Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Refusal.** Under `strict` the loop must return `RetrievalAbstention` with reason `insufficient_evidence` and the evidence gathered. It must not return an answer string. The type is the one in `AU-RETRIEVAL-R003.4`. | `tests/retrieval/test_insufficient_evidence.py::test_strict_abstains_without_answer`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R004.5 Evidence Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Evidence.** The loop must emit each round, the received verdict, the received policy and the outcome (`answered` or `abstained`) as `StepTrace` events (`executable_rag.py:66`). | `tests/retrieval/test_insufficient_evidence.py::test_trace_records_rounds_and_outcome`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R004.6 Hot-path proof Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Hot-path proof.** The entry point is the served `executable_rag` analysis action. With a scripted `strict` policy and an `insufficient` verdict, the loop must abstain after the round limit. The test observes the trace. | `tests/retrieval/test_insufficient_evidence_served.py::test_served_executable_rag_abstains_under_strict`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R005 The iterative loop stops when the engine's stop verdict says so Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**The iterative loop stops when the engine's stop verdict says so.** The loop receives a stop verdict, with its reason and margin, each round. It must stop on `stop` and continue otherwise. It must trace the received reason. | See children `AU-RETRIEVAL-R005.1` to `AU-RETRIEVAL-R005.6`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R005.1 Model Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Model.** The loop receives `StopDecision` (reason, margin, threshold) from `EG-FEDERATED-QUERY`. The engine computes the calibrated margin. The harness holds no calibration table. Any threshold is received from the engine; fallback default is the repeat-only rule. | `tests/retrieval/test_confidence_margin_stop.py::test_loop_receives_stop_decision`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R005.2 Behavior Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Behavior.** The loop must pass each round's answer to the engine and stop when the verdict says stop. It must not compare confidences itself. | `tests/retrieval/test_confidence_margin_stop.py::test_loop_obeys_stop_verdict`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R005.3 Wiring Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Wiring.** The loop calls the engine at `iterative_expansion.py:171` and `iterative_expansion.py:229`, and at `active_reconstruction.py:237` and `active_reconstruction.py:282`. The production caller of the first is `engine_query.py:1509` through `IterativeQueryExpander.run`. | `tests/retrieval/test_confidence_margin_stop.py::test_expander_applies_engine_verdict`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R005.4 Refusal Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Refusal.** When the engine gives no verdict, the loop must use the fallback repeat-only rule and record the margin as `unavailable`. A malformed verdict must raise a typed validation error. | `tests/retrieval/test_confidence_margin_stop.py::test_missing_or_invalid_verdict`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R005.5 Evidence Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Evidence.** The loop must emit the received stop reason, margin, threshold and round count to the trace. | `tests/retrieval/test_confidence_margin_stop.py::test_trace_stop_reason_fields`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R005.6 Hot-path proof Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Hot-path proof.** The entry point is the query operation in `engine_query.py` that builds the expander. A scripted `stop` verdict must end the loop early. A `continue` verdict must keep it running. The test observes the trace. | `tests/retrieval/test_confidence_margin_stop_served.py::test_served_query_obeys_stop_verdict`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R006 The answer step applies the engine's arbitration verdict Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**The answer step applies the engine's arbitration verdict.** The step receives the verdict between model prior and retrieved evidence from the engine. It must return the chosen candidate, or abstain with a typed refusal. | See children `AU-RETRIEVAL-R006.1` to `AU-RETRIEVAL-R006.6`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R006.1 Model Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Model.** The step receives `ArbitrationResult` (chosen candidate or abstention, both candidates, evidence classes) from `EG-FEDERATED-QUERY`. The engine owns the margin and the prior probe. Any margin is received from the engine; fallback default is abstain. | `tests/retrieval/test_prior_evidence_arbitration.py::test_step_receives_arbitration_result`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R006.2 Behavior Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Behavior.** The step must return the chosen candidate when the engine chooses one. It must abstain when the engine abstains. It must not compare the candidates itself. | `tests/retrieval/test_prior_evidence_arbitration.py::test_step_applies_verdict`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R006.3 Wiring Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Wiring.** The step applies the verdict at the answer step of `ExecutableRagProgram.run` (`executable_rag.py:256`), after `answer_fn`. The production caller is `_analysis_action_executable_rag` (`analysis_tools.py:2294`). | `tests/retrieval/test_prior_evidence_arbitration.py::test_verdict_applied_at_answer_step`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R006.4 Refusal Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Refusal.** On an abstain verdict the step must return `RetrievalAbstention` with reason `prior_evidence_conflict`. It must carry both candidates and both evidence classes. | `tests/retrieval/test_prior_evidence_arbitration.py::test_abstain_verdict_carries_both`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R006.5 Evidence Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Evidence.** The step must emit the received verdict, both candidates, the margin used and the evidence classes to the trace. | `tests/retrieval/test_prior_evidence_arbitration.py::test_trace_records_both_candidates`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |
| AU-RETRIEVAL-R006.6 Hot-path proof Definition — AU-RETRIEVAL / AU-RETRIEVAL — Reproducible structure-aware retrieval evaluationCanonical requirement and verification source**Hot-path proof.** The entry point is the served `executable_rag` analysis action. A scripted choose verdict must return the candidate. A scripted abstain verdict must abstain with both candidates. The test observes the trace. | `tests/retrieval/test_prior_evidence_arbitration_served.py::test_served_verdict_application`. | requirement | AU-RETRIEVAL | SPECIFIED | No recorded commit/test evidence |