v7next F1: wave-4 integration seam - 26 leaves mapped, D13 dispositions, serializer pin re-homed

- domains.toml: D14 ten leaves (extension_loader six + skill_review four) and
  D08 sixteen leaves mapped; extension_loader/skill_review split rows fully
  retired; control/events/queue/workers leaves-rows shrunk to their
  hot-deferred remainders (cancel/custody family, D07 half of control).
- D08-pick conflict resolved: the reload_all suite lives in the D14 sibling
  test_extension_reload_all.py on this tree, so its worker_main clause got
  the D08 adaptation there (worker_process.py owner); the giant kept HEAD.
- test_gaia_events_serializer_carries_web_search_sources re-homed from the
  test_devtools_benchmarks giant into tests/test_events_llm_usage.py (its
  post-split thematic owner): the byte-debt ratchet correctly refused the
  in-place retarget (+79 bytes on a shrink-only file) and the re-home is the
  designed pressure valve - the giant shrinks, the pin gains its family.
- LEDGER_CORRECTIONS: coordinator section with the five D13 dispositions
  (live protected safety.py deltas incl. the UNROWED _safety_drive_root fix
  that must gain a carried row at F5; shell_guards rebind pending with D05
  wave; runtime_mode_policy remainder returns with its leaves).
- Quotient report regenerated: 1316 strict module edges, 163 domain edges.
This commit is contained in:
Ouroboros 2026-08-30 20:44:51 +00:00
parent 7d2dca49d7
commit a56bb76a38
6 changed files with 190 additions and 85 deletions

View file

