Preserve late work evidence and remove the extinct rehearsal router

Classify complete tool observations before dismissing a retired hidden turn.
Show late proven work through the existing card projection with its recorded
outcome and cost. Preserve an existing terminal card under metadata-less late
starts; reuse the terminal predicate with the metrics lifecycle axis, since
metrics do not carry the authored-message terminal-status field. Keep live
metrics nonterminal and old/incomplete addressing aggregates hidden.

Remove only the dead promoted_task_toolset router branch and SW1 script role
from the keyless rehearsal. Exercise its actual managed-root loopback request
and preserve repeatable child/probe final templates.

This is the root-approved S1/S2 batch after review of8416d944. Native focused
verification caught and resolved D1/D2 within this batch; their red receipts
remain preserved. Protected size_ratchet_manifest.py was regenerated with the
standard script: chat.js205675 to205673 only, with no baseline expansion.

Validation:125sharedJS tests and132independentJS/probes pass;78focusedPython
checks plus2SM1unit controls pass, including docs/BIBLE and both real ratchet
nodes. Final ratchet delta and Ruff F pass. Full SM1 rehearsal was not rerun.
Exact final model reviews and browser delta follow this immutable checkpoint;
root retains composition, joint live cognitive workflow and public delivery.

(cherry picked from commit b52b4c0898258132d3a2656eae6fa6b4d8871918)
This commit is contained in:
Ouroboros 2026-09-12 20:35:01 +03:00
parent 87050f733a
commit f856286372
8 changed files with 159 additions and 23 deletions

View file

@ -779,9 +779,6 @@ def sw1_stub_script(_clone: pathlib.Path) -> dict:
"expected_output": "A short listing."}}
return {
"router": [{"tool": "promote_chat_to_task", "arguments": {
"objective": SW1_OBJECTIVE, "title": "SW1 swarm survey", "predecessor_task_id": ""}},
{"final": "Routed the Swarm request into a managed task."}],
"agent": [
{"tool": "plan_task", "arguments": {
"goal": "Survey the repository with two parallel scouts.",

View file

@ -3,9 +3,9 @@
Reuses the system-E2E harness (``tests/system_e2e/harness.py``: the loopback model server, the
review-organ classification with its canned parse-clean verdicts, ``keyless_settings``) instead
of a second stub; the runner imports it lazily and only in stub mode. The one thing added here
is ROUTING: a swarm scenario interleaves
router, parent, child and admission-probe calls on one wire, so the script is a map of
per-role queues rather than one ordered list (``scenarios.<id>_stub_script``).
is per-role sequencing: a swarm scenario interleaves managed-root, child and admission-probe
calls on one wire, so the script is a map of per-role queues rather than one ordered list
(``scenarios.<id>_stub_script``).
"""
from __future__ import annotations
@ -14,7 +14,6 @@ import json
STUB_MODEL_SLUG = "openai-compatible::mock-model" # == harness.MOCK_SLUG (asserted in stub_settings)
STUB_CHILD_SLUG = "openai-compatible::mock-child"
STUB_MODEL_SLOTS = {"OUROBOROS_MODEL": STUB_MODEL_SLUG, "OUROBOROS_MODEL_LIGHT": STUB_MODEL_SLUG}
ROUTER_PROMPT_KEY = '"promoted_task_toolset"' # only the Swarm router turn's runtime context carries it
def routed_stub_model(script: dict):
@ -35,8 +34,6 @@ def routed_stub_model(script: dict):
return "probe"
if "mock-child" in str(body.get("model") or ""):
return "child"
if ROUTER_PROMPT_KEY in harness.body_text(body):
return "router"
return "agent"
def _answer(self, body: dict, seq: int) -> tuple[str, dict]: