From 3a34a0e63227fef2799d28cade13bda3301e282c Mon Sep 17 00:00:00 2001 From: Ouroboros Date: Wed, 16 Sep 2026 07:00:09 +0300 Subject: [PATCH] Reconcile the test inventories with the alarm clock and late answers The retired loop's thought-receipt alias row leaves the ABI-3 allowlist, the new late_answer_not_delivered reason code records its truncation decision, and the facade inventory is regenerated for the routing-metadata seam. Co-authored-by: Ouroboros <311266734+ouroboros-agent@users.noreply.github.com> --- docs/v7next/FACADE_INVENTORY.md | 4 ++-- tests/test_benchmark_provenance_v6810.py | 1 + tests/test_gateway_abi3_removals.py | 1 - 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/v7next/FACADE_INVENTORY.md b/docs/v7next/FACADE_INVENTORY.md index 1986628f2..4d720d84f 100644 --- a/docs/v7next/FACADE_INVENTORY.md +++ b/docs/v7next/FACADE_INVENTORY.md @@ -2,7 +2,7 @@ AST-derived inventory of compatibility facades, regenerated by `python scripts/regenerate_inventories.py`. Do not edit. A facade row is any runtime module whose top-level `from import ...` statements carry the `noqa: F401` re-export marker — the codebase's declared "this binding exists for its binding, not for this module's own use" convention (reference FACADE_CONSUMERS method). Leaf domains come from `ouroboros/domains.toml`; a leaf outside the facade's domain is marked ✗ (that edge also appears in the manifest's pinned direction matrix). `tests/test_generated_inventories.py` pins byte-identity, so any re-export surface change must regenerate this file. -- facade modules: **58**; marked re-export bindings: **2356**; cross-domain facade→leaf pairs: **130** +- facade modules: **58**; marked re-export bindings: **2357**; cross-domain facade→leaf pairs: **130** | facade | domain | bindings | leaves | |---|---|---:|---| @@ -55,7 +55,7 @@ AST-derived inventory of compatibility facades, regenerated by `python scripts/r | `ouroboros/tools/shell_process.py` | D05 | 1 | `ouroboros/tools/process_facts.py` (1 ✗D04) | | `ouroboros/tools/subagent_integration.py` | D07 | 13 | `ouroboros/headless.py` (2 ✗D17)
`ouroboros/tools/subagent_integration_delegated.py` (11) | | `ouroboros/usage_accounting.py` | D16 | 42 | `ouroboros/_usage_cache_splits.py` (4)
`ouroboros/_usage_rows.py` (6)
`ouroboros/_usage_rows_memo.py` (6)
`ouroboros/usage_ledger.py` (18)
`ouroboros/usage_legacy_import.py` (5)
`ouroboros/utils.py` (3 ✗D18) | -| `server.py` | D11 | 49 | `ouroboros/server_liveness.py` (4)
`ouroboros/server_maintenance.py` (14)
`ouroboros/server_owner_routing.py` (5)
`ouroboros/server_process.py` (6)
`ouroboros/server_restart.py` (7)
`ouroboros/server_routing_context.py` (13) | +| `server.py` | D11 | 50 | `ouroboros/server_liveness.py` (4)
`ouroboros/server_maintenance.py` (14)
`ouroboros/server_owner_routing.py` (5)
`ouroboros/server_process.py` (6)
`ouroboros/server_restart.py` (7)
`ouroboros/server_routing_context.py` (14) | | `supervisor/events.py` | D08 | 93 | `ouroboros/config.py` (1 ✗D12)
`ouroboros/contracts/task_constraint.py` (1 ✗D19)
`ouroboros/cost_projection.py` (3 ✗D16)
`ouroboros/subagent_messages.py` (1 ✗D07)
`ouroboros/task_results.py` (2 ✗D17)
`ouroboros/tool_capabilities.py` (2 ✗D04)
`ouroboros/utils.py` (4 ✗D18)
`supervisor/cognitive_operations.py` (2)
`supervisor/events_budget.py` (4)
`supervisor/events_chat_delivery.py` (9)
`supervisor/events_coop_checkpoint.py` (6)
`supervisor/events_evolution_done.py` (1)
`supervisor/events_project_routing.py` (9)
`supervisor/events_runtime_controls.py` (6)
`supervisor/events_schedule_task.py` (4)
`supervisor/events_subagent_admission.py` (15)
`supervisor/events_task_done.py` (8)
`supervisor/events_worker_reports.py` (7)
`supervisor/log_addressing.py` (4)
`supervisor/queue_transitions.py` (1)
`supervisor/steering.py` (2 ✗D09)
`supervisor/task_dispatch.py` (1) | | `supervisor/git_ops.py` | D10 | 37 | `ouroboros/utils.py` (1 ✗D18)
`supervisor/git_ops_remotes.py` (4)
`supervisor/git_ops_rescue.py` (8)
`supervisor/git_ops_reset.py` (10)
`supervisor/git_ops_updates.py` (8)
`supervisor/state.py` (4 ✗D08)
`supervisor/update_recovery.py` (2) | | `supervisor/queue.py` | D08 | 102 | `ouroboros/config.py` (6 ✗D12)
`ouroboros/contracts/task_contract.py` (3 ✗D19)
`ouroboros/schedule_contract.py` (2)
`ouroboros/skill_loader.py` (1 ✗D14)
`ouroboros/utils.py` (3 ✗D18)
`supervisor/evolution_lifecycle.py` (12 ✗D15)
`supervisor/message_bus.py` (3)
`supervisor/queue_schedules.py` (12)
`supervisor/queue_snapshot.py` (5)
`supervisor/queue_timeouts.py` (8)
`supervisor/queue_transitions.py` (3)
`supervisor/schedule_time.py` (7)
`supervisor/state.py` (6)
`supervisor/task_admission.py` (9)
`supervisor/task_lifecycle.py` (17 ✗D09)
`supervisor/task_reaper.py` (5 ✗D09) | diff --git a/tests/test_benchmark_provenance_v6810.py b/tests/test_benchmark_provenance_v6810.py index 95dfa584e..82fdc263f 100644 --- a/tests/test_benchmark_provenance_v6810.py +++ b/tests/test_benchmark_provenance_v6810.py @@ -541,6 +541,7 @@ def test_task_result_row_publishes_the_runtime_reason_alongside_the_adapter_stag # that stops the vocabulary from being hand-copied beside the check again. _TRUNCATION_DECISIONS: dict[str, tuple[bool, str]] = { "history_source_unavailable": (False, "gateway/history_paging.py: readable recent projection with explicit source gap; no task attempt was truncated"), + "late_answer_not_delivered": (False, "gateway/task_decision.py: a late quiz answer was recorded but its chat delivery failed (503, retry); no task attempt was truncated"), # -- truncating: the rail stopped the attempt, so reward 0 is not a capability fact ---- "budget_exhausted": (True, "loop.py:287 per-task USD reservation rail"), "round_limit": (True, "loop.py:3128 _handle_round_limit, the round cap"), diff --git a/tests/test_gateway_abi3_removals.py b/tests/test_gateway_abi3_removals.py index e036fa997..5b88cf56c 100644 --- a/tests/test_gateway_abi3_removals.py +++ b/tests/test_gateway_abi3_removals.py @@ -198,7 +198,6 @@ class TestAliasProducerFanOutSweep: ("ouroboros/loop_llm_call.py", "cost_usd", "call_llm_with_retry"): ("llm_round usage event rows", 2), ("ouroboros/post_task_synthesis.py", "cost_usd", "_run_chat_consolidation"): ("chat_block_consolidation event row", 1), ("ouroboros/post_task_synthesis.py", "cost_usd", "_run_reflection"): ("reflection generation gate args", 1), - ("ouroboros/consciousness.py", "cost_usd", "_think_scoped"): ("consciousness thought receipt row", 2), ("supervisor/events_evolution_done.py", "cost_usd", "_handle_evolution_task_done"): ("internal lifecycle/checkpoint call kwargs + supervisor.jsonl observability row", 3), # review/evidence receipt schemas (internal review plane) ("ouroboros/triad_review.py", "cost_usd", "to_dict"): ("triad review receipt serialization", 1),