@ -1,17 +1,17 @@
# Domain quotient report — v7next (report-only) # Domain quotient report — v7next (report-only)
Generated by `scripts/v7next_domain_report.py` on 2026-08-30 19:30 UTC. Do not edit. Generated by `scripts/v7next_domain_report.py` on 2026-08-30 20:44 UTC. Do not edit.
- generated from the WORKING TREE based on HEAD `86244943b901a520b2d6d5cc21ca5e705b08a97b` (the report is typically written pre-commit, so this HEAD is the parent of the commit that carries it, not that commit itself) - generated from the WORKING TREE based on HEAD `7d2dca49d7a6710ddb057b4ac6b68965510979ed` (the report is typically written pre-commit, so this HEAD is the parent of the commit that carries it, not that commit itself)
- analyzed-inputs content fingerprint: sha256 `e46d590d3152dbecea624899c103b7a71f47bae430d97da0e7680cbf602999a6` (sorted tracked runtime files, path+bytes; regenerate on any tree and compare to verify freshness) - analyzed-inputs content fingerprint: sha256 `f98973117fa14c57dbf83036069975367ff40102083000f3bd080a0565f0063f` (sorted tracked runtime files, path+bytes; regenerate on any tree and compare to verify freshness)
- manifest: `scripts/v7next_domains.toml` sha256 `0cb944d21c82f6dae52b0778e4e6cad2012b1df4ec6752459467032530c7b9cc` - manifest: `scripts/v7next_domains.toml` sha256 `1be38a90095a2421fd7679d0f29411cb9380c25b98c27d39f7e015581ee1de29`
- reference (domain vocabulary): ouroboros_v7_wip @ 9f691656e7e756c483f72ef549418c0e7a1b8054 (frozen) - reference (domain vocabulary): ouroboros_v7_wip @ 9f691656e7e756c483f72ef549418c0e7a1b8054 (frozen)
- discipline: plan §7.1 / roast F17 — this is a REPORT; cycles are owner-batch - discipline: plan §7.1 / roast F17 — this is a REPORT; cycles are owner-batch
items (regroup vs split vs allowed-edge), the checker never dictates. items (regroup vs split vs allowed-edge), the checker never dictates.
## Population ## Population
- modules mapped: **402** across **20** domains (80 rows are `classification=proposed`) - modules mapped: **428** across **20** domains (80 rows are `classification=proposed`)
- manifest drift: none (manifest == tracked population) - manifest drift: none (manifest == tracked population)
| domain | modules | proposed | | domain | modules | proposed |
@ -23,13 +23,13 @@ Generated by `scripts/v7next_domain_report.py` on 2026-08-30 19:30 UTC. Do not e
| D05 — Tool surfaces: files, code, shell, media, external | 23 | 1 | | D05 — Tool surfaces: files, code, shell, media, external | 23 | 1 |
| D06 — Review stack | 48 | 17 | | D06 — Review stack | 48 | 17 |
| D07 — Delegation, subagents & Claudexor | 37 | 17 | | D07 — Delegation, subagents & Claudexor | 37 | 17 |
| D08 — Supervisor: queue, workers, events & runtime control | 18 | 4 | | D08 — Supervisor: queue, workers, events & runtime control | 34 | 4 |
| D09 — Cancellation, owner control & process custody | 11 | 0 | | D09 — Cancellation, owner control & process custody | 11 | 0 |
| D10 — Git, update & release machinery | 17 | 1 | | D10 — Git, update & release machinery | 17 | 1 |
| D11 — Gateway, server & Web UI | 34 | 2 | | D11 — Gateway, server & Web UI | 34 | 2 |
| D12 — Settings & configuration | 14 | 1 | | D12 — Settings & configuration | 14 | 1 |
| D13 — Safety, guards & runtime mode | 8 | 2 | | D13 — Safety, guards & runtime mode | 8 | 2 |
| D14 — Skills & extensions | 41 | 8 | | D14 — Skills & extensions | 51 | 8 |
| D15 — Memory, knowledge, consciousness & self-evolution | 16 | 1 | | D15 — Memory, knowledge, consciousness & self-evolution | 16 | 1 |
| D16 — Observability, usage accounting & cost | 8 | 0 | | D16 — Observability, usage accounting & cost | 8 | 0 |
| D17 — Projects, workspaces & task results | 18 | 1 | | D17 — Projects, workspaces & task results | 18 | 1 |
@ -39,8 +39,8 @@ Generated by `scripts/v7next_domain_report.py` on 2026-08-30 19:30 UTC. Do not e
## Strict import graph ## Strict import graph
- module-level import edges (unconditional): **1198** unique, 3656 statements - module-level import edges (unconditional): **1316** unique, 4061 statements
- cross-domain module edges: **761** - cross-domain module edges: **810**
- domain-level edges (quotient): **163** - domain-level edges (quotient): **163**
- quotient cycles (SCCs with >1 domain): **1** - quotient cycles (SCCs with >1 domain): **1**
@ -50,7 +50,7 @@ Generated by `scripts/v7next_domain_report.py` on 2026-08-30 19:30 UTC. Do not e
20 domains form one strongly connected component. Every edge below 20 domains form one strongly connected component. Every edge below
needs an owner disposition (regroup / split / allowed-edge). needs an owner disposition (regroup / split / allowed-edge).
228 of the 761 module-edge witnesses touch a `[split_pending]` 225 of the 810 module-edge witnesses touch a `[split_pending]`
monolith (marked †): those edges are expected to move or dissolve when the monolith (marked †): those edges are expected to move or dissolve when the
ledger-derived leaves are transplanted (Ф1 recipe, plan §5.3). ledger-derived leaves are transplanted (Ф1 recipe, plan §5.3).
@ -496,25 +496,34 @@ ledger-derived leaves are transplanted (Ф1 recipe, plan §5.3).
- `ouroboros/depth_evidence.py` → `ouroboros/contracts/task_contract.py` (line 7) - `ouroboros/depth_evidence.py` → `ouroboros/contracts/task_contract.py` (line 7)
- `ouroboros/tools/control_delegation.py` → `ouroboros/contracts/task_contract.py` (line 20) - `ouroboros/tools/control_delegation.py` → `ouroboros/contracts/task_contract.py` (line 20)
- `ouroboros/tools/subagent_integration.py` → `ouroboros/contracts/task_constraint.py` (line 35) † - `ouroboros/tools/subagent_integration.py` → `ouroboros/contracts/task_constraint.py` (line 35) †
- **D08 → D01** (7 module edges) - **D08 → D01** (9 module edges)
- `ouroboros/tools/control.py` → `ouroboros/outcomes.py` (line 41) † - `ouroboros/tools/control.py` → `ouroboros/outcomes.py` (line 41) †
- `ouroboros/tools/followup.py` → `ouroboros/deadline_utils.py` (line 24) - `ouroboros/tools/followup.py` → `ouroboros/deadline_utils.py` (line 24)
- `supervisor/events.py` → `ouroboros/outcomes.py` (line 34) † - `supervisor/events.py` → `ouroboros/outcomes.py` (line 34) †
- `supervisor/events.py` → `ouroboros/post_task_checkpoint.py` (line 35) † - `supervisor/events.py` → `ouroboros/post_task_checkpoint.py` (line 35) †
- `supervisor/events.py` → `ouroboros/task_finalization.py` (line 38) † - `supervisor/events.py` → `ouroboros/task_finalization.py` (line 38) †
- `supervisor/events_worker_reports.py` → `ouroboros/outcomes.py` (line 16)
- `supervisor/queue.py` → `ouroboros/outcomes.py` (line 33) † - `supervisor/queue.py` → `ouroboros/outcomes.py` (line 33) †
- `supervisor/worker_pool_lifecycle.py` → `ouroboros/outcomes.py` (line 25)
- `supervisor/workers.py` → `ouroboros/outcomes.py` (line 21) † - `supervisor/workers.py` → `ouroboros/outcomes.py` (line 21) †
- **D08 → D04** (5 module edges) - **D08 → D04** (12 module edges)
- `ouroboros/tools/control.py` → `ouroboros/tool_capabilities.py` (line 59) † - `ouroboros/tools/control.py` → `ouroboros/tool_capabilities.py` (line 59) †
- `ouroboros/tools/control.py` → `ouroboros/tool_policy.py` (line 60) † - `ouroboros/tools/control.py` → `ouroboros/tool_policy.py` (line 60) †
- `ouroboros/tools/control.py` → `ouroboros/tools/registry.py` (line 40,61) † - `ouroboros/tools/control.py` → `ouroboros/tools/registry.py` (line 40,61) †
- `ouroboros/tools/control_events.py` → `ouroboros/tool_policy.py` (line 22)
- `ouroboros/tools/control_events.py` → `ouroboros/tools/registry.py` (line 23) †
- `ouroboros/tools/control_routing.py` → `ouroboros/tool_policy.py` (line 18)
- `ouroboros/tools/control_routing.py` → `ouroboros/tools/registry.py` (line 24) †
- `ouroboros/tools/control_runtime.py` → `ouroboros/tools/registry.py` (line 17) †
- `ouroboros/tools/followup.py` → `ouroboros/tools/registry.py` (line 25) † - `ouroboros/tools/followup.py` → `ouroboros/tools/registry.py` (line 25) †
- `supervisor/events.py` → `ouroboros/tool_capabilities.py` (line 21) † - `supervisor/events.py` → `ouroboros/tool_capabilities.py` (line 21) †
- `supervisor/events_schedule_task.py` → `ouroboros/tool_capabilities.py` (line 13)
- `supervisor/events_subagent_admission.py` → `ouroboros/tool_capabilities.py` (line 17)
- **D08 → D05** (1 module edges) - **D08 → D05** (1 module edges)
- `supervisor/message_bus.py` → `ouroboros/artifacts.py` (line 13) - `supervisor/message_bus.py` → `ouroboros/artifacts.py` (line 13)
- **D08 → D06** (1 module edges) - **D08 → D06** (1 module edges)
- `supervisor/workers.py` → `ouroboros/review_owner_custody.py` (line 23) † - `supervisor/workers.py` → `ouroboros/review_owner_custody.py` (line 23) †
- **D08 → D07** (11 module edges) - **D08 → D07** (12 module edges)
- `ouroboros/tools/control.py` → `ouroboros/depth_evidence.py` (line 23) † - `ouroboros/tools/control.py` → `ouroboros/depth_evidence.py` (line 23) †
- `ouroboros/tools/control.py` → `ouroboros/subagent_runtime.py` (line 54) † - `ouroboros/tools/control.py` → `ouroboros/subagent_runtime.py` (line 54) †
- `ouroboros/tools/control.py` → `ouroboros/subagents.py` (line 50) † - `ouroboros/tools/control.py` → `ouroboros/subagents.py` (line 50) †
@ -522,51 +531,77 @@ ledger-derived leaves are transplanted (Ф1 recipe, plan §5.3).
- `supervisor/events.py` → `ouroboros/subagent_messages.py` (line 37) † - `supervisor/events.py` → `ouroboros/subagent_messages.py` (line 37) †
- `supervisor/events.py` → `ouroboros/subagents.py` (line 36) † - `supervisor/events.py` → `ouroboros/subagents.py` (line 36) †
- `supervisor/events.py` → `ouroboros/tools/control_delegation.py` (line 47) † - `supervisor/events.py` → `ouroboros/tools/control_delegation.py` (line 47) †
- `supervisor/events_chat_delivery.py` → `ouroboros/subagent_messages.py` (line 30)
- `supervisor/message_bus.py` → `ouroboros/subagent_messages.py` (line 19) - `supervisor/message_bus.py` → `ouroboros/subagent_messages.py` (line 19)
- `supervisor/task_admission.py` → `ouroboros/depth_evidence.py` (line 10) - `supervisor/task_admission.py` → `ouroboros/depth_evidence.py` (line 10)
- `supervisor/task_dispatch.py` → `ouroboros/depth_evidence.py` (line 7) - `supervisor/task_dispatch.py` → `ouroboros/depth_evidence.py` (line 7)
- `supervisor/workers.py` → `ouroboros/depth_evidence.py` (line 22) † - `supervisor/workers.py` → `ouroboros/depth_evidence.py` (line 22) †
- **D08 → D09** (3 module edges) - **D08 → D09** (3 module edges)
- `supervisor/events.py` → `supervisor/steering.py` (line 3308) † - `supervisor/events.py` → `supervisor/steering.py` (line 1115) †
- `supervisor/queue.py` → `supervisor/task_lifecycle.py` (line 49,1104) † - `supervisor/queue.py` → `supervisor/task_lifecycle.py` (line 49,764) †
- `supervisor/queue.py` → `supervisor/task_reaper.py` (line 153) † - `supervisor/queue.py` → `supervisor/task_reaper.py` (line 151) †
- **D08 → D12** (5 module edges) - **D08 → D12** (7 module edges)
- `ouroboros/tools/control.py` → `ouroboros/config.py` (line 17) † - `ouroboros/tools/control.py` → `ouroboros/config.py` (line 17) †
- `ouroboros/tools/control_runtime.py` → `ouroboros/config.py` (line 16)
- `supervisor/events.py` → `ouroboros/config.py` (line 16) † - `supervisor/events.py` → `ouroboros/config.py` (line 16) †
- `supervisor/events_subagent_admission.py` → `ouroboros/config.py` (line 16)
- `supervisor/queue.py` → `ouroboros/config.py` (line 22) † - `supervisor/queue.py` → `ouroboros/config.py` (line 22) †
- `supervisor/state.py` → `ouroboros/config.py` (line 13) - `supervisor/state.py` → `ouroboros/config.py` (line 13)
- `supervisor/workers.py` → `ouroboros/config.py` (line 20) † - `supervisor/workers.py` → `ouroboros/config.py` (line 20) †
- **D08 → D14** (2 module edges) - **D08 → D14** (3 module edges)
- `supervisor/message_bus.py` → `ouroboros/event_bus.py` (line 15) - `supervisor/message_bus.py` → `ouroboros/event_bus.py` (line 15)
- `supervisor/queue.py` → `ouroboros/skill_loader.py` (line 32) † - `supervisor/queue.py` → `ouroboros/skill_loader.py` (line 32) †
- `supervisor/queue_schedules.py` → `ouroboros/skill_loader.py` (line 21)
- **D08 → D15** (1 module edges) - **D08 → D15** (1 module edges)
- `supervisor/queue.py` → `supervisor/evolution_lifecycle.py` (line 35) † - `supervisor/queue.py` → `supervisor/evolution_lifecycle.py` (line 35) †
- **D08 → D16** (1 module edges) - **D08 → D16** (2 module edges)
- `supervisor/events.py` → `ouroboros/cost_projection.py` (line 33) † - `supervisor/events.py` → `ouroboros/cost_projection.py` (line 33) †
- **D08 → D17** (6 module edges) - `supervisor/events_worker_reports.py` → `ouroboros/cost_projection.py` (line 23)
- **D08 → D17** (11 module edges)
- `ouroboros/tools/control.py` → `ouroboros/headless.py` (line 24) † - `ouroboros/tools/control.py` → `ouroboros/headless.py` (line 24) †
- `ouroboros/tools/control.py` → `ouroboros/task_results.py` (line 42) † - `ouroboros/tools/control.py` → `ouroboros/task_results.py` (line 42) †
- `ouroboros/tools/control.py` → `ouroboros/task_status.py` (line 49) † - `ouroboros/tools/control.py` → `ouroboros/task_status.py` (line 49) †
- `ouroboros/tools/control_routing.py` → `ouroboros/task_status.py` (line 30)
- `supervisor/events.py` → `ouroboros/task_results.py` (line 23) † - `supervisor/events.py` → `ouroboros/task_results.py` (line 23) †
- `supervisor/events_budget.py` → `ouroboros/task_results.py` (line 15)
- `supervisor/events_coop_checkpoint.py` → `ouroboros/task_results.py` (line 15)
- `supervisor/events_project_routing.py` → `ouroboros/task_results.py` (line 15)
- `supervisor/events_schedule_task.py` → `ouroboros/task_results.py` (line 14)
- `supervisor/message_bus.py` → `ouroboros/projects_registry.py` (line 17) - `supervisor/message_bus.py` → `ouroboros/projects_registry.py` (line 17)
- `supervisor/task_admission.py` → `ouroboros/task_results.py` (line 11) - `supervisor/task_admission.py` → `ouroboros/task_results.py` (line 11)
- **D08 → D18** (10 module edges) - **D08 → D18** (24 module edges)
- `ouroboros/tools/control.py` → `ouroboros/utils.py` (line 62) † - `ouroboros/tools/control.py` → `ouroboros/utils.py` (line 62) †
- `ouroboros/tools/control_events.py` → `ouroboros/utils.py` (line 24)
- `ouroboros/tools/control_routing.py` → `ouroboros/utils.py` (line 25)
- `ouroboros/tools/control_runtime.py` → `ouroboros/utils.py` (line 18)
- `supervisor/cognitive_operations.py` → `ouroboros/utils.py` (line 9) - `supervisor/cognitive_operations.py` → `ouroboros/utils.py` (line 9)
- `supervisor/events.py` → `ouroboros/utils.py` (line 15) † - `supervisor/events.py` → `ouroboros/utils.py` (line 15) †
- `supervisor/events_budget.py` → `ouroboros/utils.py` (line 14)
- `supervisor/events_chat_delivery.py` → `ouroboros/utils.py` (line 16)
- `supervisor/events_coop_checkpoint.py` → `ouroboros/utils.py` (line 14)
- `supervisor/events_project_routing.py` → `ouroboros/utils.py` (line 14)
- `supervisor/events_runtime_controls.py` → `ouroboros/utils.py` (line 12)
- `supervisor/events_worker_reports.py` → `ouroboros/utils.py` (line 15)
- `supervisor/message_bus.py` → `ouroboros/utils.py` (line 18) - `supervisor/message_bus.py` → `ouroboros/utils.py` (line 18)
- `supervisor/queue.py` → `ouroboros/utils.py` (line 34) † - `supervisor/queue.py` → `ouroboros/utils.py` (line 34) †
- `supervisor/queue_schedules.py` → `ouroboros/utils.py` (line 22)
- `supervisor/queue_transitions.py` → `ouroboros/utils.py` (line 30) - `supervisor/queue_transitions.py` → `ouroboros/utils.py` (line 30)
- `supervisor/state.py` → `ouroboros/platform_layer.py` (line 14) - `supervisor/state.py` → `ouroboros/platform_layer.py` (line 14)
- `supervisor/state.py` → `ouroboros/utils.py` (line 15) - `supervisor/state.py` → `ouroboros/utils.py` (line 15)
- `supervisor/task_admission.py` → `ouroboros/utils.py` (line 18) - `supervisor/task_admission.py` → `ouroboros/utils.py` (line 18)
- `supervisor/worker_chat_lane.py` → `ouroboros/utils.py` (line 17)
- `supervisor/worker_pool_lifecycle.py` → `ouroboros/utils.py` (line 26)
- `supervisor/worker_process.py` → `ouroboros/utils.py` (line 19)
- `supervisor/worker_promotion.py` → `ouroboros/utils.py` (line 15)
- `supervisor/workers.py` → `ouroboros/utils.py` (line 26) † - `supervisor/workers.py` → `ouroboros/utils.py` (line 26) †
- **D08 → D19** (5 module edges) - **D08 → D19** (7 module edges)
- `ouroboros/tools/control.py` → `ouroboros/contracts/task_contract.py` (line 25) † - `ouroboros/tools/control.py` → `ouroboros/contracts/task_contract.py` (line 25) †
- `supervisor/events.py` → `ouroboros/contracts/task_constraint.py` (line 22) † - `supervisor/events.py` → `ouroboros/contracts/task_constraint.py` (line 22) †
- `supervisor/events.py` → `ouroboros/contracts/task_contract.py` (line 39) † - `supervisor/events.py` → `ouroboros/contracts/task_contract.py` (line 39) †
- `supervisor/events_subagent_admission.py` → `ouroboros/contracts/task_constraint.py` (line 18)
- `supervisor/message_bus.py` → `ouroboros/contracts/chat_id_policy.py` (line 14) - `supervisor/message_bus.py` → `ouroboros/contracts/chat_id_policy.py` (line 14)
- `supervisor/queue.py` → `ouroboros/contracts/task_contract.py` (line 30) † - `supervisor/queue.py` → `ouroboros/contracts/task_contract.py` (line 30) †
- `supervisor/queue_schedules.py` → `ouroboros/contracts/task_contract.py` (line 19)
- **D09 → D01** (3 module edges) - **D09 → D01** (3 module edges)
- `ouroboros/owner_hurry.py` → `ouroboros/outcomes.py` (line 46) - `ouroboros/owner_hurry.py` → `ouroboros/outcomes.py` (line 46)
- `supervisor/task_reaper.py` → `ouroboros/outcomes.py` (line 21) - `supervisor/task_reaper.py` → `ouroboros/outcomes.py` (line 21)
@ -674,7 +709,7 @@ ledger-derived leaves are transplanted (Ф1 recipe, plan §5.3).
- `ouroboros/server_runtime.py` → `ouroboros/config.py` (line 14) - `ouroboros/server_runtime.py` → `ouroboros/config.py` (line 14)
- `server.py` → `ouroboros/config.py` (line 147) † - `server.py` → `ouroboros/config.py` (line 147) †
- **D11 → D14** (19 module edges) - **D11 → D14** (19 module edges)
- `ouroboros/gateway/extensions.py` → `ouroboros/extension_loader.py` (line 18) † - `ouroboros/gateway/extensions.py` → `ouroboros/extension_loader.py` (line 18)
- `ouroboros/gateway/extensions.py` → `ouroboros/skill_lifecycle_queue.py` (line 27) - `ouroboros/gateway/extensions.py` → `ouroboros/skill_lifecycle_queue.py` (line 27)
- `ouroboros/gateway/extensions.py` → `ouroboros/skill_loader.py` (line 33) - `ouroboros/gateway/extensions.py` → `ouroboros/skill_loader.py` (line 33)
- `ouroboros/gateway/extensions.py` → `ouroboros/skill_review_usage.py` (line 45) - `ouroboros/gateway/extensions.py` → `ouroboros/skill_review_usage.py` (line 45)
@ -772,9 +807,10 @@ ledger-derived leaves are transplanted (Ф1 recipe, plan §5.3).
- **D13 → D18** (2 module edges) - **D13 → D18** (2 module edges)
- `ouroboros/git_shell_policy.py` → `ouroboros/utils.py` (line 17) - `ouroboros/git_shell_policy.py` → `ouroboros/utils.py` (line 17)
- `ouroboros/safety.py` → `ouroboros/utils.py` (line 24) - `ouroboros/safety.py` → `ouroboros/utils.py` (line 24)
- **D14 → D02** (5 module edges) - **D14 → D02** (6 module edges)
- `ouroboros/extension_companion.py` → `ouroboros/provider_models.py` (line 17) - `ouroboros/extension_companion.py` → `ouroboros/provider_models.py` (line 17)
- `ouroboros/extension_loader.py` → `ouroboros/provider_models.py` (line 52) † - `ouroboros/extension_loader.py` → `ouroboros/provider_models.py` (line 52)
- `ouroboros/extension_plugin_api.py` → `ouroboros/provider_models.py` (line 70)
- `ouroboros/extension_process_runner.py` → `ouroboros/provider_models.py` (line 30) - `ouroboros/extension_process_runner.py` → `ouroboros/provider_models.py` (line 30)
- `ouroboros/tools/skill_exec.py` → `ouroboros/provider_models.py` (line 18) - `ouroboros/tools/skill_exec.py` → `ouroboros/provider_models.py` (line 18)
- `ouroboros/tools/skill_publish.py` → `ouroboros/llm.py` (line 24) - `ouroboros/tools/skill_publish.py` → `ouroboros/llm.py` (line 24)
@ -783,7 +819,7 @@ ledger-derived leaves are transplanted (Ф1 recipe, plan §5.3).
- `ouroboros/skill_owner_attestation.py` → `ouroboros/tool_access.py` (line 31) - `ouroboros/skill_owner_attestation.py` → `ouroboros/tool_access.py` (line 31)
- `ouroboros/skill_publish_github.py` → `ouroboros/tools/registry.py` (line 13) † - `ouroboros/skill_publish_github.py` → `ouroboros/tools/registry.py` (line 13) †
- `ouroboros/skill_publish_result.py` → `ouroboros/tool_capabilities.py` (line 16) - `ouroboros/skill_publish_result.py` → `ouroboros/tool_capabilities.py` (line 16)
- `ouroboros/skill_review.py` → `ouroboros/tool_access.py` (line 24) † - `ouroboros/skill_review.py` → `ouroboros/tool_access.py` (line 24)
- `ouroboros/skill_review_runner.py` → `ouroboros/tool_access.py` (line 46) - `ouroboros/skill_review_runner.py` → `ouroboros/tool_access.py` (line 46)
- `ouroboros/tools/skill_exec.py` → `ouroboros/tool_access.py` (line 34) - `ouroboros/tools/skill_exec.py` → `ouroboros/tool_access.py` (line 34)
- `ouroboros/tools/skill_exec.py` → `ouroboros/tools/registry.py` (line 33) † - `ouroboros/tools/skill_exec.py` → `ouroboros/tools/registry.py` (line 33) †
@ -795,23 +831,29 @@ ledger-derived leaves are transplanted (Ф1 recipe, plan §5.3).
- `ouroboros/extension_process_runner.py` → `ouroboros/tools/shell.py` (line 34) - `ouroboros/extension_process_runner.py` → `ouroboros/tools/shell.py` (line 34)
- `ouroboros/tools/skill_exec.py` → `ouroboros/tools/shell.py` (line 39) - `ouroboros/tools/skill_exec.py` → `ouroboros/tools/shell.py` (line 39)
- `ouroboros/tools/skill_preflight.py` → `ouroboros/tools/shell.py` (line 25) - `ouroboros/tools/skill_preflight.py` → `ouroboros/tools/shell.py` (line 25)
- **D14 → D06** (5 module edges) - **D14 → D06** (10 module edges)
- `ouroboros/skill_review.py` → `ouroboros/reviewer_slot_config.py` (line 17) † - `ouroboros/skill_review.py` → `ouroboros/reviewer_slot_config.py` (line 17)
- `ouroboros/skill_review.py` → `ouroboros/tools/review_helpers.py` (line 46) † - `ouroboros/skill_review.py` → `ouroboros/tools/review_helpers.py` (line 46) †
- `ouroboros/skill_review.py` → `ouroboros/triad_review.py` (line 56) † - `ouroboros/skill_review.py` → `ouroboros/triad_review.py` (line 56)
- `ouroboros/skill_review_cycles.py` → `ouroboros/review_cycles.py` (line 44) - `ouroboros/skill_review_cycles.py` → `ouroboros/review_cycles.py` (line 44)
- `ouroboros/skill_review_history.py` → `ouroboros/tools/review_helpers.py` (line 12) † - `ouroboros/skill_review_history.py` → `ouroboros/tools/review_helpers.py` (line 12) †
- `ouroboros/skill_review_output.py` → `ouroboros/tools/review_helpers.py` (line 24) †
- `ouroboros/skill_review_output.py` → `ouroboros/triad_review.py` (line 28)
- `ouroboros/skill_review_packs.py` → `ouroboros/tools/review_helpers.py` (line 18) †
- `ouroboros/skill_review_prompt.py` → `ouroboros/tools/review_helpers.py` (line 21) †
- `ouroboros/skill_review_rebuttals.py` → `ouroboros/tools/review_helpers.py` (line 24) †
- **D14 → D09** (1 module edges) - **D14 → D09** (1 module edges)
- `ouroboros/skill_publish_scanner.py` → `ouroboros/process_custody.py` (line 25) - `ouroboros/skill_publish_scanner.py` → `ouroboros/process_custody.py` (line 25)
- **D14 → D10** (2 module edges) - **D14 → D10** (2 module edges)
- `ouroboros/skill_publish_github.py` → `ouroboros/tools/github.py` (line 12) - `ouroboros/skill_publish_github.py` → `ouroboros/tools/github.py` (line 12)
- `ouroboros/tools/skill_publish.py` → `ouroboros/tools/github.py` (line 60) - `ouroboros/tools/skill_publish.py` → `ouroboros/tools/github.py` (line 60)
- **D14 → D11** (1 module edges) - **D14 → D11** (2 module edges)
- `ouroboros/extension_loader.py` → `ouroboros/gateway/host_service.py` (line 51) † - `ouroboros/extension_loader.py` → `ouroboros/gateway/host_service.py` (line 51)
- `ouroboros/extension_plugin_api.py` → `ouroboros/gateway/host_service.py` (line 69)
- **D14 → D12** (6 module edges) - **D14 → D12** (6 module edges)
- `ouroboros/marketplace/ouroboroshub.py` → `ouroboros/config.py` (line 23) - `ouroboros/marketplace/ouroboroshub.py` → `ouroboros/config.py` (line 23)
- `ouroboros/skill_owner_attestation.py` → `ouroboros/config.py` (line 16) - `ouroboros/skill_owner_attestation.py` → `ouroboros/config.py` (line 16)
- `ouroboros/skill_review.py` → `ouroboros/config.py` (line 16) † - `ouroboros/skill_review.py` → `ouroboros/config.py` (line 16)
- `ouroboros/skill_review_runner.py` → `ouroboros/config.py` (line 14) - `ouroboros/skill_review_runner.py` → `ouroboros/config.py` (line 14)
- `ouroboros/tools/skill_exec.py` → `ouroboros/config.py` (line 15) - `ouroboros/tools/skill_exec.py` → `ouroboros/config.py` (line 15)
- `ouroboros/tools/skill_publish.py` → `ouroboros/config.py` (line 14) - `ouroboros/tools/skill_publish.py` → `ouroboros/config.py` (line 14)
@ -822,12 +864,13 @@ ledger-derived leaves are transplanted (Ф1 recipe, plan §5.3).
- `ouroboros/skill_review_usage.py` → `ouroboros/_usage_rows_memo.py` (line 9) - `ouroboros/skill_review_usage.py` → `ouroboros/_usage_rows_memo.py` (line 9)
- `ouroboros/skill_review_usage.py` → `ouroboros/usage_ledger.py` (line 10) - `ouroboros/skill_review_usage.py` → `ouroboros/usage_ledger.py` (line 10)
- `ouroboros/tools/skill_exec.py` → `ouroboros/usage_accounting.py` (line 44) - `ouroboros/tools/skill_exec.py` → `ouroboros/usage_accounting.py` (line 44)
- **D14 → D18** (28 module edges) - **D14 → D18** (32 module edges)
- `ouroboros/betterleaks_runtime.py` → `ouroboros/platform_layer.py` (line 37) - `ouroboros/betterleaks_runtime.py` → `ouroboros/platform_layer.py` (line 37)
- `ouroboros/extension_companion.py` → `ouroboros/platform_layer.py` (line 16) - `ouroboros/extension_companion.py` → `ouroboros/platform_layer.py` (line 16)
- `ouroboros/extension_companion.py` → `ouroboros/utils.py` (line 19) - `ouroboros/extension_companion.py` → `ouroboros/utils.py` (line 19)
- `ouroboros/extension_health.py` → `ouroboros/utils.py` (line 19) - `ouroboros/extension_health.py` → `ouroboros/utils.py` (line 19)
- `ouroboros/extension_loader.py` → `ouroboros/utils.py` (line 57) † - `ouroboros/extension_loader.py` → `ouroboros/utils.py` (line 123)
- `ouroboros/extension_plugin_api.py` → `ouroboros/utils.py` (line 74)
- `ouroboros/extension_process_runner.py` → `ouroboros/platform_layer.py` (line 31) - `ouroboros/extension_process_runner.py` → `ouroboros/platform_layer.py` (line 31)
- `ouroboros/extension_process_runner.py` → `ouroboros/utils.py` (line 37) - `ouroboros/extension_process_runner.py` → `ouroboros/utils.py` (line 37)
- `ouroboros/extension_reconcile_queue.py` → `ouroboros/utils.py` (line 19) - `ouroboros/extension_reconcile_queue.py` → `ouroboros/utils.py` (line 19)
@ -842,18 +885,24 @@ ledger-derived leaves are transplanted (Ф1 recipe, plan §5.3).
- `ouroboros/skill_owner_attestation.py` → `ouroboros/utils.py` (line 30) - `ouroboros/skill_owner_attestation.py` → `ouroboros/utils.py` (line 30)
- `ouroboros/skill_publish_scanner.py` → `ouroboros/platform_layer.py` (line 20) - `ouroboros/skill_publish_scanner.py` → `ouroboros/platform_layer.py` (line 20)
- `ouroboros/skill_repair_admission.py` → `ouroboros/utils.py` (line 28) - `ouroboros/skill_repair_admission.py` → `ouroboros/utils.py` (line 28)
- `ouroboros/skill_review.py` → `ouroboros/utils.py` (line 57) † - `ouroboros/skill_review.py` → `ouroboros/utils.py` (line 57)
- `ouroboros/skill_review_cycles.py` → `ouroboros/utils.py` (line 53) - `ouroboros/skill_review_cycles.py` → `ouroboros/utils.py` (line 53)
- `ouroboros/skill_review_history.py` → `ouroboros/platform_layer.py` (line 11) - `ouroboros/skill_review_history.py` → `ouroboros/platform_layer.py` (line 11)
- `ouroboros/skill_review_history.py` → `ouroboros/utils.py` (line 13) - `ouroboros/skill_review_history.py` → `ouroboros/utils.py` (line 13)
- `ouroboros/skill_review_output.py` → `ouroboros/utils.py` (line 29)
- `ouroboros/skill_review_packs.py` → `ouroboros/utils.py` (line 19)
- `ouroboros/skill_review_prompt.py` → `ouroboros/utils.py` (line 26)
- `ouroboros/skill_review_runner.py` → `ouroboros/utils.py` (line 45) - `ouroboros/skill_review_runner.py` → `ouroboros/utils.py` (line 45)
- `ouroboros/tools/skill_exec.py` → `ouroboros/platform_layer.py` (line 17) - `ouroboros/tools/skill_exec.py` → `ouroboros/platform_layer.py` (line 17)
- `ouroboros/tools/skill_exec.py` → `ouroboros/utils.py` (line 45) - `ouroboros/tools/skill_exec.py` → `ouroboros/utils.py` (line 45)
- `ouroboros/tools/skill_preflight.py` → `ouroboros/platform_layer.py` (line 26) - `ouroboros/tools/skill_preflight.py` → `ouroboros/platform_layer.py` (line 26)
- `ouroboros/tools/skill_publish.py` → `ouroboros/utils.py` (line 62) - `ouroboros/tools/skill_publish.py` → `ouroboros/utils.py` (line 62)
- **D14 → D19** (12 module edges) - **D14 → D19** (15 module edges)
- `ouroboros/extension_child_catalog.py` → `ouroboros/contracts/plugin_api.py` (line 13)
- `ouroboros/extension_health.py` → `ouroboros/contracts/schema_versions.py` (line 17) - `ouroboros/extension_health.py` → `ouroboros/contracts/schema_versions.py` (line 17)
- `ouroboros/extension_loader.py` → `ouroboros/contracts/plugin_api.py` (line 33) † - `ouroboros/extension_loader.py` → `ouroboros/contracts/plugin_api.py` (line 33)
- `ouroboros/extension_plugin_api.py` → `ouroboros/contracts/plugin_api.py` (line 27)
- `ouroboros/extension_surface_names.py` → `ouroboros/contracts/plugin_api.py` (line 17)
- `ouroboros/extension_ui_validation.py` → `ouroboros/contracts/plugin_api.py` (line 9) - `ouroboros/extension_ui_validation.py` → `ouroboros/contracts/plugin_api.py` (line 9)
- `ouroboros/marketplace/adapter.py` → `ouroboros/contracts/plugin_api.py` (line 13) - `ouroboros/marketplace/adapter.py` → `ouroboros/contracts/plugin_api.py` (line 13)
- `ouroboros/marketplace/adapter.py` → `ouroboros/contracts/skill_manifest.py` (line 14) - `ouroboros/marketplace/adapter.py` → `ouroboros/contracts/skill_manifest.py` (line 14)
@ -1051,19 +1100,19 @@ ledger-derived leaves are transplanted (Ф1 recipe, plan §5.3).
| D07 | D17 | 6 | yes | | D07 | D17 | 6 | yes |
| D07 | D18 | 17 | yes | | D07 | D18 | 17 | yes |
| D07 | D19 | 3 | yes | | D07 | D19 | 3 | yes |
| D08 | D01 | 7 | yes | | D08 | D01 | 9 | yes |
| D08 | D04 | 5 | yes | | D08 | D04 | 12 | yes |
| D08 | D05 | 1 | yes | | D08 | D05 | 1 | yes |
| D08 | D06 | 1 | yes | | D08 | D06 | 1 | yes |
| D08 | D07 | 11 | yes | | D08 | D07 | 12 | yes |
| D08 | D09 | 3 | yes | | D08 | D09 | 3 | yes |
| D08 | D12 | 5 | yes | | D08 | D12 | 7 | yes |
| D08 | D14 | 2 | yes | | D08 | D14 | 3 | yes |
| D08 | D15 | 1 | yes | | D08 | D15 | 1 | yes |
| D08 | D16 | 1 | yes | | D08 | D16 | 2 | yes |
| D08 | D17 | 6 | yes | | D08 | D17 | 11 | yes |
| D08 | D18 | 10 | yes | | D08 | D18 | 24 | yes |
| D08 | D19 | 5 | yes | | D08 | D19 | 7 | yes |
| D09 | D01 | 3 | yes | | D09 | D01 | 3 | yes |
| D09 | D06 | 1 | yes | | D09 | D06 | 1 | yes |
| D09 | D08 | 4 | yes | | D09 | D08 | 4 | yes |
@ -1105,17 +1154,17 @@ ledger-derived leaves are transplanted (Ф1 recipe, plan §5.3).
| D13 | D12 | 1 | yes | | D13 | D12 | 1 | yes |
| D13 | D17 | 1 | yes | | D13 | D17 | 1 | yes |
| D13 | D18 | 2 | yes | | D13 | D18 | 2 | yes |
| D14 | D02 | 5 | yes | | D14 | D02 | 6 | yes |
| D14 | D04 | 12 | yes | | D14 | D04 | 12 | yes |
| D14 | D05 | 3 | yes | | D14 | D05 | 3 | yes |
| D14 | D06 | 5 | yes | | D14 | D06 | 10 | yes |
| D14 | D09 | 1 | yes | | D14 | D09 | 1 | yes |
| D14 | D10 | 2 | yes | | D14 | D10 | 2 | yes |
| D14 | D11 | 1 | yes | | D14 | D11 | 2 | yes |
| D14 | D12 | 6 | yes | | D14 | D12 | 6 | yes |
| D14 | D16 | 6 | yes | | D14 | D16 | 6 | yes |
| D14 | D18 | 28 | yes | | D14 | D18 | 32 | yes |
| D14 | D19 | 12 | yes | | D14 | D19 | 15 | yes |
| D15 | D01 | 3 | yes | | D15 | D01 | 3 | yes |
| D15 | D02 | 2 | yes | | D15 | D02 | 2 | yes |
| D15 | D03 | 3 | yes | | D15 | D03 | 3 | yes |
@ -1160,13 +1209,13 @@ Rows import columns (module-edge counts, strict graph).
| **D05** | 8 | 1 | · | 33 | · | · | · | · | · | 1 | 1 | 6 | 13 | · | 2 | 4 | 8 | 18 | 5 | · | | **D05** | 8 | 1 | · | 33 | · | · | · | · | · | 1 | 1 | 6 | 13 | · | 2 | 4 | 8 | 18 | 5 | · |
| **D06** | 10 | 7 | 1 | 8 | · | · | · | · | · | 1 | · | 11 | 1 | 1 | · | 10 | 3 | 23 | 1 | · | | **D06** | 10 | 7 | 1 | 8 | · | · | · | · | · | 1 | · | 11 | 1 | 1 | · | 10 | 3 | 23 | 1 | · |
| **D07** | 1 | 2 | · | 13 | 1 | 1 | · | · | · | · | · | 8 | 1 | · | · | 1 | 6 | 17 | 3 | · | | **D07** | 1 | 2 | · | 13 | 1 | 1 | · | · | · | · | · | 8 | 1 | · | · | 1 | 6 | 17 | 3 | · |
| **D08** | 7 | · | · | 5 | 1 | 1 | 11 | · | 3 | · | · | 5 | · | 2 | 1 | 1 | 6 | 10 | 5 | · | | **D08** | 9 | · | · | 12 | 1 | 1 | 12 | · | 3 | · | · | 7 | · | 3 | 1 | 2 | 11 | 24 | 7 | · |
| **D09** | 3 | · | · | · | · | 1 | · | 4 | · | · | · | · | · | · | · | · | · | 10 | · | · | | **D09** | 3 | · | · | · | · | 1 | · | 4 | · | · | · | · | · | · | · | · | · | 10 | · | · |
| **D10** | · | · | · | 7 | 1 | 7 | · | 1 | · | · | · | 2 | 1 | · | · | · | · | 8 | 2 | · | | **D10** | · | · | · | 7 | 1 | 7 | · | 1 | · | · | · | 2 | 1 | · | · | · | · | 8 | 2 | · |
| **D11** | 7 | 3 | 1 | 1 | 2 | · | 3 | 1 | 1 | 1 | · | 17 | · | 19 | · | 3 | 11 | 18 | 4 | 3 | | **D11** | 7 | 3 | 1 | 1 | 2 | · | 3 | 1 | 1 | 1 | · | 17 | · | 19 | · | 3 | 11 | 18 | 4 | 3 |
| **D12** | 1 | 5 | 1 | · | · | · | 1 | · | · | · | 1 | · | · | · | · | · | · | 3 | · | · | | **D12** | 1 | 5 | 1 | · | · | · | 1 | · | · | · | 1 | · | · | · | · | · | · | 3 | · | · |
| **D13** | 1 | 2 | · | 2 | · | · | · | 1 | · | · | · | 1 | · | · | · | · | 1 | 2 | · | · | | **D13** | 1 | 2 | · | 2 | · | · | · | 1 | · | · | · | 1 | · | · | · | · | 1 | 2 | · | · |
| **D14** | · | 5 | · | 12 | 3 | 5 | · | · | 1 | 2 | 1 | 6 | · | · | · | 6 | · | 28 | 12 | · | | **D14** | · | 6 | · | 12 | 3 | 10 | · | · | 1 | 2 | 2 | 6 | · | · | · | 6 | · | 32 | 15 | · |
| **D15** | 3 | 2 | 3 | 2 | · | · | · | · | · | · | · | 1 | · | · | · | · | · | 14 | 2 | · | | **D15** | 3 | 2 | 3 | 2 | · | · | · | · | · | · | · | 1 | · | · | · | · | · | 14 | 2 | · |
| **D16** | · | 2 | · | · | · | 1 | · | · | · | · | · | · | · | 1 | · | · | · | 4 | · | · | | **D16** | · | 2 | · | · | · | 1 | · | · | · | · | · | · | · | 1 | · | · | · | 4 | · | · |
| **D17** | 4 | · | · | 2 | · | · | · | · | · | · | · | · | · | · | 2 | 2 | · | 14 | 4 | · | | **D17** | 4 | · | · | 2 | · | · | · | · | · | · | · | · | · | · | 2 | 2 | · | 14 | 4 | · |
@ -1176,7 +1225,7 @@ Rows import columns (module-edge counts, strict graph).
## Lazy imports (function-level) — excluded from the strict graph ## Lazy imports (function-level) — excluded from the strict graph
1524 module edges, 229 cross-domain pairs. 1589 module edges, 229 cross-domain pairs.
| from | to | module edges | pair also strict? | | from | to | module edges | pair also strict? |
|---|---|---:|:---:| |---|---|---:|:---:|
@ -1275,22 +1324,22 @@ Rows import columns (module-edge counts, strict graph).
| D07 | D18 | 10 | yes | | D07 | D18 | 10 | yes |
| D07 | D19 | 7 | yes | | D07 | D19 | 7 | yes |
| D07 | D20 | 1 | **lazy-only** | | D07 | D20 | 1 | **lazy-only** |
| D08 | D01 | 8 | yes | | D08 | D01 | 11 | yes |
| D08 | D02 | 2 | **lazy-only** | | D08 | D02 | 3 | **lazy-only** |
| D08 | D04 | 3 | yes | | D08 | D04 | 3 | yes |
| D08 | D05 | 3 | yes | | D08 | D05 | 4 | yes |
| D08 | D06 | 1 | yes | | D08 | D06 | 1 | yes |
| D08 | D07 | 12 | yes | | D08 | D07 | 14 | yes |
| D08 | D09 | 11 | yes | | D08 | D09 | 14 | yes |
| D08 | D10 | 4 | **lazy-only** | | D08 | D10 | 6 | **lazy-only** |
| D08 | D11 | 1 | **lazy-only** | | D08 | D11 | 3 | **lazy-only** |
| D08 | D12 | 6 | yes | | D08 | D12 | 9 | yes |
| D08 | D14 | 6 | yes | | D08 | D14 | 6 | yes |
| D08 | D15 | 10 | yes | | D08 | D15 | 11 | yes |
| D08 | D16 | 6 | yes | | D08 | D16 | 7 | yes |
| D08 | D17 | 29 | yes | | D08 | D17 | 40 | yes |
| D08 | D18 | 6 | yes | | D08 | D18 | 10 | yes |
| D08 | D19 | 4 | yes | | D08 | D19 | 5 | yes |
| D08 | D20 | 1 | **lazy-only** | | D08 | D20 | 1 | **lazy-only** |
| D09 | D01 | 9 | yes | | D09 | D01 | 9 | yes |
| D09 | D02 | 1 | **lazy-only** | | D09 | D02 | 1 | **lazy-only** |
@ -1351,7 +1400,7 @@ Rows import columns (module-edge counts, strict graph).
| D14 | D09 | 1 | yes | | D14 | D09 | 1 | yes |
| D14 | D10 | 1 | yes | | D14 | D10 | 1 | yes |
| D14 | D11 | 2 | yes | | D14 | D11 | 2 | yes |
| D14 | D12 | 13 | yes | | D14 | D12 | 15 | yes |
| D14 | D13 | 1 | **lazy-only** | | D14 | D13 | 1 | **lazy-only** |
| D14 | D16 | 3 | yes | | D14 | D16 | 3 | yes |
| D14 | D18 | 11 | yes | | D14 | D18 | 11 | yes |
@ -1555,13 +1604,18 @@ Cross-domain pairs reachable ONLY through lazy imports (hidden coupling):
- `ouroboros/tools/delegate.py` → `ouroboros/presence_authority.py` - `ouroboros/tools/delegate.py` → `ouroboros/presence_authority.py`
- **D08 → D02**: - **D08 → D02**:
- `ouroboros/tools/control.py` → `ouroboros/llm.py` - `ouroboros/tools/control.py` → `ouroboros/llm.py`
- `supervisor/events.py` → `ouroboros/llm.py` - `ouroboros/tools/control_runtime.py` → `ouroboros/llm.py`
- `supervisor/events_schedule_task.py` → `ouroboros/llm.py`
- **D08 → D10**: - **D08 → D10**:
- `supervisor/events.py` → `supervisor/git_ops.py`
- `supervisor/events.py` → `supervisor/update_merge.py` - `supervisor/events.py` → `supervisor/update_merge.py`
- `supervisor/workers.py` → `supervisor/git_ops.py` - `supervisor/events_runtime_controls.py` → `supervisor/git_ops.py`
- `supervisor/events_runtime_controls.py` → `supervisor/update_merge.py`
- `supervisor/worker_process.py` → `supervisor/git_ops.py`
- `supervisor/worker_process.py` → `supervisor/update_merge.py`
- `supervisor/workers.py` → `supervisor/update_merge.py` - `supervisor/workers.py` → `supervisor/update_merge.py`
- **D08 → D11**: - **D08 → D11**:
- `supervisor/worker_chat_lane.py` → `ouroboros/gateway/tasks.py`
- `supervisor/worker_promotion.py` → `ouroboros/gateway/tasks.py`
- `supervisor/workers.py` → `ouroboros/gateway/tasks.py` - `supervisor/workers.py` → `ouroboros/gateway/tasks.py`
- **D08 → D20**: - **D08 → D20**:
- `ouroboros/tools/control.py` → `ouroboros/presence_authority.py` - `ouroboros/tools/control.py` → `ouroboros/presence_authority.py`

