A

Delivery structure

13 specs, 720 requirements, 1 with no code mapped
Knuckles-Team/agent-utilitiesSpec delivery
Specs (13)
  • 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
Records not done
  • 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.

B

Delivery states

count of total

Requirements (720)

SPECIFIED (specified)444 of 720 requirements
LANDED (landed)143 of 720 requirements
VERIFIED (verified)133 of 720 requirements

Specs (13)

SPECIFIED (specified)10 of 13 specs
LANDED (landed)3 of 13 specs

Each bar shows one state against all records of the same kind.

Percentages count current rows. Done means VERIFIED.

C

State definitions

delivery_state
StateDefinition
SPECIFIEDThe requirement is written. No code for it is on the default branch.
LANDEDA commit that carries its ID in a Spec trailer is on the default branch.
VERIFIEDIt 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

D

Specifications

specs/*/status.json
Spec / titleReq.LandedDoneSpec stateCode references
AU-CONTEXTAU-CONTEXT — Agent context, retrieval feedback and finance roles2313/2311SPECIFIEDagent_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 plane10037/10015SPECIFIEDagent_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 policy2410/247SPECIFIEDagent_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 deconstruction21282/21250SPECIFIED`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 gates1811/184SPECIFIED.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 lifecycle149/146SPECIFIEDrequirements.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 AU1311/133SPECIFIEDcutover 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 reliability2525/256LANDEDscripts/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 contract10957/10923SPECIFIEDagent_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 content55/50LANDEDscripts/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 work14412/1448SPECIFIEDagent_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 evidence33/30LANDEDagent_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 evaluation301/300SPECIFIEDagent_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.

U

Spec architecture

repository / component packages

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
R

Spec relationships

declared dependencies and references

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
SpecRelationshipTargetEvidence
AU-BASELINENo relationships declared; dependencies unknown
AU-BOUNDARYreferences`agent-control-plane`Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/au-boundary-deconstruction/plan.md
AU-BOUNDARYreferences`agent-security-policy`Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/au-boundary-deconstruction/plan.md
AU-BOUNDARYreferences`au-boundary-quality`Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/au-boundary-deconstruction/plan.md
AU-BOUNDARYreferences`au-developer-environment`Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/au-boundary-deconstruction/plan.md
AU-BOUNDARYreferences`au-engine-duplicate-retirement`Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/au-boundary-deconstruction/plan.md
AU-BOUNDARYreferences`au-integration-reliability`Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/au-boundary-deconstruction/plan.md
AU-BOUNDARYreferences`au-semantic-client`Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/au-boundary-deconstruction/plan.md
AU-BOUNDARYreferences`harness-evolution`Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/au-boundary-deconstruction/plan.md
AU-BOUNDARYreferences`agent-context-and-finance`Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/au-boundary-deconstruction/spec.md
AU-CONTEXTreferencesAU-SEC-01Knuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/agent-context-and-finance/spec.md
AU-CONTROLreferencesharness-evolutionKnuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/agent-control-plane/plan.md
AU-DEVNo relationships declared; dependencies unknown
AU-FREEZENo relationships declared; dependencies unknown
AU-HARNESSreferencesagent control planeKnuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/harness-evolution/spec.md
AU-INTEGRATIONNo relationships declared; dependencies unknown
AU-QUALNo relationships declared; dependencies unknown
AU-RETIREreferencesboundary cutover specKnuckles-Team/agent-utilities: file exists; coverage not verified; source: specs/au-engine-duplicate-retirement/spec.md
AU-RETRIEVALNo relationships declared; dependencies unknown
AU-SECNo relationships declared; dependencies unknown
AU-SEMANTICNo relationships declared; dependencies unknown
G

Open issues and pull requests

open at capture

Issues

0 open at capture.

    Pull Requests

    2 open at capture.

    The build reads GitHub one time. This page makes no live API requests.

    J

    Record inventory

    733 records

    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 / sourceKindParentStateCommit / test evidence
    AU-CONTEXT
    AU-CONTEXT — Agent context, retrieval feedback and finance roles
    specNoneSPECIFIEDNo 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.
    requirementAU-CONTEXTVERIFIED88c61dc9164c
    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.
    requirementAU-CONTEXTVERIFIED88c61dc9164c
    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.
    requirementAU-CONTEXTVERIFIED88c61dc9164c
    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.
    requirementAU-CONTEXTSPECIFIED88c61dc9164c
    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`
    requirementAU-CONTEXTSPECIFIEDNo 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`
    requirementAU-CONTEXTSPECIFIEDNo 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`
    requirementAU-CONTEXTSPECIFIEDNo 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`
    requirementAU-CONTEXTSPECIFIEDNo 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`
    requirementAU-CONTEXTSPECIFIEDNo 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`
    requirementAU-CONTEXTSPECIFIEDNo 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.
    requirementAU-CONTEXTLANDED88c61dc9164c
    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`.
    requirementAU-CONTEXTLANDED88c61dc9164c
    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.
    requirementAU-CONTEXTVERIFIED0209a00db1f0
    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.
    requirementAU-CONTEXTVERIFIED0cd7be250b3d
    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.
    requirementAU-CONTEXTVERIFIED0cd7be250b3d
    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.
    requirementAU-CONTEXTSPECIFIED703c3eb9d88d
    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.
    requirementAU-CONTEXTVERIFIED0209a00db1f0
    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.
    requirementAU-CONTEXTSPECIFIED9effc03d5c99
    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.
    requirementAU-CONTEXTSPECIFIEDNo 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.
    requirementAU-CONTEXTVERIFIED0cd7be250b3d
    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.
    requirementAU-CONTEXTVERIFIED0cd7be250b3d
    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`.
    requirementAU-CONTEXTVERIFIED9effc03d5c99
    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.
    requirementAU-CONTEXTVERIFIED9effc03d5c99
    tests/unit/finance/test_recommend_entrypoint.py:122
    tests/unit/finance/test_recommend_entrypoint.py:92
    AU-CONTROL
    AU-CONTROL — Agent control plane
    specNoneSPECIFIEDNo 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.
    requirementAU-CONTROLVERIFIEDc049e325e91d
    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.
    requirementAU-CONTROLVERIFIED4351f26b3d3b
    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.
    requirementAU-CONTROLVERIFIEDc049e325e91d
    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.
    requirementAU-CONTROLVERIFIEDc049e325e91d
    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.
    requirementAU-CONTROLVERIFIED47a52e7442bd
    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.
    requirementAU-CONTROLVERIFIED4351f26b3d3b
    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.
    requirementAU-CONTROLVERIFIED6a43f914f823
    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.
    requirementAU-CONTROLVERIFIEDa1dd4111f04f
    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.
    requirementAU-CONTROLVERIFIEDa1dd4111f04f
    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.
    requirementAU-CONTROLVERIFIEDa1dd4111f04f
    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.
    requirementAU-CONTROLVERIFIEDa1dd4111f04f
    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.
    requirementAU-CONTROLLANDEDc049e325e91d
    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.
    requirementAU-CONTROLLANDEDc049e325e91d
    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.
    requirementAU-CONTROLLANDED148ef73124d2
    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.
    requirementAU-CONTROLVERIFIED148ef73124d2
    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.
    requirementAU-CONTROLLANDED148ef73124d2
    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.
    requirementAU-CONTROLLANDED148ef73124d2
    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.
    requirementAU-CONTROLVERIFIED4a5540dd2e3d
    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.
    requirementAU-CONTROLVERIFIED4a5540dd2e3d
    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.
    requirementAU-CONTROLLANDED21ccce45c2d7
    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.
    requirementAU-CONTROLLANDED21ccce45c2d7
    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.
    requirementAU-CONTROLLANDEDd8e0d2e999e1
    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.
    requirementAU-CONTROLLANDED4351f26b3d3b
    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.
    requirementAU-CONTROLLANDED0d62109b2c36
    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.
    requirementAU-CONTROLLANDED8d94e1c97b28
    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.
    requirementAU-CONTROLLANDED8d94e1c97b28
    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.
    requirementAU-CONTROLLANDED8d94e1c97b28
    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.
    requirementAU-CONTROLLANDED5301b427a6a5
    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.
    requirementAU-CONTROLLANDED5301b427a6a5
    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.
    requirementAU-CONTROLLANDED5301b427a6a5
    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.
    requirementAU-CONTROLLANDED5301b427a6a5
    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.
    requirementAU-CONTROLLANDED1ff1099e5d57
    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.
    requirementAU-CONTROLLANDED1ff1099e5d57
    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.
    requirementAU-CONTROLLANDED1ff1099e5d57
    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.
    requirementAU-CONTROLLANDED1ff1099e5d57
    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.
    requirementAU-CONTROLSPECIFIED8c6fb318c5d3
    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`.
    requirementAU-CONTROLLANDED79a0b3968c7c
    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.
    requirementAU-CONTROLVERIFIED018e9824140f
    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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo 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`.
    requirementAU-CONTROLSPECIFIEDNo recorded commit/test evidence
    AU-SEC
    AU-SEC — Agent security and governed policy
    specNoneSPECIFIEDNo 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.
    requirementAU-SECVERIFIED19109362ddd4
    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.
    requirementAU-SECVERIFIED2acbf25f8bb2
    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.
    requirementAU-SECVERIFIED2acbf25f8bb2
    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.
    requirementAU-SECVERIFIED2acbf25f8bb2
    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.
    requirementAU-SECLANDED2acbf25f8bb2
    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.
    requirementAU-SECLANDED2acbf25f8bb2
    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.
    requirementAU-SECLANDED0b70fad31246
    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.
    requirementAU-SECVERIFIED2acbf25f8bb2
    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.
    requirementAU-SECVERIFIED2acbf25f8bb2
    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.
    requirementAU-SECVERIFIED3fb99d2ff295
    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`.
    requirementAU-SECSPECIFIEDNo 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`.
    requirementAU-SECSPECIFIEDNo 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`.
    requirementAU-SECSPECIFIEDNo 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`.
    requirementAU-SECSPECIFIEDNo 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`.
    requirementAU-SECSPECIFIEDNo 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`.
    requirementAU-SECSPECIFIEDNo 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`.
    requirementAU-SECSPECIFIEDNo 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`.`
    requirementAU-SECSPECIFIEDNo 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`
    requirementAU-SECSPECIFIEDNo 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`
    requirementAU-SECSPECIFIEDNo 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`
    requirementAU-SECSPECIFIEDNo 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`
    requirementAU-SECSPECIFIEDNo 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`
    requirementAU-SECSPECIFIEDNo 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`
    requirementAU-SECSPECIFIEDNo recorded commit/test evidence
    AU-BOUNDARY
    AU-BOUNDARY — AU boundary deconstruction
    specNoneSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDaa5eba73e0f7
    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.
    requirementAU-BOUNDARYVERIFIED65d9961401fd
    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.
    requirementAU-BOUNDARYVERIFIED0eb67c99cf0a
    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.
    requirementAU-BOUNDARYVERIFIED902f906cac97
    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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYVERIFIED8bc78cbdfda1
    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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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`.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYVERIFIED7717d2e627ab
    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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDdb29b2da626e
    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.
    requirementAU-BOUNDARYLANDEDdb29b2da626e
    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.
    requirementAU-BOUNDARYVERIFIEDdb29b2da626e
    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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIED2456745c1e4d
    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.
    requirementAU-BOUNDARYVERIFIED65d9961401fd
    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).
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYVERIFIED908c5080c0b5
    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.
    requirementAU-BOUNDARYSPECIFIED2456745c1e4d
    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.
    requirementAU-BOUNDARYVERIFIED65d9961401fd
    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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDa754f1299033
    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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYVERIFIEDNo 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.
    requirementAU-BOUNDARYVERIFIED105559f760c3
    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.
    requirementAU-BOUNDARYSPECIFIEDa754f1299033
    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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDa754f1299033
    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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYVERIFIEDNo 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.
    requirementAU-BOUNDARYVERIFIED5a00da215c55
    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.
    requirementAU-BOUNDARYSPECIFIED2456745c1e4d
    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.
    requirementAU-BOUNDARYVERIFIED635f38f64aca
    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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIED2456745c1e4d
    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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYLANDED34a849a78973
    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`.
    requirementAU-BOUNDARYSPECIFIED4a5540dd2e3d
    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.
    requirementAU-BOUNDARYVERIFIEDa2616c523584
    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.
    requirementAU-BOUNDARYVERIFIEDa2616c523584
    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.
    requirementAU-BOUNDARYVERIFIED811ea6463bb6
    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.
    requirementAU-BOUNDARYVERIFIED811ea6463bb6
    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.
    requirementAU-BOUNDARYVERIFIEDbafa21805b51
    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.
    requirementAU-BOUNDARYVERIFIEDbafa21805b51
    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.
    requirementAU-BOUNDARYVERIFIED2a5643693ab7
    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.
    requirementAU-BOUNDARYVERIFIED2a5643693ab7
    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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIED3254358d61d6
    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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIED2456745c1e4d
    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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYVERIFIED13655b508554
    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`.
    requirementAU-BOUNDARYVERIFIED5a00da215c55
    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.
    requirementAU-BOUNDARYVERIFIED4a5540dd2e3d
    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.
    requirementAU-BOUNDARYSPECIFIED8b325ddf1818
    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.
    requirementAU-BOUNDARYLANDED8b325ddf1818
    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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIED8b325ddf1818
    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.
    requirementAU-BOUNDARYVERIFIED0fbe4bf46720
    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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIED8b325ddf1818
    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.
    requirementAU-BOUNDARYLANDED8b325ddf1818
    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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIED8b325ddf1818
    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.
    requirementAU-BOUNDARYLANDED8b325ddf1818
    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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIED8b325ddf1818
    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.
    requirementAU-BOUNDARYLANDED8b325ddf1818
    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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYVERIFIED4a5540dd2e3d
    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.
    requirementAU-BOUNDARYSPECIFIED4a5540dd2e3d
    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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYVERIFIED4a5540dd2e3d
    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.
    requirementAU-BOUNDARYLANDED00234474001c
    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.
    requirementAU-BOUNDARYVERIFIED4a5540dd2e3d
    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.
    requirementAU-BOUNDARYLANDED4d0883da01d2
    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.
    requirementAU-BOUNDARYLANDED4d0883da01d2
    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.
    requirementAU-BOUNDARYVERIFIED32bdd70f5ea4
    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.
    requirementAU-BOUNDARYVERIFIED32bdd70f5ea4
    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.
    requirementAU-BOUNDARYVERIFIED8c6fb318c5d3
    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.
    requirementAU-BOUNDARYVERIFIED5c70aeb872d9
    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.
    requirementAU-BOUNDARYLANDED4d0883da01d2
    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.
    requirementAU-BOUNDARYVERIFIED26b087dd3b2f
    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.
    requirementAU-BOUNDARYVERIFIED26b087dd3b2f
    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.
    requirementAU-BOUNDARYVERIFIED26b087dd3b2f
    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.
    requirementAU-BOUNDARYVERIFIED26b087dd3b2f
    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.
    requirementAU-BOUNDARYVERIFIED26b087dd3b2f
    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.
    requirementAU-BOUNDARYVERIFIED26b087dd3b2f
    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.
    requirementAU-BOUNDARYVERIFIED4a5540dd2e3d
    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.
    requirementAU-BOUNDARYSPECIFIED1446fc4c3db5
    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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYVERIFIED6825115f4ac3
    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.
    requirementAU-BOUNDARYVERIFIED62e0b302ed8e
    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.
    requirementAU-BOUNDARYVERIFIEDc5d1bf3f8286
    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.
    requirementAU-BOUNDARYVERIFIEDd93381eba0db
    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.
    requirementAU-BOUNDARYVERIFIEDc4c654815738
    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.
    requirementAU-BOUNDARYVERIFIEDc0dc104b77a9
    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.
    requirementAU-BOUNDARYVERIFIED4a5540dd2e3d
    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.
    requirementAU-BOUNDARYLANDED743e98cda405
    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.
    requirementAU-BOUNDARYVERIFIED4a5540dd2e3d
    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.
    requirementAU-BOUNDARYVERIFIED4a5540dd2e3d
    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.
    requirementAU-BOUNDARYLANDED5e15da9f9e40
    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.
    requirementAU-BOUNDARYLANDED795afc53f54d
    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.
    requirementAU-BOUNDARYLANDED795afc53f54d
    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.
    requirementAU-BOUNDARYLANDED795afc53f54d
    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.
    requirementAU-BOUNDARYLANDED795afc53f54d
    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.
    requirementAU-BOUNDARYLANDED8821aee3c37f
    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.
    requirementAU-BOUNDARYLANDED795afc53f54d
    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.
    requirementAU-BOUNDARYLANDED795afc53f54d
    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.
    requirementAU-BOUNDARYLANDED795afc53f54d
    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.
    requirementAU-BOUNDARYLANDED795afc53f54d
    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.
    requirementAU-BOUNDARYLANDEDdbe24ea1b0d3
    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.
    requirementAU-BOUNDARYLANDED2456745c1e4d
    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.
    requirementAU-BOUNDARYLANDED8a45ab8013ad
    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.
    requirementAU-BOUNDARYLANDED795afc53f54d
    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.
    requirementAU-BOUNDARYLANDED795afc53f54d
    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.
    requirementAU-BOUNDARYLANDED795afc53f54d
    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.
    requirementAU-BOUNDARYLANDED795afc53f54d
    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.
    requirementAU-BOUNDARYLANDED795afc53f54d
    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.
    requirementAU-BOUNDARYLANDED795afc53f54d
    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.
    requirementAU-BOUNDARYLANDED795afc53f54d
    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.
    requirementAU-BOUNDARYSPECIFIED49b087cb97e4
    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.
    requirementAU-BOUNDARYVERIFIED635f38f64aca
    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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYSPECIFIEDNo 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.
    requirementAU-BOUNDARYLANDED00234474001c
    0e44186eac39
    AU-QUAL
    AU-QUAL — Reproducible AU boundary and quality gates
    specNoneSPECIFIEDNo 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.
    requirementAU-QUALLANDEDc15d278239d3
    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.
    requirementAU-QUALLANDEDce632099b6b9
    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.
    requirementAU-QUALLANDED50f312aeb06c
    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.
    requirementAU-QUALLANDED0fa2df86ace4
    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.
    requirementAU-QUALLANDEDd9d7cc7b59c0
    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
    requirementAU-QUALLANDEDf25a287bac6c
    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
    requirementAU-QUALVERIFIEDd9d7cc7b59c0
    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.
    requirementAU-QUALVERIFIEDd9d7cc7b59c0
    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.
    requirementAU-QUALVERIFIED0fa2df86ace4
    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.
    requirementAU-QUALVERIFIED4a5540dd2e3d
    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.
    requirementAU-QUALLANDEDcf1cdce6a6e4
    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`.`
    requirementAU-QUALSPECIFIEDNo 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`
    requirementAU-QUALSPECIFIEDNo 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`
    requirementAU-QUALSPECIFIEDNo 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`
    requirementAU-QUALSPECIFIEDNo 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`
    requirementAU-QUALSPECIFIEDNo 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`
    requirementAU-QUALSPECIFIEDNo 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`
    requirementAU-QUALSPECIFIEDNo recorded commit/test evidence
    AU-DEV
    AU-DEV — Public AU development environment and skill lifecycle
    specNoneSPECIFIEDNo 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.
    requirementAU-DEVSPECIFIEDed6485573f1e
    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
    requirementAU-DEVLANDEDc48cba9d3f95
    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.
    requirementAU-DEVVERIFIEDc48cba9d3f95
    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.
    requirementAU-DEVSPECIFIEDNo 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.
    requirementAU-DEVLANDED29d80148b462
    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.
    requirementAU-DEVSPECIFIEDed6485573f1e
    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
    requirementAU-DEVLANDEDc48cba9d3f95
    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.
    requirementAU-DEVVERIFIEDc48cba9d3f95
    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.
    requirementAU-DEVSPECIFIEDNo 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.
    requirementAU-DEVVERIFIED87539533cf33
    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.
    requirementAU-DEVVERIFIED4d6f3ab2ae2b
    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.
    requirementAU-DEVSPECIFIEDNo 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.
    requirementAU-DEVVERIFIEDd330871d37af
    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.
    requirementAU-DEVVERIFIEDd330871d37af
    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
    specNoneSPECIFIEDNo 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.
    requirementAU-RETIRESPECIFIED4a5540dd2e3d
    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`.
    requirementAU-RETIRELANDED6a408267e403
    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.
    requirementAU-RETIRESPECIFIEDNo 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.
    requirementAU-RETIRELANDEDd165697978b7
    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.
    requirementAU-RETIRELANDED6a408267e403
    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.
    requirementAU-RETIRELANDED82c3c3016b15
    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.
    requirementAU-RETIREVERIFIED82c3c3016b15
    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.
    requirementAU-RETIRELANDED82c3c3016b15
    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.
    requirementAU-RETIREVERIFIEDbc7bba33932d
    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.
    requirementAU-RETIRELANDEDdd925ea09bf7
    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.
    requirementAU-RETIREVERIFIED42f6dada3749
    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.
    requirementAU-RETIRELANDED82eff59f049d
    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.
    requirementAU-RETIRELANDED6a408267e403
    AU-INTEGRATION
    AU-INTEGRATION — AU integration and release reliability
    specNoneLANDEDNo 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.
    requirementAU-INTEGRATIONVERIFIED34481f825411
    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.
    requirementAU-INTEGRATIONLANDED46da005a6c4c
    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.
    requirementAU-INTEGRATIONLANDEDeabd68d558c0
    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.
    requirementAU-INTEGRATIONVERIFIED5061f520d040
    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.
    requirementAU-INTEGRATIONLANDEDc15d278239d3
    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.
    requirementAU-INTEGRATIONLANDEDeabd68d558c0
    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.
    requirementAU-INTEGRATIONLANDEDe48977329379
    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.
    requirementAU-INTEGRATIONLANDEDff819b4cc434
    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.
    requirementAU-INTEGRATIONLANDEDc15d278239d3
    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.
    requirementAU-INTEGRATIONLANDED35fde39bdb9d
    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.
    requirementAU-INTEGRATIONLANDED79694ed969b6
    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.
    requirementAU-INTEGRATIONLANDED37eadb5dab34
    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.
    requirementAU-INTEGRATIONLANDED37eadb5dab34
    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.
    requirementAU-INTEGRATIONLANDED35fde39bdb9d
    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
    requirementAU-INTEGRATIONLANDED64d317c9e385
    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.
    requirementAU-INTEGRATIONLANDED23920f0ed817
    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.
    requirementAU-INTEGRATIONLANDED43197d7c65a3
    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.
    requirementAU-INTEGRATIONLANDED43197d7c65a3
    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.
    requirementAU-INTEGRATIONLANDED35fde39bdb9d
    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
    requirementAU-INTEGRATIONLANDED64d317c9e385
    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.
    requirementAU-INTEGRATIONVERIFIED003679966f78
    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.
    requirementAU-INTEGRATIONVERIFIED42f6dada3749
    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`.
    requirementAU-INTEGRATIONLANDED00220bc40313
    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.
    requirementAU-INTEGRATIONVERIFIED0f6916669b59
    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.
    requirementAU-INTEGRATIONVERIFIED6a43f914f823
    tests/unit/knowledge_graph/ingestion/test_native_envelope_ingest.py:615
    AU-SEMANTIC
    AU-SEMANTIC — AU semantic client and generated contract
    specNoneSPECIFIEDNo 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.
    requirementAU-SEMANTICLANDED2648d0b28ad0
    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.
    requirementAU-SEMANTICVERIFIED0e5fc3801885
    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.
    requirementAU-SEMANTICLANDED83a157bf120b
    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.
    requirementAU-SEMANTICLANDED981194f50ab4
    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.
    requirementAU-SEMANTICLANDED83a157bf120b
    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.
    requirementAU-SEMANTICSPECIFIEDb8ef12acba3c
    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.
    requirementAU-SEMANTICLANDEDb8ef12acba3c
    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.
    requirementAU-SEMANTICVERIFIEDeb94d8306a5b
    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.
    requirementAU-SEMANTICVERIFIEDf235aa252a91
    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.
    requirementAU-SEMANTICVERIFIED98efc7009d5f
    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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICVERIFIED4463e2ba37cc
    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.
    requirementAU-SEMANTICVERIFIEDfd044131b941
    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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICLANDED981194f50ab4
    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.
    requirementAU-SEMANTICSPECIFIEDb8ef12acba3c
    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.
    requirementAU-SEMANTICVERIFIEDb8ef12acba3c
    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.
    requirementAU-SEMANTICSPECIFIEDb8ef12acba3c
    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.
    requirementAU-SEMANTICSPECIFIEDNo 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`.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICLANDED703c3eb9d88d
    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.
    requirementAU-SEMANTICLANDED4eac8c6dc419
    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.
    requirementAU-SEMANTICLANDEDb8ef12acba3c
    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.
    requirementAU-SEMANTICVERIFIEDb8ef12acba3c
    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.
    requirementAU-SEMANTICLANDEDb8ef12acba3c
    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.
    requirementAU-SEMANTICLANDED5d44f029d3fd
    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.
    requirementAU-SEMANTICLANDED5d44f029d3fd
    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.
    requirementAU-SEMANTICSPECIFIEDb881d5bca432
    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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICVERIFIEDb02e3995039e
    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.
    requirementAU-SEMANTICVERIFIED92974bae8c3e
    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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICLANDED8b325ddf1818
    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.
    requirementAU-SEMANTICVERIFIEDNo 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.
    requirementAU-SEMANTICVERIFIED1558cd9d0726
    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.
    requirementAU-SEMANTICLANDED743e98cda405
    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.
    requirementAU-SEMANTICLANDED703c3eb9d88d
    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.
    requirementAU-SEMANTICLANDED4eac8c6dc419
    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.
    requirementAU-SEMANTICVERIFIEDNo 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.
    requirementAU-SEMANTICVERIFIED1558cd9d0726
    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.
    requirementAU-SEMANTICLANDED76d440ff79dc
    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.
    requirementAU-SEMANTICLANDED117359dabc9a
    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.
    requirementAU-SEMANTICLANDED2e5c8d7f2d8b
    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.
    requirementAU-SEMANTICVERIFIEDNo 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.
    requirementAU-SEMANTICVERIFIED1558cd9d0726
    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.
    requirementAU-SEMANTICSPECIFIED2e5c8d7f2d8b
    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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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`.
    requirementAU-SEMANTICSPECIFIEDNo 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`.
    requirementAU-SEMANTICSPECIFIEDNo 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`.
    requirementAU-SEMANTICSPECIFIEDNo 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`.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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`.
    requirementAU-SEMANTICVERIFIED6b889c64f003
    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.
    requirementAU-SEMANTICVERIFIEDNo 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.
    requirementAU-SEMANTICVERIFIED8e7d9986a683
    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.
    requirementAU-SEMANTICVERIFIEDbb4178637fc9
    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`.
    requirementAU-SEMANTICSPECIFIEDNo 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`.
    requirementAU-SEMANTICVERIFIEDe21a74412b1b
    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`.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICSPECIFIEDNo 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.
    requirementAU-SEMANTICVERIFIED5a201ecff633
    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.
    requirementAU-SEMANTICVERIFIED5a201ecff633
    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.
    requirementAU-SEMANTICLANDED2e5c8d7f2d8b
    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.
    requirementAU-SEMANTICLANDED023174b91e2e
    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.
    requirementAU-SEMANTICLANDED690785a51851
    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.
    requirementAU-SEMANTICLANDED472e6ab23472
    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.
    requirementAU-SEMANTICLANDED023174b91e2e
    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.
    requirementAU-SEMANTICLANDEDc23e42b6ed43
    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.
    requirementAU-SEMANTICLANDEDda51647a7383
    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.
    requirementAU-SEMANTICLANDEDa05257fb6541
    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.
    requirementAU-SEMANTICLANDED274d4c375294
    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.
    requirementAU-SEMANTICLANDEDc23e42b6ed43
    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.
    requirementAU-SEMANTICLANDEDc23e42b6ed43
    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.
    requirementAU-SEMANTICLANDED5e15da9f9e40
    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.
    requirementAU-SEMANTICLANDEDc23e42b6ed43
    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.
    requirementAU-SEMANTICLANDEDc23e42b6ed43
    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.
    requirementAU-SEMANTICLANDED12e4a7fe9749
    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`.`
    requirementAU-SEMANTICSPECIFIEDNo 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`
    requirementAU-SEMANTICSPECIFIEDNo 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`
    requirementAU-SEMANTICSPECIFIEDNo 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`
    requirementAU-SEMANTICSPECIFIEDNo 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`
    requirementAU-SEMANTICSPECIFIEDNo 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`
    requirementAU-SEMANTICSPECIFIEDNo 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`
    requirementAU-SEMANTICSPECIFIEDNo recorded commit/test evidence
    AU-BASELINE
    AU-BASELINE — Baseline ingestion and served ontology content
    specNoneLANDEDNo 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.
    requirementAU-BASELINELANDED06a3810b9373
    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.
    requirementAU-BASELINELANDED06a3810b9373
    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.
    requirementAU-BASELINELANDED06a3810b9373
    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.
    requirementAU-BASELINELANDED06a3810b9373
    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.
    requirementAU-BASELINELANDED06a3810b9373
    AU-HARNESS
    AU-HARNESS — Harness evolution and governed work
    specNoneSPECIFIEDNo 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.
    requirementAU-HARNESSVERIFIED3279dcc7d1d7
    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.
    requirementAU-HARNESSVERIFIED37a3800dd3b1
    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.
    requirementAU-HARNESSVERIFIED42f6dada3749
    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.
    requirementAU-HARNESSVERIFIED26bfecfbde1a
    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.
    requirementAU-HARNESSVERIFIED068bd9c17859
    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.
    requirementAU-HARNESSVERIFIED42f6dada3749
    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.
    requirementAU-HARNESSVERIFIED42f6dada3749
    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.
    requirementAU-HARNESSVERIFIED05d0acdf70b2
    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.
    requirementAU-HARNESSLANDED579815031bcd
    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.
    requirementAU-HARNESSLANDED579815031bcd
    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.
    requirementAU-HARNESSLANDED579815031bcd
    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.
    requirementAU-HARNESSLANDED755db4bb36b8
    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.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo 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`.
    requirementAU-HARNESSSPECIFIEDNo recorded commit/test evidence
    AU-FREEZE
    AU-FREEZE — Freeze authoritative AU release evidence
    specNoneLANDEDNo 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.
    requirementAU-FREEZELANDED4059a262d70e
    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.
    requirementAU-FREEZELANDED4059a262d70e
    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.
    requirementAU-FREEZELANDED4059a262d70e
    64d317c9e385
    AU-RETRIEVAL
    AU-RETRIEVAL — Reproducible structure-aware retrieval evaluation
    specNoneSPECIFIEDNo 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.
    requirementAU-RETRIEVALLANDED64d317c9e385
    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.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo 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`.
    requirementAU-RETRIEVALSPECIFIEDNo recorded commit/test evidence
    TitleSpec delivery: agent-utilities
    RepositoryKnuckles-Team/agent-utilities
    Commit50c313ab0187
    Captured (UTC)2026-10-12T03:21:27
    Snapshotsnapshot.json (v1)
    Sourcespecs/*/status.json
    Sheet1 of 1