From a56bb76a38ca92b39a659b4b6e63e07a76243a4f Mon Sep 17 00:00:00 2001 From: Ouroboros <311266734+ouroboros-agent@users.noreply.github.com> Date: Sun, 30 Aug 2026 20:44:51 +0000 Subject: [PATCH] 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. --- docs/v7next/DOMAIN_QUOTIENT_REPORT.md | 196 ++++++++++++++++---------- docs/v7next/LEDGER_CORRECTIONS.md | 23 +++ ouroboros/size_ratchet_manifest.py | 2 +- scripts/v7next_domains.toml | 38 +++-- tests/test_devtools_benchmarks.py | 5 - tests/test_events_llm_usage.py | 11 ++ 6 files changed, 190 insertions(+), 85 deletions(-) diff --git a/docs/v7next/DOMAIN_QUOTIENT_REPORT.md b/docs/v7next/DOMAIN_QUOTIENT_REPORT.md index ad1f23022..de8fd4cf8 100644 --- a/docs/v7next/DOMAIN_QUOTIENT_REPORT.md +++ b/docs/v7next/DOMAIN_QUOTIENT_REPORT.md @@ -1,17 +1,17 @@ # 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) -- analyzed-inputs content fingerprint: sha256 `e46d590d3152dbecea624899c103b7a71f47bae430d97da0e7680cbf602999a6` (sorted tracked runtime files, path+bytes; regenerate on any tree and compare to verify freshness) -- manifest: `scripts/v7next_domains.toml` sha256 `0cb944d21c82f6dae52b0778e4e6cad2012b1df4ec6752459467032530c7b9cc` +- 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 `f98973117fa14c57dbf83036069975367ff40102083000f3bd080a0565f0063f` (sorted tracked runtime files, path+bytes; regenerate on any tree and compare to verify freshness) +- manifest: `scripts/v7next_domains.toml` sha256 `1be38a90095a2421fd7679d0f29411cb9380c25b98c27d39f7e015581ee1de29` - reference (domain vocabulary): ouroboros_v7_wip @ 9f691656e7e756c483f72ef549418c0e7a1b8054 (frozen) - 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. ## 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) | 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 | | D06 — Review stack | 48 | 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 | | D10 — Git, update & release machinery | 17 | 1 | | D11 — Gateway, server & Web UI | 34 | 2 | | D12 — Settings & configuration | 14 | 1 | | 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 | | D16 — Observability, usage accounting & cost | 8 | 0 | | 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 -- module-level import edges (unconditional): **1198** unique, 3656 statements -- cross-domain module edges: **761** +- module-level import edges (unconditional): **1316** unique, 4061 statements +- cross-domain module edges: **810** - domain-level edges (quotient): **163** - 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 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 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/tools/control_delegation.py` → `ouroboros/contracts/task_contract.py` (line 20) - `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/followup.py` → `ouroboros/deadline_utils.py` (line 24) - `supervisor/events.py` → `ouroboros/outcomes.py` (line 34) † - `supervisor/events.py` → `ouroboros/post_task_checkpoint.py` (line 35) † - `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/worker_pool_lifecycle.py` → `ouroboros/outcomes.py` (line 25) - `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_policy.py` (line 60) † - `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) † - `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) - `supervisor/message_bus.py` → `ouroboros/artifacts.py` (line 13) - **D08 → D06** (1 module edges) - `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/subagent_runtime.py` (line 54) † - `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/subagents.py` (line 36) † - `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/task_admission.py` → `ouroboros/depth_evidence.py` (line 10) - `supervisor/task_dispatch.py` → `ouroboros/depth_evidence.py` (line 7) - `supervisor/workers.py` → `ouroboros/depth_evidence.py` (line 22) † - **D08 → D09** (3 module edges) - - `supervisor/events.py` → `supervisor/steering.py` (line 3308) † - - `supervisor/queue.py` → `supervisor/task_lifecycle.py` (line 49,1104) † - - `supervisor/queue.py` → `supervisor/task_reaper.py` (line 153) † -- **D08 → D12** (5 module edges) + - `supervisor/events.py` → `supervisor/steering.py` (line 1115) † + - `supervisor/queue.py` → `supervisor/task_lifecycle.py` (line 49,764) † + - `supervisor/queue.py` → `supervisor/task_reaper.py` (line 151) † +- **D08 → D12** (7 module edges) - `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_subagent_admission.py` → `ouroboros/config.py` (line 16) - `supervisor/queue.py` → `ouroboros/config.py` (line 22) † - `supervisor/state.py` → `ouroboros/config.py` (line 13) - `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/queue.py` → `ouroboros/skill_loader.py` (line 32) † + - `supervisor/queue_schedules.py` → `ouroboros/skill_loader.py` (line 21) - **D08 → D15** (1 module edges) - `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) † -- **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/task_results.py` (line 42) † - `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_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/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_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/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/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/state.py` → `ouroboros/platform_layer.py` (line 14) - `supervisor/state.py` → `ouroboros/utils.py` (line 15) - `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) † -- **D08 → D19** (5 module edges) +- **D08 → D19** (7 module edges) - `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_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/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) - `ouroboros/owner_hurry.py` → `ouroboros/outcomes.py` (line 46) - `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) - `server.py` → `ouroboros/config.py` (line 147) † - **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_loader.py` (line 33) - `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) - `ouroboros/git_shell_policy.py` → `ouroboros/utils.py` (line 17) - `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_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/tools/skill_exec.py` → `ouroboros/provider_models.py` (line 18) - `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_publish_github.py` → `ouroboros/tools/registry.py` (line 13) † - `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/tools/skill_exec.py` → `ouroboros/tool_access.py` (line 34) - `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/tools/skill_exec.py` → `ouroboros/tools/shell.py` (line 39) - `ouroboros/tools/skill_preflight.py` → `ouroboros/tools/shell.py` (line 25) -- **D14 → D06** (5 module edges) - - `ouroboros/skill_review.py` → `ouroboros/reviewer_slot_config.py` (line 17) † +- **D14 → D06** (10 module edges) + - `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/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_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) - `ouroboros/skill_publish_scanner.py` → `ouroboros/process_custody.py` (line 25) - **D14 → D10** (2 module edges) - `ouroboros/skill_publish_github.py` → `ouroboros/tools/github.py` (line 12) - `ouroboros/tools/skill_publish.py` → `ouroboros/tools/github.py` (line 60) -- **D14 → D11** (1 module edges) - - `ouroboros/extension_loader.py` → `ouroboros/gateway/host_service.py` (line 51) † +- **D14 → D11** (2 module edges) + - `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) - `ouroboros/marketplace/ouroboroshub.py` → `ouroboros/config.py` (line 23) - `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/tools/skill_exec.py` → `ouroboros/config.py` (line 15) - `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_ledger.py` (line 10) - `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/extension_companion.py` → `ouroboros/platform_layer.py` (line 16) - `ouroboros/extension_companion.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/utils.py` (line 37) - `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_publish_scanner.py` → `ouroboros/platform_layer.py` (line 20) - `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_history.py` → `ouroboros/platform_layer.py` (line 11) - `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/tools/skill_exec.py` → `ouroboros/platform_layer.py` (line 17) - `ouroboros/tools/skill_exec.py` → `ouroboros/utils.py` (line 45) - `ouroboros/tools/skill_preflight.py` → `ouroboros/platform_layer.py` (line 26) - `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_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/marketplace/adapter.py` → `ouroboros/contracts/plugin_api.py` (line 13) - `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 | D18 | 17 | yes | | D07 | D19 | 3 | yes | -| D08 | D01 | 7 | yes | -| D08 | D04 | 5 | yes | +| D08 | D01 | 9 | yes | +| D08 | D04 | 12 | yes | | D08 | D05 | 1 | yes | | D08 | D06 | 1 | yes | -| D08 | D07 | 11 | yes | +| D08 | D07 | 12 | yes | | D08 | D09 | 3 | yes | -| D08 | D12 | 5 | yes | -| D08 | D14 | 2 | yes | +| D08 | D12 | 7 | yes | +| D08 | D14 | 3 | yes | | D08 | D15 | 1 | yes | -| D08 | D16 | 1 | yes | -| D08 | D17 | 6 | yes | -| D08 | D18 | 10 | yes | -| D08 | D19 | 5 | yes | +| D08 | D16 | 2 | yes | +| D08 | D17 | 11 | yes | +| D08 | D18 | 24 | yes | +| D08 | D19 | 7 | yes | | D09 | D01 | 3 | yes | | D09 | D06 | 1 | yes | | D09 | D08 | 4 | yes | @@ -1105,17 +1154,17 @@ ledger-derived leaves are transplanted (Ф1 recipe, plan §5.3). | D13 | D12 | 1 | yes | | D13 | D17 | 1 | yes | | D13 | D18 | 2 | yes | -| D14 | D02 | 5 | yes | +| D14 | D02 | 6 | yes | | D14 | D04 | 12 | yes | | D14 | D05 | 3 | yes | -| D14 | D06 | 5 | yes | +| D14 | D06 | 10 | yes | | D14 | D09 | 1 | yes | | D14 | D10 | 2 | yes | -| D14 | D11 | 1 | yes | +| D14 | D11 | 2 | yes | | D14 | D12 | 6 | yes | | D14 | D16 | 6 | yes | -| D14 | D18 | 28 | yes | -| D14 | D19 | 12 | yes | +| D14 | D18 | 32 | yes | +| D14 | D19 | 15 | yes | | D15 | D01 | 3 | yes | | D15 | D02 | 2 | 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 | · | | **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 | · | -| **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 | · | · | | **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 | | **D12** | 1 | 5 | 1 | · | · | · | 1 | · | · | · | 1 | · | · | · | · | · | · | 3 | · | · | | **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 | · | | **D16** | · | 2 | · | · | · | 1 | · | · | · | · | · | · | · | 1 | · | · | · | 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 -1524 module edges, 229 cross-domain pairs. +1589 module edges, 229 cross-domain pairs. | from | to | module edges | pair also strict? | |---|---|---:|:---:| @@ -1275,22 +1324,22 @@ Rows import columns (module-edge counts, strict graph). | D07 | D18 | 10 | yes | | D07 | D19 | 7 | yes | | D07 | D20 | 1 | **lazy-only** | -| D08 | D01 | 8 | yes | -| D08 | D02 | 2 | **lazy-only** | +| D08 | D01 | 11 | yes | +| D08 | D02 | 3 | **lazy-only** | | D08 | D04 | 3 | yes | -| D08 | D05 | 3 | yes | +| D08 | D05 | 4 | yes | | D08 | D06 | 1 | yes | -| D08 | D07 | 12 | yes | -| D08 | D09 | 11 | yes | -| D08 | D10 | 4 | **lazy-only** | -| D08 | D11 | 1 | **lazy-only** | -| D08 | D12 | 6 | yes | +| D08 | D07 | 14 | yes | +| D08 | D09 | 14 | yes | +| D08 | D10 | 6 | **lazy-only** | +| D08 | D11 | 3 | **lazy-only** | +| D08 | D12 | 9 | yes | | D08 | D14 | 6 | yes | -| D08 | D15 | 10 | yes | -| D08 | D16 | 6 | yes | -| D08 | D17 | 29 | yes | -| D08 | D18 | 6 | yes | -| D08 | D19 | 4 | yes | +| D08 | D15 | 11 | yes | +| D08 | D16 | 7 | yes | +| D08 | D17 | 40 | yes | +| D08 | D18 | 10 | yes | +| D08 | D19 | 5 | yes | | D08 | D20 | 1 | **lazy-only** | | D09 | D01 | 9 | yes | | D09 | D02 | 1 | **lazy-only** | @@ -1351,7 +1400,7 @@ Rows import columns (module-edge counts, strict graph). | D14 | D09 | 1 | yes | | D14 | D10 | 1 | yes | | D14 | D11 | 2 | yes | -| D14 | D12 | 13 | yes | +| D14 | D12 | 15 | yes | | D14 | D13 | 1 | **lazy-only** | | D14 | D16 | 3 | 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` - **D08 → D02**: - `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**: - - `supervisor/events.py` → `supervisor/git_ops.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` - **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` - **D08 → D20**: - `ouroboros/tools/control.py` → `ouroboros/presence_authority.py` diff --git a/docs/v7next/LEDGER_CORRECTIONS.md b/docs/v7next/LEDGER_CORRECTIONS.md index 618c030f1..e91dea5c4 100644 --- a/docs/v7next/LEDGER_CORRECTIONS.md +++ b/docs/v7next/LEDGER_CORRECTIONS.md @@ -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, _materialize_child_attachment_manifest, maybe_emit_delegated_run_fanout, 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. diff --git a/ouroboros/size_ratchet_manifest.py b/ouroboros/size_ratchet_manifest.py index 9f0bfbe58..f1ed3b955 100644 --- a/ouroboros/size_ratchet_manifest.py +++ b/ouroboros/size_ratchet_manifest.py @@ -227,6 +227,6 @@ BYTE_BASELINE_DEBT = { BYTE_DEBT = { "ouroboros/loop.py": 312765, "tests/test_delegated_subagent_transport.py": 320340, - "tests/test_devtools_benchmarks.py": 328116, + "tests/test_devtools_benchmarks.py": 327935, "web/modules/chat.js": 224244, } diff --git a/scripts/v7next_domains.toml b/scripts/v7next_domains.toml index e4e628e02..87bfcf361 100644 --- a/scripts/v7next_domains.toml +++ b/scripts/v7next_domains.toml @@ -127,6 +127,12 @@ D20 = "Presence (PROPOSED new domain, owner decision pending; alternative: fold "ouroboros/extension_health.py" = "D14" "ouroboros/extension_isolated_deps.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_reconcile_queue.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_repair_admission.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_history.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/compact_context.py" = "D03" "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/core.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/cognitive_operations.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/git_ops.py" = "D10" "supervisor/log_addressing.py" = "D08" "supervisor/message_bus.py" = "D08" "supervisor/owner_stop.py" = "D09" "supervisor/queue.py" = "D08" +"supervisor/queue_schedules.py" = "D08" "supervisor/queue_transitions.py" = "D08" "supervisor/schedule_time.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_source.py" = "D10" "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] # new upstream modules classified by this campaign (classification=proposed, review pending) @@ -538,14 +564,12 @@ proposed = [ "ouroboros/agent.py" = ["D01"] "ouroboros/agent_task_pipeline.py" = ["D01"] "ouroboros/delegate_custody.py" = ["D07"] -"ouroboros/extension_loader.py" = ["D14"] "ouroboros/loop.py" = ["D01"] "ouroboros/loop_tool_execution.py" = ["D01", "D04"] "ouroboros/review_evidence.py" = ["D06"] "ouroboros/review_execution.py" = ["D06"] "ouroboros/review_state.py" = ["D06"] "ouroboros/review_substrate.py" = ["D06"] -"ouroboros/skill_review.py" = ["D14"] "ouroboros/subagent_dispatch_notes.py" = ["D01", "D07"] "ouroboros/subagents.py" = ["D07"] "ouroboros/tools/claude_advisory_review.py" = ["D06"] @@ -571,18 +595,16 @@ proposed = [ "ouroboros/agent.py" = ["ouroboros/agent_dispatch.py"] "ouroboros/agent_task_pipeline.py" = ["ouroboros/post_task_synthesis.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_tool_execution.py" = ["ouroboros/tools/tool_result.py"] "ouroboros/review_evidence.py" = ["ouroboros/review_evidence_sections.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_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/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/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_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"] @@ -592,9 +614,9 @@ proposed = [ "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"] "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/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/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"] diff --git a/tests/test_devtools_benchmarks.py b/tests/test_devtools_benchmarks.py index 93af39c71..5ac47eecf 100644 --- a/tests/test_devtools_benchmarks.py +++ b/tests/test_devtools_benchmarks.py @@ -3567,11 +3567,6 @@ def test_gaia_audit_gold_verbatim_alone_is_weak_only(tmp_path): 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): from devtools.benchmarks.gaia import score_gaia diff --git a/tests/test_events_llm_usage.py b/tests/test_events_llm_usage.py index 0d0bc9b4d..b885db318 100644 --- a/tests/test_events_llm_usage.py +++ b/tests/test_events_llm_usage.py @@ -172,3 +172,14 @@ def test_task_metrics_are_persisted_and_forwarded_to_live_logs(tmp_path): assert written["duration_sec"] == 3.142 assert pushed[0]["task_id"] == "task-99" 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