View file

@ -878,3 +878,26 @@ with evidence, found lane by lane. Applied to the campaign's carried ledger at F
control.py HIDDEN_LEGACY_SCHEDULE_PARAMS, _context_task_depth, control.py HIDDEN_LEGACY_SCHEDULE_PARAMS, _context_task_depth,
_materialize_child_attachment_manifest, maybe_emit_delegated_run_fanout, _materialize_child_attachment_manifest, maybe_emit_delegated_run_fanout,
get_tools + the predecessor family that rode into control_routing. get_tools + the predecessor family that rode into control_routing.
## From the integration seam (coordinator, D13 dispositions, 2026-08-30)
1. safety.py row 1016 (retire module-level supervisor import + _record_safety_usage,
pin test_safety_module_has_no_import_time_dependency_on_the_supervisor) —
LIVE, NOT landed on tip (import at :25, call at :1010). HOT-DEFERRED:
protected file; rides the protected-surface wave (F2/F3) with owner-visible
handling.
2. UNROWED live delta `_safety_drive_root` (fixes cwd-relative "../data" in
safety.py, tip site :899; oracle had no ledger row, prose-only in
DOMAIN_MAP). MUST gain a carried-ledger row before any replay; tip drift
collapsed two mb sites into one — replay needs re-derivation. Candidate
for the F5 carried-ledger mint. RISK: without this note the only useful
unrowed safety delta would be silently lost.
3. shell_guards.py lazy-import rebind (tools.core → core_file_tools) —
confirmed pending with the D05 consumer-rebind wave (D05 ledger §4(e));
chain alive through the facade on tip.
4. runtime_mode_policy oracle delta remainder: registry_core.py +
tool_result.py protection closure returns WITH those two hot-deferred
leaves (D04 ledger §11); GIT_OPS_FAMILY_PATHS / RELEASE_INVARIANT_PATHS
re-cut returns with the G1 git_ops split (D10 wave) — recording now would
protect nonexistent files.
5. D13 census note: tip toml gives D13 eight owners vs oracle DOMAIN_MAP six —
write_shape.py and deliverables_shell.py are new upstream surfaces
post-freeze; not an oracle gap.

