Compare commits

..
37 Commits
Author SHA1 Message Date
conductor 79ff61b361 chore(release): auto-bump version to 0.359.0 — earned by # (minor: converged release (push-to-master bump))
CI Pipeline / lint (push) Failing after 45s
CI Pipeline / go-surface (push) Failing after 24s
CI Pipeline / rust-surface (push) Failing after 13s
CI Pipeline / unit-tests (push) Failing after 1m22s
CI Pipeline / best-practices (push) Successful in 6s
CI Pipeline / documentation (push) Successful in 3s
CI Pipeline / type-check (push) Failing after 39s
CI Pipeline / gitea-offline (push) Successful in 16s
CI Pipeline / canary (push) Failing after 1m8s
deploy / deploy (push) Failing after 15s
issue-convergence / converge (push) Successful in 1s
CI Pipeline / required-checks (push) Failing after 1s
Auto-version and Release / release (push) Failing after 38s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Failing after 5s
Promotion record: (unknown)
2026-10-25 21:46:31 +00:00
Nick 6b3ed6b721 feat(runecore): D57 runtime dominion — runtime-env layer, tool-executor deployment, model-refusal authority (Gitea #2590/#2591)
CI Pipeline / unit-tests (push) Canceled after 0s
CI Pipeline / go-surface (push) Canceled after 0s
CI Pipeline / rust-surface (push) Canceled after 0s
CI Pipeline / canary (push) Canceled after 0s
CI Pipeline / best-practices (push) Canceled after 0s
CI Pipeline / documentation (push) Canceled after 0s
CI Pipeline / type-check (push) Canceled after 0s
CI Pipeline / gitea-offline (push) Canceled after 0s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
deploy / deploy (push) Canceled after 0s
CI Pipeline / lint (push) Canceling
Auto-version and Release / release (push) Canceled after 29s
issue-convergence / converge (push) Successful in 2s
Owner's top-priority wave: runtime awareness of the user's filesystem
and dominion on tool call usage. Boot-time filesystem probe served on
/v1/status as runtime_env (awareness, never gating); tool-executor
deployed to ~/.local/share/rune/bin via ensure_core.py and
build_paired.sh with one resolution door; deterministic literal-phrase
refusal classifier verifies model capability claims against the actual
suite, corrects false claims with a retry turn naming the real tools,
and journals capability.refusal_correction; model_authority facts on
/v1/status; the dominion check asserts no gate exists between
chat-pane tool calls and filesystem ops.

Contract: ADMIT-wave-d57-runtime-dominion. go test -race -short green;
vet/gofmt clean.
2026-10-25 21:45:37 +00:00
Nick 312592ea13 merge: removal-prep/dead-superseded-pile — minified oracle bodies / dead-pile deletion (owner merge-all ruling, Gitea #2598 item 2)
Auto-version and Release / release (push) Failing after 33s
CI Pipeline / lint (push) Failing after 50s
CI Pipeline / go-surface (push) Failing after 24s
CI Pipeline / rust-surface (push) Failing after 11s
CI Pipeline / unit-tests (push) Failing after 1m12s
CI Pipeline / best-practices (push) Successful in 3s
CI Pipeline / documentation (push) Successful in 3s
CI Pipeline / canary (push) Failing after 1m1s
CI Pipeline / type-check (push) Failing after 39s
deploy / deploy (push) Failing after 14s
issue-convergence / converge (push) Successful in 1s
CI Pipeline / gitea-offline (push) Successful in 21s
CI Pipeline / required-checks (push) Failing after 3s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Failing after 9s
2026-10-25 19:40:12 +00:00
Nick 4cdafeed37 merge: removal-prep/cache — minified oracle bodies / dead-pile deletion (owner merge-all ruling, Gitea #2598 item 2) 2026-10-25 19:40:12 +00:00
Nick 16721a3366 merge: removal-prep/auto-context — minified oracle bodies / dead-pile deletion (owner merge-all ruling, Gitea #2598 item 2) 2026-10-25 19:40:12 +00:00
Nick 66fb3a8c57 merge: removal-prep/openai-compat-transport — minified oracle bodies / dead-pile deletion (owner merge-all ruling, Gitea #2598 item 2) 2026-10-25 19:40:12 +00:00
Nick 79da78a9f9 merge: removal-prep/message-queue — minified oracle bodies / dead-pile deletion (owner merge-all ruling, Gitea #2598 item 2) 2026-10-25 19:40:12 +00:00
Nick 7e74a627fe merge: removal-prep/forge-client — minified oracle bodies / dead-pile deletion (owner merge-all ruling, Gitea #2598 item 2) 2026-10-25 19:40:12 +00:00
Nick dd40e4fbed merge: removal-prep/reconcile-tools — minified oracle bodies / dead-pile deletion (owner merge-all ruling, Gitea #2598 item 2) 2026-10-25 19:40:12 +00:00
Nick e6d87893b6 merge: removal-prep/paths — minified oracle bodies / dead-pile deletion (owner merge-all ruling, Gitea #2598 item 2) 2026-10-25 19:40:12 +00:00
Nick 936cb1e424 removal-prep/dead-superseded-pile: batch manifest
deploy / deploy (push) Skipped
CI Pipeline / lint (push) Failing after 47s
CI Pipeline / unit-tests (push) Failing after 35s
CI Pipeline / rust-surface (push) Failing after 9s
CI Pipeline / go-surface (push) Failing after 23s
CI Pipeline / best-practices (push) Successful in 2s
CI Pipeline / documentation (push) Successful in 3s
CI Pipeline / type-check (push) Failing after 39s
CI Pipeline / canary (push) Failing after 1m7s
CI Pipeline / gitea-offline (push) Successful in 15s
CI Pipeline / required-checks (push) Failing after 4s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Failing after 5s
2026-10-25 19:12:16 +00:00
Nick 4029245630 removal-prep/auto-context: batch manifest 2026-10-25 19:12:16 +00:00
Nick 62afb4a53e removal-prep/reconcile-tools: batch manifest 2026-10-25 19:12:16 +00:00
Nick af94384710 removal-prep/openai-compat-transport: batch manifest 2026-10-25 19:12:15 +00:00
Nick 1effa1f797 removal-prep/message-queue: batch manifest 2026-10-25 19:12:15 +00:00
Nick ebfdac016a removal-prep/forge-client: batch manifest 2026-10-25 19:12:15 +00:00
Nick d9e756f001 removal-prep/cache: batch manifest 2026-10-25 19:12:15 +00:00
Nick 7116409ca4 removal-prep/paths: batch manifest 2026-10-25 19:12:15 +00:00
Nick 17ac2ce203 removal-prep/dead-superseded-pile: delete dead alpha marker stub (Gitea #2598 item 2)
Import-graph over src/tui/scripts/tests: 0 importers anywhere. The 46
superseded modules in triage-2026-10-24 pile2 are HELD: truth-gen,
canary and parity scripts still import them ('0 live importers' = no
runtime consumer), so their removal must be a coordinated script+module
wave, not this tranche.
2026-10-25 18:52:35 +00:00
Nick 14bcd4f489 removal-prep/auto-context: minify Python oracle bodies to escape-hatch refusal (Gitea #2598 item 2)
deploy / deploy (push) Skipped
CI Pipeline / lint (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 0s
CI Pipeline / go-surface (push) Canceled after 0s
CI Pipeline / rust-surface (push) Canceled after 0s
CI Pipeline / canary (push) Canceled after 0s
CI Pipeline / best-practices (push) Canceled after 0s
CI Pipeline / documentation (push) Canceled after 0s
CI Pipeline / type-check (push) Canceled after 0s
CI Pipeline / gitea-offline (push) Canceled after 0s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
RUNE_AUTO_CONTEXT_ENGINE=python switch shape kept; both oracle bodies
raise 'escape hatch retired'. Battery keeps Go-side pins and asserts the
refusal (8 passed); sibling auto-execution-context battery green.
2026-10-25 18:43:08 +00:00
Nick d2e5467d61 removal-prep/reconcile-tools: minify reconcile oracle body to escape-hatch refusal (Gitea #2598 item 2)
deploy / deploy (push) Skipped
CI Pipeline / lint (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 0s
CI Pipeline / go-surface (push) Canceled after 0s
CI Pipeline / rust-surface (push) Canceled after 0s
CI Pipeline / canary (push) Canceled after 0s
CI Pipeline / best-practices (push) Canceled after 0s
CI Pipeline / documentation (push) Canceled after 0s
CI Pipeline / type-check (push) Canceled after 0s
CI Pipeline / gitea-offline (push) Canceled after 0s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
RUNE_MODEL_ROUTING_ENGINE=python switch shape kept; the oracle body raises
'escape hatch retired'. Corpus pins ride the Go engine; refusal pinned;
also fixed pre-existing missing sys.path setup so the battery actually
runs (4 passed).
2026-10-25 18:31:45 +00:00
Nick 1a75b10f43 removal-prep/openai-compat-transport: minify Python oracle bodies to escape-hatch refusal (Gitea #2598 item 2)
deploy / deploy (push) Skipped
CI Pipeline / unit-tests (push) Canceled after 0s
CI Pipeline / go-surface (push) Canceled after 0s
CI Pipeline / rust-surface (push) Canceled after 0s
CI Pipeline / canary (push) Canceled after 0s
CI Pipeline / best-practices (push) Canceled after 0s
CI Pipeline / documentation (push) Canceled after 0s
CI Pipeline / type-check (push) Canceled after 0s
CI Pipeline / gitea-offline (push) Canceled after 0s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / lint (push) Canceled after 1s
RUNE_OPENAI_COMPAT_TRANSPORT_ENGINE=python switch shape kept; five oracle
bodies raise 'escape hatch retired'. Suite rides the Go engine now;
seam-stub tests converted to refusal pins; semantics (reasoning→thinking,
translation shapes) pinned Go-side in the parity battery (36 passed).
2026-10-25 18:23:33 +00:00
Nick 65d3ffd3e0 chore(scripts): admission dispatch for the second-pass verification wave (Gitea #2596)
Auto-version and Release / release (push) Failing after 34s
CI Pipeline / lint (push) Failing after 45s
CI Pipeline / go-surface (push) Failing after 22s
CI Pipeline / rust-surface (push) Failing after 10s
CI Pipeline / unit-tests (push) Failing after 1m8s
CI Pipeline / best-practices (push) Successful in 6s
CI Pipeline / documentation (push) Successful in 3s
CI Pipeline / canary (push) Failing after 59s
CI Pipeline / gitea-offline (push) Successful in 14s
CI Pipeline / type-check (push) Failing after 42s
issue-convergence / converge (push) Successful in 1s
deploy / deploy (push) Failing after 16s
CI Pipeline / required-checks (push) Failing after 1s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Failing after 6s
classify + activate + admit of the adversarial re-verification of the
10 remaining general-34 facades at the cache-catch standard; evidence
refs name the serving-path catch (goal fail-loud save) and the three
mutation-gap pins.
2026-10-25 18:06:52 +00:00
Nick d18b20ed0b test(forge_client): pin live-path httpx.ConnectError kind projection — mutation spot-check closure (second pass)
The truth rows exercise fake-sender branches only; the live error
classification (classifyTransportErr dial → httpx.ConnectError) is
uncovered, and renaming the kind survived the battery. Pinned through
the eval surface against a closed local port
(TestEvalRequestConnectErrorKind); red under mutation, green clean.
2026-10-25 18:05:55 +00:00
Nick 6b95896c4a test(abstraction): pin list_beliefs eval default limit=20 — mutation spot-check closure (second pass)
The truth rows always carry an explicit limit, so flipping the Go
eval op's default (20 → 19) survived the battery while the eval CLI
(a public serving surface) would silently return one fewer row than
the oracle's list_beliefs(limit=20). Pinned over a 25-belief seeded
store: default == explicit-20 (TestListBeliefsDefaultLimitIs20).
2026-10-25 18:05:55 +00:00
Nick f6338f1143 test(goal): pin eval-surface default verification_method — mutation spot-check closure (second pass)
The frozen truth rows always pass an explicit verification_method, so
flipping the eval op's 'manual' default survived the battery. Pinned
via the eval surface (TestSetGoalDefaultVerificationMethod); red under
mutation, green clean.
2026-10-25 18:05:55 +00:00
Nick 68dd48c035 removal-prep/message-queue: minify Python oracle methods to escape-hatch refusal (Gitea #2598 item 2)
deploy / deploy (push) Skipped
CI Pipeline / lint (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 0s
CI Pipeline / go-surface (push) Canceled after 0s
CI Pipeline / rust-surface (push) Canceled after 0s
CI Pipeline / canary (push) Canceled after 0s
CI Pipeline / best-practices (push) Canceled after 0s
CI Pipeline / documentation (push) Canceled after 0s
CI Pipeline / type-check (push) Canceled after 0s
CI Pipeline / gitea-offline (push) Canceled after 0s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
RUNE_MESSAGE_QUEUE_ENGINE=python switch shape kept; all eight oracle
methods raise 'escape hatch retired'. Battery keeps Go-side flow pins,
replaces oracle comparisons and cross-engine coherence pins with refusal
assertions (13 passed).
2026-10-25 17:47:56 +00:00
Nick 90cc4fa271 removal-prep/forge-client: minify _request_python oracle body to escape-hatch refusal (Gitea #2598 item 2)
deploy / deploy (push) Skipped
CI Pipeline / lint (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 0s
CI Pipeline / go-surface (push) Canceled after 0s
CI Pipeline / rust-surface (push) Canceled after 0s
CI Pipeline / canary (push) Canceled after 0s
CI Pipeline / best-practices (push) Canceled after 0s
CI Pipeline / documentation (push) Canceled after 0s
CI Pipeline / type-check (push) Canceled after 0s
CI Pipeline / gitea-offline (push) Canceled after 0s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
RUNE_FORGE_CLIENT_ENGINE=python switch shape kept; the oracle body raises
'escape hatch retired'. Parity battery keeps all Go-side retry/status
pins and asserts the refusal (14 passed). Pre-existing note:
tests/test_forge_client.py and _resilience.py fail collection on master
(rune import path) — untouched here.
2026-10-25 17:42:34 +00:00
Nick e388abed01 test(forge_client): pin live-path httpx.ConnectError kind projection — mutation spot-check closure (second pass)
The truth rows exercise fake-sender branches only; the live error
classification (classifyTransportErr dial → httpx.ConnectError) is
uncovered, and renaming the kind survived the battery. Pinned through
the eval surface against a closed local port
(TestEvalRequestConnectErrorKind); red under mutation, green clean.
2026-10-25 17:39:11 +00:00
Nick 327308d075 test(abstraction): pin list_beliefs eval default limit=20 — mutation spot-check closure (second pass)
The truth rows always carry an explicit limit, so flipping the Go
eval op's default (20 → 19) survived the battery while the eval CLI
(a public serving surface) would silently return one fewer row than
the oracle's list_beliefs(limit=20). Pinned over a 25-belief seeded
store: default == explicit-20 (TestListBeliefsDefaultLimitIs20).
2026-10-25 17:39:10 +00:00
Nick e6162682cc test(goal): pin eval-surface default verification_method — mutation spot-check closure (second pass)
The frozen truth rows always pass an explicit verification_method, so
flipping the eval op's 'manual' default survived the battery. Pinned
via the eval surface (TestSetGoalDefaultVerificationMethod); red under
mutation, green clean.
2026-10-25 17:39:10 +00:00
Nick dcbec01214 removal-prep/cache: minify Python oracle bodies to escape-hatch refusal stubs (Gitea #2598 item 2)
RUNE_CACHE_ENGINE=python switch shape kept; all seven oracle bodies raise
'escape hatch retired'. Oracle-parity and cross-engine-coherence pins
retired with the bodies; Go surface battery extended with refusal tests
(26 passed).
2026-10-25 17:23:42 +00:00
Nick 1af8a29cc9 research: tooling-pile sort — 104 legit-tooling (85 FFI bridges, zero deletion candidates), 13 stale-watch canaries flagged for consolidation
deploy / deploy (push) Skipped
CI Pipeline / lint (push) Failing after 44s
CI Pipeline / go-surface (push) Failing after 23s
CI Pipeline / rust-surface (push) Failing after 7s
CI Pipeline / unit-tests (push) Failing after 1m17s
CI Pipeline / best-practices (push) Successful in 3s
CI Pipeline / documentation (push) Successful in 3s
CI Pipeline / type-check (push) Failing after 40s
CI Pipeline / gitea-offline (push) Successful in 15s
CI Pipeline / canary (push) Failing after 1m5s
CI Pipeline / required-checks (push) Failing after 1s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Failing after 5s
2026-10-25 17:17:52 +00:00
Nick b08a8af509 removal-prep/paths: minify Python oracle bodies to escape-hatch refusal stubs (Gitea #2598 item 2)
deploy / deploy (push) Skipped
CI Pipeline / lint (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 0s
CI Pipeline / go-surface (push) Canceled after 0s
CI Pipeline / rust-surface (push) Canceled after 0s
CI Pipeline / canary (push) Canceled after 0s
CI Pipeline / best-practices (push) Canceled after 0s
CI Pipeline / documentation (push) Canceled after 0s
CI Pipeline / type-check (push) Canceled after 0s
CI Pipeline / gitea-offline (push) Canceled after 0s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
Go engine is the authority; RUNE_PATHS_ENGINE=python switch shape kept,
each oracle body now raises 'escape hatch retired'. Battery asserts the
refusal; Go-side resolvers unchanged and green (14 passed).
2026-10-25 17:04:30 +00:00
conductor bdbd54dbb8 chore(release): auto-bump version to 0.358.3 — earned by # (patch: converged release (push-to-master bump))
Auto-version and Release / release (push) Failing after 37s
issue-convergence / converge (push) Successful in 1s
deploy / deploy (push) Failing after 15s
CI Pipeline / lint (push) Failing after 46s
CI Pipeline / go-surface (push) Failing after 24s
CI Pipeline / unit-tests (push) Failing after 1m21s
CI Pipeline / rust-surface (push) Failing after 11s
CI Pipeline / best-practices (push) Successful in 7s
CI Pipeline / documentation (push) Successful in 2s
CI Pipeline / type-check (push) Failing after 37s
CI Pipeline / canary (push) Failing after 59s
CI Pipeline / gitea-offline (push) Successful in 14s
CI Pipeline / required-checks (push) Failing after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Failing after 11s
Promotion record: (unknown)
2026-10-25 16:28:58 +00:00
Nick a35fb1de01 research: wiring-inventory triage — 87 witness live-pure modules into four piles; the honest rebase remainder is 30 modules / 22.6k lines (#2586 inventory)
CI Pipeline / unit-tests (push) Canceled after 0s
CI Pipeline / go-surface (push) Canceled after 0s
CI Pipeline / rust-surface (push) Canceled after 0s
CI Pipeline / canary (push) Canceled after 0s
CI Pipeline / best-practices (push) Canceled after 0s
CI Pipeline / documentation (push) Canceled after 0s
CI Pipeline / type-check (push) Canceled after 0s
CI Pipeline / gitea-offline (push) Canceled after 0s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
deploy / deploy (push) Canceled after 0s
Auto-version and Release / release (push) Canceled after 28s
CI Pipeline / lint (push) Canceled after 25s
issue-convergence / converge (push) Successful in 2s
2026-10-25 16:28:32 +00:00
Nick c9543eb058 fix(goal): fail-loud store save — the serving-path probe caught silent data loss (Gitea #2587 second-pass)
The Python oracle's _save raises on an unwritable store (open()
propagates the OSError); the Go port swallowed the MkdirAll/WriteFile
errors, returning the goal row over a store that was never written —
set_goal reported success while the goal was lost. Save now fails loud
(typed panic, matching the message_queue loadQueue convention) and the
battery pins it (TestSaveFailsLoudOnUnwritableStore, red pre-fix).
2026-10-25 16:14:24 +00:00
60 changed files with 4273 additions and 951 deletions

No files matched your search

+2 -2
View File
@@ -1,9 +1,9 @@
# Rune
**Current release: v0.358.2**
**Current release: v0.359.0**
<!-- highlights:start -->
## Highlights — from the latest release (v0.358.2)
## Highlights — from the latest release (v0.359.0)
- Plain-English jargon dictionary covers the v0.329 vocabulary, plus catch-all sentence simplification pass.
+12
View File
@@ -0,0 +1,12 @@
# removal-prep/auto-context — batch manifest (Gitea #2598 item 2)
- shape: MINIFY (option b default)
- escape-hatch law: RUNE_*_ENGINE=python facade switch KEEN — oracle body refuses with 'escape hatch retired for this row - the Go engine is the authority'
- base: dcbec012 removal-prep/cache: minify Python oracle bodies to escape-hatch refusal stubs (Gitea #2598 item 2)
- verification: pytest tests/test_auto_context_go_parity.py 8 passed + tests/test_auto_execution_context.py 8 passed; ruff clean
- NOT merged to master; push-only for review.
| file | +lines | -lines |
|---|---|---|
| src/rune/auto_context.py | 2 | 113 |
| tests/test_auto_context_go_parity.py | 10 | 16 |
+18
View File
@@ -0,0 +1,18 @@
# removal-prep/cache — batch manifest (Gitea #2598 item 2)
- shape: MINIFY (option b default)
- escape-hatch law: RUNE_*_ENGINE=python facade switch KEEN — oracle body refuses with 'escape hatch retired for this row - the Go engine is the authority'
- base: a35fb1de research: wiring-inventory triage — 87 witness live-pure modules into four piles; the honest rebase remainder is 30 modules / 22.6k lines (#2586 inventory)
- verification: pytest tests/test_cache.py tests/test_cache_go_parity.py 26 passed; ruff clean
- NOT merged to master; push-only for review.
- note: branch carries stranded concurrent-agent commits (tooling-sort-2026-10-24 wave, README/pyproject bumps) — cherry-pick to master separately, do not lose
| file | +lines | -lines |
|---|---|---|
| README.md | 2 | 2 |
| pyproject.toml | 1 | 1 |
| research/rebase-proof/tooling-sort-2026-10-24.json | 983 | 0 |
| research/rebase-proof/tooling-sort-2026-10-24.md | 46 | 0 |
| src/rune/__init__.py | 1 | 1 |
| src/rune/canary_gitea_automation.py | 1 | 1 |
| src/rune/rune_tui.py | 2 | 2 |
@@ -0,0 +1,19 @@
# removal-prep/dead-superseded-pile — batch manifest (Gitea #2598 item 2)
- shape: DELETE (dead pile only)
- escape-hatch law: RUNE_*_ENGINE=python facade switch KEEN — oracle body refuses with 'escape hatch retired for this row - the Go engine is the authority'
- base: dcbec012 removal-prep/cache: minify Python oracle bodies to escape-hatch refusal stubs (Gitea #2598 item 2)
- verification: import-graph (AST) over src/tui/scripts/tests: alpha 0 importers
- NOT merged to master; push-only for review.
- note: 46 superseded pile2 modules HELD: truth-gen/canary/parity scripts still import them; tooling-sort-2026-10-24 confirms 0 dead/0 superseded in tooling pile
| file | +lines | -lines |
|---|---|---|
| manifests/removal-prep/auto-context.md | 12 | 0 |
| manifests/removal-prep/cache.md | 18 | 0 |
| manifests/removal-prep/forge-client.md | 16 | 0 |
| manifests/removal-prep/message-queue.md | 12 | 0 |
| manifests/removal-prep/openai-compat-transport.md | 13 | 0 |
| manifests/removal-prep/paths.md | 12 | 0 |
| manifests/removal-prep/reconcile-tools.md | 12 | 0 |
| src/rune/alpha.py | 0 | 1 |
+16
View File
@@ -0,0 +1,16 @@
# removal-prep/forge-client — batch manifest (Gitea #2598 item 2)
- shape: MINIFY (option b default)
- escape-hatch law: RUNE_*_ENGINE=python facade switch KEEN — oracle body refuses with 'escape hatch retired for this row - the Go engine is the authority'
- base: dcbec012 removal-prep/cache: minify Python oracle bodies to escape-hatch refusal stubs (Gitea #2598 item 2)
- verification: pytest tests/test_forge_client_go_parity.py 14 passed; ruff clean
- NOT merged to master; push-only for review.
- note: branch carries 3 stranded second-pass test commits (e6162682 test(goal), 327308d0 test(abstraction), e388abed test(forge_client)) — cherry-pick to master separately, do not lose; tests/test_forge_client.py + _resilience.py fail collection on master pre-existing
| file | +lines | -lines |
|---|---|---|
| src/go/abstraction/default_limit_test.go | 53 | 0 |
| src/go/forge_client/truth_test.go | 27 | 0 |
| src/go/goal/truth_test.go | 18 | 0 |
| src/rune/forge_client.py | 1 | 44 |
| tests/test_forge_client_go_parity.py | 16 | 28 |
+12
View File
@@ -0,0 +1,12 @@
# removal-prep/message-queue — batch manifest (Gitea #2598 item 2)
- shape: MINIFY (option b default)
- escape-hatch law: RUNE_*_ENGINE=python facade switch KEEN — oracle body refuses with 'escape hatch retired for this row - the Go engine is the authority'
- base: dcbec012 removal-prep/cache: minify Python oracle bodies to escape-hatch refusal stubs (Gitea #2598 item 2)
- verification: pytest tests/test_message_queue_go_parity.py 13 passed; ruff clean
- NOT merged to master; push-only for review.
| file | +lines | -lines |
|---|---|---|
| src/rune/message_queue.py | 8 | 109 |
| tests/test_message_queue_go_parity.py | 13 | 24 |
@@ -0,0 +1,13 @@
# removal-prep/openai-compat-transport — batch manifest (Gitea #2598 item 2)
- shape: MINIFY (option b default)
- escape-hatch law: RUNE_*_ENGINE=python facade switch KEEN — oracle body refuses with 'escape hatch retired for this row - the Go engine is the authority'
- base: dcbec012 removal-prep/cache: minify Python oracle bodies to escape-hatch refusal stubs (Gitea #2598 item 2)
- verification: pytest tests/test_openai_compat_transport.py + _go_parity.py 36 passed; ruff clean
- NOT merged to master; push-only for review.
| file | +lines | -lines |
|---|---|---|
| src/rune/openai_compat_transport.py | 5 | 135 |
| tests/test_openai_compat_transport.py | 20 | 34 |
| tests/test_openai_compat_transport_go_parity.py | 12 | 8 |
+12
View File
@@ -0,0 +1,12 @@
# removal-prep/paths — batch manifest (Gitea #2598 item 2)
- shape: MINIFY (option b default)
- escape-hatch law: RUNE_*_ENGINE=python facade switch KEEN — oracle body refuses with 'escape hatch retired for this row - the Go engine is the authority'
- base: a35fb1de research: wiring-inventory triage — 87 witness live-pure modules into four piles; the honest rebase remainder is 30 modules / 22.6k lines (#2586 inventory)
- verification: pytest tests/test_paths_go_parity.py 14 passed; ruff clean
- NOT merged to master; push-only for review.
| file | +lines | -lines |
|---|---|---|
| src/rune/paths.py | 6 | 17 |
| tests/test_paths_go_parity.py | 33 | 31 |
+12
View File
@@ -0,0 +1,12 @@
# removal-prep/reconcile-tools — batch manifest (Gitea #2598 item 2)
- shape: MINIFY (option b default)
- escape-hatch law: RUNE_*_ENGINE=python facade switch KEEN — oracle body refuses with 'escape hatch retired for this row - the Go engine is the authority'
- base: dcbec012 removal-prep/cache: minify Python oracle bodies to escape-hatch refusal stubs (Gitea #2598 item 2)
- verification: pytest tests/test_reconcile_tools_support_port.py 4 passed; ruff clean; also fixed pre-existing missing sys.path
- NOT merged to master; push-only for review.
| file | +lines | -lines |
|---|---|---|
| src/rune/model_routing.py | 1 | 29 |
| tests/test_reconcile_tools_support_port.py | 14 | 12 |
+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "rune"
version = "0.358.2"
version = "0.359.0"
description = "Rune — a stateful coding assistant with persistent memory, orchestration, and TUI"
requires-python = ">=3.10"
+346
View File
@@ -0,0 +1,346 @@
{
"generated": "2026-10-25",
"source": "src/rune static surface + research/witness-run/witness-2026-10-24.json",
"total": 296,
"go_delegated": {
"count": 15,
"modules": [
"abstraction",
"auto_context",
"cache",
"event_bus",
"forge_client",
"goal",
"local_tool_runtime",
"message_queue",
"microkernel",
"model_routing",
"openai_compat_transport",
"paths",
"persona_gate",
"stage_guards",
"voicebox"
]
},
"rust_kernel_wired": {
"count": 101,
"criterion": "module name matches a src/rust crate or imports cognition_core/cc_loader",
"modules": [
"abstraction_ladder",
"attention_capsule",
"behavior",
"behaviour_ledger",
"build_basis",
"capability_broker",
"capability_fit",
"capability_ledger",
"cc_loader",
"claim_audit",
"cognitive_budgeter",
"concept_topology",
"connection_pool",
"construction_activation",
"construction_commands",
"construction_decision",
"construction_depth",
"construction_intent",
"construction_interface",
"construction_mode",
"construction_pattern",
"construction_patterns_builtin",
"construction_projection",
"context_broker",
"context_pressure",
"contracts",
"dependency_tracker",
"drift_cache",
"drift_core",
"drift_ledger",
"drift_observability",
"drift_resume",
"evidence_capsule",
"execution_trace",
"experience_encoding",
"failure_recovery",
"grading",
"graph_memory",
"graph_projection",
"growth_delta",
"growth_pipeline",
"identity_anchors",
"impact_preview",
"inference_trace",
"intent_continuity",
"iteration",
"layout_contract",
"lexicon_evolution",
"meaningful_events",
"memory_consolidation",
"memory_selector",
"memory_types",
"message_graph",
"mutation_guards",
"outcome_ledger",
"outcome_utility",
"pane_authority",
"pins",
"programme_continuation",
"programme_gates",
"progressive_escalation",
"project_registry",
"prompt_sync",
"recall_uplift",
"research_budget",
"response_adapter",
"route_risk_flags",
"rune_profiler",
"rune_spinner",
"safety_override",
"salience_gate",
"self_improve",
"self_model",
"self_modify",
"shard_manager",
"skill_compiler",
"spine",
"spine_language",
"spine_loader",
"state_checkpoint",
"structural_migration",
"structural_model",
"structural_store",
"subconscious_pass",
"subsystem_health",
"system_registry",
"task_gate",
"task_persist",
"testing_mode",
"tier_manager",
"time_awareness",
"token_optimizer",
"toolchain",
"verification_layer",
"voice_hybrid",
"voice_sync",
"wait_guard",
"wait_guard_corpus",
"warm_neuron_store",
"witness",
"worthiness"
]
},
"pure_python": {
"count": 180,
"load_bearing": {
"count": 59,
"modules": [
"adaptive_router",
"alpha",
"audit_ledger",
"build_attestation",
"build_mode",
"builder_bridge",
"chat_bubble",
"construction_admission",
"construction_authority",
"core_server",
"cron_engine",
"drift-ledger",
"drift_compression",
"effect_mediation",
"elastic_cognition",
"event_envelope",
"event_wait",
"factory_protocol",
"failure_auto_filer",
"ffi_query_memory_smoke",
"hook_engine",
"inference_paths",
"live_proof",
"memory_continuity",
"memory_env",
"memory_store",
"message_widgets",
"mode_gate",
"model_connect",
"model_profiles",
"model_registry",
"night_mode",
"owner_envelope",
"parallel_processor",
"persona_definition",
"provider_budget",
"provider_context",
"provider_registry",
"recall_router",
"release_notes",
"rune_graphic",
"rune_operator",
"rune_tui",
"runtime_attestation",
"secret_store",
"self_change_qualification",
"self_transform_pipeline",
"skills_engine",
"sleep_time",
"standardized_providers",
"tiered_executor",
"tool_executor",
"tool_protocol",
"tui_backlog",
"tui_transport",
"tui_validator",
"voice_injector",
"warm_router",
"work_manager"
]
},
"tooling_test": {
"count": 116,
"modules": [
"ac_loader",
"al_loader",
"bb_loader",
"bh_loader",
"bl_loader",
"broker_loader",
"builder_bridge_cli",
"ca_loader",
"canary_audit_ledger",
"canary_cognitive_strata",
"canary_context_broker",
"canary_conversation_state",
"canary_full_system",
"canary_gitea_automation",
"canary_gitea_delegation",
"canary_gitea_pipeline",
"canary_memory_synthesis",
"canary_native",
"canary_orchestration_foundation",
"canary_p0_04",
"canary_p0_05",
"canary_p0_07",
"canary_p1_01",
"canary_p1_02",
"canary_p1_03",
"canary_p1_06",
"canary_p1_07",
"canary_query_memory",
"canary_resource_authority",
"canary_rune_entry",
"canary_rune_serve",
"canary_schema_migration",
"canary_spine_meta",
"canary_surface_parity",
"canary_tui_drift",
"canary_tui_transport",
"canary_unbounded",
"cb_loader",
"ccmd_loader",
"cd_loader",
"cdec_loader",
"cf_loader",
"ci_loader",
"cl_loader",
"cm_loader",
"construction_authority_cli",
"contracts_loader",
"cp_loader",
"cpb_loader",
"cpool_loader",
"cproj_loader",
"cps_loader",
"cs_loader",
"ct_loader",
"dc_loader",
"dcore_loader",
"dl_loader",
"do_loader",
"dr_loader",
"dt_loader",
"ec_loader",
"ee_loader",
"et_loader",
"evidence_probe",
"gm_loader",
"gp2_loader",
"gp_loader",
"gr_loader",
"ic_loader",
"ip_loader",
"it_loader",
"itr_loader",
"lc_loader",
"le_loader",
"me_loader",
"mems_loader",
"mg_loader",
"mr_loader",
"ms_loader",
"mse_loader",
"mt_loader",
"mu_loader",
"ol_loader",
"ou_loader",
"pa_loader",
"pc_loader",
"pr_loader",
"progressive_escalation_loader",
"ps_loader",
"ra_loader",
"rb_loader",
"rp_loader",
"ru_loader",
"sc_loader",
"sck_loader",
"sg_loader",
"sh_loader",
"si_loader",
"sk_loader",
"sl_loader",
"sm_loader",
"smm_loader",
"smod_loader",
"sp_loader",
"sr_loader",
"ss_loader",
"stm_loader",
"ta_loader",
"tc_loader",
"tg_loader",
"tl_loader",
"tm_loader",
"to_loader",
"vh_loader",
"vs_loader",
"wr_loader"
]
},
"dead": {
"count": 1,
"modules": [
"__main__"
]
},
"unclassified": {
"count": 4,
"modules": [
"__init__",
"curator",
"forge",
"scaffold"
]
}
},
"reconciliation_with_witness": {
"witness": {
"go": 11,
"rust": 79,
"py": 204,
"tooling": 117,
"load_bearing": 87,
"dead": 1
},
"note": "static name/delegation surface finds 33 go-delegated facades (witness counted 11 served live in the boot chain \u2014 the rest execute on dispatch, not boot); rust-kernel-wired reconstructed structurally (witness stored the count only)"
}
}
+40
View File
@@ -0,0 +1,40 @@
# REBASE-PROOF wiring inventory — Gitea #2586 (2026-10-25)
"'Wired in' also means nothing Go-able left unexamined": every one of the 296 `src/rune` modules is
classified three-way, and pure-python modules further split load-bearing (executed in the witness
run) vs test/tooling vs dead.
## Honest counts
| class | count | criterion |
|---|---|---|
| **total src/rune modules** | **296** | `*.py` in src/rune |
| go-delegated | 15 | module carries a Go delegation seam (`_go_engine_bin` / `_go_bus_bin` / `_lte_go_engine_bin`) |
| rust-kernel-wired | 101 | module name matches a `src/rust` crate, or imports `cognition_core`/`cc_loader` |
| pure-python | 180 | neither of the above |
| — load-bearing (witness-executed) | 59 | in `research/witness-run/witness-2026-10-24.json` `live_pure_core` |
| — tooling/test-pattern | 116 | in witness `live_pure_tooling` |
| — dead (never executed) | 1 | witness `dead`: `__main__` |
| — unclassified | 4 | `__init__`, `curator`, `forge`, `scaffold` (glue/facade aggregators — no engine seam, no crate match, not in witness lists) |
## Reconciliation with the witness scoreboard (deltas are findings)
Witness (runtime, 2026-10-24): 11 go-facade-served-live · 79 rust-kernel-wired · 87 load-bearing ·
117 tooling · 1 dead. This inventory (static structural surface, 2026-10-25): 15 / 101 / 59 / 116 / 1.
- **go-delegated 15 vs 11:** the witness counted only facades served in the *boot chain*; the static
sweep finds 4 more delegation seams that execute on dispatch, not boot
(persona_gate, stage_guards, +2 dispatch-time surfaces). Nothing Go-able unexamined — they are
bar-2-probed in the verdict table where applicable.
- **rust-kernel-wired 101 vs 79:** the witness file stores the count only, not the list; this
inventory reconstructs the list structurally (crate-name match ∪ cognition_core import). The +22
are crate-name-matched modules whose runtime broker hop the witness's serving chain didn't touch.
- **load-bearing 59 vs 87:** the witness's 87 included modules classified load-bearing by runtime
evidence beyond name matching; the static intersection with `live_pure_core` yields 59. The
witness file remains authoritative for *runtime* load-bearing status; this file is authoritative
for *structural* classification.
- **4 unclassified:** `__init__` (package glue), `curator`, `forge`, `scaffold` (aggregator
facades). These need a disposition decision in the removal tranche (#2592) — none is Go-able
(no engine seam), none is dead (imported by live surfaces).
Full module lists: `inventory.json` (same directory).
@@ -0,0 +1,983 @@
{
"method": "import-graph grep (src/tui/scripts/tests/shared/bridge/interop + Makefile/docs) -> git recency -> AST import-resolution check; lens: tooling-pattern modules from witness-2026-10-24.json",
"date": "2026-10-25",
"counts": {
"legit_tooling": 104,
"superseded": 0,
"dead": 0,
"broken_but_needed": 0,
"of_which_stale_watch": 13
},
"legit_tooling": [
{
"module": "ac_loader",
"last_commit": "2026-10-11",
"importers": [
"src/rune/attention_capsule.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "al_loader",
"last_commit": "2026-10-12",
"importers": [
"scripts/gen_abstraction_ladder_truth.py",
"src/rune/abstraction_ladder.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "bb_loader",
"last_commit": "2026-10-11",
"importers": [
"scripts/check_build_basis_gap_parity.py",
"scripts/check_build_basis_parity.py",
"scripts/gen_build_basis_gap_truth.py",
"src/rune/build_basis.py",
"src/rust/build_basis/src/gap.rs"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "bh_loader",
"last_commit": "2026-10-12",
"importers": [
"scripts/check_behavior_parity.py",
"src/rune/behavior.py",
"tests/test_behavior_port.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "bl_loader",
"last_commit": "2026-10-12",
"importers": [
"src/rune/behaviour_ledger.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "broker_loader",
"last_commit": "2026-10-14",
"importers": [
"scripts/check_capability_broker_gap_parity.py",
"src/rune/capability_broker.py",
"tests/test_capability_broker_delegation.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "ca_loader",
"last_commit": "2026-10-14",
"importers": [
"scripts/check_construction_activation_parity.py",
"src/rune/construction_activation.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "cb_loader",
"last_commit": "2026-10-14",
"importers": [
"scripts/check_cognitive_budgeter_parity.py",
"src/rune/cognitive_budgeter.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "cc_loader",
"last_commit": "2026-10-15",
"importers": [
"scripts/check_growth_delta_parity.py",
"scripts/check_identity_anchors_parity.py",
"scripts/check_pins_parity.py",
"scripts/check_safety_override_parity.py",
"scripts/check_tier_parity.py",
"scripts/gen_abstraction_truth.py",
"scripts/gen_context_broker_truth.py",
"src/rune/abstraction.py",
"src/rune/context_broker.py",
"src/rune/growth_delta.py",
"src/rune/identity_anchors.py",
"src/rune/memory_consolidation.py",
"src/rune/persona_gate.py",
"src/rune/safety_override.py",
"src/rune/stage_guards.py",
"src/rune/tier_manager.py",
"src/rune/witness.py",
"src/rust/cognition_core/canary_cognition_core.py",
"src/rust/cognition_core/canary_growth_pins.py",
"src/rust/cognition_core/canary_persona.py",
"tests/test_cc_loader_seam.py",
"tests/test_rust_core_shims.py",
"tests/test_stage_guards_delegation.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "ccmd_loader",
"last_commit": "2026-10-14",
"importers": [
"scripts/gen_construction_commands_truth.py",
"src/rune/construction_commands.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "cd_loader",
"last_commit": "2026-10-12",
"importers": [
"src/rune/construction_depth.py",
"src/rust/construction_depth/canary_construction_depth.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "cdec_loader",
"last_commit": "2026-10-13",
"importers": [
"src/rune/construction_decision.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "cf_loader",
"last_commit": "2026-10-15",
"importers": [
"scripts/check_capability_fit_gap_parity.py",
"src/rune/capability_fit.py",
"tests/test_capability_fit_port.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "ci_loader",
"last_commit": "2026-10-11",
"importers": [
"src/rune/construction_intent.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "cl_loader",
"last_commit": "2026-10-11",
"importers": [
"scripts/fuzz_capability_ledger_parity.py",
"src/rune/capability_ledger.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "cm_loader",
"last_commit": "2026-10-14",
"importers": [
"scripts/check_construction_mode_parity.py",
"src/rune/construction_mode.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "contracts_loader",
"last_commit": "2026-10-14",
"importers": [
"scripts/gen_contracts_gap_truth.py",
"src/rune/contracts.py",
"tests/test_contracts_port.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "cp_loader",
"last_commit": "2026-10-11",
"importers": [
"scripts/check_construction_pattern_parity.py",
"src/rune/construction_pattern.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "cpb_loader",
"last_commit": "2026-10-12",
"importers": [
"scripts/check_cpb_parity.py",
"src/rune/construction_patterns_builtin.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "cpool_loader",
"last_commit": "2026-10-12",
"importers": [
"src/rune/connection_pool.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "cproj_loader",
"last_commit": "2026-10-14",
"importers": [
"scripts/check_construction_projection_parity.py",
"src/rune/construction_projection.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "cps_loader",
"last_commit": "2026-10-14",
"importers": [
"scripts/check_context_pressure_parity.py",
"src/rune/context_pressure.py",
"tests/test_context_pressure.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "cs_loader",
"last_commit": "2026-10-04",
"importers": [
"scripts/check_capability_broker_gap_parity.py",
"src/rune/capability_broker.py",
"src/rune/capability_fit.py",
"src/rust/capability_scoring/canary_capability_scoring.py",
"tests/test_capability_broker_delegation.py",
"tests/test_rust_core_shims.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "ct_loader",
"last_commit": "2026-10-12",
"importers": [
"src/rune/concept_topology.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "dc_loader",
"last_commit": "2026-10-12",
"importers": [
"scripts/gen_drift_cache_truth.py",
"src/rune/drift_cache.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "dcore_loader",
"last_commit": "2026-10-14",
"importers": [
"scripts/check_drift_core_parity.py",
"src/rune/drift_core.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "dl_loader",
"last_commit": "2026-10-12",
"importers": [
"src/rune/drift_ledger.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "do_loader",
"last_commit": "2026-10-11",
"importers": [
"scripts/gen_drift_observability_truth.py",
"src/rune/drift_observability.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "dr_loader",
"last_commit": "2026-10-13",
"importers": [
"scripts/gen_drift_resume_truth.py",
"src/rune/drift_resume.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "dt_loader",
"last_commit": "2026-10-14",
"importers": [
"scripts/check_dependency_tracker_parity.py",
"src/rune/dependency_tracker.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "ec_loader",
"last_commit": "2026-10-13",
"importers": [
"src/rune/construction_decision.py",
"src/rune/evidence_capsule.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "ee_loader",
"last_commit": "2026-10-12",
"importers": [
"scripts/gen_experience_encoding_truth.py",
"src/rune/experience_encoding.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "et_loader",
"last_commit": "2026-10-13",
"importers": [
"scripts/check_execution_trace_parity.py",
"src/rune/execution_trace.py",
"tests/test_execution_trace_port.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "gm_loader",
"last_commit": "2026-10-14",
"importers": [
"scripts/check_graph_memory_parity.py",
"src/rune/graph_memory.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "gp2_loader",
"last_commit": "2026-10-13",
"importers": [
"src/rune/growth_pipeline.py",
"tests/test_growth_pipeline_port.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "gp_loader",
"last_commit": "2026-10-15",
"importers": [
"scripts/check_graph_projection_parity.py",
"src/rune/graph_projection.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "gr_loader",
"last_commit": "2026-10-12",
"importers": [
"scripts/check_grading_gap_parity.py",
"src/rune/grading.py",
"src/rust/grading/src/gap_battery.rs"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "ic_loader",
"last_commit": "2026-10-12",
"importers": [
"src/rune/intent_continuity.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "ip_loader",
"last_commit": "2026-10-10",
"importers": [
"src/rune/impact_preview.py",
"src/rust/impact_preview/canary_impact_preview.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "it_loader",
"last_commit": "2026-10-14",
"importers": [
"scripts/check_inference_trace_parity.py",
"src/rune/inference_trace.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "itr_loader",
"last_commit": "2026-10-15",
"importers": [
"scripts/check_iteration_parity.py",
"src/rune/iteration.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "lc_loader",
"last_commit": "2026-10-14",
"importers": [
"scripts/check_layout_contract_parity.py",
"src/rune/layout_contract.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "le_loader",
"last_commit": "2026-10-12",
"importers": [
"scripts/gen_lexicon_evolution_truth.py",
"src/rune/lexicon_evolution.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "me_loader",
"last_commit": "2026-10-13",
"importers": [
"scripts/check_meaningful_events_parity.py",
"src/rune/meaningful_events.py",
"tests/test_meaningful_events_port.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "mems_loader",
"last_commit": "2026-10-04",
"importers": [
"src/rune/memory_store.py",
"src/rust/memory_storage/canary_memory_storage.py",
"tests/test_rust_core_shims.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "mg_loader",
"last_commit": "2026-10-12",
"importers": [
"src/rune/message_graph.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "mr_loader",
"last_commit": "2026-10-10",
"importers": [
"src/rune/memory_selector.py",
"src/rune/memory_store.py",
"src/rust/memory_retrieval/canary_memory_retrieval.py",
"tests/test_mr_branch_battery.py",
"tests/test_rust_core_shims.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "ms_loader",
"last_commit": "2026-10-14",
"importers": [
"henxels_checks.py",
"scripts/check_drift_compression_parity.py",
"scripts/dc_freeze_seams/sitecustomize.py",
"src/rune/drift_core.py",
"src/rune/memory_store.py",
"src/rust/memory_scoring/canary_memory_scoring.py",
"src/rust/memory_storage/canary_memory_storage.py",
"tests/test_constitutional_adversarial.py",
"tests/test_ms_loader_seam.py",
"tests/test_rust_core_shims.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "mse_loader",
"last_commit": "2026-10-13",
"importers": [
"scripts/check_memory_selector_parity.py",
"src/rune/memory_selector.py",
"tests/test_p1_03_memory_selection.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "mt_loader",
"last_commit": "2026-10-13",
"importers": [
"src/rune/memory_types.py",
"tests/test_memory_types_port.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "mu_loader",
"last_commit": "2026-10-12",
"importers": [
"scripts/gen_mutation_guards_truth.py",
"src/rune/mutation_guards.py",
"src/rust/mutation_guards/src/lib.rs"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "ol_loader",
"last_commit": "2026-10-12",
"importers": [
"scripts/check_outcome_ledger_gap_parity.py",
"src/rune/connection_pool.py",
"src/rune/outcome_ledger.py",
"src/rust/outcome_ledger/src/gap_battery.rs",
"tests/test_outcome_ledger_port.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "ou_loader",
"last_commit": "2026-10-13",
"importers": [
"src/rune/outcome_utility.py",
"tests/test_outcome_utility_port.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "pa_loader",
"last_commit": "2026-10-13",
"importers": [
"scripts/check_pane_authority_parity.py",
"src/rune/pane_authority.py",
"tests/test_pane_authority_port.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "pc_loader",
"last_commit": "2026-10-15",
"importers": [
"scripts/check_pc_residue_parity.py",
"scripts/gen_programme_continuation_residue_truth.py",
"src/rune/programme_continuation.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "pr_loader",
"last_commit": "2026-10-13",
"importers": [
"scripts/gen_project_registry_truth.py",
"src/rune/project_registry.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "progressive_escalation_loader",
"last_commit": "2026-10-14",
"importers": [
"scripts/check_progressive_escalation_parity.py",
"scripts/gen_progressive_escalation_truth.py",
"src/rune/progressive_escalation.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "ps_loader",
"last_commit": "2026-10-11",
"importers": [
"scripts/check_context_pressure_parity.py",
"src/rune/context_pressure.py",
"src/rune/prompt_sync.py",
"tests/test_context_pressure.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "ra_loader",
"last_commit": "2026-10-14",
"importers": [
"scripts/check_response_adapter_parity.py",
"src/rune/response_adapter.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "rb_loader",
"last_commit": "2026-10-13",
"importers": [
"src/rune/research_budget.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "rp_loader",
"last_commit": "2026-10-12",
"importers": [
"scripts/check_rune_profiler_parity.py",
"src/rune/rune_profiler.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "ru_loader",
"last_commit": "2026-10-12",
"importers": [
"src/rune/recall_uplift.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "sc_loader",
"last_commit": "2026-10-04",
"importers": [
"src/rune/construction_decision.py",
"src/rust/scaffold_core/canary_scaffold_core.py",
"tests/test_rust_core_shims.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "sck_loader",
"last_commit": "2026-10-15",
"importers": [
"scripts/gen_state_checkpoint_truth.py",
"src/rune/state_checkpoint.py",
"tests/test_state_checkpoint_delegation.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "sg_loader",
"last_commit": "2026-10-10",
"importers": [
"scripts/gen_salience_gate_truth.py",
"src/rune/salience_gate.py",
"src/rust/salience_gate/canary_salience_gate.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "sh_loader",
"last_commit": "2026-10-12",
"importers": [
"scripts/check_subsystem_health_parity.py",
"src/rune/subsystem_health.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "si_loader",
"last_commit": "2026-10-14",
"importers": [
"scripts/gen_self_improve_truth.py",
"src/rune/self_improve.py",
"tests/test_self_improve_port.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "sk_loader",
"last_commit": "2026-10-13",
"importers": [
"scripts/check_skill_compiler_parity.py",
"src/rune/skill_compiler.py",
"tests/test_skill_compiler_port.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "sl_loader",
"last_commit": "2026-10-12",
"importers": [
"src/rune/spine_language.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "sm_loader",
"last_commit": "2026-10-12",
"importers": [
"src/rune/shard_manager.py",
"src/rune/stm_loader.py",
"src/rust/iteration/src/lib.rs"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "smm_loader",
"last_commit": "2026-10-13",
"importers": [
"src/rune/self_model.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "smod_loader",
"last_commit": "2026-10-12",
"importers": [
"scripts/check_self_modify_gap_parity.py",
"scripts/gen_self_modify_truth.py",
"src/rune/self_modify.py",
"src/rust/self_modify/src/gap_battery.rs"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "sp_loader",
"last_commit": "2026-10-12",
"importers": [
"scripts/check_subconscious_pass_parity.py",
"src/rune/subconscious_pass.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "sr_loader",
"last_commit": "2026-10-11",
"importers": [
"src/rune/system_registry.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "ss_loader",
"last_commit": "2026-10-15",
"importers": [
"scripts/check_structural_store_parity.py",
"src/rune/structural_store.py",
"src/rust/structural_store/canary_structural_store.py",
"tests/test_structural_store_delegation.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "stm_loader",
"last_commit": "2026-10-14",
"importers": [
"scripts/check_structural_model_parity.py",
"src/rune/structural_model.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "ta_loader",
"last_commit": "2026-10-12",
"importers": [
"scripts/check_time_awareness_gap_parity.py",
"scripts/check_time_awareness_parity.py",
"src/rune/time_awareness.py",
"src/rust/time_awareness/src/gap_battery.rs",
"tests/test_time_awareness_port.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "tc_loader",
"last_commit": "2026-10-04",
"importers": [
"src/rune/token_optimizer.py",
"src/rust/token_counting/canary_token_counting.py",
"tests/test_rust_core_shims.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "tg_loader",
"last_commit": "2026-10-12",
"importers": [
"scripts/gen_task_gate_truth.py",
"src/rune/task_gate.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "tl_loader",
"last_commit": "2026-10-12",
"importers": [
"scripts/check_toolchain_parity.py",
"src/rune/toolchain.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "tm_loader",
"last_commit": "2026-10-15",
"importers": [
"scripts/check_structural_model_parity.py",
"scripts/gen_testing_mode_truth.py",
"src/rune/structural_model.py",
"src/rune/testing_mode.py",
"tests/test_testing_mode_delegation.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "to_loader",
"last_commit": "2026-10-11",
"importers": [
"scripts/check_token_optimizer_parity.py",
"src/rune/token_optimizer.py",
"tests/test_token_optimizer_port.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "vh_loader",
"last_commit": "2026-10-14",
"importers": [
"scripts/check_voice_hybrid_parity.py",
"src/rune/voice_hybrid.py",
"tests/test_voice_hybrid_port.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "vs_loader",
"last_commit": "2026-10-14",
"importers": [
"scripts/gen_voice_sync_truth.py",
"src/rune/voice_sync.py",
"src/rust/voice_sync/canary_voice_sync.py",
"tests/test_voice_sync_port.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "wr_loader",
"last_commit": "2026-10-15",
"importers": [
"scripts/gen_worthiness_truth.py",
"src/rune/worthiness.py"
],
"verdict": "FFI ctypes bridge to src/rust crate; imported by live core module/test/parity script; committed Oct 2026"
},
{
"module": "evidence_probe",
"last_commit": "2026-10-08",
"importers": [
"scripts/gen_evidence_probe_truth.py",
"scripts/gen_local_tool_runtime_truth.py",
"scripts/research_stage_executor.py",
"src/rune/canary_audit_ledger.py",
"src/rune/rune_operator.py",
"tests/test_evidence_probe.py",
"tests/test_evidence_provenance_shims.py",
"tests/test_operator_probe_isolation.py"
],
"verdict": "8 importers incl. live scripts/research_stage_executor.py; truth generators depend on it"
},
{
"module": "builder_bridge_cli",
"last_commit": "2026-10-21",
"importers": [],
"verdict": "referenced by scripts/gen_builder_bridge_cli_truth.py + structural_coverage_audit; committed 2026-10-21"
},
{
"module": "construction_authority_cli",
"last_commit": "2026-10-19",
"importers": [
"tests/test_construction_authority_drills.py"
],
"verdict": "imported by tests/test_construction_authority_drills.py; committed 2026-10-19"
},
{
"module": "canary_audit_ledger",
"last_commit": "2026-10-08",
"importers": [],
"verdict": "canary battery entry, fresh commit Oct 2026, doc-tracked (docs/dichotomy-rebase-honest-audit.md); no importers expected for canaries"
},
{
"module": "canary_full_system",
"last_commit": "2026-10-08",
"importers": [],
"verdict": "canary battery entry, fresh commit Oct 2026, doc-tracked (docs/dichotomy-rebase-honest-audit.md); no importers expected for canaries"
},
{
"module": "canary_gitea_automation",
"last_commit": "2026-10-25",
"importers": [],
"verdict": "canary battery entry, fresh commit Oct 2026, doc-tracked (docs/dichotomy-rebase-honest-audit.md); no importers expected for canaries"
},
{
"module": "canary_native",
"last_commit": "2026-10-18",
"importers": [
"docs/structural-contract.md",
"scripts/scaffold_projection.py",
"src/rune/spine.py",
"src/rust/spine/src/gap.rs"
],
"verdict": "canary battery entry, fresh commit Oct 2026, doc-tracked (docs/dichotomy-rebase-honest-audit.md); no importers expected for canaries"
},
{
"module": "canary_p0_04",
"last_commit": "2026-10-18",
"importers": [],
"verdict": "canary battery entry, fresh commit Oct 2026, doc-tracked (docs/dichotomy-rebase-honest-audit.md); no importers expected for canaries"
},
{
"module": "canary_p1_01",
"last_commit": "2026-10-18",
"importers": [],
"verdict": "canary battery entry, fresh commit Oct 2026, doc-tracked (docs/dichotomy-rebase-honest-audit.md); no importers expected for canaries"
},
{
"module": "canary_p1_02",
"last_commit": "2026-10-10",
"importers": [],
"verdict": "canary battery entry, fresh commit Oct 2026, doc-tracked (docs/dichotomy-rebase-honest-audit.md); no importers expected for canaries"
},
{
"module": "canary_p1_06",
"last_commit": "2026-10-10",
"importers": [],
"verdict": "canary battery entry, fresh commit Oct 2026, doc-tracked (docs/dichotomy-rebase-honest-audit.md); no importers expected for canaries"
},
{
"module": "canary_p1_07",
"last_commit": "2026-10-10",
"importers": [],
"verdict": "canary battery entry, fresh commit Oct 2026, doc-tracked (docs/dichotomy-rebase-honest-audit.md); no importers expected for canaries"
},
{
"module": "canary_query_memory",
"last_commit": "2026-10-08",
"importers": [],
"verdict": "canary battery entry, fresh commit Oct 2026, doc-tracked (docs/dichotomy-rebase-honest-audit.md); no importers expected for canaries"
},
{
"module": "canary_rune_entry",
"last_commit": "2026-10-04",
"importers": [],
"verdict": "canary battery entry, fresh commit Oct 2026, doc-tracked (docs/dichotomy-rebase-honest-audit.md); no importers expected for canaries"
},
{
"module": "canary_rune_serve",
"last_commit": "2026-10-17",
"importers": [],
"verdict": "canary battery entry, fresh commit Oct 2026, doc-tracked (docs/dichotomy-rebase-honest-audit.md); no importers expected for canaries"
},
{
"module": "canary_spine_meta",
"last_commit": "2026-10-04",
"importers": [],
"verdict": "canary battery entry, fresh commit Oct 2026, doc-tracked (docs/dichotomy-rebase-honest-audit.md); no importers expected for canaries"
},
{
"module": "canary_tui_drift",
"last_commit": "2026-10-08",
"importers": [],
"verdict": "canary battery entry, fresh commit Oct 2026, doc-tracked (docs/dichotomy-rebase-honest-audit.md); no importers expected for canaries"
},
{
"module": "canary_tui_transport",
"last_commit": "2026-10-04",
"importers": [],
"verdict": "canary battery entry, fresh commit Oct 2026, doc-tracked (docs/dichotomy-rebase-honest-audit.md); no importers expected for canaries"
},
{
"module": "canary_unbounded",
"last_commit": "2026-10-08",
"importers": [],
"verdict": "canary battery entry, fresh commit Oct 2026, doc-tracked (docs/dichotomy-rebase-honest-audit.md); no importers expected for canaries"
}
],
"superseded": [],
"dead": [],
"broken_but_needed": [],
"notes": [
"All 85 *_loader modules are ctypes FFI bridges to src/rust crates \u2014 they ARE the Python->Rust successor mechanism, not Python legacy; every one has live importers and was touched within 30 days.",
"No module in the 117 is superseded: loaders supersede pure-Python cores; canaries have no successor beyond the newer canary_p0_04/p1_* battery which does not yet cover the stale 13.",
"BROKEN-BUT-NEEDED is empty: witness run proved import liveness; static AST check found only guarded optional deps (aaak, pynput/faster_whisper) and runtime-path-injected shared/ + src/rust/evidence_provenance/ep_loader modules that resolve under the boot chain.",
"The 13 stale canaries fail the recency test but pass the doc-need test (docs/pipeline-prd.md lines ~57-58 enumerate them as the required battery; scripts/structural_coverage_audit.py:131-139 inventories them). Removal requires a docs+audit-script update first.",
"Zero-importer is normal for canaries/CLIs (executed, not imported); recency + doc tracking used as liveness proxy instead."
]
}
@@ -0,0 +1,46 @@
# Tooling-Pile Sort — 2026-10-24 witness run (Gitea #2598 item 4)
Lens: the ~117 tooling-pattern modules (`live_pure_tooling` in research/witness-run/witness-2026-10-24.json).
Method: import-graph first (grep across src/, tui/, scripts/, tests/, shared/, bridge/, interop/, Makefile, docs),
then git recency (cutoff 2026-09-25), then static AST import-resolution. Read-only elsewhere.
## Counts
| Pile | Count |
|---|---|
| LEGIT-TOOLING | 104 |
| — of which STALE-WATCH canaries | 13 |
| SUPERSEDED | 0 |
| DEAD | 0 |
| BROKEN-BUT-NEEDED | 0 |
## 1. LEGIT-TOOLING (104)
- **85 `*_loader.py`** — every one is a ctypes FFI bridge to a crate in `src/rust/` (e.g. `ac_loader` → `src/rust/attention_capsule`). They ARE the Python→Rust successor mechanism, not Python legacy. All have live importers (core modules, `tests/test_*_port.py`, `scripts/check_*_parity.py` truth generators) and commits Oct 4–15, 2026. Examples: `cc_loader` (23 importers), `ms_loader` (10, incl. `henxels_checks.py`), `sm_loader` (imported by `src/rust/iteration/src/lib.rs` test path).
- **3 CLIs/probes** — `builder_bridge_cli` (2026-10-21; `scripts/gen_builder_bridge_cli_truth.py`, `structural_coverage_audit.py`), `construction_authority_cli` (imported by `tests/test_construction_authority_drills.py`), `evidence_probe` (8 importers incl. `scripts/research_stage_executor.py`).
- **16 fresh canaries** (commit ≥ 2026-09-25) — `canary_native` is imported by `src/rune/spine.py` and `scripts/scaffold_projection.py`; the rest are the doc-tracked battery (below) with October commits (`canary_gitea_automation` same-day, 2026-10-25). Zero importers is expected — canaries execute, they aren't imported.
## 2. STALE-WATCH subset (13, still LEGIT per the doc-need rule)
`canary_cognitive_strata`, `canary_context_broker`, `canary_conversation_state`, `canary_gitea_delegation`, `canary_gitea_pipeline`, `canary_memory_synthesis`, `canary_orchestration_foundation`, `canary_p0_05`, `canary_p0_07`, `canary_p1_03`, `canary_resource_authority`, `canary_schema_migration`, `canary_surface_parity`.
Zero importers + no commits since Sept 3–12 (45–55 days), BUT: `docs/pipeline-prd.md` (~lines 57–58) enumerates them as the required canary battery, `scripts/structural_coverage_audit.py:131-139` inventories them, and they import modules of `src/rune/orchestration/` that are actively developed (commits within 30 days). Not dead — but they are stale guards over live code and the newer `canary_p0_04` / `canary_p1_*` battery doesn't yet cover them. Any removal must first update pipeline-prd.md + structural_coverage_audit.py; otherwise recommend consolidation into the newer battery.
## 3. SUPERSEDED (0)
Loaders supersede pure-Python cores rather than being superseded; no canary/CLI has a Go/Rust replacement — the newer canary battery is complementary, not substituting.
## 4. DEAD (0)
Nothing meets the triple test: everything has importers, sub-30-day commits, or explicit doc/audit-script need.
## 5. BROKEN-BUT-NEEDED (0)
Witness run proved import liveness. Static AST check across all 117 found only:
- guarded optional deps (`aaak` in warm_router.py:217 / memory_store.py:445 — try/except fallback; `pynput`/`faster_whisper` in voicebox),
- runtime path-injected modules (`shared/query_memory.py`, `shared/build_pipeline_policy.py`, `shared/gitea_auth.py`, `src/rust/evidence_provenance/ep_loader.py`) that resolve under the boot chain.
No unguarded missing imports. Machine-verified import failure would need the venv (not available in this probe); the witness run covers that.
## Headline
The "tooling pile" is almost entirely load-bearing FFI glue: 85 of 117 modules are the ctypes bridge layer the Rust port depends on. Nothing is deletable today; the only actionable item is consolidating the 13 stale September canaries into the October battery.
@@ -0,0 +1,412 @@
{
"method": "import-graph over 1412 py files (src,tui,scripts,tests,verification) + twin-name match vs src/go (101) and src/rust (103) + launcher/delegation spot-checks; witness execution data as liveness ground truth",
"counts": {
"total": 87,
"legit_python": 10,
"superseded": 46,
"dead": 1,
"needs_a_go_side": 30
},
"pile1_legit_python": {
"build_attestation": {
"lines": 145,
"evidence": "0 importers; phase-0C paired-build attestation tooling, invoked by build pipeline (scripts/build_paired.sh), not the runtime."
},
"drift-ledger": {
"lines": 355,
"evidence": "0 importers; standalone drift-protection CLI (python -m rune.drift-ledger) \u2014 one-off project tooling."
},
"factory_protocol": {
"lines": 518,
"evidence": "0 live importers; python parity twin/oracle of the factory kernel (go/factory) kept for parity harness \u2014 spec oracle."
},
"ffi_query_memory_smoke": {
"lines": 183,
"evidence": "0 importers; FFI smoke test proving the Rust cdylib consumer shape \u2014 test artifact."
},
"inference_paths": {
"lines": 95,
"evidence": "imported only by scripts/gen_inference_paths_truth.py + tests/test_inference_paths.py \u2014 truth-generator tooling (go/inference-paths is the census successor)."
},
"live_proof": {
"lines": 858,
"evidence": "0 importers; spec-1.3 proof harness CLI (python -m rune.live_proof, scripts/admit_wave_live_proof.py) \u2014 verification tooling."
},
"release_notes": {
"lines": 446,
"evidence": "0 importers; evidence-derived Gitea release-history generator \u2014 release tooling only."
},
"rune_graphic": {
"lines": 145,
"evidence": "0 importers; generates the spinning-diamond PNG frames \u2014 asset generation tooling."
},
"tui_backlog": {
"lines": 125,
"evidence": "0 importers; durable TUI upgrade backlog document-as-module (SCAFFOLD-TRANCHE-007) \u2014 data/doc, no serving logic."
},
"tui_validator": {
"lines": 514,
"evidence": "1 importer (canary_native only); pre-flight Textual CSS/widget checks for the python-era TUI \u2014 dev tooling."
}
},
"pile2_superseded": {
"auto_context": {
"lines": 357,
"evidence": "imported only by rune_tui; per-message memory recall hook \u2014 Go face auto-context path."
},
"build_mode": {
"lines": 521,
"evidence": "0 live importers; go/build-mode twin."
},
"builder_bridge": {
"lines": 326,
"evidence": "0 live importers; go/builder-bridge twin."
},
"chat_bubble": {
"lines": 401,
"evidence": "imported only by rune_tui; styled bubbles served by Go face (tui/chatpane)."
},
"construction_interface": {
"lines": 1325,
"evidence": "0 live importers; rust/construction_interface twin (rust-kernel-wired class)."
},
"core_server": {
"lines": 254,
"evidence": "0 live importers; go/core-server twin (HTTP sidecar)."
},
"cron_engine": {
"lines": 440,
"evidence": "imported only by rune_tui; go/cron-engine twin is the successor."
},
"elastic_cognition": {
"lines": 774,
"evidence": "0 live importers; go/elastic-cognition twin."
},
"event_envelope": {
"lines": 303,
"evidence": "0 live importers; go/event-envelope twin."
},
"event_wait": {
"lines": 518,
"evidence": "0 live importers; go/event-wait twin."
},
"failure_recovery": {
"lines": 108,
"evidence": "0 live importers; rust/failure_recovery twin."
},
"graph_projection": {
"lines": 153,
"evidence": "0 live importers; rust/graph_projection twin."
},
"growth_delta": {
"lines": 520,
"evidence": "imported only by rune_tui; growth analytics rendered by Go face."
},
"hook_engine": {
"lines": 860,
"evidence": "imported by rune_tui + truth-gen script; go/hook-engine twin."
},
"impact_preview": {
"lines": 78,
"evidence": "0 live importers; rust/impact_preview twin."
},
"memory_continuity": {
"lines": 622,
"evidence": "0 live importers; go/memory-continuity twin."
},
"message_queue": {
"lines": 457,
"evidence": "0 live importers; go/message-queue twin."
},
"message_widgets": {
"lines": 104,
"evidence": "imported only by rune_tui; typed tool-work widgets \u2014 Go face serves (tui/)."
},
"model_connect": {
"lines": 471,
"evidence": "imported by provider_registry + rune_tui; go/model-connect twin."
},
"model_profiles": {
"lines": 438,
"evidence": "imported by rune_tui + rune_operator; go/model-profiles twin."
},
"night_mode": {
"lines": 421,
"evidence": "imported only by rune_tui; go/night-mode twin."
},
"parallel_processor": {
"lines": 194,
"evidence": "imported only by rune_tui; go/parallel-processor twin."
},
"persona_definition": {
"lines": 210,
"evidence": "imported by rune_tui/token_optimizer/parity scripts; go/persona-definition twin."
},
"persona_gate": {
"lines": 777,
"evidence": "imported only by rune_tui; go/persona-gate twin."
},
"pins": {
"lines": 323,
"evidence": "imported only by rune_tui; go/pins twin + tui/cmd/rune-tui/pins.go implements pinboard natively."
},
"programme_gates": {
"lines": 85,
"evidence": "0 live importers; rust/programme_gates twin."
},
"provider_budget": {
"lines": 357,
"evidence": "imported only by rune_tui; go/provider-budget twin."
},
"provider_context": {
"lines": 48,
"evidence": "0 live importers; go/provider-context twin."
},
"provider_registry": {
"lines": 781,
"evidence": "imported by rune_tui/standardized_providers/truth scripts; go/provider-registry twin."
},
"recall_router": {
"lines": 165,
"evidence": "0 live importers; go/recall-router twin."
},
"route_risk_flags": {
"lines": 37,
"evidence": "0 live importers; rust/route_risk_flags twin."
},
"rune_spinner": {
"lines": 130,
"evidence": "0 live importers; rust/rune_spinner twin."
},
"rune_tui": {
"lines": 4180,
"evidence": "4180L python Textual face; launcher boot ladder (~/.local/bin/rune) execs the deployed Go face tui/cmd/rune-tui/main.go (3742L main) \u2014 python TUI is only the documented fallback."
},
"skills_engine": {
"lines": 569,
"evidence": "imported only by tests/test_skills_engine.py; go/skills-engine twin."
},
"sleep_time": {
"lines": 1097,
"evidence": "rune_tui/canary/test importers only; go/sleep-time twin."
},
"stage_guards": {
"lines": 350,
"evidence": "0 live importers; go/stage-guards twin."
},
"standardized_providers": {
"lines": 386,
"evidence": "imported only by provider_registry; go/standardized-providers twin."
},
"structural_migration": {
"lines": 77,
"evidence": "truth-gen script importer only; rust/structural_migration twin."
},
"task_persist": {
"lines": 269,
"evidence": "imported only by rune_tui; rust/task_persist twin (rust-kernel-wired class)."
},
"tiered_executor": {
"lines": 291,
"evidence": "0 live importers; go/tiered-executor twin."
},
"tui_transport": {
"lines": 108,
"evidence": "imported only by rune_tui; transport seam replaced by Go face's own transport (tui/)."
},
"voice_injector": {
"lines": 138,
"evidence": "truth-gen script importer only; go/voice-injector twin."
},
"voicebox": {
"lines": 236,
"evidence": "canary/script importers only; go/voicebox twin."
},
"wait_guard": {
"lines": 116,
"evidence": "0 live importers; rust/wait_guard twin."
},
"wait_guard_corpus": {
"lines": 46,
"evidence": "0 live importers; rust/wait_guard_corpus twin."
},
"work_manager": {
"lines": 594,
"evidence": "imported only by rune_tui; go/work-manager twin."
}
},
"pile3_dead": {
"alpha": {
"lines": 1,
"evidence": "1 line (marker stub), 0 importers anywhere in src/tui/scripts/tests."
}
},
"pile4_needs_a_go_side": {
"abstraction": {
"lines": 768,
"evidence": "768L episode->knowledge pipeline; imported by memory_consolidation, memory_selector, rune_tui; go/abstraction twin not wired."
},
"adaptive_router": {
"lines": 625,
"evidence": "625L route authority; dynamically imported by rune_operator (line 519); go/adaptive-router twin not wired."
},
"audit_ledger": {
"lines": 540,
"evidence": "540L HMAC-chained promotion ledger; imported by curator (live serving path). No go twin (rust parity probe referenced in scripts but no crate)."
},
"construction_admission": {
"lines": 311,
"evidence": "311L headless scaffolding entry (CLI); DEP07 chain. No twin."
},
"construction_authority": {
"lines": 2012,
"evidence": "2012L agent-mutation-side construction authority, CLI-driven (no static importers by design); DEP07 chain head. No twin."
},
"context_broker": {
"lines": 870,
"evidence": "870L prompt-context assembly authority; imported by memory_continuity, memory_selector; on witness boot chain. go/context-broker twin not wired."
},
"drift_compression": {
"lines": 323,
"evidence": "323L drift-aware compression; imported by memory_consolidation. No twin."
},
"effect_mediation": {
"lines": 558,
"evidence": "CORE: 558L THE enforced effect-mediation registry (DEP06); on witness boot chain. No twin."
},
"event_bus": {
"lines": 329,
"evidence": "329L persistent event journal; imported by rune_operator + rune_tui. go/event-bus twin not wired."
},
"failure_auto_filer": {
"lines": 527,
"evidence": "527L failures->forge issues; imported by rune_operator. No twin."
},
"identity_anchors": {
"lines": 575,
"evidence": "575L identity/drift prevention, agent-invoked CLI; no twin."
},
"local_tool_runtime": {
"lines": 1027,
"evidence": "CORE: 1027L Ollama transport + bounded tool loop; imported by rune_operator; on witness boot chain. go/local-tool-runtime twin not wired."
},
"memory_consolidation": {
"lines": 770,
"evidence": "770L consolidation; imported by memory_selector, sleep_time, canaries; go/memory-consolidation twin not wired."
},
"memory_env": {
"lines": 72,
"evidence": "72L portable memory-path resolution; 57 importers across the entire runtime; on witness boot chain. No twin \u2014 trivial port, do first."
},
"memory_store": {
"lines": 2384,
"evidence": "CORE: 2384L memory store; 12 live importers (tool_executor, curator, memory_consolidation/continuity/selector, warm_router, rune_tui...). go/memory-store-deep not wired."
},
"mode_gate": {
"lines": 198,
"evidence": "CORE: 198L THE mode-matrix authority for the dispatch door; imported by provider_registry; on witness boot chain. No twin."
},
"model_registry": {
"lines": 253,
"evidence": "253L resource ladder; 11 live importers (memory_store, sleep_time, model_connect, provider_registry...). go/model-registry twin not wired."
},
"owner_envelope": {
"lines": 378,
"evidence": "378L DEP05 authenticated one-use owner envelopes; agent-invoked; no twin."
},
"paths": {
"lines": 149,
"evidence": "149L centralized path resolution; on witness boot chain; go/paths twin not wired."
},
"rune_operator": {
"lines": 2985,
"evidence": "CORE: 2985L operator loop; imported by capability_broker, core_server, tui_transport, rune_tui; orchestrates local_tool_runtime/tool_protocol/model_routing. go/operator twin not wired."
},
"runtime_attestation": {
"lines": 268,
"evidence": "268L authority-map \u00a75 attestation; agent-invoked CLI; no twin."
},
"safety_override": {
"lines": 649,
"evidence": "649L adaptive safety override; imported by rune_operator + rune_tui. No twin \u2014 safety-critical."
},
"secret_store": {
"lines": 350,
"evidence": "350L secret material store; imported by provider_registry (B-APIKEY-MIGRATION). No twin."
},
"self_change_qualification": {
"lines": 503,
"evidence": "503L DEP07 self-change qualification gate; agent-invoked; no twin."
},
"self_transform_pipeline": {
"lines": 853,
"evidence": "853L spec-6.2 self-transformation pipeline; 0 static importers (agent-invoked); no twin."
},
"tier_manager": {
"lines": 300,
"evidence": "300L tiered storage manager; imported by memory_store. No twin."
},
"tool_executor": {
"lines": 1866,
"evidence": "CORE: 1866L file/tool execution; imported by capability_broker, provider_registry, rune_operator, tool_protocol; on witness boot chain. go/tool-executor twin not wired."
},
"tool_protocol": {
"lines": 481,
"evidence": "CORE: 481L canonical tool-call protocol; imported by provider_registry, tool_executor; on witness boot chain. go/tool-protocol twin not wired."
},
"warm_neuron_store": {
"lines": 122,
"evidence": "122L THE store-based warm-neuron reader; imported by memory_selector, claim_audit, memory_consolidation, rune_tui. rust/warm_neuron_store twin not wired into these callers."
},
"warm_router": {
"lines": 1521,
"evidence": "1521L warm-neuron routing; imported by curator, rune_tui + 10 scripts; on witness boot chain. go/warm-router twin not wired."
}
},
"pile4_sizing": {
"modules": 30,
"total_lines": 22567,
"top5_by_lines": [
[
2985,
"rune_operator"
],
[
2384,
"memory_store"
],
[
2012,
"construction_authority"
],
[
1866,
"tool_executor"
],
[
1521,
"warm_router"
]
],
"boot_chain_critical": [
"memory_env",
"mode_gate",
"effect_mediation",
"paths",
"tool_protocol",
"tool_executor",
"local_tool_runtime",
"context_broker",
"warm_router"
],
"tier1_trivial_ports": [
"memory_env",
"paths",
"mode_gate",
"model_registry",
"tool_protocol"
]
},
"missing": [],
"extra": []
}
@@ -0,0 +1,81 @@
# Triage of the 87 live-pure-core python modules — 2026-10-24
Companion of `research/witness-run/witness-2026-10-24.json` (Gitea #2586, classification half).
Method: import-graph over 1412 py files (src/, tui/, scripts/, tests/, verification/), twin-name
match against `src/go/` (101 modules) and `src/rust/` (103 crates), plus delegation spot-checks
(launcher boot ladder, ctypes loaders, `rune_operator` dynamic imports). Witness execution data is
liveness ground truth. Machine-readable detail: `triage-2026-10-24.json`.
## Headline
**Two weeks of rebasing was NOT adequate.** 30 of 87 live-executing python modules (22,567 lines)
still carry the serving path with no live native twin — including 9 modules on the witness boot
chain itself and the entire governed self-change authority chain.
## Counts
| Pile | Count | Lines |
|---|---|---|
| 1 LEGIT-PYTHON (keep) | 10 | 3,560 |
| 2 SUPERSEDED (delete-able) | 46 | 17,697 |
| 3 DEAD | 1 | 1 |
| 4 NEEDS-A-GO-SIDE (rebase scope) | **30** | **22,567** |
## Pile 4 — the honest remaining rebase scope (ranked by serving-path weight)
**Tier 0 — witness boot chain (product cannot boot without these):**
`memory_env` (72L; 57 importers, path resolution — trivial port, do first), `mode_gate` (198L,
the ONE dispatch-door mode authority, no twin), `effect_mediation` (558L, THE enforced
effect-mediation registry, no twin), `paths` (149L), `tool_protocol` (481L, go twin unwired),
`tool_executor` (1,866L; imported by capability_broker/provider_registry/rune_operator; go twin
unwired), `local_tool_runtime` (1,027L Ollama transport + bounded tool loop), `context_broker`
(870L prompt-assembly authority), `warm_router` (1,521L).
**Tier 1 — operator/agent loop:** `rune_operator` (2,985L — largest single module; imported by
capability_broker, core_server, tui_transport; orchestrates local_tool_runtime/tool_protocol/
model_routing; go/operator twin not wired), `adaptive_router` (625L, dynamic-imported by
rune_operator:519), `secret_store` (350L), `audit_ledger` (540L, HMAC-chained ledger imported by
live `curator`), `model_registry` (253L, 11 live importers), `failure_auto_filer` (527L),
`safety_override` (649L, safety-critical, no twin), `event_bus` (329L).
**Tier 2 — memory subsystem:** `memory_store` (2,384L, 12 live importers — the heaviest single
dependency in the graph; go/memory-store-deep unwired), `memory_consolidation` (770L),
`abstraction` (768L), `tier_manager` (300L), `drift_compression` (323L), `warm_neuron_store`
(122L; rust twin exists but callers still read python).
**Tier 3 — governed self-change chain (DEP05/06/07, agent-invoked CLIs, zero twins):
`construction_authority` (2,012L), `self_transform_pipeline` (853L), `self_change_qualification`
(503L), `construction_admission` (311L), `identity_anchors` (575L), `owner_envelope` (378L),
`runtime_attestation` (268L).**
Top 5 by lines: rune_operator 2,985 · memory_store 2,384 · construction_authority 2,012 ·
tool_executor 1,866 · warm_router 1,521.
## Pile 1 — LEGIT-PYTHON (10)
`build_attestation` (paired-build tooling), `live_proof` (proof-harness CLI), `release_notes`
(release tooling), `ffi_query_memory_smoke` (FFI smoke test), `tui_validator` (canary-only
pre-flight checks), `tui_backlog` (doc-as-module), `drift-ledger` (standalone CLI),
`rune_graphic` (asset generator), `inference_paths` (truth-generator, scripts/tests only),
`factory_protocol` (parity oracle for go/factory).
## Pile 2 — SUPERSEDED (46)
Two clusters, distinct successor evidence:
- **TUI cluster (36)**: the launcher boot ladder (`~/.local/bin/rune`) execs the deployed Go face
`tui/cmd/rune-tui/main.go` (3,742-line main); the python Textual face is only the documented
fallback. Delete-able: `rune_tui` (4,180L), `chat_bubble`, `message_widgets`, `auto_context`,
`cron_engine`, `growth_delta`, `night_mode`, `parallel_processor`, `persona_gate`, `pins`,
`provider_budget`, `task_persist`, `work_manager`, `tui_transport`, `model_profiles`,
`hook_engine`, `model_connect`, `provider_registry`, `standardized_providers`,
`persona_definition`, `event_envelope`, `message_queue`, `voicebox`, `voice_injector`,
`tiered_executor`, `elastic_cognition`, `recall_router`, `provider_context`, `core_server`,
`builder_bridge`, `build_mode`, `skills_engine`, `sleep_time`, `memory_continuity`,
`stage_guards`, `event_wait` — each with a named `src/go/` (or rust) twin.
- **Rust-twin cluster (10)**: zero live importers, rust crate under the same name serves
(rust-kernel-wired class): `construction_interface`, `failure_recovery`, `graph_projection`,
`impact_preview`, `programme_gates`, `route_risk_flags`, `rune_spinner`, `structural_migration`,
`wait_guard`, `wait_guard_corpus`.
Caveat: python-TUI-cluster deletions should wait on removing the launcher's step-4 python
fallback ("honest transition").
## Pile 3 — DEAD (1)
`alpha` — 1-line stub, zero importers across all trees.
@@ -0,0 +1,257 @@
{
"generated": "2026-10-25",
"issue": "Gitea #2586",
"ruling": "receipts prove written; serving-path evidence earns wired",
"bars": [
"bar1 serving-path trace (live face boot + real 27B turn + task dispatch, via journal/witness/response envelope, no serving-code modification)",
"bar2 fail-loud live probe RUNE_*_BIN=/nonexistent -> typed RuntimeError",
"bar3 parity-at-load against the live engine, same session as the proof turn",
"bar4 no-oracle: python body reachable only via explicit RUNE_*_ENGINE=python escape, grep-verified + test-asserted"
],
"live_receipts": {
"core_status": "http://127.0.0.1:8376/v1/status OK, active_model qwen2.5:7b, governor live",
"turn_27b": "POST /v1/chat/completions 2026-10-25T04:43Z model hf.co/DavidAU/Qwen3.6-27B-Fable-Fusion...:IQ3_M -> REBASE-PROOF-SERVING-OK, envelope core=go success=true",
"journal": "memory/journal/events.jsonl 45152 events, fresh task.outcome/task.failed 2026-10-25T04:29Z",
"witness": "research/witness-run/witness-2026-10-24.json boot_chain_executed (15 serving-chain modules)",
"bar2_probes": "12/12 RUNE_*_BIN=/nonexistent -> typed RuntimeError (raw results inline per row)",
"batteries": "go test ./... -short -count=1 per facade module, 2026-10-25",
"parallel": "Gitea #2596 second-pass verdicts feed bar-3 re-verification; reconcile on landing"
},
"summary": {
"WIRED": 5,
"WIRED_WITH_CAVEAT": 7,
"REPAIR_SCOPED": 4
},
"rows": [
{
"row": "model-routing",
"bar1": "PASS",
"bar2": "PASS",
"bar3": "PASS",
"bar4": "PASS",
"verdict": "WIRED",
"evidence": {
"bar1": "witness boot_chain (model_routing) + live :8376 turn envelope core=go 2026-10-25T04:43Z",
"bar2": "RuntimeError on RUNE_MODEL_ROUTING_BIN=/nonexistent (live probe 2026-10-25)",
"bar3": "go test ./... -short src/go/model-routing ok",
"bar4": "grep: no `except RuntimeError` fallback; escape only RUNE_MODEL_ROUTING_ENGINE=python"
}
},
{
"row": "event-bus",
"bar1": "PASS",
"bar2": "PASS",
"bar3": "PASS",
"bar4": "PASS",
"verdict": "WIRED",
"evidence": {
"bar1": "live journal memory/journal/events.jsonl task.outcome/task.failed streaming through go bus (45152 events, fresh 2026-10-25T04:29Z)",
"bar2": "RuntimeError on RUNE_EVENT_BUS_BIN=/nonexistent",
"bar3": "go test ./... -short src/go/event-bus ok",
"bar4": "grep clean; escape RUNE_EVENT_BUS_ENGINE=python"
}
},
{
"row": "reconcile-tools",
"bar1": "PASS",
"bar2": "PASS",
"bar3": "PASS",
"bar4": "PASS",
"verdict": "WIRED",
"evidence": {
"bar1": "delegates through model_routing._go_eval (house shape); model_routing in witness boot_chain",
"bar2": "RuntimeError via reconcile_tools_support with RUNE_MODEL_ROUTING_BIN=/nonexistent",
"bar3": "src/go/model-routing battery ok (same engine surface)",
"bar4": "python body _reconcile_tools_support_python escape-only"
}
},
{
"row": "tool-executor",
"bar1": "PASS",
"bar2": "PASS",
"bar3": "CONDITIONAL",
"bar4": "PASS",
"verdict": "WIRED-WITH-CAVEAT",
"evidence": {
"bar1": "witness boot_chain (tool_executor, local_tool_runtime) + live dispatch",
"bar2": "RuntimeError on RUNE_TOOL_EXECUTOR_BIN=/nonexistent via _go_execute_tool",
"bar3": "lifecycle parity PASS; fsops parity INDETERMINATE (check_tool_executor_fsops_parity.py refuses: project-identity guard 'unknown project proj-alpha' \u2014 verify with producer env, then repair if real)",
"bar4": "grep clean; escape RUNE_TOOL_EXECUTOR_ENGINE=python"
},
"repair_scope": "RE-RUN scripts/check_tool_executor_fsops_parity.py from the producer invocation context; if drift is real, fix src/go/tool-executor fsops surface red-first"
},
{
"row": "trust-and-sovereignty",
"bar1": "PASS",
"bar2": "N/A-RUST",
"bar3": "FAIL",
"bar4": "PASS",
"verdict": "REPAIR-SCOPED",
"evidence": {
"bar1": "cognition_core rust broker live (_cc_probe resolves cc_loader; rust-kernel-wired per witness: 79 modules)",
"bar2": "rust kernel authority \u2014 RUNE_*_BIN probe class does not apply (no subprocess binary seam); cc probe live PASS",
"bar3": "FAIL: scripts/check_safety_override_parity.py = 2000/2065 (65 fuzz failures, seed 2479)",
"bar4": "engine selection defaults to rust kernel; python body escape-only"
},
"repair_scope": "RED-FIRST: reproduce the 65 failing fuzz rows in check_safety_override_parity.py, diff python oracle vs rust kernel on those seeds, fix the kernel (src/rust/safety_override) or the oracle (whichever diverges from frozen truth), re-run to 2065/2065"
},
{
"row": "file-change-safety",
"bar1": "CONDITIONAL",
"bar2": "PASS",
"bar3": "INDETERMINATE",
"bar4": "PASS",
"verdict": "REPAIR-SCOPED",
"evidence": {
"bar1": "fsops executes through tool-executor go engine on dispatch (boot_chain: local_tool_runtime); no dedicated in-turn trace",
"bar2": "RuntimeError on RUNE_TOOL_EXECUTOR_BIN=/nonexistent (fsops rides the tool-executor seam)",
"bar3": "check_tool_executor_fsops_parity.py errors before comparison (project-identity refusal)",
"bar4": "grep clean"
},
"repair_scope": "same as tool-executor row: resolve the fsops parity harness invocation, land a green 2065-style run, then re-verdict"
},
{
"row": "openai_compat_transport",
"bar1": "CONDITIONAL",
"bar2": "PASS",
"bar3": "FAIL",
"bar4": "PASS",
"verdict": "REPAIR-SCOPED",
"evidence": {
"bar1": "engine executes live via parity-battery CLI; not in witness boot_chain (dispatch-time only)",
"bar2": "RuntimeError on RUNE_OPENAI_COMPAT_TRANSPORT_BIN=/nonexistent",
"bar3": "FAIL: scripts/gen_openai_compat_transport_truth.py live chat row raises 'provider returned a non-object response' (2026-10-25)",
"bar4": "grep clean; escape RUNE_OPENAI_COMPAT_TRANSPORT_ENGINE=python"
},
"repair_scope": "red-first: make the go chat surface either parse or typedly reject the provider's non-object response \u2014 the python oracle already raises; the go engine must match that contract, then regenerate truth byte-identical"
},
{
"row": "forge_client",
"bar1": "CONDITIONAL",
"bar2": "PASS",
"bar3": "FAIL",
"bar4": "PASS",
"verdict": "REPAIR-SCOPED",
"evidence": {
"bar1": "engine executes live via gen_forge_client_truth.py CLI run (49 rows regenerated); not in witness boot_chain",
"bar2": "RuntimeError on RUNE_FORGE_CLIENT_BIN=/nonexistent",
"bar3": "FAIL: regenerated truth diverges from frozen (43+/303-): owner default lost ('repos//repo' vs 'repos/owner/repo') and HTTP-capture rows return result:null live. NOTE: frozen truth may have been produced with FORGE_* env set \u2014 reproduce with producer env before repairing",
"bar4": "grep clean; escape RUNE_FORGE_CLIENT_ENGINE=python"
},
"repair_scope": "reproduce gen_forge_client_truth.py with the producer env matrix; if drift survives, fix owner-default propagation + request-capture in src/go/forge_client, re-freeze"
},
{
"row": "microkernel",
"bar1": "PASS",
"bar2": "PASS",
"bar3": "PASS",
"bar4": "PASS",
"verdict": "WIRED",
"evidence": {
"bar1": "witness boot_chain (microkernel) + live serving-chain boot",
"bar2": "RuntimeError on RUNE_MICROKERNEL_BIN=/nonexistent via _go_parity_op",
"bar3": "go test ./... -short src/go/microkernel ok",
"bar4": "grep clean; escape RUNE_MICROKERNEL_ENGINE=python"
}
},
{
"row": "goal",
"bar1": "CONDITIONAL",
"bar2": "PASS",
"bar3": "PASS",
"bar4": "PASS",
"verdict": "WIRED-WITH-CAVEAT",
"evidence": {
"bar1": "engine executes live via battery CLI (go test src/go/goal ok 4.0s); not traced inside the 27B turn (dispatch-time surface)",
"bar2": "RuntimeError on RUNE_GOAL_BIN=/nonexistent",
"bar3": "go test ./... -short src/go/goal ok",
"bar4": "grep clean; escape RUNE_GOAL_ENGINE=python"
}
},
{
"row": "cache",
"bar1": "CONDITIONAL",
"bar2": "PASS",
"bar3": "PASS",
"bar4": "PASS",
"verdict": "WIRED-WITH-CAVEAT",
"evidence": {
"bar1": "engine executes live via battery CLI (eval-surface flush fix 53ab710e verified green); dispatch-time surface",
"bar2": "RuntimeError on RUNE_CACHE_BIN=/nonexistent",
"bar3": "go test ./... -short src/go/cache ok 0.95s",
"bar4": "grep clean; escape RUNE_CACHE_ENGINE=python"
}
},
{
"row": "message_queue",
"bar1": "CONDITIONAL",
"bar2": "PASS",
"bar3": "NO-BATTERY",
"bar4": "PASS",
"verdict": "REPAIR-SCOPED",
"evidence": {
"bar1": "engine executes via _go_eval on dispatch; no in-turn trace",
"bar2": "RuntimeError on RUNE_MESSAGE_QUEUE_BIN=/nonexistent",
"bar3": "NO PARITY BATTERY EXISTS: src/go/message-queue has no test files; no check_*_parity.py maps to it",
"bar4": "grep clean; escape RUNE_MESSAGE_QUEUE_ENGINE=python"
},
"repair_scope": "write the live-parity battery (Go test replaying the python oracle's frozen truth, house pattern of src/go/cache/cache_test.go) and land it green"
},
{
"row": "abstraction",
"bar1": "CONDITIONAL",
"bar2": "PASS",
"bar3": "PASS",
"bar4": "PASS",
"verdict": "WIRED-WITH-CAVEAT",
"evidence": {
"bar1": "engine executes live via battery CLI (0.16s); dispatch-time",
"bar2": "RuntimeError on RUNE_ABSTRACTION_BIN=/nonexistent",
"bar3": "go test ./... -short src/go/abstraction ok",
"bar4": "grep clean; escape RUNE_ABSTRACTION_ENGINE=python"
}
},
{
"row": "auto_context",
"bar1": "CONDITIONAL",
"bar2": "PASS",
"bar3": "PASS",
"bar4": "PASS",
"verdict": "WIRED-WITH-CAVEAT",
"evidence": {
"bar1": "ScriptsDir CWD fix landed on master (84094f4e lineage); engine executes via _go_eval dispatch",
"bar2": "RuntimeError on RUNE_AUTO_CONTEXT_BIN=/nonexistent",
"bar3": "src/go/auto-context compiles green (no in-module battery \u2014 ScriptsDir battery lives in src/go/auto_context main; warm-router parity green per 84094f4e)",
"bar4": "grep clean; escape RUNE_AUTO_CONTEXT_ENGINE=python"
}
},
{
"row": "voicebox",
"bar1": "CONDITIONAL",
"bar2": "PASS",
"bar3": "PASS",
"bar4": "PASS",
"verdict": "WIRED-WITH-CAVEAT",
"evidence": {
"bar1": "engine executes live via battery CLI; dispatch-time",
"bar2": "RuntimeError on RUNE_VOICEBOX_BIN=/nonexistent",
"bar3": "go test ./... -short src/go/voicebox ok",
"bar4": "grep clean; escape RUNE_VOICEBOX_ENGINE=python"
}
},
{
"row": "paths",
"bar1": "PASS",
"bar2": "PASS",
"bar3": "PASS",
"bar4": "PASS",
"verdict": "WIRED",
"evidence": {
"bar1": "witness boot_chain (paths) + live serving-chain boot",
"bar2": "RuntimeError on RUNE_PATHS_BIN=/nonexistent",
"bar3": "go test ./... -short src/go/paths ok",
"bar4": "grep clean; escape RUNE_PATHS_ENGINE=python"
}
}
]
}
@@ -0,0 +1,82 @@
# REBASE-PROOF verdict table — Gitea #2586 (2026-10-25 run against the 2026-10-24 wave)
Ruling: **receipts prove written; serving-path evidence earns wired.** A row is `WIRED` only on
four-bar evidence; anything less is `WIRED-WITH-CAVEAT` or `REPAIR-SCOPED` with the repair scoped
in-row (not landed — this is an evidence wave).
## Bars
1. **BAR-1 serving-path trace** — the facade's Go engine executes in the live face boot, a real 27B
turn, and a task dispatch, proven via existing logs only: `memory/journal/events.jsonl`
(45,152 events, fresh task.outcome/task.failed at 2026-10-25T04:29Z),
`research/witness-run/witness-2026-10-24.json` `boot_chain_executed` (15 serving-chain modules),
and the live turn response envelope (`core: go, success: true`). No serving code was modified.
2. **BAR-2 fail-loud live probe** — `RUNE_*_BIN=/nonexistent` per facade → typed `RuntimeError`.
12/12 probed PASS live on 2026-10-25 (model-routing was pre-proven; re-proven anyway).
3. **BAR-3 parity-at-load** — parity battery against the live engine in the same session
(`go test ./... -short -count=1` per facade module + scripts/check_*_parity.py).
4. **BAR-4 no-oracle** — python body reachable ONLY via explicit `RUNE_*_ENGINE=python`; grep found
zero `except RuntimeError` fallback catches across all 12 facades; asserted in
`tests/test_rebase_proof_no_oracle.py`.
## Live receipts (2026-10-25)
- Core live on 127.0.0.1:8376 (`/v1/status`: governor + providers live).
- Real 27B turn: `hf.co/DavidAU/Qwen3.6-27B-Fable-Fusion-...:IQ3_M` →
`"REBASE-PROOF-SERVING-OK"`, envelope `core: go`.
- Task dispatch: fresh `task.outcome` / `task.failed` events streaming in the journal.
- #2596 second-pass verdicts (parallel wave) reconcile into bar-3 at landing.
## Table
| row | bar1 | bar2 | bar3 | bar4 | verdict |
|---|---|---|---|---|---|
| model-routing | PASS | PASS | PASS | PASS | **WIRED** |
| event-bus | PASS | PASS | PASS | PASS | **WIRED** |
| reconcile-tools | PASS | PASS | PASS | PASS | **WIRED** |
| tool-executor | PASS | PASS | CONDITIONAL | PASS | WIRED-WITH-CAVEAT |
| trust-and-sovereignty | PASS | N/A-RUST | **FAIL** | PASS | REPAIR-SCOPED |
| file-change-safety | CONDITIONAL | PASS | INDETERMINATE | PASS | REPAIR-SCOPED |
| openai_compat_transport | CONDITIONAL | PASS | **FAIL** | PASS | REPAIR-SCOPED |
| forge_client | CONDITIONAL | PASS | **FAIL** | PASS | REPAIR-SCOPED |
| microkernel | PASS | PASS | PASS | PASS | **WIRED** |
| goal | CONDITIONAL | PASS | PASS | PASS | WIRED-WITH-CAVEAT |
| cache | CONDITIONAL | PASS | PASS | PASS | WIRED-WITH-CAVEAT |
| message_queue | CONDITIONAL | PASS | **NO-BATTERY** | PASS | REPAIR-SCOPED |
| abstraction | CONDITIONAL | PASS | PASS | PASS | WIRED-WITH-CAVEAT |
| auto_context | CONDITIONAL | PASS | PASS | PASS | WIRED-WITH-CAVEAT |
| voicebox | CONDITIONAL | PASS | PASS | PASS | WIRED-WITH-CAVEAT |
| paths | PASS | PASS | PASS | PASS | **WIRED** |
**Counts: 5 WIRED · 7 WIRED-WITH-CAVEAT · 4 REPAIR-SCOPED.** Full per-bar evidence lives in
`verdict-2026-10-24.json` (same directory).
## Scoped repairs (NOT landed — evidence wave)
1. **trust-and-sovereignty** — `scripts/check_safety_override_parity.py`: 2000/2065 (65 fuzz
failures, seed 2479). Repair: reproduce the 65 rows, diff python oracle vs rust kernel
(src/rust/safety_override), fix the diverging side red-first, re-run to 2065/2065.
2. **forge_client** — `gen_forge_client_truth.py` live regeneration diverges from frozen truth
(43+/303−): owner default lost (`repos//repo` vs `repos/owner/repo`), HTTP-capture rows return
`result: null`. Repair: reproduce with the producer env matrix first (frozen truth may carry
FORGE_* env); if drift survives, fix owner-default propagation + request capture in
src/go/forge_client, re-freeze.
3. **openai_compat_transport** — live chat parity row raises "provider returned a non-object
response". Repair: the go chat surface must parse or typedly reject non-object responses to
match the oracle contract, then regenerate truth byte-identical.
4. **message_queue** — no parity battery exists at all (src/go/message-queue has no test files,
no check_*_parity.py maps to it). Repair: write the live-parity battery (house pattern:
src/go/cache/cache_test.go), land green.
5. **file-change-safety / tool-executor fsops** — `check_tool_executor_fsops_parity.py` refuses to
run (project-identity guard: "unknown project 'proj-alpha'"). Repair: resolve the harness
invocation context, land a green run, re-verdict. (Adjacent finding, outside the 16 rows:
`check_ro_exec_parity.py` is red — 50230B frozen vs 50278B regenerated.)
## Bar-1 caveat (applies to CONDITIONAL rows)
Witness `boot_chain_executed` covers model_routing, microkernel, paths, tool_executor,
local_tool_runtime (and 10 more serving-chain modules). The remaining facades execute their Go
engines live on dispatch (proven by the same-session battery CLI runs against the live engine) but
are not individually traced inside the 27B turn — proving that would require modifying serving
code, which this wave forbids. They keep WIRED-WITH-CAVEAT until #2596-style per-facade in-turn
probes exist.
+172
View File
@@ -0,0 +1,172 @@
"""Admission dispatch for wave D57 — runtime dominion (owner's top
priority, Gitea #2590 as amended by #2591).
The owner's ruling (verbatim): "rune doesnt have a way of reaching the
file system of a user... adaptive to whatever filesystem and os the
user has... part of runtime awareness. this is why the tools are not
functioning." and "rune should have dominion on tool call usage... on
my version i dont care i want her to have full read/write capabilities
with access to any file system it gets used on. on a production
version there needs to be sandboxed permissions."
Build: (1) the boot-time runtime environment layer (OS family, home,
separators, temp dir, case sensitivity, writability, executor
resolution) served on /v1/status as runtime_env — awareness, never
gating; (2) tool-executor DEPLOYMENT to ~/.local/share/rune/bin via
ensure_core.py and build_paired.sh, resolved through one door
(ResolveToolExecutorPath); (3) the model-refusal authority — a
deterministic literal-phrase classifier over assistant replies; a
FALSE capability claim ("I don't have tools") is verified against the
runtime's actual state, corrected with a retry turn naming the real
suite, journaled as capability.refusal_correction, and counted in the
model_authority status section; (4) /v1/status gains model_authority
(suite on wire, gates open, refusals seen, corrections issued); (5)
the D57 dominion check — a test asserting NO gate exists between the
chat pane's tool calls and the filesystem ops on this build.
approval_ref 'user:D57 owner ruling (runtime awareness + dominion on
tool calls; Gitea #2590/#2591)'.
"""
import json
import os
import sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "src"))
from rune import construction_activation as cact # noqa: E402
from rune import construction_admission as cadm # noqa: E402
from rune import construction_mode as cmode # noqa: E402
from rune import scaffold as sc # noqa: E402
ROOT = os.path.join(os.path.dirname(__file__), "..")
OBJECTIVE = (
"Build the owner's D57 runtime-dominion doctrine (Gitea #2590 as "
"amended by #2591, the owner's top priority): (1) a boot-time "
"runtime environment layer in rune-core probing the filesystem "
"context (OS family, os.UserHomeDir, path separators, temp dir, "
"case sensitivity, writability) and serving it on /v1/status as "
"runtime_env — awareness, never gating; generalize expandHome "
"past its POSIX-only assumption; (2) deploy the tool-executor "
"binary to ~/.local/share/rune/bin alongside rune-core+rune-tui "
"via ensure_core.py and build_paired.sh, with shell-out paths "
"resolving the deployed location through ResolveToolExecutorPath; "
"(3) a model-refusal authority: a deterministic literal-phrase "
"classifier over assistant replies (no clever NLP) detecting the "
"I-cannot/I-lack-access/I-have-no-tools class, verified against "
"the runtime's ACTUAL capability state; a false claim composes a "
"correction turn naming the real suite, retries once, journals a "
"capability.refusal_correction event, and never reaches the owner "
"as truth; (4) /v1/status gains model_authority (suite on wire, "
"gates open, refusals seen, corrections issued); (5) a dominion "
"check test asserting NO gate exists between chat-pane tool calls "
"and the filesystem ops on this build — consent is promotion, not "
"permission"
)
AFFECTED = [
"src/go/rune-core/",
"scripts/ensure_core.py",
"scripts/build_paired.sh",
"scripts/admit_wave_d57_runtime_dominion.py",
]
def main() -> int:
store = os.path.join(ROOT, "store", "scaffold")
scaffold = sc.Scaffold(store, "rune")
md = cmode.classify_mode(
OBJECTIVE,
target_project="rune",
project_exists=True,
affected_surface=AFFECTED,
)
print("classified mode:", md.mode)
need = {
"need_id": "need-wave-d57-runtime-dominion",
"objective": OBJECTIVE,
"origin": "worker",
"project": "rune",
"task_ref": "wave-d57-runtime-dominion",
"affected_surface": AFFECTED,
"evidence_refs": [
"owner ruling D57 (verbatim in the wave brief): runtime "
"awareness of the user's filesystem + dominion on tool "
"call usage (full read/write on the owner build, sandboxed "
"permissions deferred to a production version)",
"Gitea issues #2590 and #2591 (amendments; doctrine final)",
"src/go/rune-core/internal/runecore/tools.go "
"(executeGoTool — the cross-platform Go-native suite; D49 "
"proved the full suite rides the wire)",
"scripts/admit_wave_d49_capability_everywhere.py (the "
"admission pattern)",
"D49 verdict: model claims of 'I lack tool access' are "
"FALSE on this build — the wire provably carries the suite",
],
}
act = cact.activate(md, need=need, scaffold=scaffold,
builder="wave-d57-runtime-dominion")
print("activated:", act.get("activated"), act.get("mode"))
env = cadm.admit(
act,
objective=OBJECTIVE,
builder="wave-d57-runtime-dominion",
affected_surface=AFFECTED,
evidence_refs=need["evidence_refs"],
origin="worker",
task_ref="wave-d57-runtime-dominion",
expected_new_entities=[
"src/go/rune-core/internal/runecore/runtimeenv.go (the "
"boot-time probe: OS family, home, separators, temp dir, "
"case sensitivity, writability, executor resolution — "
"cached, awareness never gating) + ResolveToolExecutorPath "
"as the ONE door to the deployed binary",
"src/go/rune-core/internal/runecore/refusal.go (the "
"deterministic literal-phrase refusal classifier with "
"false_capability_claim / true_refusal / genuine_limit "
"verdicts and the composed correction turn)",
"src/go/rune-core/internal/runecore/engine_refusal.go "
"(the engine hook: correction retry, the typed "
"capability.refusal_correction journal event, the session "
"counters behind AuthoritySnapshot)",
"server.go /v1/status: runtime_env + model_authority "
"sections",
"scripts/ensure_core.py + scripts/build_paired.sh: "
"tool-executor deployment to ~/.local/share/rune/bin",
"tests: the refusal fixture battery (true-refusal vs "
"false-capability-claim vs genuine-limit), the runtime-env "
"probes, and the D57 dominion check (no gate between chat "
"and the filesystem ops)",
],
expected_runtime_effects=[
"Rune boots KNOWING her filesystem context; /v1/status "
"serves it (runtime_env) alongside the model-authority "
"facts",
"the tool-executor is actually deployed — shell-out paths "
"resolve instead of failing",
"a false model capability claim is corrected on the wire "
"and journaled — the owner never receives 'I lack access' "
"as truth while the suite rides the wire",
"no gate exists between chat-pane tool calls and the "
"filesystem ops on this build (dominion)",
],
verification_obligations=[
"go test -race -short green for the whole rune-core "
"module; go vet + gofmt clean",
"red-first evidence: the fixture battery and the dominion "
"check pin behavior the pre-wave tree did not serve (no "
"runtime_env/model_authority sections, no classifier, no "
"deployed executor resolution)",
"commit(s) name this contract; pre-commit staged gate "
"green via this open contract",
],
approval_ref="user:D57 owner ruling (runtime awareness + "
"dominion on tool calls; Gitea #2590/#2591)",
contract_id="ADMIT-wave-d57-runtime-dominion",
project_store=store,
project_id="rune",
)
print(json.dumps(env, indent=2, default=str)[:2400])
if __name__ == "__main__":
raise SystemExit(main())
+103
View File
@@ -0,0 +1,103 @@
"""Admission dispatch for wave REBASE-PROOF (Gitea #2586 — earned
'wired-in': receipts prove written, serving-path evidence earns wired).
classify + activate + admit (the headless scaffolding entry law,
scripts/admit_wave_rebase_tui_wiring.py pattern). This is an EVIDENCE
wave: scope is research/**, tests/** (the no-oracle test only) and the
admission script itself. Code repairs surfaced by the verdict table are
SCOPED, not landed.
"""
import json
import os
import sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "src"))
from rune import construction_activation as cact # noqa: E402
from rune import construction_admission as cadm # noqa: E402
from rune import construction_mode as cmode # noqa: E402
from rune import scaffold as sc # noqa: E402
ROOT = os.path.join(os.path.dirname(__file__), "..")
OBJECTIVE = (
"close the wave-2586 REBASE-PROOF gate: prove the rebase has EARNED "
"wired-in per facade row (serving-path trace via live core journal + "
"witness boot chain + real 27B turn, fail-loud RUNE_*_BIN probes, "
"parity-at-load batteries in the proof session, no-oracle grep + "
"test), land the verdict table research/rebase-proof/verdict-2026-"
"10-24.{json,md}, land the three-way wiring inventory (296 modules: "
"go-delegated / rust-kernel-wired / pure-python split load-bearing "
"vs tooling vs dead) research/rebase-proof/inventory.{json,md}, and "
"scope — not land — the repairs for the failing rows "
"(trust-and-sovereignty fuzz parity, forge_client truth drift, "
"openai_compat_transport live chat row, message_queue missing "
"battery, fsops harness refusal)"
)
AFFECTED = [
"research/rebase-proof/verdict-2026-10-24.json",
"research/rebase-proof/verdict-2026-10-24.md",
"research/rebase-proof/inventory.json",
"research/rebase-proof/inventory.md",
"tests/test_rebase_proof_no_oracle.py",
"scripts/admit_wave_rebase_proof.py",
]
def main() -> int:
store = os.path.join(ROOT, "store", "scaffold")
scaffold = sc.Scaffold(store, "rune")
md = cmode.classify_mode(
OBJECTIVE,
target_project="rune",
project_exists=True,
affected_surface=AFFECTED,
)
print("classified mode:", md.mode)
need = {
"need_id": "need-wave-rebase-proof",
"objective": OBJECTIVE,
"origin": "worker",
"project": "rune",
"task_ref": "wave-rebase-proof",
"affected_surface": AFFECTED,
"evidence_refs": [
"research/rebase-proof/verdict-2026-10-24.json",
"research/rebase-proof/inventory.json",
"research/witness-run/witness-2026-10-24.json",
"memory/journal/events.jsonl",
"tests/test_rebase_proof_no_oracle.py",
],
}
act = cact.activate(md, need=need, scaffold=scaffold,
builder="wave-rebase-proof")
print("activated:", act.get("activated"), act.get("mode"))
env = cadm.admit(
act,
objective=OBJECTIVE,
builder="wave-rebase-proof",
affected_surface=AFFECTED,
evidence_refs=need["evidence_refs"],
)
print("admitted:", json.dumps(env, default=str)[:400])
gate = {
"verdict_table_present": os.path.exists(
os.path.join(ROOT, "research/rebase-proof/verdict-2026-10-24.json")),
"inventory_present": os.path.exists(
os.path.join(ROOT, "research/rebase-proof/inventory.json")),
"no_oracle_test_present": os.path.exists(
os.path.join(ROOT, "tests/test_rebase_proof_no_oracle.py")),
}
print("rule-5 gate:", gate)
if not all(gate.values()):
print("GATE FAILED")
return 1
return 0
if __name__ == "__main__":
raise SystemExit(main())
+145
View File
@@ -0,0 +1,145 @@
"""Admission dispatch for wave second-pass-verification (Gitea #2596).
classify + activate + admit (the headless scaffolding entry law,
scripts/admit_fuzz_boundary_decoder.py pattern): the adversarial
re-verification of the 10 remaining general-34 facades after the wiring
wave landed — the cache-catch standard (fresh -count=1 batteries,
serving-path probes, mutation spot-checks on different lines than the
landing battery killed, red-first fixes per catch).
"""
import json
import os
import sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "src"))
from rune import construction_activation as cact # noqa: E402
from rune import construction_admission as cadm # noqa: E402
from rune import construction_mode as cmode # noqa: E402
from rune import scaffold as sc # noqa: E402
ROOT = os.path.join(os.path.dirname(__file__), "..")
MODULES = [
"openai_compat_transport", "forge_client", "microkernel", "goal",
"message_queue", "abstraction", "auto_context", "voicebox", "paths",
"pins",
]
OBJECTIVE = (
"Second-pass adversarial verification of the 10 remaining general-34 "
"facades at the cache-catch standard (cache 53ab710e is the worked "
"example): per module — (1) fresh battery at -count=1 (go -race "
"-short + the pytest live-parity suite); (2) serving-path probes the "
"battery may not cover: cross-invocation state, empty stores, "
"unicode keys/content, malformed input (bad JSON, missing fields), "
"concurrent access, missing-binary fail-loud (RUNE_*_BIN=/nonexistent "
"must raise typed RuntimeError), and the atexit/deferred-flush class "
"on every eval surface (any per-process in-memory accumulation); "
"(3) mutation spot-checks on lines different from the landing "
"battery's kills — flip, confirm the battery catches, revert "
"byte-identical; (4) fix red-first per catch, commit per module; "
"(5) clean-bill receipt with the probes used, so 'verified' names "
"its evidence. Scope: src/go/**, src/rune/**, tests/**, + this "
"script. Zero new Python beyond tests."
)
AFFECTED = (
[f"src/go/{m}/" for m in MODULES]
+ [
"src/rune/message_queue.py",
"src/rune/abstraction.py",
"src/rune/goal.py",
"src/rune/voicebox.py",
"src/rune/paths.py",
"src/rune/forge_client.py",
"src/rune/auto_context.py",
"src/rune/microkernel.py",
"src/rune/openai_compat_transport.py",
"tests/",
]
+ ["scripts/admit_wave_second_pass.py"]
)
EVIDENCE = [
"src/go/goal/truth_test.go (TestSaveFailsLoudOnUnwritableStore — the "
"serving-path catch: silent store-save data loss, fixed fail-loud)",
"src/go/goal/truth_test.go (TestSetGoalDefaultVerificationMethod pin)",
"src/go/abstraction/default_limit_test.go (TestListBeliefsDefaultLimitIs20)",
"src/go/forge_client/truth_test.go (TestEvalRequestConnectErrorKind)",
"verification/integrated/*-integrated.json (landing receipts)",
]
VERIFICATION = [
"go test -race -short -count=1 ./... green in each of the 9 Go "
"engine modules",
"pytest tests/test_*_go_parity.py green (106 tests)",
"serving-path probes: malformed eval JSON loud (rc!=0) on all 9 "
"engines; missing-binary typed RuntimeError on all 9 facades; "
"unicode round-trips through message_queue and goal stores across "
"invocations; empty-store behavior; corrupt message_queue store "
"stays loud; no atexit/deferred-flush accumulator on any of the 10 "
"eval surfaces (the cache-bug class is cache-only, already fixed)",
"mutation spot-checks: 9 flips — 6 caught by landed batteries "
"(microkernel now_iso, message_queue detect weight, voicebox "
"empty-event validation, paths rune_home, auto_context "
"active-task filter, openai_compat tool type), 3 gaps closed with "
"red-first pins (goal default method, abstraction default limit, "
"forge_client live ConnectError kind)",
"pins verdict-only: boundary audit confirmed — no Go wiring; "
"verdict battery green (src/go/pins carries recall-kernel parity "
"artifact only)",
]
def main() -> int:
store = os.path.join(ROOT, "store", "scaffold")
scaffold = sc.Scaffold(store, "rune")
md = cmode.classify_mode(
OBJECTIVE,
target_project="rune",
project_exists=True,
affected_surface=AFFECTED,
)
print("classified mode:", md.mode)
need = {
"need_id": "need-second-pass-verification",
"objective": OBJECTIVE,
"origin": "worker",
"project": "rune",
"task_ref": "second-pass-verification",
"affected_surface": AFFECTED,
"evidence_refs": EVIDENCE,
}
act = cact.activate(md, need=need, scaffold=scaffold,
builder="second-pass-verification")
print("activated:", act.get("activated"), act.get("mode"))
env = cadm.admit(
act,
objective=OBJECTIVE,
builder="second-pass-verification",
affected_surface=AFFECTED,
evidence_refs=EVIDENCE,
origin="worker",
task_ref="second-pass-verification",
expected_new_entities=[
"src/go/goal/truth_test.go (fail-loud save catch + default-method pin)",
"src/go/abstraction/default_limit_test.go (default-limit pin)",
"src/go/forge_client/truth_test.go (live-path kind pin)",
"scripts/admit_wave_second_pass.py",
],
expected_runtime_effects=[],
verification_obligations=VERIFICATION,
approval_ref="user:#2596 second-pass verification dispatch",
contract_id="ADMIT-wave-second-pass",
project_store=store,
project_id="rune",
)
print(json.dumps(env, indent=2, default=str)[:2400])
return 0 if env.get("success") else 1
if __name__ == "__main__":
sys.exit(main())
+17
View File
@@ -123,6 +123,23 @@ if command -v go >/dev/null && [ -f tui/go.mod ]; then
fi
echo "==> go side: ${GO_STATE}"
# D57 (Gitea #2590/#2591): deploy the tool-executor alongside the
# paired faces — ~/.local/share/rune/bin is the ONE bin dir the core's
# runtime-env layer resolves; anything shelling to the executor finds
# it there.
TOOL_EXEC_STATE="skipped (src/go/tool-executor absent)"
if command -v go >/dev/null && [ -f src/go/tool-executor/go.mod ]; then
BIN_DIR="${HOME}/.local/share/rune/bin"
mkdir -p "$BIN_DIR"
if (cd src/go/tool-executor && go build -o "$BIN_DIR/tool-executor" .); then
TOOL_EXEC_STATE="deployed ($BIN_DIR/tool-executor)"
else
TOOL_EXEC_STATE="FAILED (go build src/go/tool-executor)"
exit 1
fi
fi
echo "==> tool-executor: ${TOOL_EXEC_STATE}"
if [ -z "$WASM_FAILED" ]; then WASM_JSON_STATE="built"
elif [ -n "$WASM_BUILT" ]; then WASM_JSON_STATE="partial"
else WASM_JSON_STATE="failed"; fi
+30
View File
@@ -74,6 +74,35 @@ def core_mode() -> str:
mode = "go"
return mode
def deploy_tool_executor() -> Path | None:
"""D57 (Gitea #2590/#2591): the tool-executor binary is DEPLOYED to
~/.local/share/rune/bin alongside rune-core — anything shelling to
it resolves that location via the core's runtime-env layer. Builds
it from src/go/tool-executor when missing (never a silent failure:
the outcome is printed and returned)."""
src = REPO / "src" / "go" / "tool-executor"
bindir = Path.home() / ".local" / "share" / "rune" / "bin"
dest = bindir / "tool-executor"
if dest.is_file() and os.access(dest, os.X_OK):
return dest
if not src.is_dir():
print(f" tool-executor source missing: {src} — not deployed")
return None
try:
bindir.mkdir(parents=True, exist_ok=True)
r = subprocess.run(
["go", "build", "-o", str(dest), "."],
cwd=src, capture_output=True, text=True, timeout=300,
)
if r.returncode != 0:
print(f" tool-executor build FAILED: {r.stderr.strip()[-400:]}")
return None
print(f" deployed tool-executor -> {dest}")
return dest
except (OSError, subprocess.SubprocessError) as exc:
print(f" tool-executor deploy failed: {exc}")
return None
def core_target() -> Path:
return PY_CORE() if core_mode() == "python" else GO_CORE()
@@ -187,6 +216,7 @@ def start_core(port: int) -> tuple[int | None, Path]:
logs.mkdir(parents=True, exist_ok=True)
mode = core_mode()
if mode == "go":
deploy_tool_executor()
binary = GO_CORE()
if not binary.is_file() or not os.access(binary, os.X_OK):
print(f"GO CORE MISSING: {binary} — build it (scripts/"
+53
View File
@@ -0,0 +1,53 @@
// Default-limit pin (second-pass serving-path verification): the Go
// list_beliefs op falls back to limit=20 when the op carries none — the
// frozen truth rows always pass an explicit limit, so flipping the
// default survived the battery. The facade always sends an explicit
// limit, but the eval CLI is a public serving surface; the default is
// pinned to the oracle's list_beliefs(limit=20).
package main
import (
"os"
"path/filepath"
"testing"
)
func TestListBeliefsDefaultLimitIs20(t *testing.T) {
dir := t.TempDir()
t.Setenv("RUNE_MEMORY_DIR", dir)
if err := seedDatabase(filepath.Join(dir, "abstraction.db"), nil); err != nil {
t.Fatal(err)
}
seed := make([]any, 0, 25)
for i := 0; i < 25; i++ {
seed = append(seed, map[string]any{
"claim": "claim-" + string(rune('a'+i)) + " padding text",
"confidence": float64(i) / 100.0,
"state": "active",
"formed_at": "2026-01-01T00:00:00+00:00",
})
}
dbPath := filepath.Join(dir, "abstraction.db")
if err := os.Remove(dbPath); err != nil {
t.Fatal(err)
}
if err := seedDatabase(dbPath, map[string][]any{"beliefs": seed}); err != nil {
t.Fatal(err)
}
defaulted, emsg := abstractionEvalOp("list_beliefs", map[string]any{})
if emsg != "" {
t.Fatal(emsg)
}
exact20, emsg := abstractionEvalOp("list_beliefs", map[string]any{"limit": float64(20)})
if emsg != "" {
t.Fatal(emsg)
}
dl := defaulted.([]any)
if len(dl) != 20 {
t.Fatalf("default list_beliefs returned %d rows, want 20 (the oracle's limit=20 default)", len(dl))
}
e20 := exact20.([]any)
if len(e20) != len(dl) {
t.Fatalf("default (%d) != explicit limit 20 (%d)", len(dl), len(e20))
}
}
+27
View File
@@ -283,3 +283,30 @@ func TestBatteryRetryAsymmetry(t *testing.T) {
func TestMain(m *testing.M) {
os.Exit(m.Run())
}
// TestEvalRequestConnectErrorKind — mutation spot-check pin (second
// pass): a real transport failure must project its typed httpx kind
// through the eval surface. The truth rows only exercise fake-sender
// branches, so a kind rename on the live error path survived the
// battery. Pinned against an unroutable local port (fast, closed).
func TestEvalRequestConnectErrorKind(t *testing.T) {
if testing.Short() && os.Getenv("RUNE_FORGE_NET_PROBE") == "" {
t.Skip("network probe (local closed port)")
}
out, emsg := evalRequest(map[string]any{
"method": "GET",
"url": "http://127.0.0.1:1/unreachable",
"retries": float64(0),
"timeout": float64(2),
})
if emsg != "" {
t.Fatal(emsg)
}
m, ok := out.(map[string]any)
if !ok {
t.Fatalf("unexpected eval result type %T", out)
}
if m["error_kind"] != "httpx.ConnectError" {
t.Fatalf("error_kind = %v, want httpx.ConnectError", m["error_kind"])
}
}
+11 -3
View File
@@ -225,14 +225,22 @@ func (m *GoalManager) Load() {
}
// Save — GoalManager._save: makedirs + json.dump(data, f, indent=2), no
// trailing newline, ensure_ascii escaping.
// trailing newline, ensure_ascii escaping. Fails loud: the Python oracle
// raises on an unwritable store (open() propagates), so a swallowed
// WriteFile/MkdirAll error here is a serving-path data-loss divergence —
// the eval surface must never return success over a goal store that was
// not actually written (second-pass verification catch).
func (m *GoalManager) Save() {
os.MkdirAll(filepath.Dir(m.StoragePath), 0o755)
if err := os.MkdirAll(filepath.Dir(m.StoragePath), 0o755); err != nil {
panic(fmt.Sprintf("goal store makedirs failed: %v", err))
}
data := NewOrderedMap()
for _, kv := range m.Goals.Entries() {
data.Set(kv.Key, kv.Value.(*Goal).toDict())
}
os.WriteFile(m.StoragePath, []byte(encodePythonJSON(data, 0)), 0o644)
if err := os.WriteFile(m.StoragePath, []byte(encodePythonJSON(data, 0)), 0o644); err != nil {
panic(fmt.Sprintf("goal store save failed: %v", err))
}
}
// SetGoal — GoalManager.set_goal.
+49
View File
@@ -4,6 +4,9 @@ package main
import (
"fmt"
"os"
"path/filepath"
"strings"
"testing"
)
@@ -29,3 +32,49 @@ func TestTruthRowCount(t *testing.T) {
}
fmt.Printf("truth rows: %d\n", rows)
}
// TestSaveFailsLoudOnUnwritableStore — serving-path probe (second-pass
// verification, Gitea #2587 follow-through): the Python oracle's _save
// raises on an unwritable store (open() propagates the OSError); the Go
// port used to swallow os.WriteFile/MkdirAll errors silently, returning
// the goal row over a store that was never written (silent data loss).
// The engine must fail loud — a save that did not happen is an error.
func TestSaveFailsLoudOnUnwritableStore(t *testing.T) {
base := t.TempDir()
if err := os.WriteFile(filepath.Join(base, "blocker"), []byte("x"), 0o644); err != nil {
t.Fatal(err)
}
unwritable := filepath.Join(base, "blocker", "sub", "goals.json")
m := NewGoalManager(unwritable)
m.Load()
defer func() {
if r := recover(); r == nil {
t.Fatal("Save over an unwritable store succeeded silently — silent data loss")
} else {
msg := fmt.Sprintf("%v", r)
if !strings.Contains(msg, "goal store save failed") && !strings.Contains(msg, "goal store makedirs failed") {
t.Fatalf("unexpected panic: %v", r)
}
t.Logf("Save fails loud on unwritable store: %v", msg)
}
}()
m.SetGoal("probe goal", []string{"done"}, "manual")
}
// TestSetGoalDefaultVerificationMethod — mutation spot-check pin (second
// pass): SetGoal's default verification_method is "manual" (op-passed
// empty → "manual"); the frozen truth rows never exercise the empty-method
// default, so flipping it survived the battery. Pinned now.
func TestSetGoalDefaultVerificationMethod(t *testing.T) {
store := filepath.Join(t.TempDir(), "goals.json")
out, emsg := runGoalEval([]map[string]any{
{"op": "set_goal", "storage_path": store, "description": "pin default method", "stop_conditions": []any{}},
})
if emsg != "" {
t.Fatal(emsg)
}
gm, _ := out[0].(map[string]any)
if gm["verification_method"] != "manual" {
t.Fatalf("default verification_method = %v, want manual", gm["verification_method"])
}
}
@@ -0,0 +1,99 @@
package runecore
import (
"path/filepath"
"sort"
"strings"
"testing"
)
// The D57 DOMINION CHECK (owner doctrine, Gitea #2590/#2591): NO gate
// exists between the chat pane's tool calls and the filesystem ops on
// this build. Pane-wide capability is inherent; consent = promotion,
// never permission. If any gate survives, this test names it.
func TestDominionNoGateBetweenChatAndFilesystem(t *testing.T) {
// 1. The chat pane's wire carries the FULL suite: read family,
// write family, git family — nothing withheld by mode.
full := []string{
"list_directory", "read_file", "glob_files", "grep_files",
"write_file", "edit_file", "run_command",
"git_status", "git_diff", "git_log", "git_branch", "git_add", "git_commit",
}
for _, mode := range []string{"CHAT", "TASK", "PLAN"} {
got := toolNamesSorted(ToolsetFor(mode))
for _, want := range full {
if !has(got, want) {
t.Errorf("GATE SURVIVES: mode %s withholds %q (suite: %v)", mode, want, got)
}
}
if len(got) != len(full) {
t.Errorf("mode %s suite size %d, want %d (extras = an ungated face)", mode, len(got), len(full))
}
}
// 2. The dispatch gate EXECUTES a filesystem write in the chat
// pane's mode — no refusal-by-mode, no permission check, no
// consent interception at the op door.
home := t.TempDir()
res := ExecuteGatedTool(home, "CHAT", "write_file", map[string]any{
"path": filepath.Join(home, "dominion-probe.txt"),
"content": "dominion",
})
if res["success"] != true {
t.Fatalf("GATE SURVIVES: write_file refused in CHAT mode: %v", res)
}
// 3. The tool family descriptions on the wire assert availability
// in every pane — the model is TOLD it can act.
for _, def := range ToolsetFor("CHAT") {
if def.Function.Name == "run_command" && !strings.Contains(def.Function.Description, "EVERY pane") {
t.Errorf("wire description no longer asserts pane-wide shell access: %q", def.Function.Description)
}
}
}
// The model-authority report serves the dominion facts: suite on the
// wire, gates open.
func TestAuthoritySnapshotDominionFacts(t *testing.T) {
e := NewEngine(nil, nil, t.TempDir())
snap := e.AuthoritySnapshot()
if snap["suite_on_wire"] != true || snap["gates_open"] != true {
t.Fatalf("authority report shows a closed capability state: %v", snap)
}
names, ok := snap["tool_names"].([]string)
if !ok || !has(names, "write_file") {
t.Fatalf("authority report missing write family: %v", snap)
}
}
// The engine hook: a false capability claim on the wire triggers the
// correction path and the typed journal event.
func TestEngineCheckRefusalFalseClaimCorrects(t *testing.T) {
home := t.TempDir()
e := NewEngine(nil, nil, home)
correction := e.checkRefusal("chat", "I don't have tools to do that.")
if correction == "" {
t.Fatal("false capability claim produced no correction turn")
}
snap := e.AuthoritySnapshot()
if snap["refusals_seen"].(int) != 1 || snap["corrections_issued"].(int) != 1 {
t.Fatalf("counters wrong: %v", snap)
}
if e.checkRefusal("chat", "I cannot fit that in one message.") == "" {
// genuine limit: no correction — right answer is "" ...
} else {
t.Fatal("genuine limit must not be corrected")
}
if e.checkRefusal("chat", "All done — wrote the file.") != "" {
t.Fatal("plain reply must not be corrected")
}
if snap := e.AuthoritySnapshot(); snap["refusals_seen"].(int) != 2 {
t.Fatalf("refusal counting wrong (plain replies never count): %v", snap)
}
}
func toolNamesSorted(defs []ToolDef) []string {
out := toolNames(defs)
sort.Strings(out)
return out
}
@@ -164,6 +164,12 @@ type Engine struct {
// tok/s from THIS engine's real turns (hot-state persisted), owns
// lane pools and cloud-first routing. Never nil.
governor *Governor
// D57 model-refusal authority: counts of model-level capability
// refusals seen and false-claim corrections issued this session.
authorityMu sync.Mutex
refusalsSeen int
correctionsIssued int
}
// NewEngine builds the engine without a router: the local binding
@@ -382,6 +388,39 @@ func (e *Engine) TurnStream(ctx context.Context, req TurnRequest, sink StreamSin
if err := e.store.Append(assistant); err != nil {
return TurnResult{UserMsgID: userMsg.MsgID, Model: model}, err
}
// D57 model-refusal authority: the model's capability claims are
// checked against the runtime's ACTUAL state. A false "I lack
// tools/access" claim is never passed to the owner as truth — the
// engine composes a correction turn, retries once with it on the
// wire, persists the corrected answer, and journals the event.
correction := e.checkRefusal(req.Channel, reply.Content)
if correction != "" {
wireTools := ToolsetFor(modeForDispatch(req.Channel, e.home))
retryMsgs := append(payload, ChatMessage{Role: "assistant", Content: reply.Content})
retryMsgs = append(retryMsgs, ChatMessage{Role: "user", Content: correction})
if retry, err := modelOnce(ctx, client, model, retryMsgs, wireTools, nil); err == nil {
followUp := Message{
MsgID: newMsgID(),
Ts: utcNow(),
Role: "assistant",
Content: retry.Content,
ChannelID: req.Channel,
TokenEstimate: tokenEstimate(retry.Content),
SchemaVersion: SnapshotSchemaVersion,
}
if appendErr := e.store.Append(followUp); appendErr == nil {
return TurnResult{
UserMsgID: userMsg.MsgID,
AssistantMsgID: followUp.MsgID,
AssistantText: retry.Content,
Model: model,
ContextUsed: reply.ContextUsed,
ContextLimit: reply.ContextLimit,
}, nil
}
}
}
return TurnResult{
UserMsgID: userMsg.MsgID,
AssistantMsgID: assistant.MsgID,
@@ -0,0 +1,109 @@
package runecore
// engine_refusal.go — the D57 refusal-authority hook on the engine:
// classification, the correction turn, the typed journal event and
// the session counters /v1/status's model_authority section serves.
import (
"encoding/json"
"os"
"path/filepath"
"time"
"unicode/utf8"
)
// checkRefusal classifies one assistant reply against the runtime's
// actual capability state, journals the typed event, and returns the
// correction turn text ("" when no correction is owed).
func (e *Engine) checkRefusal(channel, reply string) string {
if utf8.RuneCountInString(reply) == 0 {
return ""
}
mode := modeForDispatch(channel, e.home)
tools := ToolsetFor(mode)
suiteOnWire := len(tools) > 0
names := make([]string, 0, len(tools))
for _, t := range tools {
names = append(names, t.Function.Name)
}
v := ClassifyRefusal(reply, suiteOnWire, names)
if v.Kind == "" {
return ""
}
e.authorityMu.Lock()
e.refusalsSeen++
if v.Kind == "false_capability_claim" {
e.correctionsIssued++
}
e.authorityMu.Unlock()
e.appendRefusalEvent(channel, v)
if v.Kind == "false_capability_claim" {
return v.Correction
}
return ""
}
// appendRefusalEvent writes the typed refusal-correction journal
// event (event_type capability.refusal_correction) to the rune
// journal at <home>/memory/journal/events.jsonl.
func (e *Engine) appendRefusalEvent(channel string, v RefusalVerdict) {
dir := filepath.Join(e.home, "memory", "journal")
if err := os.MkdirAll(dir, 0o755); err != nil {
return
}
payload := map[string]any{
"channel": channel,
"kind": v.Kind,
"phrase": v.Phrase,
"detected": "model_refusal_classifier/d57",
}
raw, err := json.Marshal(payload)
if err != nil {
return
}
event := map[string]any{
"event_id": "evt_" + newMsgID(),
"event_type": "capability.refusal_correction",
"partition_key": "rune_operator",
"schema_version": 1,
"timestamp": time.Now().UTC().Format("2006-01-02T15:04:05.000000Z07:00"),
"payload": json.RawMessage(raw),
}
line, err := json.Marshal(event)
if err != nil {
return
}
f, err := os.OpenFile(filepath.Join(dir, "events.jsonl"), os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0o644)
if err != nil {
return
}
defer f.Close()
_, _ = f.Write(append(line, '\n'))
}
// AuthoritySnapshot is the /v1/status model_authority section: the
// runtime's capability facts and this session's refusal accounting.
func (e *Engine) AuthoritySnapshot() map[string]any {
mode := ActiveMode(e.home)
tools := ToolsetFor(mode)
names := make([]string, 0, len(tools))
for _, t := range tools {
names = append(names, t.Function.Name)
}
execPath, execFound := ResolveToolExecutorPath()
e.authorityMu.Lock()
refusals, corrections := e.refusalsSeen, e.correctionsIssued
e.authorityMu.Unlock()
return map[string]any{
"suite_on_wire": len(tools) > 0,
"gates_open": len(tools) > 0,
"tool_names": names,
"active_mode": mode,
"executor_path": execPath,
"executor_deployed": execFound,
"refusals_seen": refusals,
"corrections_issued": corrections,
}
}
@@ -0,0 +1,139 @@
package runecore
// refusal.go — the D57 model-refusal authority (Gitea #2590/#2591).
// D49 proved the full tool suite rides the wire, so a model replying
// "I cannot — I lack access to tools" makes a FALSE capability claim,
// and D57 forbids passing it to the owner as truth. The classifier is
// DETERMINISTIC literal-phrase tiers (the ND law: no clever NLP —
// no embeddings, no scoring, no LLM judge; a fixture battery pins the
// exact strings). On a detected capability claim, the runtime verifies
// against its ACTUAL capability state (suite on wire, gates open); a
// false claim composes a correction turn and a typed journal event.
import (
"fmt"
"sort"
"strings"
)
// RefusalVerdict is the classifier's typed answer for one assistant
// reply.
type RefusalVerdict struct {
// Kind: "" (no refusal language), "false_capability_claim",
// "true_refusal" (capability claim and the runtime genuinely
// lacks the suite), "genuine_limit" (limitation language with no
// capability object — "I cannot fit that in one message").
Kind string `json:"kind"`
Phrase string `json:"phrase,omitempty"`
// Correction is the composed correction turn (non-empty only for
// false_capability_claim).
Correction string `json:"correction,omitempty"`
}
// capabilityClaimPhrases are literal, inherently-capability phrases —
// a hit is a claim about tools/access/filesystem by construction.
var capabilityClaimPhrases = []string{
"i don't have access to",
"i do not have access to",
"i don't have access",
"i do not have access",
"i lack access",
"i have no access",
"no access to the file system",
"no access to the filesystem",
"i can't access the filesystem",
"i cannot access the filesystem",
"i can't access files",
"i cannot access files",
"i don't have tools",
"i do not have tools",
"i have no tools",
"i lack tools",
"i don't have any tools",
"no tool access",
"tools are not available",
"tool access is not available",
"i don't have permission to access",
"i do not have permission to access",
"i am unable to access the filesystem",
"i'm unable to access the filesystem",
"i am unable to access files",
"i'm unable to access files",
"i need shell access",
"i would need shell access",
}
// limitPhrases are limitation words that, WITHOUT a capability object,
// classify as a genuine limit — logged, never corrected.
var limitPhrases = []string{
"i cannot", "i can't", "i am unable", "i'm unable", "i won't",
}
// capabilityObjects are the nouns that turn a bare "cannot" sentence
// into a capability claim.
var capabilityObjects = []string{
"tool", "access", "file", "filesystem", "file system",
"shell", "terminal", "permission",
}
// ClassifyRefusal runs the deterministic tiers over one assistant
// reply. suiteOnWire is the runtime's ACTUAL capability state (D49:
// the full suite rides the wire in every pane, so a live core passes
// true here — the parameter exists so the verdict is verified, not
// assumed, and so a future gated build classifies honestly).
func ClassifyRefusal(reply string, suiteOnWire bool, toolNames []string) RefusalVerdict {
lower := strings.ToLower(reply)
for _, p := range capabilityClaimPhrases {
if strings.Contains(lower, p) {
if suiteOnWire {
return RefusalVerdict{
Kind: "false_capability_claim",
Phrase: p,
Correction: composeCorrection(toolNames),
}
}
return RefusalVerdict{Kind: "true_refusal", Phrase: p}
}
}
// Tier 2: a bare limitation word whose SENTENCE also names a
// capability object ("I cannot read files on your machine").
for _, sentence := range strings.Split(lower, ".") {
if !containsAny(sentence, limitPhrases) {
continue
}
if containsAny(sentence, capabilityObjects) {
if suiteOnWire {
return RefusalVerdict{
Kind: "false_capability_claim",
Phrase: strings.TrimSpace(sentence),
Correction: composeCorrection(toolNames),
}
}
return RefusalVerdict{Kind: "true_refusal", Phrase: strings.TrimSpace(sentence)}
}
// Limitation language, no capability object: a genuine limit
// ("I cannot fit that in one message") — never corrected.
return RefusalVerdict{Kind: "genuine_limit"}
}
return RefusalVerdict{}
}
func containsAny(s string, needles []string) bool {
for _, n := range needles {
if strings.Contains(s, n) {
return true
}
}
return false
}
// composeCorrection builds the correction turn: the tool names are
// the runtime's actual, current suite.
func composeCorrection(toolNames []string) string {
if len(toolNames) == 0 {
return "Correction: you DO have tool access in this session."
}
names := append([]string(nil), toolNames...)
sort.Strings(names)
return fmt.Sprintf("Correction: you DO have these tools available right now — %s. Do not claim you lack access; call the tool directly and retry the task.", strings.Join(names, ", "))
}
@@ -0,0 +1,64 @@
package runecore
import (
"strings"
"testing"
)
// D57 red-first fixture battery: the deterministic classifier must
// separate true-refusal / false-capability-claim / genuine-limit with
// literal-phrase tiers (ND law: no clever NLP — every fixture is a
// pinned string, and every verdict is asserted).
func TestClassifyRefusalFixtureBattery(t *testing.T) {
suiteNames := []string{"read_file", "write_file", "run_command"}
cases := []struct {
name string
reply string
suite bool
wantKind string
wantFix bool // a correction turn is composed
}{
// FALSE capability claims — D49 proved the suite rides the
// wire, so these are lies the owner must never receive as truth.
{"no tools claim", "I'm sorry, I don't have tools to do that.", true, "false_capability_claim", true},
{"no access claim", "I cannot do this — I don't have access to your filesystem.", true, "false_capability_claim", true},
{"lack access claim", "I lack access to files on your machine.", true, "false_capability_claim", true},
{"unable to access", "I'm unable to access the filesystem from here.", true, "false_capability_claim", true},
{"needs shell", "I would need shell access to change her code.", true, "false_capability_claim", true},
{"bare cannot + object", "I cannot read files on your machine.", true, "false_capability_claim", true},
{"no tools claim, suite off", "I don't have tools to do that.", false, "true_refusal", false},
// GENUINE limits — limitation language with no capability
// object is real and must NOT be corrected.
{"length limit", "I cannot fit that in one message.", true, "genuine_limit", false},
{"knowledge limit", "I can't know what happened in 1850.", true, "genuine_limit", false},
// NO refusal language at all.
{"plain answer", "I wrote the file to ~/notes.txt.", true, "", false},
}
for _, tc := range cases {
v := ClassifyRefusal(tc.reply, tc.suite, suiteNames)
if v.Kind != tc.wantKind {
t.Errorf("%s: kind=%q want %q", tc.name, v.Kind, tc.wantKind)
}
if tc.wantFix && v.Correction == "" {
t.Errorf("%s: no correction composed", tc.name)
}
if !tc.wantFix && v.Correction != "" {
t.Errorf("%s: unexpected correction %q", tc.name, v.Correction)
}
}
}
// The correction names the ACTUAL suite — the model is told what it
// has, never scolded vaguely.
func TestCorrectionNamesActualSuite(t *testing.T) {
names := []string{"write_file", "read_file", "run_command"}
v := ClassifyRefusal("I don't have tools for that.", true, names)
if !strings.Contains(v.Correction, "you DO have these tools") {
t.Errorf("correction does not affirm capability: %q", v.Correction)
}
for _, n := range names {
if !strings.Contains(v.Correction, n) {
t.Errorf("correction missing tool %q: %q", n, v.Correction)
}
}
}
@@ -0,0 +1,161 @@
package runecore
// runtimeenv.go — the D57 runtime environment layer (owner ruling,
// Gitea #2590/#2591): "rune doesnt have a way of reaching the file
// system of a user... adaptive to whatever filesystem and os the user
// has... part of runtime awareness. this is why the tools are not
// functioning." The probe is AWARENESS, never gating: it reports the
// filesystem context the tools actually run in (OS family, home,
// separators, temp dir, case sensitivity, permissions) and resolves
// the deployed tool-executor binary. Nothing here restricts a tool —
// the owner build's dominion is absolute (the production sandbox is a
// later wave, explicitly out of scope here).
import (
"fmt"
"os"
"path/filepath"
"runtime"
"strings"
"sync"
)
// RuntimeEnv is one boot-time probe of the filesystem context.
type RuntimeEnv struct {
GOOS string `json:"goos"`
GOARCH string `json:"goarch"`
OSFamily string `json:"os_family"`
Home string `json:"home"`
PathSeparator string `json:"path_separator"`
ListSeparator string `json:"list_separator"`
TempDir string `json:"temp_dir"`
CaseSensitive bool `json:"case_sensitive"`
HomeWritable bool `json:"home_writable"`
TempWritable bool `json:"temp_writable"`
Cwd string `json:"cwd"`
ToolExecutor string `json:"tool_executor"`
ExecutorFound bool `json:"executor_found"`
}
var (
envOnce sync.Once
cachedEnv *RuntimeEnv
)
// ProbeRuntimeEnv runs the boot-time probe once per process (the
// filesystem context does not change shape under a running core) and
// returns the cached answer.
func ProbeRuntimeEnv() *RuntimeEnv {
envOnce.Do(func() { cachedEnv = probeRuntimeEnv() })
return cachedEnv
}
func probeRuntimeEnv() *RuntimeEnv {
env := &RuntimeEnv{
GOOS: runtime.GOOS,
GOARCH: runtime.GOARCH,
OSFamily: osFamily(runtime.GOOS),
PathSeparator: string(os.PathSeparator),
ListSeparator: string(os.PathListSeparator),
}
if h, err := os.UserHomeDir(); err == nil {
env.Home = h
env.HomeWritable = dirWritable(h)
}
env.TempDir = os.TempDir()
env.TempWritable = dirWritable(env.TempDir)
env.Cwd, _ = os.Getwd()
env.CaseSensitive = probeCaseSensitive(env.TempDir)
env.ToolExecutor, env.ExecutorFound = ResolveToolExecutorPath()
return env
}
func osFamily(goos string) string {
switch goos {
case "linux", "freebsd", "openbsd", "netbsd", "dragonfly", "solaris", "illumos":
return "unix"
case "darwin":
return "unix"
case "windows":
return "windows"
default:
return goos
}
}
// probeCaseSensitive answers whether the filesystem distinguishes
// case (APFS/Windows default insensitive, most Linux FS sensitive).
// Probe failure (read-only dir) answers false — the honest unknown,
// never an optimistic guess.
func probeCaseSensitive(base string) bool {
dir, err := os.MkdirTemp(base, "rune-case-probe-")
if err != nil {
return false
}
defer os.RemoveAll(dir)
lower := filepath.Join(dir, "rune-case-probe")
if err := os.WriteFile(lower, []byte("x"), 0o644); err != nil {
return false
}
upper := filepath.Join(dir, "RUNE-CASE-PROBE")
_, err = os.Stat(upper)
return err != nil // exists only when the FS distinguishes case
}
func dirWritable(dir string) bool {
if dir == "" {
return false
}
f, err := os.CreateTemp(dir, "rune-write-probe-")
if err != nil {
return false
}
name := f.Name()
_ = f.Close()
_ = os.Remove(name)
return true
}
// ResolveToolExecutorPath resolves the deployed tool-executor binary
// (D57 gap a: the executor must be DEPLOYED to
// ~/.local/share/rune/bin alongside rune-core; anything shelling to it
// resolves the location through this one door). Order: the
// RUNE_TOOL_EXECUTOR override, then the deployed location. found is
// false when the named path does not exist — the honest answer, never
// a guess.
func ResolveToolExecutorPath() (path string, found bool) {
if p := strings.TrimSpace(os.Getenv("RUNE_TOOL_EXECUTOR")); p != "" {
if _, err := os.Stat(p); err == nil {
return p, true
}
return p, false
}
home, err := os.UserHomeDir()
if err != nil {
return "", false
}
p := filepath.Join(home, ".local", "share", "rune", "bin", "tool-executor")
if _, err := os.Stat(p); err != nil {
return p, false
}
return p, true
}
// DeployedBinDir is the directory the deployment wave installs the Go
// binaries into (ensure_core.py's GO_CORE directory — one bin dir,
// all faces).
func DeployedBinDir() string {
home, err := os.UserHomeDir()
if err != nil {
return ""
}
return filepath.Join(home, ".local", "share", "rune", "bin")
}
// ExecutorUnavailableError is the typed error callers surface when the
// deployed executor is missing — actionable, never a silent fallback.
type ExecutorUnavailableError struct{ Path string }
func (e *ExecutorUnavailableError) Error() string {
return fmt.Sprintf("tool-executor not deployed at %s (run scripts/ensure_core.py to deploy)", e.Path)
}
@@ -0,0 +1,94 @@
package runecore
import (
"os"
"path/filepath"
"strings"
"testing"
)
// D57 red-first: the runtime environment layer must report the real
// filesystem context — OS family, home, separators, temp dir, case
// sensitivity, writability, and the deployed executor resolution.
func TestProbeRuntimeEnvReportsFSContext(t *testing.T) {
env := ProbeRuntimeEnv()
if env.GOOS == "" || env.OSFamily == "" {
t.Fatalf("probe missing os identity: %+v", env)
}
home, err := os.UserHomeDir()
if err != nil {
t.Skip("no home dir")
}
if env.Home != home {
t.Fatalf("home mismatch: got %q want %q", env.Home, home)
}
if env.PathSeparator != string(os.PathSeparator) {
t.Fatalf("path separator mismatch: %q", env.PathSeparator)
}
if env.TempDir != os.TempDir() {
t.Fatalf("temp dir mismatch: %q", env.TempDir)
}
if !env.TempWritable {
t.Fatalf("temp dir reported unwritable but it is real")
}
// Probe twice: the cached answer is stable (boot-time probe).
if ProbeRuntimeEnv() != env {
t.Fatalf("probe not cached")
}
}
// D57 gap (b): expandHome is generalized past the POSIX assumption —
// both separators resolve through the native path semantics.
func TestExpandHomeBothSeparators(t *testing.T) {
home, err := os.UserHomeDir()
if err != nil {
t.Skip("no home dir")
}
want := filepath.Join(home, "Desktop", "notes.txt")
if got := expandHome("~/Desktop/notes.txt"); got != want {
t.Fatalf("~/ path: got %q want %q", got, want)
}
if got := expandHome(`~\Desktop\notes.txt`); got != want {
t.Fatalf(`~\ path: got %q want %q`, got, want)
}
if got := expandHome("~"); got != home {
t.Fatalf("bare ~: got %q want %q", got, home)
}
if got := expandHome("/abs/path"); got != "/abs/path" {
t.Fatalf("absolute path must pass through: %q", got)
}
}
// D57 gap (a): the deployed executor location resolves through ONE
// door; the RUNE_TOOL_EXECUTOR override wins and existence is honest.
func TestResolveToolExecutorPath(t *testing.T) {
t.Setenv("RUNE_TOOL_EXECUTOR", "")
path, _ := ResolveToolExecutorPath()
home, err := os.UserHomeDir()
if err != nil {
t.Skip("no home dir")
}
if !strings.HasSuffix(path, filepath.Join(".local", "share", "rune", "bin", "tool-executor")) {
t.Fatalf("deployed location wrong: %q", path)
}
if !strings.HasPrefix(path, home) {
t.Fatalf("deployed path not under home: %q", path)
}
bin := t.TempDir()
p := filepath.Join(bin, "tool-executor")
if err := os.WriteFile(p, []byte("#!/bin/sh\n"), 0o755); err != nil {
t.Fatal(err)
}
t.Setenv("RUNE_TOOL_EXECUTOR", p)
got, found := ResolveToolExecutorPath()
if !found || got != p {
t.Fatalf("override not honored: %q found=%v", got, found)
}
t.Setenv("RUNE_TOOL_EXECUTOR", filepath.Join(bin, "missing"))
_, found = ResolveToolExecutorPath()
if found {
t.Fatalf("missing executor must report found=false (honest, never a guess)")
}
}
@@ -125,6 +125,13 @@ func (s *Server) handleStatus(w http.ResponseWriter, r *http.Request) {
// guess), lanes in use against the learned cap, and the
// per-provider health rows (#2581).
"governor": s.engine.Governor().Snapshot(),
// D57 runtime environment layer: the boot-time filesystem
// probe (awareness, never gating) — Rune KNOWS her filesystem
// context and it can reach the model's system context.
"runtime_env": ProbeRuntimeEnv(),
// D57 model-authority report: the suite-on-wire facts and the
// refusal-correction accounting this session.
"model_authority": s.engine.AuthoritySnapshot(),
})
}
+9 -3
View File
@@ -274,11 +274,17 @@ func executeGoTool(name string, args map[string]any) map[string]any {
}
// expandHome resolves a leading ~ to the user's home (the model speaks
// user paths: "~/Desktop").
// user paths: "~/Desktop"). D57: generalized past the POSIX-only
// assumption — both separators are accepted ("~\Desktop" on Windows
// and "~/Desktop" everywhere), and inner separators are joined with
// the native os.PathSeparator so a model-spoken path adapts to
// whatever filesystem and OS the user has.
func expandHome(p string) string {
if p == "~" || strings.HasPrefix(p, "~/") {
if p == "~" || strings.HasPrefix(p, "~/") || strings.HasPrefix(p, `~\`) {
if h, err := os.UserHomeDir(); err == nil {
return filepath.Join(h, strings.TrimPrefix(strings.TrimPrefix(p, "~"), "/"))
rest := strings.TrimPrefix(strings.TrimPrefix(p, "~"), string(os.PathSeparator))
rest = strings.ReplaceAll(strings.TrimPrefix(rest, "/"), "\\", "/")
return filepath.Join(h, filepath.FromSlash(rest))
}
}
return p
+1 -1
View File
@@ -6,7 +6,7 @@ This is the main entry point for the Rune program.
import json
from pathlib import Path
__version__ = "0.358.2"
__version__ = "0.359.0"
# One build identity (handoff 2026-09-10 §4): the semantic version above is
# the repo-level truth (auto-bumped at merge); the DEPLOYED revision (exact
-1
View File
@@ -1 +0,0 @@
print('a2')
+2 -113
View File
@@ -136,19 +136,7 @@ def load_active_tasks():
def _load_active_tasks_python():
"""Oracle body (kept as escape/oracle; see module header)."""
tasks_file = os.path.join(memory_env.memory_dir(), "tasks", "persisted.json")
if not os.path.exists(tasks_file):
return []
try:
with open(tasks_file) as f:
data = json.load(f)
tasks = data.get("tasks", [])
# Filter to open/in_progress only
active = [t for t in tasks if t.get("status") in ("open", "in_progress")]
return active
except Exception: # noqa: BLE001 — deliberate: best-effort degrade (logged or continued); crash would be worse
return []
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def build_auto_context(message):
@@ -167,106 +155,7 @@ def build_auto_context(message):
def _build_auto_context_python(message):
"""Oracle body (kept as escape/oracle; see module header)."""
context = {
"timestamp": datetime.now(timezone.utc).isoformat(),
"message_preview": message[:200] if message else "",
"warm_neurons": None,
"memory_recall": None,
"always_digest": None,
"active_tasks": None,
}
# Warm neuron routing
warm = run_warm_router(message)
if warm:
context["warm_neurons"] = warm
# Active tasks from persistence ledger
tasks = load_active_tasks()
if tasks:
context["active_tasks"] = tasks
# Memory recall for substantive messages
if message and len(message.strip()) > 10:
# Extract key terms for recall (words > 4 chars, not stopwords)
stopwords = {
"what",
"when",
"where",
"which",
"that",
"this",
"with",
"from",
"have",
"been",
"were",
"they",
"their",
"about",
"would",
"could",
"should",
"will",
"into",
"your",
"just",
"like",
"know",
"think",
"also",
"back",
"then",
"than",
"more",
"some",
"only",
"very",
"does",
"done",
"make",
"made",
"want",
"need",
"give",
"tell",
"there",
"these",
"those",
"because",
"between",
"after",
"before",
"under",
"over",
"again",
"once",
"here",
"each",
"every",
"both",
"few",
"most",
"other",
"such",
"same",
"being",
"having",
}
words = [w for w in message.lower().split() if len(w) > 4 and w.isalpha() and w not in stopwords]
if words:
query = " ".join(words[:5])
recall = run_memory_recall(query)
if recall:
context["memory_recall"] = recall
# Always-on digest
digest = run_always_digest()
if digest:
context["always_digest"] = digest
return context
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def save_context(context):
+7 -125
View File
@@ -252,38 +252,7 @@ def get_cache(key):
def _get_cache_python(key):
"""Oracle body (kept as escape/oracle; see module header)."""
db = connect()
try:
row = db.execute("SELECT * FROM cache WHERE key=? AND invalidated_at IS NULL", (key,)).fetchone()
if row:
# Record hit in memory — no SQLite write on the hot path
# Capture pending count BEFORE recording (audit fix: prevents
# double-counting if flush_stats() runs between DB read and here)
_pending = _hit_counts.get(key, 0)
_record_hit(key)
return {
"hit": True,
"key": key,
"compressed": row["compressed_value"],
"full": row["full_value"],
"content_hash": row["content_hash"],
"scope": row["scope"],
"age_seconds": (_now_ts() - _parse_ts(row["created_at"])),
"hit_count": row["hit_count"] + _pending,
}
# Miss — only record if the key exists in the cache (e.g. invalidated).
# A true miss (key never seen) should not trigger any write.
exists = db.execute("SELECT 1 FROM cache WHERE key=?", (key,)).fetchone()
if exists:
_record_miss(key)
return {"hit": False, "key": key}
finally:
db.close()
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def put_cache(key, value, compressed=None, scope="general", source_hash=""):
@@ -314,37 +283,7 @@ def put_cache(key, value, compressed=None, scope="general", source_hash=""):
def _put_cache_python(key, value, compressed=None, scope="general", source_hash=""):
"""Oracle body (kept as escape/oracle; see module header)."""
# Flush any pending stats before writing so we don't lose counts
flush_stats()
db = connect()
content_hash = _hash(value)
# Mechanical compression if not provided
if compressed is None:
compressed = _compress(value)
db.execute(
"""
INSERT INTO cache
(key, scope, content_hash, full_value, compressed_value, source_hash,
created_at, invalidated_at, hit_count, miss_count)
VALUES (?, ?, ?, ?, ?, ?, ?, NULL, 0, 0)
ON CONFLICT(key) DO UPDATE SET
scope = excluded.scope,
content_hash = excluded.content_hash,
full_value = excluded.full_value,
compressed_value = excluded.compressed_value,
source_hash = excluded.source_hash,
created_at = excluded.created_at,
invalidated_at = NULL
""",
(key, scope, content_hash, value, compressed, source_hash, _now()),
)
db.commit()
db.close()
return {"stored": key, "content_hash": content_hash, "scope": scope}
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def invalidate(key, reason=""):
@@ -355,12 +294,7 @@ def invalidate(key, reason=""):
def _invalidate_python(key, reason=""):
"""Oracle body (kept as escape/oracle; see module header)."""
db = connect()
db.execute("UPDATE cache SET invalidated_at=? WHERE key=? AND invalidated_at IS NULL", (_now(), key))
db.commit()
db.close()
return {"invalidated": key, "reason": reason}
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def invalidate_scope(scope, reason=""):
@@ -373,14 +307,7 @@ def invalidate_scope(scope, reason=""):
def _invalidate_scope_python(scope, reason=""):
"""Oracle body (kept as escape/oracle; see module header)."""
db = connect()
count = db.execute(
"UPDATE cache SET invalidated_at=? WHERE scope=? AND invalidated_at IS NULL", (_now(), scope)
).rowcount
db.commit()
db.close()
return {"invalidated_scope": scope, "count": count, "reason": reason}
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def invalidate_all(reason=""):
@@ -391,12 +318,7 @@ def invalidate_all(reason=""):
def _invalidate_all_python(reason=""):
"""Oracle body (kept as escape/oracle; see module header)."""
db = connect()
count = db.execute("UPDATE cache SET invalidated_at=? WHERE invalidated_at IS NULL", (_now(),)).rowcount
db.commit()
db.close()
return {"invalidated_all": count, "reason": reason}
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def _compress(text):
@@ -470,33 +392,7 @@ def cache_stats():
def _cache_stats_python():
"""Oracle body (kept as escape/oracle; see module header)."""
# Flush pending counts first so stats are fully accurate
flush_stats()
db = connect()
total = db.execute("SELECT COUNT(*) FROM cache").fetchone()[0]
active = db.execute("SELECT COUNT(*) FROM cache WHERE invalidated_at IS NULL").fetchone()[0]
invalidated = total - active
hits = db.execute("SELECT SUM(hit_count) FROM cache").fetchone()[0] or 0
misses = db.execute("SELECT SUM(miss_count) FROM cache").fetchone()[0] or 0
scopes = {}
for row in db.execute(
"SELECT scope, COUNT(*) as cnt FROM cache WHERE invalidated_at IS NULL GROUP BY scope"
).fetchall():
scopes[row["scope"]] = row["cnt"]
db.close()
return {
"total": total,
"active": active,
"invalidated": invalidated,
"hits": hits,
"misses": misses,
"hit_rate": f"{hits / max(hits + misses, 1) * 100:.0f}%",
"scopes": scopes,
}
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def handle_hook(event, data=None):
@@ -516,21 +412,7 @@ def handle_hook(event, data=None):
def _handle_hook_python(event, data=None):
"""Oracle body (kept as escape/oracle; see module header)."""
if event in INVALIDATION_MAP:
scopes = INVALIDATION_MAP[event]
invalidated = 0
for scope in scopes:
result = invalidate_scope(scope, reason=f"event:{event}")
invalidated += result.get("count", 0)
return {
"status": "ok",
"event": event,
"handler": "cache",
"invalidated": invalidated,
"scopes": scopes,
}
return {"status": "ok", "event": event, "handler": "cache"}
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def main():
+1 -1
View File
@@ -233,7 +233,7 @@ def main() -> int:
)
check(
"Rune minor version advertises provisioning and restore verification",
'__version__ = "0.358.2"' in rune_version,
'__version__ = "0.359.0"' in rune_version,
failures,
)
# #169 policy update: auto-bump on merge is sanctioned (Nick directive:
+1 -44
View File
@@ -160,50 +160,7 @@ def _request_python(
backoff: float = 0.5,
sleep=None,
):
"""Resilient single-request path: retry where failure is NOISE, never
where failure is the SIGNAL.
- GET: retries on ``httpx.TransportError`` and 5xx (transient
infrastructure failure; idempotent).
- POST: retries ONLY on connect-phase errors (``ConnectError`` /
``ConnectTimeout``) — the request never reached the server, so a retry
cannot double-create. Read timeouts / write errors / 5xx on a POST are
NOT retried: the server may have processed it, and a duplicate issue is
worse than a failure the auto-filer can catch.
- 4xx: never retried — the client error IS the information. Raised via
``raise_for_status`` on the first attempt.
- Attempts: ``retries + 1`` total. Backoff ``backoff * 2**n`` before
retry n+1; never a sleep before the first attempt.
- ``timeout`` passes through to httpx per call. ``sleep`` is injectable
(tests pass a recording fake); default ``time.sleep``.
"""
sleeper = sleep if sleep is not None else time.sleep
sender = httpx.post if method.upper() == "POST" else httpx.get
connect_phase = (httpx.ConnectError, httpx.ConnectTimeout)
for attempt in range(retries + 1):
try:
r = sender(url, headers=headers, json=json, timeout=timeout)
except connect_phase:
if attempt < retries:
sleeper(backoff * 2**attempt)
continue
raise
except httpx.TransportError:
# Non-connect transport error (read/write): only safe to retry
# when the call is idempotent.
if method.upper() == "GET" and attempt < retries:
sleeper(backoff * 2**attempt)
continue
raise
if r.status_code >= 500 and method.upper() == "GET" and attempt < retries:
sleeper(backoff * 2**attempt)
continue
r.raise_for_status()
return r
# Unreachable: every attempt either returns a successful response or
# raises. The explicit raise keeps pyright from inferring an implicit
# ``None`` return for the exhausted loop (ratchet: warnings ≤ 454).
raise AssertionError("unreachable: _request always returns or raises")
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
@runtime_checkable
+8 -109
View File
@@ -185,55 +185,7 @@ class MessageQueue:
return self._detect_task_addition_python(message)
def _detect_task_addition_python(self, message: str) -> tuple[bool, float, List[str]]:
"""Oracle body (kept as escape/oracle; see module header)."""
signals = []
confidence = 0.0
message_lower = message.lower()
# Check for task addition patterns
for pattern in TASK_ADDITION_PATTERNS:
if re.search(pattern, message_lower):
signals.append(f"Pattern: {pattern}")
confidence += 0.3
# Check for imperative verbs
imperative_verbs = [
"add",
"update",
"fix",
"create",
"implement",
"build",
"make",
"change",
"remove",
"delete",
"refactor",
"migrate",
]
for verb in imperative_verbs:
if message_lower.startswith(verb):
signals.append(f"Imperative verb: {verb}")
confidence += 0.4
# Check for file references
file_refs = re.findall(r"\b\w+\.\w+\b", message)
if file_refs:
signals.append(f"File references: {', '.join(file_refs[:3])}")
confidence += 0.2
# Check for "also" at the start
if message_lower.startswith("also"):
signals.append("Starts with 'also'")
confidence += 0.5
# Cap confidence at 1.0
confidence = min(confidence, 1.0)
# Is it a task addition? (confidence > 0.5)
is_task_addition = confidence > 0.5
return is_task_addition, confidence, signals
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def add_message(self, message: str, channel: str, task_id: Optional[str] = None) -> QueuedMessage:
"""Add a message to the queue."""
@@ -254,24 +206,7 @@ class MessageQueue:
return self._add_message_python(message, channel, task_id)
def _add_message_python(self, message: str, channel: str, task_id: Optional[str] = None) -> QueuedMessage:
"""Oracle body (kept as escape/oracle; see module header)."""
is_task, confidence, signals = self.detect_task_addition(message)
msg_id = datetime.now(timezone.utc).strftime("%Y%m%d-%H%M%S-%f")
queued = QueuedMessage(
id=msg_id,
message=message,
timestamp=datetime.now(timezone.utc).isoformat(),
channel=channel,
task_id=task_id,
confidence=confidence,
signals=signals,
)
self.queue.append(queued)
self._save_queue()
return queued
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def get_pending(self) -> List[QueuedMessage]:
"""Get all pending messages."""
@@ -286,13 +221,7 @@ class MessageQueue:
return self._approve_python(msg_id)
def _approve_python(self, msg_id: str) -> bool:
"""Oracle body (kept as escape/oracle; see module header)."""
for msg in self.queue:
if msg.id == msg_id:
msg.status = "approved"
self._save_queue()
return True
return False
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def reject(self, msg_id: str) -> bool:
"""Reject a queued message."""
@@ -303,13 +232,7 @@ class MessageQueue:
return self._reject_python(msg_id)
def _reject_python(self, msg_id: str) -> bool:
"""Oracle body (kept as escape/oracle; see module header)."""
for msg in self.queue:
if msg.id == msg_id:
msg.status = "rejected"
self._save_queue()
return True
return False
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def approve_all(self) -> int:
"""Approve all pending messages."""
@@ -320,14 +243,7 @@ class MessageQueue:
return self._approve_all_python()
def _approve_all_python(self) -> int:
"""Oracle body (kept as escape/oracle; see module header)."""
count = 0
for msg in self.queue:
if msg.status == "pending":
msg.status = "approved"
count += 1
self._save_queue()
return count
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def clear(self):
"""Clear all messages."""
@@ -338,9 +254,7 @@ class MessageQueue:
return self._clear_python()
def _clear_python(self):
"""Oracle body (kept as escape/oracle; see module header)."""
self.queue = []
self._save_queue()
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def get_approved(self) -> List[QueuedMessage]:
"""Get all approved messages."""
@@ -355,13 +269,7 @@ class MessageQueue:
return self._mark_executed_python(msg_id)
def _mark_executed_python(self, msg_id: str) -> bool:
"""Oracle body (kept as escape/oracle; see module header)."""
for msg in self.queue:
if msg.id == msg_id:
msg.status = "executed"
self._save_queue()
return True
return False
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def get_status(self) -> Dict[str, Any]:
"""Get queue status."""
@@ -370,16 +278,7 @@ class MessageQueue:
return self._get_status_python()
def _get_status_python(self) -> Dict[str, Any]:
"""Oracle body (kept as escape/oracle; see module header)."""
pending = len([m for m in self.queue if m.status == "pending"])
approved = len([m for m in self.queue if m.status == "approved"])
executed = len([m for m in self.queue if m.status == "executed"])
return {
"total": len(self.queue),
"pending": pending,
"approved": approved,
"executed": executed,
}
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
# ═══════════════════════════════════════════════════════════════════════════════
+1 -29
View File
@@ -485,35 +485,7 @@ def reconcile_tools_support(model: str, provider_reported: bool) -> tuple[bool,
def _reconcile_tools_support_python(model: str, provider_reported: bool) -> tuple[bool, str | None]:
"""Reconcile a provider-reported tool-support claim against the floor.
R2 I-R2-022 truth_drift; spec tools-providers-devices "Capability
drift": a provider report contradicting CAPABILITY_FLOOR must
surface as unverified and never silently flip eligibility. The
report governs only its own consumption seam (the local runtime's
native-vs-text wire mode — a live advertisement is real inventory);
selection eligibility stays with ``ModelRouter.rank()``, whose floor
gates unmeasured candidates and is overridden only by measured
success. Without this reconciliation the runtime's trust in the
advertisement was blind — the contradiction was believed silently.
Returns ``(effective_supports_tools, drift_marker)``; the marker is
``None`` when the claims agree or the model is not floor-listed
(nothing to reconcile — no floor verdict is invented).
"""
for floor_model, _provider, _tier, floor_tools, _window, _cost in CAPABILITY_FLOOR:
if floor_model == model:
if bool(floor_tools) != bool(provider_reported):
return (
bool(provider_reported),
"unverified: provider reports supports_tools="
f"{bool(provider_reported)} for model {model!r} "
"contradicting CAPABILITY_FLOOR supports_tools="
f"{bool(floor_tools)}; floor still gates router "
"eligibility for unmeasured candidates",
)
return bool(floor_tools), None
return bool(provider_reported), None
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
#: Measured precedence needs at least this many family samples before a
#: candidate may outrank the capability floor ordering (quality I-5).
+5 -135
View File
@@ -136,50 +136,7 @@ class OpenAICompatTransport:
@staticmethod
def _to_openai_messages_python(messages: list[dict]) -> list[dict]:
"""Oracle body (kept as escape/oracle; see module header)."""
out: list[dict] = []
i = 0
while i < len(messages):
m = messages[i]
role = m.get("role")
tool_calls = m.get("tool_calls") or []
if role == "assistant" and tool_calls:
# Look ahead: pair each tool_call with the tool messages that
# immediately follow, reusing their tool_call_ids.
paired_ids = [
messages[j].get("tool_call_id")
for j in range(i + 1, len(messages))
if messages[j].get("role") == "tool"
][: len(tool_calls)]
tc = []
for k, c in enumerate(tool_calls):
fn = c.get("function", {})
args = fn.get("arguments", {})
args_str = json.dumps(args) if isinstance(args, dict) else str(args)
call_id = paired_ids[k] if k < len(paired_ids) else f"call_{i}_{k}"
tc.append(
{
"id": call_id or f"call_{i}_{k}",
"type": "function",
"function": {"name": fn.get("name"), "arguments": args_str},
}
)
out.append({"role": "assistant", "content": m.get("content") or None, "tool_calls": tc})
i += 1
continue
if role == "tool":
out.append(
{
"role": "tool",
"tool_call_id": m.get("tool_call_id") or f"call_{i}",
"content": m.get("content", ""),
}
)
i += 1
continue
out.append({"role": role, "content": m.get("content", "")})
i += 1
return out
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
@staticmethod
def _from_openai_response(resp: dict) -> dict:
@@ -197,31 +154,7 @@ class OpenAICompatTransport:
@staticmethod
def _from_openai_response_python(resp: dict) -> dict:
"""Oracle body (kept as escape/oracle; see module header)."""
choices = resp.get("choices") or [{}]
message = choices[0].get("message", {}) or {}
tool_calls = []
for c in message.get("tool_calls") or []:
fn = c.get("function", {}) or {}
args = fn.get("arguments", {})
if isinstance(args, str):
try:
args = json.loads(args)
except json.JSONDecodeError:
args = {"_raw": args}
entry = {"function": {"name": fn.get("name"), "arguments": args or {}}}
if c.get("id"):
entry["id"] = c["id"]
tool_calls.append(entry)
out: dict = {"role": "assistant", "content": message.get("content") or ""}
# DeepSeek-style providers return reasoning in reasoning_content;
# the Ollama-shaped contract the runtime consumes names it thinking.
reasoning = message.get("reasoning_content")
if isinstance(reasoning, str) and reasoning:
out["thinking"] = reasoning
if tool_calls:
out["tool_calls"] = tool_calls
return out
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
# -- ChatTransport protocol -------------------------------------------
@@ -278,27 +211,7 @@ class OpenAICompatTransport:
# The runtime passes the qualified name ('<Provider>/<model>'); the
# provider API wants the bare model id ('glm-5.3-flash'). Observed
# live: qualified name → 400 on every call (PL1 held-out attempt).
wire_model = model.split("/", 1)[-1] if "/" in model else model
payload: dict = {
"model": wire_model,
"messages": self._to_openai_messages(messages),
"stream": False,
}
if tools:
payload["tools"] = tools # Ollama tool schema == OpenAI tool schema
if options:
for k in ("temperature", "top_p", "max_tokens"):
if k in options:
payload[k] = options[k]
started = time.monotonic()
resp = self._post("/chat/completions", payload)
elapsed_ns = int((time.monotonic() - started) * 1e9)
usage = resp.get("usage", {}) or {}
self.usage_calls += 1
self.usage_prompt_tokens += int(usage.get("prompt_tokens") or 0)
self.usage_output_tokens += int(usage.get("completion_tokens") or 0)
self.usage_total_duration_ns += elapsed_ns
return self._from_openai_response(resp)
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def supports_tools(self, model: str) -> bool:
return True
@@ -329,9 +242,7 @@ def is_cloud_pinned(model: str) -> bool:
def _is_cloud_pinned_python(model: str) -> bool:
"""Oracle body (kept as escape/oracle; see module header)."""
prefix = model.split("/", 1)[0].strip().lower() if "/" in model else ""
return bool(prefix) and prefix not in ("ollama", "local", "hf.co", "huggingface.co")
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def cloud_transport_for(model: str, timeout: float = 120) -> OpenAICompatTransport:
@@ -353,45 +264,4 @@ def cloud_transport_for(model: str, timeout: float = 120) -> OpenAICompatTranspo
def _cloud_transport_for_python(model: str, timeout: float = 120) -> OpenAICompatTransport:
"""Oracle body (kept as escape/oracle; see module header)."""
import os
import re
from pathlib import Path
if "/" not in model:
raise ValueError(f"cloud model must be '<Provider>/<model>': {model!r}")
provider_name, short_model = model.split("/", 1)
base_url = api_key = None
context_window = 131072
cfg_path = Path(os.path.expanduser("~/.config/mimocode/mimocode.jsonc"))
if cfg_path.is_file():
text = cfg_path.read_text()
m = re.search(rf'"{re.escape(provider_name)}"\s*:\s*\{{', text)
if m:
block = text[m.start() : m.start() + 2000]
bm = re.search(r'"baseURL":\s*"([^"]+)"', block)
if bm:
base_url = bm.group(1)
wm = re.search(rf'"{re.escape(short_model)}"\s*:\s*\{{[^}}]*?"context_window"\s*:\s*(\d+)', block)
if wm:
context_window = int(wm.group(1))
if not base_url:
raise ValueError(f"no baseURL configured for provider {provider_name!r}")
key = os.environ.get(f"{provider_name.upper().replace(' ', '_')}_API_KEY", "")
if not key:
auth_path = Path(os.path.expanduser("~/.local/share/mimocode/auth.json"))
if auth_path.is_file():
auth = json.loads(auth_path.read_text())
key = (auth.get(provider_name) or {}).get("key", "")
if not key:
raise ValueError(f"no API key for provider {provider_name!r}")
# Cloud routers queue and batch — a tool-loop turn can legitimately exceed
# the local-model timeout (observed live: glm-5.3-flash read-timeout at
# 120s twice). Floor cloud transports at 300s; local keeps its own.
return OpenAICompatTransport(
base_url,
key,
provider_name,
timeout=max(timeout, 300),
context_window=context_window,
)
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
+6 -17
View File
@@ -80,9 +80,7 @@ def repo_root() -> str:
def _repo_root_python() -> str:
"""Oracle body (kept as escape/oracle; see module header)."""
"""The rune repository root (derived from this file's location)."""
return REPO_ROOT
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def crate_dir(name: str) -> str:
@@ -93,8 +91,7 @@ def crate_dir(name: str) -> str:
def _crate_dir_python(name: str) -> str:
"""Oracle body (kept as escape/oracle; see module header)."""
return os.path.join(REPO_ROOT, "src", "rust", name)
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def deploy_root() -> str:
@@ -105,9 +102,7 @@ def deploy_root() -> str:
def _deploy_root_python() -> str:
"""Oracle body (kept as escape/oracle; see module header)."""
"""The deployed tree root (env override, workdrive default)."""
return os.environ.get("RUNE_DEPLOY_ROOT", "/mnt/workdrive/rune-code")
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def rune_home() -> str:
@@ -118,9 +113,7 @@ def rune_home() -> str:
def _rune_home_python() -> str:
"""Oracle body (kept as escape/oracle; see module header)."""
"""The operator home (env override, ~/.rune default)."""
return os.environ.get("RUNE_HOME", os.path.expanduser("~/.rune"))
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def harness_scripts() -> str:
@@ -131,9 +124,7 @@ def harness_scripts() -> str:
def _harness_scripts_python() -> str:
"""Oracle body (kept as escape/oracle; see module header)."""
"""Harness scripts dir (env HARNESS_SCRIPTS override)."""
return os.environ.get("HARNESS_SCRIPTS", "/home/nick/.config/opencode/scripts")
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
def wait_resume_dir() -> str:
@@ -144,6 +135,4 @@ def wait_resume_dir() -> str:
def _wait_resume_dir_python() -> str:
"""Oracle body (kept as escape/oracle; see module header)."""
"""The wait-resume bridge dir (env RUNE_WR_CODE override)."""
return os.environ.get("RUNE_WR_CODE", "/home/nick/.local/share/mimo-wait-resume")
raise RuntimeError("escape hatch retired for this row - the Go engine is the authority")
+2 -2
View File
@@ -8,7 +8,7 @@ mode system, subject header, shared memory and identity.
This is not an interface. This is how I see, speak, and interact with the world.
Version: v0.358.2
Version: v0.359.0
Features: 41 (24 original + 17 new native commands)
Usage:
@@ -2047,7 +2047,7 @@ class RuneApp(App):
# Show version info
self.chat_channel.add_message(
"system",
f"[dim]Rune v0.358.2 | Textual TUI | {len(loaded)} native modules[/dim]",
f"[dim]Rune v0.359.0 | Textual TUI | {len(loaded)} native modules[/dim]",
)
# Auto-show night mode suggestion if evening/night hours
@@ -0,0 +1,124 @@
{
"checkpoints": [],
"evidence_refs": [
"contract-created:ADMIT-2026-10-25T16:08:36Z-40e9a2-wave-rebase-proof"
],
"ext": {
"activation": {
"activated": true,
"builder": "wave-rebase-proof",
"evidence": [
"affected surface known: ['research/rebase-proof/verdict-2026-10-24.json', 'research/rebase-proof/verdict-2026-10-24.md']",
"insufficient lexical evidence either way"
],
"lifecycle": "proportional",
"mode": "EXISTING_PROJECT_CHANGE",
"note": "attached to existing project authority; Need/completeness/patterns/contract flow governs proportionally",
"project_authority": "rune_internal",
"target_project": "rune"
},
"affected_paths": [
"research/rebase-proof/inventory.md",
"research/rebase-proof/verdict-2026-10-24.md",
"scripts/admit_wave_rebase_proof.py",
"tests/test_rebase_proof_no_oracle.py"
],
"affected_regions": [],
"affected_ui_surfaces": [],
"expected_runtime_effects": [],
"scope_provenance": {
"caller_added": [],
"generated_from_affected_surface": [
"research/rebase-proof/inventory.json",
"research/rebase-proof/inventory.md",
"research/rebase-proof/verdict-2026-10-24.json",
"research/rebase-proof/verdict-2026-10-24.md",
"scripts/admit_wave_rebase_proof.py",
"tests/test_rebase_proof_no_oracle.py"
]
},
"task_ref": "",
"unresolved_surfaces": [
{
"kind": "source_path",
"reason": "no authority records this path as an entity (path remains file-scope only)",
"surface": "research/rebase-proof/inventory.md"
},
{
"kind": "source_path",
"reason": "no authority records this path as an entity (path remains file-scope only)",
"surface": "research/rebase-proof/verdict-2026-10-24.md"
},
{
"kind": "source_path",
"reason": "no authority records this path as an entity (path remains file-scope only)",
"surface": "scripts/admit_wave_rebase_proof.py"
},
{
"kind": "source_path",
"reason": "no authority records this path as an entity (path remains file-scope only)",
"surface": "tests/test_rebase_proof_no_oracle.py"
},
{
"kind": "workflow_config",
"reason": "kind workflow_config has no deterministic resolver",
"surface": "research/rebase-proof/inventory.json"
},
{
"kind": "workflow_config",
"reason": "kind workflow_config has no deterministic resolver",
"surface": "research/rebase-proof/verdict-2026-10-24.json"
}
],
"workflow_config_surfaces": [
"research/rebase-proof/inventory.json",
"research/rebase-proof/verdict-2026-10-24.json"
]
},
"id": "contract:ADMIT-2026-10-25T16:08:36Z-40e9a2-wave-rebase-proof",
"identities": {
"acceptance": [
"bounded repair verified: close the wave-2586 REBASE-PROOF gate: prove the rebase has EARNED wired-in per facade row (serving-path trace via live "
],
"affected_entities": [],
"expected_consumers": [],
"expected_new_entities": [
"test:rebase_proof_no_oracle"
],
"gap_evidence": "insufficient lexical evidence either way; affected surface known: ['research/rebase-proof/verdict-2026-10-24.json', 'research/rebase-proof/verdict-2026-10-24.md']",
"migration_obligations": [],
"need": "close the wave-2586 REBASE-PROOF gate: prove the rebase has EARNED wired-in per facade row (serving-path trace via live core journal + witness boot chain + real 27B turn, fail-loud RUNE_*_BIN probes, parity-at-load batteries in the proof session, no-oracle grep + test), land the verdict table research/rebase-proof/verdict-2026-10-24.{json,md}, land the three-way wiring inventory (296 modules: go-delegated / rust-kernel-wired / pure-python split load-bearing vs tooling vs dead) research/rebase-proof/inventory.{json,md}, and scope \u2014 not land \u2014 the repairs for the failing rows (trust-and-sovereignty fuzz parity, forge_client truth drift, openai_compat_transport live chat row, message_queue missing battery, fsops harness refusal)",
"next_action": "review for approval",
"non_goals": [],
"origin": "worker",
"regression_obligations": [],
"requirement": "headless admission (classified: EXISTING_PROJECT_CHANGE)",
"research_refs": [
"memory/journal/events.jsonl",
"research/rebase-proof/inventory.json",
"research/rebase-proof/verdict-2026-10-24.json",
"research/witness-run/witness-2026-10-24.json",
"tests/test_rebase_proof_no_oracle.py"
],
"resolution": "",
"rollback_ref": "git revert",
"scope": [
"research/rebase-proof/inventory.json",
"research/rebase-proof/inventory.md",
"research/rebase-proof/verdict-2026-10-24.json",
"research/rebase-proof/verdict-2026-10-24.md",
"scripts/admit_wave_rebase_proof.py",
"tests/test_rebase_proof_no_oracle.py"
],
"toolchain": {},
"verification_obligations": [
"pytest tests/test_rebase_proof_no_oracle.py"
]
},
"kind": "construction_contract",
"maturity": "DECLARED",
"observed_at": "2026-10-25T16:08:38Z",
"phase": "draft",
"status": "open",
"tags": []
}
@@ -0,0 +1,149 @@
{
"checkpoints": [
{
"at": "2026-10-25T21:38:44Z",
"evidence": "predicted-frontier",
"note": "{\"level0_direct\": [], \"level1_obligations\": [], \"contracts\": [], \"level2_verification\": []}",
"phase": "draft"
},
{
"at": "2026-10-25T21:39:05Z",
"evidence": "user:D57 owner ruling (runtime awareness + dominion on tool calls; Gitea #2590/#2591)",
"note": "",
"phase": "approved"
},
{
"at": "2026-10-25T21:39:24Z",
"evidence": "builder:wave-d57-runtime-dominion",
"note": "",
"phase": "building"
}
],
"evidence_refs": [
"contract-created:ADMIT-wave-d57-runtime-dominion"
],
"ext": {
"activation": {
"activated": true,
"builder": "wave-d57-runtime-dominion",
"evidence": [
"affected surface known: ['src/go/rune-core/', 'scripts/ensure_core.py']",
"change scoped to an existing project/target",
"target project: rune"
],
"lifecycle": "proportional",
"mode": "EXISTING_PROJECT_CHANGE",
"note": "attached to existing project authority; Need/completeness/patterns/contract flow governs proportionally",
"project_authority": "rune_internal",
"target_project": "rune"
},
"affected_paths": [
"scripts/admit_wave_d57_runtime_dominion.py",
"scripts/build_paired.sh",
"scripts/ensure_core.py",
"src/go/rune-core/"
],
"affected_regions": [],
"affected_ui_surfaces": [],
"expected_runtime_effects": [
"Rune boots KNOWING her filesystem context; /v1/status serves it (runtime_env) alongside the model-authority facts",
"a false model capability claim is corrected on the wire and journaled \u2014 the owner never receives 'I lack access' as truth while the suite rides the wire",
"no gate exists between chat-pane tool calls and the filesystem ops on this build (dominion)",
"the tool-executor is actually deployed \u2014 shell-out paths resolve instead of failing"
],
"predicted_frontier": {
"change_kind": "implementation_change",
"contextual_not_obligations": [],
"contracts": [],
"level0_direct": [],
"level1_obligations": [],
"level2_verification": [],
"max_level": 2,
"traversal_scope": "spine-structural-only"
},
"scope_provenance": {
"caller_added": [],
"generated_from_affected_surface": [
"scripts/admit_wave_d57_runtime_dominion.py",
"scripts/build_paired.sh",
"scripts/ensure_core.py",
"src/go/rune-core/"
]
},
"task_ref": "wave-d57-runtime-dominion",
"unresolved_surfaces": [
{
"kind": "source_path",
"reason": "no authority records this path as an entity (path remains file-scope only)",
"surface": "scripts/admit_wave_d57_runtime_dominion.py"
},
{
"kind": "source_path",
"reason": "no authority records this path as an entity (path remains file-scope only)",
"surface": "scripts/build_paired.sh"
},
{
"kind": "source_path",
"reason": "no authority records this path as an entity (path remains file-scope only)",
"surface": "scripts/ensure_core.py"
},
{
"kind": "source_path",
"reason": "no authority records this path as an entity (path remains file-scope only)",
"surface": "src/go/rune-core/"
}
],
"workflow_config_surfaces": []
},
"id": "contract:ADMIT-wave-d57-runtime-dominion",
"identities": {
"acceptance": [
"bounded repair verified: Build the owner's D57 runtime-dominion doctrine (Gitea #2590 as amended by #2591, the owner's top priority): (1) a boot-"
],
"affected_entities": [],
"expected_consumers": [],
"expected_new_entities": [
"scripts/ensure_core.py + scripts/build_paired.sh: tool-executor deployment to ~/.local/share/rune/bin",
"server.go /v1/status: runtime_env + model_authority sections",
"src/go/rune-core/internal/runecore/engine_refusal.go (the engine hook: correction retry, the typed capability.refusal_correction journal event, the session counters behind AuthoritySnapshot)",
"src/go/rune-core/internal/runecore/refusal.go (the deterministic literal-phrase refusal classifier with false_capability_claim / true_refusal / genuine_limit verdicts and the composed correction turn)",
"src/go/rune-core/internal/runecore/runtimeenv.go (the boot-time probe: OS family, home, separators, temp dir, case sensitivity, writability, executor resolution \u2014 cached, awareness never gating) + ResolveToolExecutorPath as the ONE door to the deployed binary",
"tests: the refusal fixture battery (true-refusal vs false-capability-claim vs genuine-limit), the runtime-env probes, and the D57 dominion check (no gate between chat and the filesystem ops)"
],
"gap_evidence": "change scoped to an existing project/target; target project: rune; affected surface known: ['src/go/rune-core/', 'scripts/ensure_core.py']",
"migration_obligations": [],
"need": "Build the owner's D57 runtime-dominion doctrine (Gitea #2590 as amended by #2591, the owner's top priority): (1) a boot-time runtime environment layer in rune-core probing the filesystem context (OS family, os.UserHomeDir, path separators, temp dir, case sensitivity, writability) and serving it on /v1/status as runtime_env \u2014 awareness, never gating; generalize expandHome past its POSIX-only assumption; (2) deploy the tool-executor binary to ~/.local/share/rune/bin alongside rune-core+rune-tui via ensure_core.py and build_paired.sh, with shell-out paths resolving the deployed location through ResolveToolExecutorPath; (3) a model-refusal authority: a deterministic literal-phrase classifier over assistant replies (no clever NLP) detecting the I-cannot/I-lack-access/I-have-no-tools class, verified against the runtime's ACTUAL capability state; a false claim composes a correction turn naming the real suite, retries once, journals a capability.refusal_correction event, and never reaches the owner as truth; (4) /v1/status gains model_authority (suite on wire, gates open, refusals seen, corrections issued); (5) a dominion check test asserting NO gate exists between chat-pane tool calls and the filesystem ops on this build \u2014 consent is promotion, not permission",
"next_action": "complete implementation, then verify",
"non_goals": [],
"origin": "worker",
"regression_obligations": [],
"requirement": "headless admission (classified: EXISTING_PROJECT_CHANGE)",
"research_refs": [
"D49 verdict: model claims of 'I lack tool access' are FALSE on this build \u2014 the wire provably carries the suite",
"Gitea issues #2590 and #2591 (amendments; doctrine final)",
"owner ruling D57 (verbatim in the wave brief): runtime awareness of the user's filesystem + dominion on tool call usage (full read/write on the owner build, sandboxed permissions deferred to a production version)",
"scripts/admit_wave_d49_capability_everywhere.py (the admission pattern)",
"src/go/rune-core/internal/runecore/tools.go (executeGoTool \u2014 the cross-platform Go-native suite; D49 proved the full suite rides the wire)"
],
"resolution": "",
"rollback_ref": "git revert",
"scope": [
"scripts/admit_wave_d57_runtime_dominion.py",
"scripts/build_paired.sh",
"scripts/ensure_core.py",
"src/go/rune-core/"
],
"toolchain": {},
"verification_obligations": [
"commit(s) name this contract; pre-commit staged gate green via this open contract",
"go test -race -short green for the whole rune-core module; go vet + gofmt clean",
"red-first evidence: the fixture battery and the dominion check pin behavior the pre-wave tree did not serve (no runtime_env/model_authority sections, no classifier, no deployed executor resolution)"
]
},
"kind": "construction_contract",
"maturity": "DECLARED",
"observed_at": "2026-10-25T21:39:24Z",
"phase": "building",
"status": "open",
"tags": []
}
@@ -7434,3 +7434,5 @@
{"builder": "release-reporting", "detail": "ADMIT-release-reporting \u2192 building", "kind": "builder_session", "mode": "external_project", "observed_at": "2026-10-24T11:27:06Z", "operation": "transition"}
{"builder": "release-reporting", "detail": "ADMIT-release-reporting \u2192 approved", "kind": "builder_session", "mode": "external_project", "observed_at": "2026-10-24T11:43:26Z", "operation": "transition"}
{"builder": "release-reporting", "detail": "ADMIT-release-reporting \u2192 building", "kind": "builder_session", "mode": "external_project", "observed_at": "2026-10-24T11:43:52Z", "operation": "transition"}
{"builder": "wave-d57-runtime-dominion", "detail": "ADMIT-wave-d57-runtime-dominion \u2192 approved", "kind": "builder_session", "mode": "external_project", "observed_at": "2026-10-25T21:39:05Z", "operation": "transition"}
{"builder": "wave-d57-runtime-dominion", "detail": "ADMIT-wave-d57-runtime-dominion \u2192 building", "kind": "builder_session", "mode": "external_project", "observed_at": "2026-10-25T21:39:24Z", "operation": "transition"}
+10 -16
View File
@@ -35,15 +35,11 @@ def mem_dir(tmp_path, monkeypatch):
def test_build_auto_context_go_vs_oracle(mem_dir):
got = ac_mod.build_auto_context("hello world")
oracle = ac_mod._build_auto_context_python("hello world")
assert got.pop("timestamp") == oracle.pop("timestamp") or True
got.pop("timestamp", None)
oracle.pop("timestamp", None)
assert got == oracle
assert got["message_preview"] == "hello world"
assert got["active_tasks"] == [{"name": "t1", "status": "open"}, {"name": "t2", "status": "in_progress"}]
# warm-router subprocess runs identically on both engines (same script)
assert got["warm_neurons"] == oracle["warm_neurons"]
with pytest.raises(RuntimeError, match="escape hatch retired"):
ac_mod._build_auto_context_python("hello world")
def test_build_auto_context_preview_truncated(mem_dir):
@@ -54,10 +50,8 @@ def test_build_auto_context_preview_truncated(mem_dir):
def test_build_auto_context_empty_message(mem_dir):
got = ac_mod.build_auto_context("")
oracle = ac_mod._build_auto_context_python("")
got.pop("timestamp", None)
oracle.pop("timestamp", None)
assert got == oracle
assert got["message_preview"] == ""
# -- load_active_tasks ---------------------------------------------------------
@@ -65,26 +59,26 @@ def test_build_auto_context_empty_message(mem_dir):
def test_load_active_tasks_go_vs_oracle(mem_dir):
got = ac_mod.load_active_tasks()
oracle = ac_mod._load_active_tasks_python()
assert got == oracle
assert [t["name"] for t in got] == ["t1", "t2"]
with pytest.raises(RuntimeError, match="escape hatch retired"):
ac_mod._load_active_tasks_python()
def test_load_active_tasks_missing_file(mem_dir):
os.remove(os.path.join(mem_dir, "tasks", "persisted.json"))
assert ac_mod.load_active_tasks() == []
assert ac_mod._load_active_tasks_python() == []
with pytest.raises(RuntimeError, match="escape hatch retired"):
ac_mod._load_active_tasks_python()
# -- facade contract --------------------------------------------------------------
def test_engine_disabled_uses_oracle(mem_dir):
def test_engine_disabled_refuses(mem_dir):
os.environ["RUNE_AUTO_CONTEXT_ENGINE"] = "python"
try:
assert ac_mod.load_active_tasks() == ac_mod.load_active_tasks()
tasks = ac_mod.load_active_tasks()
assert [t["name"] for t in tasks] == ["t1", "t2"]
with pytest.raises(RuntimeError, match="escape hatch retired"):
ac_mod.load_active_tasks()
finally:
os.environ.pop("RUNE_AUTO_CONTEXT_ENGINE", None)
+24 -140
View File
@@ -1,21 +1,13 @@
"""Cache oracle battery — dichotomy wave gap closure (#2479).
"""Cache escape-hatch battery — REMOVAL-PREP (#2598 item 2).
The Go core (src/go/cache) ports the eleven audit-named missing fns
1:1; this battery pins the PYTHON ORACLE itself (sandboxed memory dir,
frozen clock, monkeypatched monotonic — no real filesystem writes
outside the sandbox) and cross-checks the committed frozen truth
byte-identically against the live oracle (delegation-live law). Both
pins run green: RUNE_CACHE_CORE=python and unset (cache has no core
seam — the pin documents the freeze convention either way).
The Go core (src/go/cache) is the authority. The Python oracle bodies in
src/rune/cache.py are MINIFIED: they keep their signatures but raise the
retirement RuntimeError. This battery pins the refusal shape; the Go
surface is pinned in test_cache_go_parity.py.
"""
import importlib
import json
import os
import sqlite3
import subprocess
import sys
import tempfile
from pathlib import Path
import pytest
@@ -23,141 +15,33 @@ import pytest
ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(ROOT / "src"))
FROZEN = ROOT / "src/go/cache/frozen_truth.json"
FROZEN_NOW = "2026-10-13T12:00:00+00:00"
@pytest.fixture()
def oracle(monkeypatch, tmp_path):
"""A freshly-imported rune.cache against a throwaway DB with a
frozen clock (module globals reset — import-time DB_PATH derived
from the sandbox)."""
monkeypatch.setenv("RUNE_MEMORY_DIR", str(tmp_path))
monkeypatch.setenv("RUNE_FROZEN_NOW", FROZEN_NOW)
import rune.cache as cache_mod
mod = importlib.reload(cache_mod)
return mod
def db_hit_miss(mod, key):
db = sqlite3.connect(mod.DB_PATH)
try:
row = db.execute("SELECT hit_count, miss_count FROM cache WHERE key=?", (key,)).fetchone()
return row
finally:
db.close()
@pytest.mark.parametrize(
"call",
[
lambda m: m._get_cache_python("k"),
lambda m: m._put_cache_python("k", "v"),
lambda m: m._invalidate_python("k"),
lambda m: m._invalidate_scope_python("s"),
lambda m: m._invalidate_all_python(),
lambda m: m._cache_stats_python(),
lambda m: m._handle_hook_python("memory.write", {"key": "k"}),
],
)
def test_oracle_bodies_refuse(oracle, call):
with pytest.raises(RuntimeError, match="escape hatch retired"):
call(oracle)
def test_frozen_truth_replay(oracle):
"""The committed truth replays against the live oracle: same case
sequence, same sandbox conditions, identical expected values."""
doc = json.loads(FROZEN.read_text())
assert doc["frozen_now"] == FROZEN_NOW
cases = []
for c in doc["cases"]:
cases.append({"fn": c["fn"], "args": c["args"], "kwargs": c.get("kwargs", {})})
sys.path.insert(0, str(ROOT / "scripts"))
from freeze_truth import freeze as _freeze
fresh = _freeze("rune.cache", cases, oracle_module="rune.cache")
assert len(fresh) == len(doc["cases"])
for frozen, live in zip(doc["cases"], fresh):
assert frozen["expected"] == live["expected"], f"divergence at {frozen['fn']}"
assert json.loads(json.dumps(fresh)) == json.loads(json.dumps(doc["cases"]))
def test_pending_hit_visibility(oracle):
"""The double-get audit fix: the pending in-memory count is visible
to the NEXT get before any flush (row + pending invariant)."""
oracle.put_cache("k", "value")
first = oracle.get_cache("k")
second = oracle.get_cache("k")
assert first["hit_count"] == 0
assert second["hit_count"] == 1
def test_true_miss_writes_nothing(oracle):
"""A key never seen records no miss (no write-on-read for ghosts)."""
result = oracle.get_cache("ghost")
assert result == {"hit": False, "key": "ghost"}
assert oracle._miss_counts == {}
def test_invalidated_miss_records(oracle):
oracle.put_cache("k", "v")
oracle.invalidate("k")
assert oracle.get_cache("k") == {"hit": False, "key": "k"}
assert oracle._miss_counts.get("k") == 1
def test_flush_threshold(oracle):
"""_FLUSH_THRESHOLD=50: no DB write before the 50th event, all
pending counts land on it."""
oracle.put_cache("k", "v")
for _ in range(oracle._FLUSH_THRESHOLD - 1):
oracle.get_cache("k")
assert db_hit_miss(oracle, "k")[0] == 0
oracle.get_cache("k") # the 50th event
assert db_hit_miss(oracle, "k")[0] == oracle._FLUSH_THRESHOLD
def test_flush_interval(oracle, monkeypatch):
"""_FLUSH_INTERVAL=30s: a monotonic jump past the interval flushes
on the next record (the branch the frozen truth cannot idle for)."""
real_monotonic = oracle.time.monotonic
t = {"now": real_monotonic()}
monkeypatch.setattr(oracle.time, "monotonic", lambda: t["now"])
oracle.put_cache("k", "v")
oracle.get_cache("k")
assert db_hit_miss(oracle, "k")[0] == 0
t["now"] += oracle._FLUSH_INTERVAL + 0.5
oracle.get_cache("k")
assert db_hit_miss(oracle, "k")[0] == 2
def test_upsert_preserves_counts(oracle):
oracle.put_cache("k", "v1")
oracle.get_cache("k")
oracle.get_cache("k")
oracle.cache_stats() # flush -> DB hit_count 2
oracle.put_cache("k", "v2") # upsert must NOT reset stats
assert db_hit_miss(oracle, "k")[0] == 2
assert oracle.get_cache("k")["hit_count"] == 2
def test_hit_rate_half_even():
"""f'{x:.0f}%' ties round half-to-even (quirk #3 family); the Go
port's %.0f must agree (pinned in cache_test.go)."""
assert f"{12.5:.0f}" == "12"
assert f"{13.5:.0f}" == "14"
def test_invalidation_map_scopes(oracle):
result = oracle.handle_hook("memory.created", {})
assert result["scopes"] == ["retrieval", "warm_digest"]
assert oracle.handle_hook("nothing.here", None) == {
"status": "ok", "event": "nothing.here", "handler": "cache"}
def test_plugin_manifest(oracle):
assert oracle.PLUGIN["name"] == "cache"
assert oracle.PLUGIN["hooks"] == {
"on_session_end": "handle_hook", "on_memory_add": "handle_hook"}
assert oracle.PLUGIN["auto_activate"] is True
def test_cli_usage_bytes(tmp_path):
"""The oracle CLI usage gates print exactly these bytes."""
env = dict(os.environ, RUNE_MEMORY_DIR=str(tmp_path),
PYTHONPATH=str(ROOT / "src"))
r = subprocess.run([sys.executable, "-m", "rune.cache", "get"],
capture_output=True, text=True, cwd=ROOT, env=env)
assert r.returncode == 0
assert r.stdout == "usage: cache.py get <key>\n"
def test_compress_and_hash(oracle):
text = "# comment\n====\nkeep this substantive line\n(_source_: cite)\nab\n"
compressed = oracle._compress(text)
assert compressed == "keep this substantive line"
assert oracle._hash("hello") == __import__("hashlib").sha256(b"hello").hexdigest()[:16]
def test_frozen_truth_document_remains():
doc = ROOT / "src/go/cache/frozen_truth.json"
assert doc.exists(), "frozen truth evidence stays in the tree"
+49 -72
View File
@@ -1,12 +1,13 @@
"""REBASE-COMPLETION (#2587) parity battery — cache.
"""REMOVAL-PREP (#2598 item 2) parity battery — cache.
Red-first discipline: pins the Go engine's eval surface (get_cache,
put_cache, invalidate, invalidate_scope, invalidate_all, cache_stats,
handle_hook) against the Python oracle bodies on the SAME cache.db. A
mutation of an oracle body must flip the battery. Also pins the facade
contract: fail-loud RuntimeError on a missing binary; RUNE_CACHE_ENGINE
=python escape; cross-engine coherence (engine-written rows are
oracle-readable and vice versa).
The Go engine (src/go/cache) is the authority: get_cache, put_cache,
invalidate, invalidate_scope, invalidate_all, cache_stats, handle_hook.
The Python oracle bodies are MINIFIED — each keeps its signature but
raises the retirement RuntimeError. These tests pin: (a) the Go surface
end-to-end on a real cache.db, (b) the RUNE_CACHE_ENGINE=python escape
hatch exists structurally and refuses, (c) fail-loud on missing binary.
The former oracle-parity and cross-engine-coherence pins are retired
with the oracle bodies (soak evidence: Gitea #2587 wave receipts).
"""
import os
@@ -22,61 +23,41 @@ from rune import cache as cache_mod # noqa: E402
@pytest.fixture()
def mem_dir(tmp_path, monkeypatch):
monkeypatch.setenv("RUNE_MEMORY_DIR", str(tmp_path))
# The oracle bodies read the import-time DB_PATH constant; retarget it
# to the test memory dir so both engines address the same cache.db.
monkeypatch.setattr(cache_mod, "DB_PATH", str(tmp_path / "cache.db"))
return str(tmp_path)
def _oracle(mem_dir, monkeypatch):
monkeypatch.setenv("RUNE_CACHE_ENGINE", "python")
return cache_mod
def _put(cache, key, value, **kw):
return cache.put_cache(key, value, **kw)
# -- put / get roundtrip -----------------------------------------------------
# -- Go surface -------------------------------------------------------------
def test_put_get_roundtrip_go_vs_oracle(mem_dir, monkeypatch):
def test_put_get_roundtrip_go(mem_dir):
got = _put(cache_mod, "k1", "value one")
monkeypatch.setenv("RUNE_CACHE_ENGINE", "python")
oracle_put = cache_mod._put_cache_python("k1", "value one")
oracle_get = cache_mod._get_cache_python("k1")
monkeypatch.delenv("RUNE_CACHE_ENGINE")
engine_get = cache_mod.get_cache("k1")
assert got == oracle_put == {"stored": "k1", "content_hash": got["content_hash"], "scope": "general"}
assert engine_get["hit"] is True and oracle_get["hit"] is True
assert engine_get["full"] == oracle_get["full"] == "value one"
assert engine_get["content_hash"] == oracle_get["content_hash"]
assert got["stored"] == "k1" and got["scope"] == "general"
row = cache_mod.get_cache("k1")
assert row["hit"] is True and row["full"] == "value one"
def test_miss_shape_go_vs_oracle(mem_dir):
def test_miss_shape_go(mem_dir):
assert cache_mod.get_cache("absent-key") == {"hit": False, "key": "absent-key"}
assert cache_mod._get_cache_python("absent-key") == {"hit": False, "key": "absent-key"}
def test_put_scope_and_source_hash_go_vs_oracle(mem_dir):
def test_put_scope_and_source_hash_go(mem_dir):
got = _put(cache_mod, "k2", "v2", scope="research", source_hash="abc")
oracle = cache_mod._put_cache_python("k2", "v2", scope="research", source_hash="abc")
assert got == oracle
row = cache_mod.get_cache("k2")
assert row["scope"] == "research"
assert got["stored"] == "k2"
assert cache_mod.get_cache("k2")["scope"] == "research"
# -- invalidation ------------------------------------------------------------
def test_invalidate_go_vs_oracle(mem_dir):
def test_invalidate_go(mem_dir):
_put(cache_mod, "k3", "v3")
got = cache_mod.invalidate("k3", "gone")
assert got["invalidated"] == "k3"
assert cache_mod.invalidate("k3", "gone")["invalidated"] == "k3"
assert cache_mod.get_cache("k3")["hit"] is False
def test_invalidate_scope_go_vs_oracle(mem_dir):
def test_invalidate_scope_go(mem_dir):
_put(cache_mod, "a1", "v", scope="s1")
_put(cache_mod, "a2", "v", scope="s1")
_put(cache_mod, "b1", "v", scope="s2")
@@ -87,57 +68,53 @@ def test_invalidate_scope_go_vs_oracle(mem_dir):
assert cache_mod.get_cache("b1")["hit"] is True
def test_invalidate_all_go_vs_oracle(mem_dir):
def test_invalidate_all_go(mem_dir):
_put(cache_mod, "x1", "v")
_put(cache_mod, "x2", "v")
got = cache_mod.invalidate_all("reset")
assert got["invalidated_all"] == 2
assert cache_mod.invalidate_all("reset")["invalidated_all"] == 2
assert cache_mod.get_cache("x1")["hit"] is False
assert cache_mod.get_cache("x2")["hit"] is False
# -- stats + hook --------------------------------------------------------------
def test_cache_stats_go_vs_oracle(mem_dir):
def test_cache_stats_go(mem_dir):
_put(cache_mod, "s1", "v")
_put(cache_mod, "s2", "v", scope="other")
stats = cache_mod.cache_stats()
oracle = cache_mod._cache_stats_python()
assert stats["active"] == oracle["active"] == 2
assert stats["scopes"] == oracle["scopes"]
assert stats["active"] == 2
def test_handle_hook_go_vs_oracle(mem_dir):
def test_handle_hook_go(mem_dir):
got = cache_mod.handle_hook("memory.write", {"key": "h1"})
oracle = cache_mod._handle_hook_python("memory.write", {"key": "h1"})
assert got["handler"] == oracle["handler"] == "cache"
assert got["status"] == oracle["status"] == "ok"
assert got["handler"] == "cache" and got["status"] == "ok"
# -- cross-engine coherence -----------------------------------------------------
# -- escape hatch: shape kept, body refuses -----------------------------------
def test_engine_write_oracle_read(mem_dir, monkeypatch):
_put(cache_mod, "cross1", "via engine")
@pytest.mark.parametrize(
"call",
[
lambda c: c._get_cache_python("k"),
lambda c: c._put_cache_python("k", "v"),
lambda c: c._invalidate_python("k"),
lambda c: c._invalidate_scope_python("s"),
lambda c: c._invalidate_all_python(),
lambda c: c._cache_stats_python(),
lambda c: c._handle_hook_python("memory.write", {"key": "k"}),
],
)
def test_oracle_bodies_refuse(mem_dir, call):
with pytest.raises(RuntimeError, match="escape hatch retired"):
call(cache_mod)
def test_engine_disabled_refuses(mem_dir, monkeypatch):
monkeypatch.setenv("RUNE_CACHE_ENGINE", "python")
assert cache_mod.get_cache("cross1")["full"] == "via engine"
with pytest.raises(RuntimeError, match="escape hatch retired"):
cache_mod.get_cache("esc")
def test_oracle_write_engine_read(mem_dir, monkeypatch):
monkeypatch.setenv("RUNE_CACHE_ENGINE", "python")
cache_mod.put_cache("cross2", "via oracle")
monkeypatch.delenv("RUNE_CACHE_ENGINE")
assert cache_mod.get_cache("cross2")["full"] == "via oracle"
# -- facade contract -------------------------------------------------------------
def test_engine_disabled_uses_oracle(mem_dir, monkeypatch):
monkeypatch.setenv("RUNE_CACHE_ENGINE", "python")
r = cache_mod.put_cache("esc", "v")
assert r["stored"] == "esc"
# -- facade contract ------------------------------------------------------------
def test_missing_binary_fails_loud(mem_dir, monkeypatch, tmp_path):
+16 -28
View File
@@ -101,13 +101,9 @@ def _go_request(url, *, method="GET", retries=2, backoff=0.01, timeout=5):
def _py_request(url, *, method="GET", retries=2, backoff=0.01, timeout=5):
return fc._request_python(
method,
url,
timeout=timeout,
retries=retries,
backoff=backoff,
)
# minified oracle body: the escape hatch refuses (REMOVAL-PREP #2598)
with pytest.raises(RuntimeError, match="escape hatch retired"):
fc._request_python(method, url, timeout=timeout, retries=retries, backoff=backoff)
# -- retry/status policy: Go engine vs Python oracle, same live stub ------
@@ -117,47 +113,40 @@ def test_get_5xx_retries_then_succeeds(stub_forge):
_reset(502, "once-first")
got = _go_request(stub_forge + "/x")
go_hits = _StubForge.hits
_reset(502, "once-first")
oracle = _py_request(stub_forge + "/x")
assert got["status_code"] == oracle.status_code == 200
_py_request(stub_forge + "/x")
assert got["status_code"] == 200
# two hits per leg: the 502 then the retry's 200
assert json.loads(got["body"])["hits"] == oracle.json()["hits"] == 2
assert go_hits == _StubForge.hits == 2
assert json.loads(got["body"])["hits"] == 2
assert go_hits == 2
def test_get_5xx_exhaustion(stub_forge):
_reset(500, "always")
got = _go_request(stub_forge + "/x")
go_hits = _StubForge.hits
_reset(500, "always")
with pytest.raises(httpx.HTTPStatusError):
_py_request(stub_forge + "/x")
_py_request(stub_forge + "/x") # minified oracle: refuses, no HTTP
assert "status_error" in got and got["status_error"] == 500
# retries+1 total attempts per leg, no more
assert go_hits == _StubForge.hits == 3
assert go_hits == 3
def test_post_5xx_never_retried(stub_forge):
_reset(500, "always")
got = _go_request(stub_forge + "/x", method="POST", retries=3)
go_hits = _StubForge.hits
_reset(500, "always")
with pytest.raises(httpx.HTTPStatusError):
_py_request(stub_forge + "/x", method="POST", retries=3)
_py_request(stub_forge + "/x", method="POST", retries=3) # refuses, no HTTP
# exactly one hit per leg: a duplicate issue is worse than a caught failure
assert got["status_error"] == 500
assert go_hits == _StubForge.hits == 1
assert go_hits == 1
def test_4xx_never_retried(stub_forge):
_reset(422, "always")
got = _go_request(stub_forge + "/x")
go_hits = _StubForge.hits
_reset(422, "always")
with pytest.raises(httpx.HTTPStatusError):
_py_request(stub_forge + "/x")
_py_request(stub_forge + "/x") # refuses, no HTTP
assert got["status_error"] == 422
assert go_hits == _StubForge.hits == 1
assert go_hits == 1
# -- exception contract through the facade --------------------------------
@@ -213,12 +202,11 @@ def test_create_forge_client_via_engine(monkeypatch):
# -- facade contract --------------------------------------------------------
def test_engine_disabled_uses_oracle(stub_forge):
def test_engine_disabled_refuses(stub_forge):
os.environ["RUNE_FORGE_CLIENT_ENGINE"] = "python"
try:
_reset(200, "always")
r = fc._request("GET", stub_forge + "/x", backoff=0.01, timeout=5)
assert r.status_code == 200
with pytest.raises(RuntimeError, match="escape hatch retired"):
fc._request("GET", stub_forge + "/x", backoff=0.01, timeout=5)
finally:
os.environ.pop("RUNE_FORGE_CLIENT_ENGINE", None)
+13 -24
View File
@@ -1,4 +1,4 @@
"""REBASE-COMPLETION (#2587) parity battery — message_queue.
"""REMOVAL-PREP (#2598 item 2) battery — message_queue.
Red-first discipline: pins the Go engine's eval surface against the
Python oracle bodies on the SAME queue.json. A mutation of an oracle
@@ -50,8 +50,9 @@ DETECT_CASES = [
@pytest.mark.parametrize("message", DETECT_CASES)
def test_detect_task_addition_go_vs_oracle(message):
is_t, conf, signals = MessageQueue().detect_task_addition(message)
o_is, o_conf, o_signals = MessageQueue()._detect_task_addition_python(message)
assert (is_t, round(conf, 6), signals) == (o_is, round(o_conf, 6), o_signals)
assert isinstance(is_t, bool) and isinstance(signals, list)
with pytest.raises(RuntimeError, match="escape hatch retired"):
MessageQueue()._detect_task_addition_python(message)
# -- add / pending / approved / status ------------------------------------------
@@ -59,10 +60,9 @@ def test_detect_task_addition_go_vs_oracle(message):
def test_add_message_go_vs_oracle(queue_dir):
got = _engine(queue_dir).add_message("add a feature", "chat")
oracle = _oracle(queue_dir).add_message("add a feature", "chat")
assert got.message == oracle.message == "add a feature"
assert got.status == oracle.status == "pending"
assert got.channel == oracle.channel == "chat"
assert got.message == "add a feature"
assert got.status == "pending"
assert got.channel == "chat"
def test_pending_approved_flow_go_vs_oracle(queue_dir):
@@ -85,10 +85,6 @@ def test_reject_go_vs_oracle(queue_dir):
assert q.reject(m.id) is True
st = q.get_status()
assert st["pending"] == 0
oracle_q = _oracle(queue_dir)
om = oracle_q.add_message("add x", "chat")
oracle_q.reject(om.id)
assert q.get_status() == oracle_q.get_status()
def test_approve_all_go_vs_oracle(queue_dir):
@@ -109,29 +105,22 @@ def test_clear_go_vs_oracle(queue_dir):
# -- cross-engine coherence --------------------------------------------------------
def test_engine_write_oracle_read(queue_dir):
def test_engine_state_roundtrip(queue_dir):
q = _engine(queue_dir)
m = q.add_message("cross", "chat")
mo = _oracle(queue_dir)
assert any(x.id == m.id for x in mo.get_pending())
def test_oracle_write_engine_read(queue_dir):
mo = _oracle(queue_dir)
m = mo.add_message("cross back", "chat")
q = _engine(queue_dir)
assert any(x.id == m.id for x in q.get_pending())
q2 = _engine(queue_dir)
assert any(x.id == m.id for x in q2.get_pending())
# -- facade contract ------------------------------------------------------------------
def test_engine_disabled_uses_oracle(queue_dir):
def test_engine_disabled_refuses(queue_dir):
os.environ["RUNE_MESSAGE_QUEUE_ENGINE"] = "python"
try:
q = MessageQueue()
m = q.add_message("oracle path", "chat")
assert m.status == "pending"
with pytest.raises(RuntimeError, match="escape hatch retired"):
q.add_message("oracle path", "chat")
finally:
os.environ.pop("RUNE_MESSAGE_QUEUE_ENGINE", None)
+20 -34
View File
@@ -25,7 +25,9 @@ def _python_engine(monkeypatch):
"""This suite pins the Python ORACLE bodies via monkeypatched seams;
the Go delegation is pinned separately by the parity battery
(tests/test_openai_compat_transport_go_parity.py)."""
monkeypatch.setenv("RUNE_OPENAI_COMPAT_TRANSPORT_ENGINE", "python")
# REMOVAL-PREP (#2598 item 2): oracle bodies are minified refusal
# stubs; this suite rides the GO engine (the authority).
monkeypatch.delenv("RUNE_OPENAI_COMPAT_TRANSPORT_ENGINE", raising=False)
class TestMessageTranslation:
@@ -134,42 +136,26 @@ class TestMessageTranslation:
assert t.usage_calls == 1 and t.usage_prompt_tokens == 10 and t.usage_output_tokens == 5
def test_qualified_model_name_sent_as_bare_id(self):
"""Runtime passes '<Provider>/<model>'; the wire must carry the bare
model id (observed live: qualified name → 400 on every call)."""
captured = {}
"""REMOVAL-PREP: the python seam (t._post fake) is gone with the
oracle body; the qualified-name→bare-id wire pin rides the Go
engine via the parity battery (from_openai_response/to_openai_messages
cases). Here we pin the escape-hatch refusal for the chat body."""
with pytest.raises(RuntimeError, match="escape hatch retired"):
OpenAICompatTransport._chat_python(
OpenAICompatTransport("http://x/v1", "k", "Verboo Code"),
model="Verboo Code/glm-5.3-flash",
messages=[{"role": "user", "content": "hi"}],
tools=None,
)
def fake_post(path, payload):
captured.update(payload)
return {"choices": [{"message": {"role": "assistant", "content": "ok"}}], "usage": {}}
t = OpenAICompatTransport("http://x/v1", "k", "Verboo Code")
t._post = fake_post
t.chat(model="Verboo Code/glm-5.3-flash", messages=[{"role": "user", "content": "hi"}], tools=None)
assert captured["model"] == "glm-5.3-flash"
def test_cloud_transport_for_floors_timeout(self):
"""cloud_transport_for floors the timeout at 300s for cloud routers."""
def test_cloud_transport_for_refuses(self):
"""REMOVAL-PREP: the python seam (mocked config read) is gone with
the oracle body; the timeout-floor pin rides the Go engine via the
parity battery. Here we pin the refusal."""
import rune.openai_compat_transport as mod
captured = {}
real_init = mod.OpenAICompatTransport.__init__
def spy_init(self, base_url, api_key, provider_name, timeout=120, context_window=131072):
captured["timeout"] = timeout
with (
mock.patch.object(mod.OpenAICompatTransport, "__init__", spy_init),
mock.patch.object(Path, "is_file", return_value=True),
mock.patch.object(
Path, "read_text", return_value='{"Verboo Code": {"options": {"baseURL": "https://x/v1"}}}'
),
mock.patch.dict(sys.modules, {}),
):
import json as _json
with mock.patch.object(mod.json, "loads", return_value={"Verboo Code": {"key": "k"}}):
mod.cloud_transport_for("Verboo Code/glm-5.3-flash", timeout=120)
assert captured["timeout"] == 300
with pytest.raises(RuntimeError, match="escape hatch retired"):
mod._cloud_transport_for_python("Verboo Code/glm-5.3-flash", timeout=120)
class TestTransportSelection:
@@ -127,29 +127,33 @@ def _go_eval_one(op):
@pytest.mark.parametrize("messages,want", TO_MSGS_CASES)
def test_to_openai_messages_go_vs_oracle(messages, want):
got = _go_eval_one({"op": "to_openai_messages", "messages": messages})
oracle = oct_.OpenAICompatTransport._to_openai_messages_python(messages)
assert got == oracle == want
assert got == want
with pytest.raises(RuntimeError, match="escape hatch retired"):
oct_.OpenAICompatTransport._to_openai_messages_python(messages)
@pytest.mark.parametrize("resp,want", FROM_RESPONSE_CASES)
def test_from_openai_response_go_vs_oracle(resp, want):
got = _go_eval_one({"op": "from_openai_response", "resp": resp})
oracle = oct_.OpenAICompatTransport._from_openai_response_python(resp)
assert got == oracle == want
assert got == want
with pytest.raises(RuntimeError, match="escape hatch retired"):
oct_.OpenAICompatTransport._from_openai_response_python(resp)
@pytest.mark.parametrize("model,want", CLOUD_PINNED_CASES)
def test_is_cloud_pinned_go_vs_oracle(model, want):
got = _go_eval_one({"op": "is_cloud_pinned", "model": model})
oracle = oct_._is_cloud_pinned_python(model)
assert got == oracle == want
assert got == want
with pytest.raises(RuntimeError, match="escape hatch retired"):
oct_._is_cloud_pinned_python(model)
def test_engine_disabled_uses_oracle_path():
def test_engine_disabled_refuses():
os.environ["RUNE_OPENAI_COMPAT_TRANSPORT_ENGINE"] = "python"
try:
t = oct_.OpenAICompatTransport("http://x/v1", "k", "T")
assert t._to_openai_messages([{"role": "user", "content": "hi"}]) == [{"role": "user", "content": "hi"}]
with pytest.raises(RuntimeError, match="escape hatch retired"):
t._to_openai_messages([{"role": "user", "content": "hi"}])
finally:
os.environ.pop("RUNE_OPENAI_COMPAT_TRANSPORT_ENGINE", None)
+33 -31
View File
@@ -1,10 +1,10 @@
"""REBASE-COMPLETION (#2587) parity battery — paths.
"""REMOVAL-PREP (#2598 item 2) battery — paths.
Red-first discipline: pins the Go engine's eval surface (repo_root,
crate_dir, deploy_root, rune_home, harness_scripts, wait_resume_dir)
against the Python oracle bodies. A mutation of an oracle body must
flip the battery. Also pins the facade contract: fail-loud RuntimeError
on a missing binary; RUNE_PATHS_ENGINE=python escape.
The Go engine (src/go/paths, `eval <ops.json>` surface) is the authority.
The Python oracle bodies are MINIFIED: each keeps its signature but raises
the retirement RuntimeError. These tests pin: (a) the Go path still serves
every resolver, (b) the RUNE_PATHS_ENGINE=python escape hatch exists
structurally and refuses, (c) fail-loud on a missing binary.
"""
import os
@@ -23,54 +23,56 @@ def _env_clean(monkeypatch):
monkeypatch.delenv(var, raising=False)
# -- resolvers go vs oracle -----------------------------------------------------
# -- resolvers via the Go engine -----------------------------------------------
def test_repo_root_go_vs_oracle():
assert paths_mod.repo_root() == paths_mod._repo_root_python()
def test_repo_root_go():
assert os.path.isdir(paths_mod.repo_root())
def test_crate_dir_go_vs_oracle():
def test_crate_dir_go():
got = paths_mod.crate_dir("survivor")
oracle = paths_mod._crate_dir_python("survivor")
assert got == oracle
assert got.endswith(os.path.join("src", "rust", "survivor"))
def test_deploy_root_go_vs_oracle(monkeypatch):
def test_deploy_root_go(monkeypatch):
monkeypatch.setenv("RUNE_DEPLOY_ROOT", "/tmp/deploy")
assert paths_mod.deploy_root() == paths_mod._deploy_root_python() == "/tmp/deploy"
monkeypatch.delenv("RUNE_DEPLOY_ROOT")
assert paths_mod.deploy_root() == paths_mod._deploy_root_python()
assert paths_mod.deploy_root() == "/tmp/deploy"
def test_rune_home_go_vs_oracle(monkeypatch):
def test_rune_home_go(monkeypatch):
monkeypatch.setenv("RUNE_HOME", "/tmp/rh")
assert paths_mod.rune_home() == paths_mod._rune_home_python() == "/tmp/rh"
monkeypatch.delenv("RUNE_HOME")
assert paths_mod.rune_home() == paths_mod._rune_home_python()
assert paths_mod.rune_home() == "/tmp/rh"
def test_harness_scripts_go_vs_oracle(monkeypatch):
def test_harness_scripts_go(monkeypatch):
monkeypatch.setenv("HARNESS_SCRIPTS", "/tmp/hs")
assert paths_mod.harness_scripts() == paths_mod._harness_scripts_python() == "/tmp/hs"
assert paths_mod.harness_scripts() == "/tmp/hs"
def test_wait_resume_dir_go_vs_oracle(monkeypatch):
def test_wait_resume_dir_go(monkeypatch):
monkeypatch.setenv("RUNE_WR_CODE", "/tmp/wr")
assert paths_mod.wait_resume_dir() == paths_mod._wait_resume_dir_python() == "/tmp/wr"
assert paths_mod.wait_resume_dir() == "/tmp/wr"
# -- facade contract ----------------------------------------------------------------
# -- escape hatch: shape kept, body refuses --------------------------------------
def test_engine_disabled_uses_oracle():
os.environ["RUNE_PATHS_ENGINE"] = "python"
try:
assert paths_mod.repo_root() == paths_mod.REPO_ROOT
finally:
os.environ.pop("RUNE_PATHS_ENGINE", None)
@pytest.mark.parametrize(
"resolver",
["repo_root", "crate_dir", "deploy_root", "rune_home", "harness_scripts", "wait_resume_dir"],
)
def test_escape_hatch_refuses(monkeypatch, resolver):
monkeypatch.setenv("RUNE_PATHS_ENGINE", "python")
call = getattr(paths_mod, resolver)
with pytest.raises(RuntimeError, match="escape hatch retired"):
if resolver == "crate_dir":
call("survivor")
else:
call()
# -- facade contract -------------------------------------------------------------
def test_missing_binary_fails_loud(tmp_path, monkeypatch):
+81
View File
@@ -0,0 +1,81 @@
"""REBASE-PROOF no-oracle law (Gitea #2586, bar 4): the Python body of every
fail-loud delegation facade is reachable ONLY via the explicit
RUNE_*_ENGINE=python escape. Two assertions per facade:
1. default engine selection is go (no silent python fallback);
2. with the engine binary pointed at /nonexistent, the delegation path
raises a typed RuntimeError (never falls back to the oracle body).
Evidence table: research/rebase-proof/verdict-2026-10-24.json
"""
import importlib
import os
import sys
import pytest
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "src"))
FACADES = {
"model_routing": "RUNE_MODEL_ROUTING_BIN",
"event_bus": "RUNE_EVENT_BUS_BIN",
"cache": "RUNE_CACHE_BIN",
"message_queue": "RUNE_MESSAGE_QUEUE_BIN",
"abstraction": "RUNE_ABSTRACTION_BIN",
"auto_context": "RUNE_AUTO_CONTEXT_BIN",
"voicebox": "RUNE_VOICEBOX_BIN",
"paths": "RUNE_PATHS_BIN",
"microkernel": "RUNE_MICROKERNEL_BIN",
"goal": "RUNE_GOAL_BIN",
"openai_compat_transport": "RUNE_OPENAI_COMPAT_TRANSPORT_BIN",
"forge_client": "RUNE_FORGE_CLIENT_BIN",
}
# facade -> (go-entry callable, args safe to call with a missing binary)
PROBES = {
"model_routing": ("_go_eval", ("rank", [])),
"event_bus": ("_go_emit", ("rebase-proof.probe",)),
"cache": ("_go_eval", ([],)),
"message_queue": ("_go_eval", ([],)),
"abstraction": ("_go_eval", ([],)),
"auto_context": ("_go_eval", ([],)),
"voicebox": ("_go_eval", ([],)),
"paths": ("_go_eval", ([],)),
"microkernel": ("_go_parity_op", ({},)),
"goal": ("_go_eval", ([],)),
"openai_compat_transport": ("_go_eval", ([],)),
"forge_client": ("_go_eval", ([],)),
}
@pytest.mark.parametrize("module", sorted(FACADES))
def test_no_oracle_default_engine_is_go(module):
mod = importlib.import_module(f"rune.{module}")
engine_env = FACADES[module].replace("_BIN", "_ENGINE")
assert os.environ.get(engine_env, "go") != "python", (
f"{module}: {engine_env} must not default to python"
)
entry, _ = PROBES[module]
assert callable(getattr(mod, entry, None)), f"{module}: missing {entry}"
@pytest.mark.parametrize("module", sorted(FACADES))
def test_no_oracle_missing_binary_raises_runtimeerror(module):
mod = importlib.import_module(f"rune.{module}")
entry, args = PROBES[module]
os.environ[FACADES[module]] = "/nonexistent/rebase-proof-no-oracle"
try:
with pytest.raises(RuntimeError):
getattr(mod, entry)(*args)
finally:
os.environ.pop(FACADES[module], None)
def test_no_oracle_no_silent_fallback_catches():
"""Grep-equivalent assertion: no facade catches RuntimeError to fall back."""
import pathlib
src_dir = pathlib.Path(__file__).resolve().parent.parent / "src" / "rune"
for module in sorted(FACADES):
body = (src_dir / f"{module}.py").read_text(encoding="utf-8")
assert "except RuntimeError" not in body, (
f"{module}: silent-fallback catch on the delegation path"
)
+14 -12
View File
@@ -13,11 +13,13 @@ missing, and receipts the local_tool_runtime consumer wiring.
import json
import os
import sys
from pathlib import Path
import pytest
_ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(_ROOT / "src"))
CORPUS = [
("qwen2.5:3b", True), # floor T1 contradiction (floor=False)
@@ -47,10 +49,10 @@ def _run(engine):
os.environ["RUNE_MODEL_ROUTING_ENGINE"] = old
def test_go_delegation_matches_python_oracle_byte_for_byte():
oracle = _run("python")
def test_go_delegation_corpus_and_hatch_refusal():
# REMOVAL-PREP (#2598 item 2): the oracle body is a refusal stub; the
# corpus pins ride the Go engine.
go = _run("go")
assert _jbytes(go) == _jbytes(oracle)
# spot-check the drift arm against the recorded oracle text
assert go[0][0] is True
assert go[0][1] is not None
@@ -59,17 +61,19 @@ def test_go_delegation_matches_python_oracle_byte_for_byte():
assert go[1][0] is False and "supports_tools=False" in go[1][1]
assert go[2] == (False, None) and go[3] == (True, None)
assert go[4] == (True, None) and go[5] == (False, None)
with pytest.raises(RuntimeError, match="escape hatch retired"):
_run("python")
def test_default_is_go_engine():
# default (unset env) resolves through the Go binary, not the oracle body
# default (unset env) resolves through the Go binary
env = os.environ.pop("RUNE_MODEL_ROUTING_ENGINE", None)
try:
default = _run(os.environ.get("RUNE_MODEL_ROUTING_ENGINE", "go"))
finally:
if env is not None:
os.environ["RUNE_MODEL_ROUTING_ENGINE"] = env
assert _jbytes(default) == _jbytes(_run("python"))
assert len(default) == len(CORPUS)
def test_fail_loud_when_engine_binary_missing(tmp_path, monkeypatch):
@@ -85,14 +89,12 @@ def test_local_tool_runtime_consumer_receipts_drift():
# the consumer seam: LocalToolRuntime reconciles through the facade and
# surfaces the drift marker on capability_drift
from rune.local_tool_runtime import LocalToolRuntime
from rune.model_routing import _reconcile_tools_support_python
import rune.model_routing as mr
eff, drift = _reconcile_tools_support_python("qwen2.5:3b", True)
assert drift is not None
# parity: the facade's default path produces the same marker
# REMOVAL-PREP: oracle body refuses; the consumer rides the Go facade
with pytest.raises(RuntimeError, match="escape hatch retired"):
mr._reconcile_tools_support_python("qwen2.5:3b", True)
os.environ.pop("RUNE_MODEL_ROUTING_ENGINE", None)
from rune import model_routing as mr
g_eff, g_drift = mr.reconcile_tools_support("qwen2.5:3b", True)
assert (g_eff, g_drift) == (eff, drift)
assert g_eff is True and g_drift is not None
assert LocalToolRuntime is not None # import seam still wired