View file

@ -227,6 +227,6 @@ BYTE_BASELINE_DEBT = {
BYTE_DEBT = { BYTE_DEBT = {
"ouroboros/loop.py": 312765, "ouroboros/loop.py": 312765,
"tests/test_delegated_subagent_transport.py": 320340, "tests/test_delegated_subagent_transport.py": 320340,
"tests/test_devtools_benchmarks.py": 328116, "tests/test_devtools_benchmarks.py": 327935,
"web/modules/chat.js": 224244, "web/modules/chat.js": 224244,
} }

View file

@ -127,6 +127,12 @@ D20 = "Presence (PROPOSED new domain, owner decision pending; alternative: fold
"ouroboros/extension_health.py" = "D14" "ouroboros/extension_health.py" = "D14"
"ouroboros/extension_isolated_deps.py" = "D14" "ouroboros/extension_isolated_deps.py" = "D14"
"ouroboros/extension_loader.py" = "D14" "ouroboros/extension_loader.py" = "D14"
"ouroboros/extension_child_catalog.py" = "D14"
"ouroboros/extension_import_staging.py" = "D14"
"ouroboros/extension_liveness.py" = "D14"
"ouroboros/extension_plugin_api.py" = "D14"
"ouroboros/extension_registry_state.py" = "D14"
"ouroboros/extension_surface_names.py" = "D14"
"ouroboros/extension_process_runner.py" = "D14" "ouroboros/extension_process_runner.py" = "D14"
"ouroboros/extension_reconcile_queue.py" = "D14" "ouroboros/extension_reconcile_queue.py" = "D14"
"ouroboros/extension_ui_validation.py" = "D14" "ouroboros/extension_ui_validation.py" = "D14"
@ -298,6 +304,10 @@ D20 = "Presence (PROPOSED new domain, owner decision pending; alternative: fold
"ouroboros/skill_readiness.py" = "D14" "ouroboros/skill_readiness.py" = "D14"
"ouroboros/skill_repair_admission.py" = "D14" "ouroboros/skill_repair_admission.py" = "D14"
"ouroboros/skill_review.py" = "D14" "ouroboros/skill_review.py" = "D14"
"ouroboros/skill_review_output.py" = "D14"
"ouroboros/skill_review_packs.py" = "D14"
"ouroboros/skill_review_prompt.py" = "D14"
"ouroboros/skill_review_rebuttals.py" = "D14"
"ouroboros/skill_review_cycles.py" = "D14" "ouroboros/skill_review_cycles.py" = "D14"
"ouroboros/skill_review_history.py" = "D14" "ouroboros/skill_review_history.py" = "D14"
"ouroboros/skill_review_passes.py" = "D14" "ouroboros/skill_review_passes.py" = "D14"
@ -334,6 +344,9 @@ D20 = "Presence (PROPOSED new domain, owner decision pending; alternative: fold
"ouroboros/tools/commit_gate.py" = "D10" "ouroboros/tools/commit_gate.py" = "D10"
"ouroboros/tools/compact_context.py" = "D03" "ouroboros/tools/compact_context.py" = "D03"
"ouroboros/tools/control.py" = "D08" "ouroboros/tools/control.py" = "D08"
"ouroboros/tools/control_events.py" = "D08"
"ouroboros/tools/control_routing.py" = "D08"
"ouroboros/tools/control_runtime.py" = "D08"
"ouroboros/tools/control_delegation.py" = "D07" "ouroboros/tools/control_delegation.py" = "D07"
"ouroboros/tools/core.py" = "D05" "ouroboros/tools/core.py" = "D05"
"ouroboros/tools/core_artifacts.py" = "D05" "ouroboros/tools/core_artifacts.py" = "D05"
@ -424,12 +437,21 @@ D20 = "Presence (PROPOSED new domain, owner decision pending; alternative: fold
"supervisor/cancel_publication.py" = "D09" "supervisor/cancel_publication.py" = "D09"
"supervisor/cognitive_operations.py" = "D08" "supervisor/cognitive_operations.py" = "D08"
"supervisor/events.py" = "D08" "supervisor/events.py" = "D08"
"supervisor/events_budget.py" = "D08"
"supervisor/events_chat_delivery.py" = "D08"
"supervisor/events_coop_checkpoint.py" = "D08"
"supervisor/events_project_routing.py" = "D08"
"supervisor/events_runtime_controls.py" = "D08"
"supervisor/events_schedule_task.py" = "D08"
"supervisor/events_subagent_admission.py" = "D08"
"supervisor/events_worker_reports.py" = "D08"
"supervisor/evolution_lifecycle.py" = "D15" "supervisor/evolution_lifecycle.py" = "D15"
"supervisor/git_ops.py" = "D10" "supervisor/git_ops.py" = "D10"
"supervisor/log_addressing.py" = "D08" "supervisor/log_addressing.py" = "D08"
"supervisor/message_bus.py" = "D08" "supervisor/message_bus.py" = "D08"
"supervisor/owner_stop.py" = "D09" "supervisor/owner_stop.py" = "D09"
"supervisor/queue.py" = "D08" "supervisor/queue.py" = "D08"
"supervisor/queue_schedules.py" = "D08"
"supervisor/queue_transitions.py" = "D08" "supervisor/queue_transitions.py" = "D08"
"supervisor/schedule_time.py" = "D08" "supervisor/schedule_time.py" = "D08"
"supervisor/state.py" = "D08" "supervisor/state.py" = "D08"
@ -446,6 +468,10 @@ D20 = "Presence (PROPOSED new domain, owner decision pending; alternative: fold
"supervisor/update_recovery.py" = "D10" "supervisor/update_recovery.py" = "D10"
"supervisor/update_source.py" = "D10" "supervisor/update_source.py" = "D10"
"supervisor/workers.py" = "D08" "supervisor/workers.py" = "D08"
"supervisor/worker_chat_lane.py" = "D08"
"supervisor/worker_pool_lifecycle.py" = "D08"
"supervisor/worker_process.py" = "D08"
"supervisor/worker_promotion.py" = "D08"
[classification] [classification]
# new upstream modules classified by this campaign (classification=proposed, review pending) # new upstream modules classified by this campaign (classification=proposed, review pending)
@ -538,14 +564,12 @@ proposed = [
"ouroboros/agent.py" = ["D01"] "ouroboros/agent.py" = ["D01"]
"ouroboros/agent_task_pipeline.py" = ["D01"] "ouroboros/agent_task_pipeline.py" = ["D01"]
"ouroboros/delegate_custody.py" = ["D07"] "ouroboros/delegate_custody.py" = ["D07"]
"ouroboros/extension_loader.py" = ["D14"]
"ouroboros/loop.py" = ["D01"] "ouroboros/loop.py" = ["D01"]
"ouroboros/loop_tool_execution.py" = ["D01", "D04"] "ouroboros/loop_tool_execution.py" = ["D01", "D04"]
"ouroboros/review_evidence.py" = ["D06"] "ouroboros/review_evidence.py" = ["D06"]
"ouroboros/review_execution.py" = ["D06"] "ouroboros/review_execution.py" = ["D06"]
"ouroboros/review_state.py" = ["D06"] "ouroboros/review_state.py" = ["D06"]
"ouroboros/review_substrate.py" = ["D06"] "ouroboros/review_substrate.py" = ["D06"]
"ouroboros/skill_review.py" = ["D14"]
"ouroboros/subagent_dispatch_notes.py" = ["D01", "D07"] "ouroboros/subagent_dispatch_notes.py" = ["D01", "D07"]
"ouroboros/subagents.py" = ["D07"] "ouroboros/subagents.py" = ["D07"]
"ouroboros/tools/claude_advisory_review.py" = ["D06"] "ouroboros/tools/claude_advisory_review.py" = ["D06"]
@ -571,18 +595,16 @@ proposed = [
"ouroboros/agent.py" = ["ouroboros/agent_dispatch.py"] "ouroboros/agent.py" = ["ouroboros/agent_dispatch.py"]
"ouroboros/agent_task_pipeline.py" = ["ouroboros/post_task_synthesis.py"] "ouroboros/agent_task_pipeline.py" = ["ouroboros/post_task_synthesis.py"]
"ouroboros/delegate_custody.py" = ["ouroboros/delegate_custody_reconcile.py"] "ouroboros/delegate_custody.py" = ["ouroboros/delegate_custody_reconcile.py"]
"ouroboros/extension_loader.py" = ["ouroboros/extension_child_catalog.py", "ouroboros/extension_import_staging.py", "ouroboros/extension_liveness.py", "ouroboros/extension_plugin_api.py", "ouroboros/extension_registry_state.py", "ouroboros/extension_surface_names.py"]
"ouroboros/loop.py" = ["ouroboros/loop_acceptance.py", "ouroboros/loop_acceptance_review.py", "ouroboros/loop_budget.py", "ouroboros/loop_delivery.py", "ouroboros/loop_forced_finalization.py", "ouroboros/loop_messages.py", "ouroboros/loop_model_call.py", "ouroboros/loop_nudges.py", "ouroboros/loop_round_limits.py"] "ouroboros/loop.py" = ["ouroboros/loop_acceptance.py", "ouroboros/loop_acceptance_review.py", "ouroboros/loop_budget.py", "ouroboros/loop_delivery.py", "ouroboros/loop_forced_finalization.py", "ouroboros/loop_messages.py", "ouroboros/loop_model_call.py", "ouroboros/loop_nudges.py", "ouroboros/loop_round_limits.py"]
"ouroboros/loop_tool_execution.py" = ["ouroboros/tools/tool_result.py"] "ouroboros/loop_tool_execution.py" = ["ouroboros/tools/tool_result.py"]
"ouroboros/review_evidence.py" = ["ouroboros/review_evidence_sections.py"] "ouroboros/review_evidence.py" = ["ouroboros/review_evidence_sections.py"]
"ouroboros/review_execution.py" = ["ouroboros/review_session_verdict.py"] "ouroboros/review_execution.py" = ["ouroboros/review_session_verdict.py"]
"ouroboros/review_state.py" = ["ouroboros/review_state_model.py", "ouroboros/review_state_records.py"] "ouroboros/review_state.py" = ["ouroboros/review_state_model.py", "ouroboros/review_state_records.py"]
"ouroboros/review_substrate.py" = ["ouroboros/review_projection.py", "ouroboros/review_records.py", "ouroboros/review_verdict.py"] "ouroboros/review_substrate.py" = ["ouroboros/review_projection.py", "ouroboros/review_records.py", "ouroboros/review_verdict.py"]
"ouroboros/skill_review.py" = ["ouroboros/skill_review_output.py", "ouroboros/skill_review_packs.py", "ouroboros/skill_review_prompt.py", "ouroboros/skill_review_rebuttals.py"]
"ouroboros/subagent_dispatch_notes.py" = ["ouroboros/agent_dispatch.py"] "ouroboros/subagent_dispatch_notes.py" = ["ouroboros/agent_dispatch.py"]
"ouroboros/subagents.py" = ["ouroboros/subagent_route_health.py"] "ouroboros/subagents.py" = ["ouroboros/subagent_route_health.py"]
"ouroboros/tools/claude_advisory_review.py" = ["ouroboros/tools/review_advisory_prompt.py", "ouroboros/tools/review_advisory_run.py"] "ouroboros/tools/claude_advisory_review.py" = ["ouroboros/tools/review_advisory_prompt.py", "ouroboros/tools/review_advisory_run.py"]
"ouroboros/tools/control.py" = ["ouroboros/tools/control_events.py", "ouroboros/tools/control_routing.py", "ouroboros/tools/control_runtime.py", "ouroboros/tools/control_scheduling.py", "ouroboros/tools/control_subagent_spec.py", "ouroboros/tools/control_task_results.py"] "ouroboros/tools/control.py" = ["ouroboros/tools/control_scheduling.py", "ouroboros/tools/control_subagent_spec.py", "ouroboros/tools/control_task_results.py"]
"ouroboros/tools/delegate.py" = ["ouroboros/tools/delegate_terminal.py"] "ouroboros/tools/delegate.py" = ["ouroboros/tools/delegate_terminal.py"]
"ouroboros/tools/delegate_integration.py" = ["ouroboros/tools/delegate_payload_patch.py"] "ouroboros/tools/delegate_integration.py" = ["ouroboros/tools/delegate_payload_patch.py"]
"ouroboros/tools/git.py" = ["ouroboros/tools/git_evolution.py", "ouroboros/tools/git_plumbing.py", "ouroboros/tools/git_repo_edit.py", "ouroboros/tools/git_review_cycle.py", "ouroboros/tools/git_vcs_ops.py"] "ouroboros/tools/git.py" = ["ouroboros/tools/git_evolution.py", "ouroboros/tools/git_plumbing.py", "ouroboros/tools/git_repo_edit.py", "ouroboros/tools/git_review_cycle.py", "ouroboros/tools/git_vcs_ops.py"]
@ -592,9 +614,9 @@ proposed = [
"ouroboros/tools/scope_review.py" = ["ouroboros/tools/scope_review_budget.py", "ouroboros/tools/scope_review_pack.py"] "ouroboros/tools/scope_review.py" = ["ouroboros/tools/scope_review_budget.py", "ouroboros/tools/scope_review_pack.py"]
"ouroboros/tools/subagent_integration.py" = ["ouroboros/tools/subagent_integration_delegated.py"] "ouroboros/tools/subagent_integration.py" = ["ouroboros/tools/subagent_integration_delegated.py"]
"server.py" = ["ouroboros/server_liveness.py", "ouroboros/server_maintenance.py", "ouroboros/server_owner_routing.py", "ouroboros/server_process.py", "ouroboros/server_restart.py", "ouroboros/server_routing_context.py"] "server.py" = ["ouroboros/server_liveness.py", "ouroboros/server_maintenance.py", "ouroboros/server_owner_routing.py", "ouroboros/server_process.py", "ouroboros/server_restart.py", "ouroboros/server_routing_context.py"]
"supervisor/events.py" = ["supervisor/events_budget.py", "supervisor/events_chat_delivery.py", "supervisor/events_coop_checkpoint.py", "supervisor/events_evolution_done.py", "supervisor/events_project_routing.py", "supervisor/events_runtime_controls.py", "supervisor/events_schedule_task.py", "supervisor/events_subagent_admission.py", "supervisor/events_task_done.py", "supervisor/events_worker_reports.py"] "supervisor/events.py" = ["supervisor/events_evolution_done.py", "supervisor/events_task_done.py"]
"supervisor/git_ops.py" = ["supervisor/git_ops_remotes.py", "supervisor/git_ops_rescue.py", "supervisor/git_ops_reset.py", "supervisor/git_ops_updates.py"] "supervisor/git_ops.py" = ["supervisor/git_ops_remotes.py", "supervisor/git_ops_rescue.py", "supervisor/git_ops_reset.py", "supervisor/git_ops_updates.py"]
"supervisor/queue.py" = ["supervisor/queue_evolution.py", "supervisor/queue_schedules.py", "supervisor/queue_snapshot.py", "supervisor/queue_timeouts.py"] "supervisor/queue.py" = ["supervisor/queue_evolution.py", "supervisor/queue_snapshot.py", "supervisor/queue_timeouts.py"]
"supervisor/task_lifecycle.py" = ["supervisor/cancel_custody.py"] "supervisor/task_lifecycle.py" = ["supervisor/cancel_custody.py"]
"supervisor/update_merge.py" = ["supervisor/update_merge_plan.py"] "supervisor/update_merge.py" = ["supervisor/update_merge_plan.py"]
"supervisor/workers.py" = ["supervisor/worker_assignment.py", "supervisor/worker_chat_lane.py", "supervisor/worker_health.py", "supervisor/worker_pool_lifecycle.py", "supervisor/worker_process.py", "supervisor/worker_promotion.py"] "supervisor/workers.py" = ["supervisor/worker_assignment.py", "supervisor/worker_health.py"]

View file

@ -3567,11 +3567,6 @@ def test_gaia_audit_gold_verbatim_alone_is_weak_only(tmp_path):
assert audit._distinctive_gold(gold) assert audit._distinctive_gold(gold)
def test_gaia_events_serializer_carries_web_search_sources():
# v7next D08: the llm_usage serializer lives with its budget family
src = (REPO_ROOT / "supervisor" / "events_budget.py").read_text(encoding="utf-8")
assert "web_search_sources" in src
def test_gaia_score_leakage_adjusted(tmp_path): def test_gaia_score_leakage_adjusted(tmp_path):
from devtools.benchmarks.gaia import score_gaia from devtools.benchmarks.gaia import score_gaia

View file

@ -172,3 +172,14 @@ def test_task_metrics_are_persisted_and_forwarded_to_live_logs(tmp_path):
assert written["duration_sec"] == 3.142 assert written["duration_sec"] == 3.142
assert pushed[0]["task_id"] == "task-99" assert pushed[0]["task_id"] == "task-99"
assert pushed[0]["tool_errors"] == 1 assert pushed[0]["tool_errors"] == 1
def test_llm_usage_serializer_carries_web_search_sources():
"""The llm_usage serializer must persist web_search_sources (GAIA
campaign contract). Moved here from tests/test_devtools_benchmarks.py:
after the D08 split the serializer lives with its budget family, and
this suite owns the llm_usage event surface."""
import pathlib
src = (pathlib.Path(__file__).resolve().parent.parent
/ "supervisor" / "events_budget.py").read_text(encoding="utf-8")
assert "web_search_sources" in src