Compare commits

...
12 Commits
Author SHA1 Message Date
conductor 0666c042fe chore(release): auto-bump version to 0.158.0 — earned by # (minor: converged release (push-to-master bump))
deploy / deploy (push) Skipped
CI Pipeline / best-practices (push) Successful in 7s
CI Pipeline / documentation (push) Successful in 3s
Auto-version and Release / release (push) Successful in 19s
CI Pipeline / gitea-offline (push) Successful in 16s
CI Pipeline / type-check (push) Successful in 51s
CI Pipeline / go-surface (push) Failing after 1m4s
CI Pipeline / lint (push) Successful in 1m22s
CI Pipeline / canary (push) Successful in 2m10s
CI Pipeline / rust-surface (push) Successful in 4m59s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 10m46s
Promotion record: (unknown)
2026-10-10 14:18:30 +01:00
Nick 4752db026d feat(operator-deep): #30 evidence kernels to Go — MemoryQuery/Observation/VerificationAndOutcome
CI Pipeline / best-practices (push) Successful in 7s
CI Pipeline / documentation (push) Successful in 2s
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
Auto-version and Release / release (push) Canceled after 23s
CI Pipeline / go-surface (push) Canceled after 24s
CI Pipeline / rust-surface (push) Canceled after 24s
deploy / deploy (push) Canceled after 26s
CI Pipeline / canary (push) Canceled after 25s
CI Pipeline / lint (push) Canceled after 27s
CI Pipeline / type-check (push) Canceled after 17s
CI Pipeline / unit-tests (push) Canceled after 28s
Operator batch (#2479, dichotomy verdict GO adapter over GO kernels):
- kernels30.go: MemoryQueryFromTrace (admitted {name:tokens} + dropped
  ride-through), ObservationFromCompaction (summary + detail with Python
  json.dumps spacing parity via a byte state machine),
  VerificationAndOutcome (frozen contract: exit_code when run_command
  completed, test when run_tests, else none; passed = success AND no
  error/failed event; the none-branch NEVER self-reports — verification
  null, outcome verification_id empty), ProbeFailureClasses contract pin
- truth_operator30.json: 8 oracle-first rows (inputs embedded)
- truth_operator30_test.go: replay + the VerificationAndOutcome contract
  test (test-precedence, none-branch, tool-failure falsification)
- ci.yml: HARD operator-deep parity gate (build + both tests)
- Improvements: parity-only — oracle verified correct on every probed edge
  (verified against the live Python oracle; no divergence found)

Evidence: go test green, race clean, fmt clean, 8/8 truth parity.
2026-10-10 14:18:10 +01:00
conductor 2c19cd0793 chore(release): auto-bump version to 0.157.1 — earned by # (patch: converged release (push-to-master bump))
deploy / deploy (push) Skipped
CI Pipeline / best-practices (push) Successful in 10s
CI Pipeline / documentation (push) Successful in 4s
Auto-version and Release / release (push) Successful in 22s
CI Pipeline / gitea-offline (push) Successful in 20s
CI Pipeline / type-check (push) Successful in 51s
CI Pipeline / go-surface (push) Failing after 1m8s
CI Pipeline / lint (push) Successful in 1m23s
CI Pipeline / canary (push) Successful in 2m15s
CI Pipeline / rust-surface (push) Successful in 5m10s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 11m26s
Promotion record: (unknown)
2026-10-10 14:06:34 +01:00
Nick 2ec9091229 fix(ci): run-scoped /tmp state — CI never collides with ambient local work
CI Pipeline / best-practices (push) Successful in 8s
CI Pipeline / documentation (push) Successful in 8s
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 / type-check (push) Canceled after 10s
CI Pipeline / gitea-offline (push) Canceled after 11s
CI Pipeline / go-surface (push) Canceled after 21s
Auto-version and Release / release (push) Canceled after 22s
CI Pipeline / canary (push) Canceled after 22s
CI Pipeline / rust-surface (push) Canceled after 21s
CI Pipeline / lint (push) Canceled after 23s
CI Pipeline / unit-tests (push) Canceled after 25s
Root cause of the go-surface 1-second failure (run 23301, step 4): CI writes
fixed /tmp paths (/tmp/go-bins, /tmp/<engine> parity binaries) and local
replays write the same paths as the nick user — a nick-owned /tmp/go-bins
made the runner's go build fail permission-denied under set -e, one second
in, before any compile. Diagnosis: step-level timing (started 12:47:39,
completed 12:47:40) + step statuses from the jobs API (first run where
Gitea's per-step statuses were readable).

Fix: EVERY shared /tmp path is run-id-scoped — OUT_DIR=/tmp/go-bins-$run_id,
28 parity-gate binaries built to /tmp/<name>-$run_id, 27 replay invocations
match. Census: zero un-prefixed shared paths remain across all jobs.
Proven end-to-end with RUN_ID=99999 on cron-engine + curator-core.
SRE law: CI must never write to ambient /tmp paths that local work can own
first — local replays and CI runs are now fully isolated.
2026-10-10 14:06:15 +01:00
conductor 956802dc39 chore(release): auto-bump version to 0.157.0 — earned by # (minor: converged release (push-to-master bump))
Auto-version and Release / release (push) Successful in 21s
CI Pipeline / best-practices (push) Successful in 3s
CI Pipeline / documentation (push) Successful in 3s
CI Pipeline / go-surface (push) Failing after 20s
CI Pipeline / gitea-offline (push) Successful in 18s
CI Pipeline / type-check (push) Successful in 46s
CI Pipeline / lint (push) Successful in 1m22s
CI Pipeline / canary (push) Successful in 2m13s
CI Pipeline / rust-surface (push) Successful in 5m8s
deploy / deploy (push) Failing after 15m32s
CI Pipeline / unit-tests (push) Failing after 16m2s
CI Pipeline / required-checks (push) Failing after 1s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Failing after 4s
Promotion record: (unknown)
2026-10-10 13:47:06 +01:00
Nick 6ad7a9efce feat(governance): the dichotomy gate as a henxel — D1/D2/D3 with machine-actionable feedback
CI Pipeline / best-practices (push) Successful in 9s
CI Pipeline / documentation (push) Successful in 9s
CI Pipeline / go-surface (push) Failing after 20s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
Auto-version and Release / release (push) Canceled after 24s
CI Pipeline / unit-tests (push) Canceled after 24s
CI Pipeline / lint (push) Canceled after 22s
CI Pipeline / type-check (push) Canceled after 16s
CI Pipeline / canary (push) Canceled after 26s
CI Pipeline / rust-surface (push) Canceled after 26s
deploy / deploy (push) Canceled after 6s
CI Pipeline / gitea-offline (push) Canceled after 18s
Nick's order: enforce the dichotomy at the commit boundary via henxels, with
the SRE rigor. dichotomy_language_verdict (henxels_checks.py) checks every
src/rune/*.py against the measured map (store/rebase/classification.json):

- D1 wrong-language kernel: a RUST-classified module owning only a Go dir
  (with the wave-3 exemption: cc_<stem> in cognition_core/lib.rs is a
  correct RUST landing) — and the mirror case
- D2 dead-oracle facade: kernel ported (src/go|rust/<stem>/) but the Python
  module has zero delegation refs (cc_loader/_cc_core/sibling *_loader/
  ctypes/CDLL). Pre-existing 62 facades seeded into
  store/rebase/dichotomy_debt.json — tracked, ONLY SHRINKS; new facades fail
- D3 ratchet regression: a module in ported_ratchet.json (77-module floor)
  whose kernel directory vanished — ported work must never be deleted

Every failure message IS the next implementation instruction (target path,
parity-battery requirement, contract-first law) — the gate feeds Rune/
MiMo-Rune the correct implementation, not just a red X.

SRE: gate starts GREEN (debt is tracked, not silent); ratchet floors never
decrease; CI-enforced through the lint job's existing henxels check step.
Verification: synthetic-fixture probes prove all three classes fire and all
pass-cases stay silent; the probe itself found and fixed 2 statement bugs
(dict-shaped ratchet read; missing delegation forms); real-tree gate clean;
shims regression slice 122 passed.
2026-10-10 13:46:47 +01:00
Nick b6af845c89 chore: scaffold store sync
Auto-version and Release / release (push) Successful in 17s
CI Pipeline / best-practices (push) Successful in 9s
CI Pipeline / documentation (push) Successful in 5s
CI Pipeline / go-surface (push) Failing after 15s
CI Pipeline / gitea-offline (push) Successful in 19s
CI Pipeline / type-check (push) Successful in 46s
CI Pipeline / lint (push) Successful in 1m16s
CI Pipeline / canary (push) Successful in 2m8s
CI Pipeline / rust-surface (push) Successful in 5m2s
CI Pipeline / unit-tests (push) Failing after 15m5s
CI Pipeline / required-checks (push) Failing after 3s
deploy / deploy (push) Failing after 15m23s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Failing after 4s
2026-10-10 13:24:54 +01:00
conductor 96e27fdaa2 chore(release): auto-bump version to 0.156.4 — earned by # (patch: converged release (push-to-master bump))
deploy / deploy (push) Skipped
CI Pipeline / best-practices (push) Successful in 8s
CI Pipeline / documentation (push) Successful in 4s
CI Pipeline / go-surface (push) Failing after 18s
Auto-version and Release / release (push) Successful in 22s
CI Pipeline / gitea-offline (push) Successful in 16s
CI Pipeline / type-check (push) Successful in 50s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / rust-surface (push) Canceled after 1m16s
CI Pipeline / lint (push) Canceled after 1m20s
CI Pipeline / unit-tests (push) Canceled after 1m21s
CI Pipeline / canary (push) Canceled after 1m21s
Promotion record: (unknown)
2026-10-10 13:23:35 +01:00
Nick 86ac65b501 fix(ci): elastic-cognition replay path double-prefixed — the last go-surface blocker
CI Pipeline / documentation (push) Successful in 8s
CI Pipeline / best-practices (push) Successful in 8s
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 / go-surface (push) Canceled after 17s
Auto-version and Release / release (push) Canceled after 20s
CI Pipeline / type-check (push) Canceled after 11s
CI Pipeline / gitea-offline (push) Canceled after 10s
CI Pipeline / unit-tests (push) Canceled after 21s
CI Pipeline / lint (push) Canceled after 21s
CI Pipeline / rust-surface (push) Canceled after 21s
CI Pipeline / canary (push) Canceled after 21s
The step cds into src/go/elastic-cognition then replays a repo-rooted
path (src/go/elastic-cognition/truth_budget_parse.json) — resolves to
src/go/elastic-cognition/src/go/... under the persistent shell. Found by
full step-by-step local replay of the CURRENT job (the only !!! FAILED
step of 38). Fixed module-relative; exact commands verified: truth.json
12 cases + truth_budget_parse.json 30 cases + improvement 13.4µs/call.
2026-10-10 13:23:16 +01:00
conductor b27bd271d8 chore(release): auto-bump version to 0.156.3 — earned by # (patch: converged release (push-to-master bump))
CI Pipeline / best-practices (push) Successful in 7s
CI Pipeline / documentation (push) Successful in 7s
CI Pipeline / go-surface (push) Failing after 18s
CI Pipeline / gitea-offline (push) Successful in 19s
Auto-version and Release / release (push) Successful in 28s
CI Pipeline / type-check (push) Successful in 53s
CI Pipeline / lint (push) Successful in 1m25s
CI Pipeline / canary (push) Successful in 2m16s
CI Pipeline / rust-surface (push) Successful in 5m12s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
deploy / deploy (push) Canceled after 5m46s
CI Pipeline / unit-tests (push) Canceled after 6m11s
Promotion record: (unknown)
2026-10-10 13:17:04 +01:00
Nick 89b3cf7b25 fix(ci): 8 parity gates died at their second cd — merge into one chained line
CI Pipeline / best-practices (push) Successful in 10s
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 15s
Auto-version and Release / release (push) Canceled after 25s
CI Pipeline / unit-tests (push) Canceled after 16s
CI Pipeline / go-surface (push) Canceled after 16s
CI Pipeline / rust-surface (push) Canceled after 16s
CI Pipeline / canary (push) Canceled after 16s
CI Pipeline / documentation (push) Canceled after 6s
deploy / deploy (push) Canceled after 26s
Root cause of the persistent go-surface red: steps patterned
  cd src/go/X && go build -o /tmp/X .
  /tmp/X replay truth.json
  cd src/go/X && go test -run Y -v
run all three lines in ONE shell — the third cd resolves relative to the
FIRST (already inside X), so 'src/go/X/src/go/X' does not exist and -e
kills the step. Affected: curator-core, cron-engine, goal-engine,
memory-consolidation, work-manager, night-mode, sleep-time,
standardized-providers. All merged into single chained
'cd && build && replay && test' lines (module-relative truth.json
semantics preserved). Verified locally on the exact merged commands.
The earlier fuzz fix was real but not THE blocker — this is.
2026-10-10 13:16:42 +01:00
Nick 40619a3eb5 chore: scaffold store sync (census fixes close)
CI Pipeline / best-practices (push) Successful in 8s
CI Pipeline / documentation (push) Successful in 7s
Auto-version and Release / release (push) Successful in 19s
CI Pipeline / gitea-offline (push) Successful in 21s
CI Pipeline / type-check (push) Successful in 54s
CI Pipeline / go-surface (push) Failing after 1m4s
CI Pipeline / lint (push) Successful in 1m28s
CI Pipeline / canary (push) Successful in 2m26s
CI Pipeline / rust-surface (push) Successful in 5m16s
deploy / deploy (push) Canceled after 5m11s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 12m41s
2026-10-10 13:03:59 +01:00
14 changed files with 24570 additions and 70 deletions

No files matched your search

+53 -64
View File
@@ -207,7 +207,7 @@ jobs:
cd "$dir"
go vet ./...
go test ./... -v || { echo "::error::go test failed in $dir"; exit 1; }
OUT_DIR="/tmp/go-bins"
OUT_DIR="/tmp/go-bins-${{ gitea.run_id }}"
mkdir -p "$OUT_DIR"
go build -o "$OUT_DIR/go-$(basename "$dir")" .
cd - > /dev/null
@@ -222,125 +222,114 @@ jobs:
run: |
cd src/go/adaptive-router
go test ./... -run TestParityAgainstPythonOracle -v
- name: operator-deep evidence-kernel parity gate (HARD — #2479 batch: #30 kernels)
run: |
cd src/go/operator-deep && go build -o /tmp/operator-deep-${{ gitea.run_id }} . && go test -run "TestOperator30Parity|TestVerificationAndOutcomeContract" -v
- name: curator-core candidate-decay parity gate (HARD — #2479 batch: ledger decay + journal render + cosine)
run: |
cd src/go/curator-core && go build -o /tmp/curator-core .
/tmp/curator-core replay truth_candidate_decay.json
cd src/go/curator-core && go test -run TestCandidateDecayParity -v
cd src/go/curator-core && go build -o /tmp/curator-core-${{ gitea.run_id }} . && /tmp/curator-core-${{ gitea.run_id }} replay truth_candidate_decay.json && go test -run TestCandidateDecayParity -v
- name: cron-engine parity gate (HARD — #2479 batches 1+126: parser + lifecycle)
run: |
cd src/go/cron-engine && go build -o /tmp/cron-engine .
/tmp/cron-engine replay truth.json
cd src/go/cron-engine && go test -run TestLifecycleParity -v
cd src/go/cron-engine && go build -o /tmp/cron-engine-${{ gitea.run_id }} . && /tmp/cron-engine-${{ gitea.run_id }} replay truth.json && go test -run TestLifecycleParity -v
- name: goal-engine parity gate (HARD — #2479 batches 2+129: verifier + lifecycle)
run: |
cd src/go/goal-engine && go build -o /tmp/goal-engine .
/tmp/goal-engine replay truth.json
cd src/go/goal-engine && go test -run TestLifecycleParity -v
cd src/go/goal-engine && go build -o /tmp/goal-engine-${{ gitea.run_id }} . && /tmp/goal-engine-${{ gitea.run_id }} replay truth.json && go test -run TestLifecycleParity -v
- name: provider-budget parity gate (HARD — #2479 batches 3+146: budget + ties/headers/rpm)
run: |
cd src/go/provider-budget && go build -o /tmp/provider-budget .
/tmp/provider-budget replay truth.json
cd src/go/provider-budget && go build -o /tmp/provider-budget-${{ gitea.run_id }} .
/tmp/provider-budget-${{ gitea.run_id }} replay truth.json
- name: event-wait parity gate (HARD — #2479 batch 4, oracle replay)
run: |
cd src/go/event-wait && go build -o /tmp/event-wait .
/tmp/event-wait replay truth.json
cd src/go/event-wait && go build -o /tmp/event-wait-${{ gitea.run_id }} .
/tmp/event-wait-${{ gitea.run_id }} replay truth.json
- name: memory-consolidation parity gate (HARD — #2479 batches 5+131: scoring + constructors)
run: |
cd src/go/memory-consolidation && go build -o /tmp/memory-consolidation .
/tmp/memory-consolidation replay truth.json
cd src/go/memory-consolidation && go test -run TestConstructorParity -v
cd src/go/memory-consolidation && go build -o /tmp/memory-consolidation-${{ gitea.run_id }} . && /tmp/memory-consolidation-${{ gitea.run_id }} replay truth.json && go test -run TestConstructorParity -v
- name: release-notes parity gate (HARD — #2479 batches 6+135: render + parser edges)
run: |
cd src/go/release-notes && go build -o /tmp/release-notes .
/tmp/release-notes replay truth.json
cd src/go/release-notes && go build -o /tmp/release-notes-${{ gitea.run_id }} .
/tmp/release-notes-${{ gitea.run_id }} replay truth.json
- name: model-profiles parity gate (HARD — #2479 batches 7+145: detection + edge pins)
run: |
cd src/go/model-profiles && go build -o /tmp/model-profiles .
/tmp/model-profiles replay truth.json
cd src/go/model-profiles && go build -o /tmp/model-profiles-${{ gitea.run_id }} .
/tmp/model-profiles-${{ gitea.run_id }} replay truth.json
- name: model-routing parity gate (HARD — #2479 batches 8+136: rank + cost-override)
run: |
cd src/go/model-routing && go build -o /tmp/model-routing .
/tmp/model-routing replay truth.json
cd src/go/model-routing && go build -o /tmp/model-routing-${{ gitea.run_id }} .
/tmp/model-routing-${{ gitea.run_id }} replay truth.json
- name: work-manager parity gate (HARD — #2479 batches 9+137+156: batching + lifecycle)
run: |
cd src/go/work-manager && go build -o /tmp/work-manager .
/tmp/work-manager replay truth.json
cd src/go/work-manager && go test -run TestLifecycleParity -v
cd src/go/work-manager && go build -o /tmp/work-manager-${{ gitea.run_id }} . && /tmp/work-manager-${{ gitea.run_id }} replay truth.json && go test -run TestLifecycleParity -v
- name: core-server parity gate (HARD — #2479 batches 10+138: envelopes + extraction/identity)
run: |
cd src/go/core-server && go build -o /tmp/core-server .
/tmp/core-server replay truth.json
cd src/go/core-server && go build -o /tmp/core-server-${{ gitea.run_id }} .
/tmp/core-server-${{ gitea.run_id }} replay truth.json
- name: builder-bridge parity + improvement gate (HARD — #2479 batches 11+139: render/LRU + TTL/refresh/key)
run: |
cd src/go/builder-bridge && go build -o /tmp/builder-bridge .
/tmp/builder-bridge replay truth.json
cd src/go/builder-bridge && go build -o /tmp/builder-bridge-${{ gitea.run_id }} .
/tmp/builder-bridge-${{ gitea.run_id }} replay truth.json
- name: voicebox parity + improvement gate (HARD — #2479 batches 12+140: hook + full manifest)
run: |
cd src/go/voicebox && go build -o /tmp/voicebox .
/tmp/voicebox replay truth.json
cd src/go/voicebox && go build -o /tmp/voicebox-${{ gitea.run_id }} .
/tmp/voicebox-${{ gitea.run_id }} replay truth.json
- name: voice-sync parity gate (HARD — #2479 batches 35+143: extract + unicode/generate)
run: |
cd src/go/voice-sync && go build -o /tmp/voice-sync .
/tmp/voice-sync replay truth.json
cd src/go/voice-sync && go build -o /tmp/voice-sync-${{ gitea.run_id }} .
/tmp/voice-sync-${{ gitea.run_id }} replay truth.json
- name: progressive-escalation parity gate (HARD — #2479 batches 44+147: full truth table)
run: |
cd src/go/progressive-escalation && go build -o /tmp/progressive-escalation .
/tmp/progressive-escalation replay truth.json
cd src/go/progressive-escalation && go build -o /tmp/progressive-escalation-${{ gitea.run_id }} .
/tmp/progressive-escalation-${{ gitea.run_id }} replay truth.json
- name: message-queue parity gate (HARD — #2479 batches 61+148: full pattern table)
run: |
cd src/go/message-queue && go build -o /tmp/message-queue .
/tmp/message-queue replay truth.json
cd src/go/message-queue && go build -o /tmp/message-queue-${{ gitea.run_id }} .
/tmp/message-queue-${{ gitea.run_id }} replay truth.json
- name: outcome-ledger parity gate (HARD — #2479 batches 49+151: stats + live fixture)
run: |
cd src/go/outcome-ledger && go build -o /tmp/outcome-ledger .
/tmp/outcome-ledger replay truth.json
cd src/go/outcome-ledger && go build -o /tmp/outcome-ledger-${{ gitea.run_id }} .
/tmp/outcome-ledger-${{ gitea.run_id }} replay truth.json
- name: auto-context parity gate (HARD — #2479 batches 50+157: oracle-exact keywords)
run: |
cd src/go/auto-context && go build -o /tmp/auto-context .
/tmp/auto-context replay truth.json
cd src/go/auto-context && go build -o /tmp/auto-context-${{ gitea.run_id }} .
/tmp/auto-context-${{ gitea.run_id }} replay truth.json
- name: night-mode parity gate (HARD — #2479 batches 60+167: state-machine cores)
run: |
cd src/go/night-mode && go build -o /tmp/night-mode .
cd src/go/night-mode && go test -run TestLifecycleParity -v
cd src/go/night-mode && go build -o /tmp/night-mode-${{ gitea.run_id }} . && go test -run TestLifecycleParity -v
- name: sleep-time parity gate (HARD — #2479 batches 11+168: transcript kernels)
run: |
cd src/go/sleep-time && go build -o /tmp/sleep-time .
cd src/go/sleep-time && go test -run TestTranscriptKernels -v
cd src/go/sleep-time && go build -o /tmp/sleep-time-${{ gitea.run_id }} . && go test -run TestTranscriptKernels -v
- name: response-adapter parity gate (HARD — #2479 batches 109+170: parsers + provenance)
run: |
cd src/go/response-adapter && go build -o /tmp/response-adapter .
/tmp/response-adapter replay truth.json
cd src/go/response-adapter && go build -o /tmp/response-adapter-${{ gitea.run_id }} .
/tmp/response-adapter-${{ gitea.run_id }} replay truth.json
- name: standardized-providers parity gate (HARD — #2479 batches 62+171: registry + connect gate)
run: |
cd src/go/standardized-providers && go build -o /tmp/standardized-providers .
/tmp/standardized-providers replay truth.json
cd src/go/standardized-providers && go test -run TestConnectDecisionParity -v
cd src/go/standardized-providers && go build -o /tmp/standardized-providers-${{ gitea.run_id }} . && /tmp/standardized-providers-${{ gitea.run_id }} replay truth.json && go test -run TestConnectDecisionParity -v
- name: recall-uplift parity gate (HARD — #2479 batches 78+172: full expansion table)
run: |
cd src/go/recall-uplift && go build -o /tmp/recall-uplift .
/tmp/recall-uplift replay truth.json
cd src/go/recall-uplift && go build -o /tmp/recall-uplift-${{ gitea.run_id }} .
/tmp/recall-uplift-${{ gitea.run_id }} replay truth.json
- name: forge-core parity + improvement gate (HARD — #2479 batches 13+106+141: resolvers + lattice restore)
run: |
cd src/go/forge-core && go build -o /tmp/forge-core .
/tmp/forge-core replay truth.json
cd src/go/forge-core && go build -o /tmp/forge-core-${{ gitea.run_id }} .
/tmp/forge-core-${{ gitea.run_id }} replay truth.json
- name: forge-client parity gate (HARD — #2479 batch 133, oracle replay)
run: |
cd src/go/forge-client && go build -o /tmp/forge-client .
/tmp/forge-client replay truth.json
cd src/go/forge-client && go build -o /tmp/forge-client-${{ gitea.run_id }} .
/tmp/forge-client-${{ gitea.run_id }} replay truth.json
- name: elastic-cognition parity + improvement gate (HARD — #2479 batches 14+117: +budget/parse kernels)
run: |
cd src/go/elastic-cognition && go build -o /tmp/elastic-cognition .
/tmp/elastic-cognition replay truth.json
/tmp/elastic-cognition replay src/go/elastic-cognition/truth_budget_parse.json
cd src/go/elastic-cognition && go build -o /tmp/elastic-cognition-${{ gitea.run_id }} .
/tmp/elastic-cognition-${{ gitea.run_id }} replay truth.json
/tmp/elastic-cognition-${{ gitea.run_id }} replay truth_budget_parse.json
- name: auto-tasks parity + improvement gate (HARD — #2479 batches 15+144: adjacency + action/seq/gates)
run: |
cd src/go/auto-tasks && go build -o /tmp/auto-tasks .
/tmp/auto-tasks replay truth.json
cd src/go/auto-tasks && go build -o /tmp/auto-tasks-${{ gitea.run_id }} .
/tmp/auto-tasks-${{ gitea.run_id }} replay truth.json
- name: model-connect parity + improvement gate (HARD — #2479 batches 16+113: clean-name parser + edge top-up)
run: |
cd src/go/model-connect && go build -o /tmp/model-connect .
/tmp/model-connect replay truth.json
cd src/go/model-connect && go build -o /tmp/model-connect-${{ gitea.run_id }} .
/tmp/model-connect-${{ gitea.run_id }} replay truth.json
- name: yamllint (all workflow files — would have caught the parser bugs)
run: |
pip install yamllint 2>/dev/null || true
+1 -1
View File
@@ -1,6 +1,6 @@
# Rune
**Current release: v0.156.2**
**Current release: v0.158.0**
**Rune is a persistent personal agent designed to accumulate experience, develop reusable competence, and remain recognisably the same agent even when its underlying foundation model changes.**
+3
View File
@@ -145,3 +145,6 @@ henxels:
changed_with:
when: tests/fixtures/production/manifest.json
expect: tests/fixtures/production/test_production_fixtures.py
- henxel: "The dichotomy is enforced at the commit boundary — every src/rune module lands in its measured side, dead oracles and wrong-language kernels fail with the correct implementation as the instruction"
in: ./src/rune
dichotomy_language_verdict: true
+131
View File
@@ -189,3 +189,134 @@ def new_rune_modules_have_canary_or_test_coverage(param, file, root):
f"legacy debt goes in docs/module-coverage-debt.md (tracked, not silent)"
)
@statement("dichotomy_language_verdict", help="every src/rune module lands in its measured dichotomy side — wrong-language kernels, dead oracles, and regressions fail with the correct implementation as the instruction")
def dichotomy_language_verdict(param, file, scope):
"""The dichotomy gate (Nick, 2026-10-10): the language law enforced at the
commit boundary, with machine-actionable feedback for Rune/MiMo-Rune.
Authority: store/rebase/classification.json (the measured W0 map —
per-module side + evidence). Three violations, each with a specific
remediation instruction:
D1 WRONG-LANGUAGE KERNEL — a module classified RUST has no matching
Rust crate/kernel surface while a Go directory claims its name:
the deterministic core landed on the reactive side.
D2 DEAD ORACLE — a module classified GO/RUST has a ported kernel
(src/go/<name>/ or src/rust/<name>/ exists) but the Python module
has zero delegation refs (cc_loader / <name>_loader / go-surface
call). The port shipped; the adapter never calls it — a facade.
D3 REGRESSION — a module classified GO or RUST has NO port directory
at all AND the ratchet floor says it was already ported: progress
went backwards.
Feedback format: each failure names the verdict, the measured evidence,
and the literal next step (target path + oracle-first battery +
contract-first), so the builder agent can act without re-deriving.
"""
import json
import re as _re
if not (file.startswith("src/rune/") and file.endswith(".py")):
return None
stem = Path(file).stem
if stem.startswith(("canary_", "test_", "__")):
return None
root = scope.root
try:
cls = json.loads((root / "store" / "rebase" / "classification.json").read_text())
except (OSError, json.JSONDecodeError):
return None # no measured map: the audit instrument owns coverage; do not guess
rec = cls.get(stem)
if not isinstance(rec, dict):
return None
side = rec.get("side", "")
if side not in ("GO", "RUST", "TUI-LAST"):
return None
go_dir = root / "src" / "go" / stem
rust_dir = root / "src" / "rust" / stem
evidence = str(rec.get("evidence", ""))[:160]
# D1 — wrong-language kernel: a GO-classified module must not own a Rust
# crate that shadows its name, and vice versa.
if side == "RUST" and go_dir.is_dir() and not rust_dir.is_dir():
# Wave-3 kernels live in cognition_core by design (cc_<stem> externs).
# A RUST-classified module whose kernel exists there is correctly landed
# even without a same-named crate.
cc = root / "src" / "rust" / "cognition_core" / "src" / "lib.rs"
if cc.exists() and f"cc_{stem}" in cc.read_text(encoding="utf-8", errors="replace"):
return None
return (
f"DICHOTOMY D1 (wrong-language kernel): {stem} is measured RUST "
f"({evidence}) but src/go/{stem}/ exists with no src/rust/{stem}/. "
f"FIX: port the deterministic core to src/rust/{stem}/ (oracle-first "
f"truth battery from the Python module, parity-replayed as a HARD CI "
f"gate, construction contract FIRST per the absolute-scaffolding law), "
f"then retire the Go directory. Feedback path: scripts/dichotomy_audit.py"
)
if side == "GO" and rust_dir.is_dir() and not go_dir.is_dir():
return (
f"DICHOTOMY D1 (wrong-language kernel): {stem} is measured GO "
f"({evidence}) but src/rust/{stem}/ exists with no src/go/{stem}/. "
f"FIX: the reactive surface belongs in src/go/{stem}/ (parity battery "
f"+ HARD CI gate + contract first), then retire the Rust crate."
)
# D2 — dead oracle: the port exists but the Python module never delegates.
# Delegation forms (all observed in the codebase): cc_loader/_cc_core,
# sibling *_loader imports (ep_loader, qm_loader, ms_loader...), direct
# ctypes/CDLL. Known pre-existing facades live in the DICHOTOMY DEBT file
# (store/rebase/dichotomy_debt.json) — tracked, only-shrinks; a NEW facade
# (not in the debt list) fails with the wiring instruction.
ported = go_dir.is_dir() or rust_dir.is_dir()
if ported and side in ("GO", "RUST"):
text = scope.read_text(file) or ""
delegating = bool(
_re.search(
r"import\s+\w*loader\b|from\s+[\w.]+\s+import\s+\w*loader|"
r"_cc_core|cc_loader|ctypes|CDLL|go_surface|RUNE_\w+_CORE",
text,
)
)
is_loader = stem.endswith("_loader") or stem == "cc_loader"
if not delegating and not is_loader:
target = f"src/rust/{stem}/" if rust_dir.is_dir() else f"src/go/{stem}/"
try:
debt = set(json.loads(
(root / "store" / "rebase" / "dichotomy_debt.json").read_text()
).get("facades", []))
except (OSError, json.JSONDecodeError):
debt = set()
if stem in debt:
return None # tracked debt — visible in the debt file, list only shrinks
return (
f"DICHOTOMY D2 (dead oracle): {stem} has a ported kernel at "
f"{target} but the Python module has ZERO delegation references "
f"(no cc_loader/_cc_core/*_loader/ctypes call). The port is a "
f"facade — production still runs the Python path. FIX: wire the "
f"delegation (tier_manager pattern: kernel when available, _py_* "
f"parity floor otherwise, both pinned by tests). Pre-existing "
f"facades go in store/rebase/dichotomy_debt.json (tracked, "
f"list only shrinks). Feedback: scripts/dichotomy_audit.py"
)
# D3 — regression: the ratchet says this module was ported (kernel dir in
# git HEAD) but the working tree lost it.
if side in ("GO", "RUST") and not ported:
ratchet = root / "store" / "rebase" / "ported_ratchet.json"
try:
ratcheted = set(json.loads(ratchet.read_text()).get("ported", []))
except (OSError, json.JSONDecodeError, AttributeError):
ratcheted = set()
if stem in ratcheted:
return (
f"DICHOTOMY D3 (regression): {stem} is ratcheted as ported but no "
f"src/go/{stem}/ or src/rust/{stem}/ exists in the tree — ported "
f"work was deleted. RESTORE the kernel directory (git history has "
f"it); the ratchet floor never decreases."
)
return None
+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "rune"
version = "0.156.2"
version = "0.158.0"
description = "Rune — a stateful coding assistant with persistent memory, orchestration, and TUI"
requires-python = ">=3.10"
+205
View File
@@ -0,0 +1,205 @@
package main
// kernels30.go — #2479 operator batch: the P1-07 (#30) evidence kernels that
// operator-deep's first wave didn't cover. Oracle: src/rune/rune_operator.py
// _memory_query_from_trace / _observation_from_compaction /
// _verification_and_outcome / _probe_failure_classes. Truth battery:
// truth_operator30.json, replayed in-repo + HARD CI gate.
import (
"encoding/json"
"fmt"
"sort"
"strings"
)
// Bounded300 collapses text to one line bounded to limit chars (P1-07 #30).
// Exported alias for the CLI layer; bounded() in main.go is identical.
func Bounded300(text string, limit int) string { return bounded(text, limit) }
// MemoryQueryFromTrace — admitted blocks become {name: tokens}; dropped ride
// through with reasons. Observable selection state only.
func MemoryQueryFromTrace(trace map[string]any, taskID string) map[string]any {
blocks, _ := trace["blocks"].([]any)
admitted := map[string]any{}
dropped := []any{}
for _, b := range blocks {
bm, ok := b.(map[string]any)
if !ok {
continue
}
name, _ := bm["name"].(string)
tokens, _ := bm["tokens"].(float64)
if admittedFlag, _ := bm["admitted"].(bool); admittedFlag {
admitted[name] = tokens
} else {
dropped = append(dropped, map[string]any{"name": name, "tokens": tokens})
}
}
mt, _ := trace["memory_tokens"].(float64)
return map[string]any{
"task_id": taskID,
"admitted": admitted,
"dropped": dropped,
"memory_tokens": int(mt),
}
}
// ObservationFromCompaction — one compaction event → Observation.
// detail = json.dumps of the four keys, sort_keys=True (Python parity:
// archived, failed, persisted, triggered — alphabetical).
func ObservationFromCompaction(event map[string]any, taskID string) map[string]any {
toInt := func(k string) int {
if f, ok := event[k].(float64); ok {
return int(f)
}
return 0
}
summary := fmt.Sprintf("history compacted: %d -> %d tokens, %d turns summarized",
toInt("tokens_before"), toInt("tokens_after"), toInt("turns_summarized"))
detailKeys := []string{"archived", "failed", "persisted", "triggered"}
detailMap := map[string]any{}
for _, k := range detailKeys {
detailMap[k] = event[k]
}
db, _ := json.Marshal(detailMap)
// Python json.dumps default separators (', ' / ': ') parity:
db = pythonDumpSpacing(db)
return map[string]any{
"task_id": taskID,
"kind": "compaction",
"summary": bounded(summary, 300),
"detail": bounded(string(db), 300),
}
}
// VerificationAndOutcome — the frozen method contract: 'exit_code' when a
// run_command tool event completed successfully, 'test' when run_tests did,
// else 'none'. passed = response.success AND no error/failed event. The
// none-branch returns verification=null (never self-report) + an Outcome
// whose verification_id is empty.
func VerificationAndOutcome(success bool, toolEvents []map[string]any, degraded []string, taskID string) map[string]any {
method := "none"
evidence := ""
for _, ev := range toolEvents {
if ev["kind"] != "completed" {
continue
}
result, _ := ev["result"].(map[string]any)
if result == nil || result["success"] != true {
continue
}
req, _ := ev["request"].(map[string]any)
name, _ := req["name"].(string)
if name == "run_command" && method == "none" {
method = "exit_code"
r, _ := result["result"].(string)
if r == "" {
r = "run_command exit 0"
}
evidence = bounded(r, 300)
} else if name == "run_tests" {
method = "test"
r, _ := result["result"].(string)
if r == "" {
r = "run_tests passed"
}
evidence = bounded(r, 300)
break
}
}
hasToolFailure := false
for _, ev := range toolEvents {
if ev["kind"] == "error" || ev["kind"] == "failed" {
hasToolFailure = true
break
}
}
passed := success && !hasToolFailure
status := "completed"
if !success {
status = "failed"
}
// sorted-dedup degraded (Python: sorted(set(degraded)))
seen := map[string]bool{}
var dg []string
for _, d := range degraded {
if !seen[d] {
seen[d] = true
dg = append(dg, d)
}
}
sort.Strings(dg)
out := map[string]any{
"method": method,
"evidence": evidence,
"passed": passed,
"status": status,
"degraded": dg,
"verification_id": "",
}
if method != "none" && passed {
out["verification_id"] = "vr_" + taskID // id minted by the adapter; kernel returns the contract
}
return out
}
// ProbeFailureClasses — the exception classes the probe handler must never
// leak into chat. The Python oracle returns the class NAME tuple (import-
// available case): OSError, ValueError, TypeError, KeyError, and
// ProbeBudgetExceeded when evidence_probe imports. Budget handling stays in
// the Python adapter (task-scoped dirs); the kernel pins the CONTRACT.
func ProbeFailureClasses(includeBudget bool) []string {
classes := []string{"OSError", "ValueError", "TypeError", "KeyError"}
if includeBudget {
classes = append(classes, "ProbeBudgetExceeded")
}
return classes
}
// pythonDumpSpacing re-spaces Go's compact JSON to Python json.dumps
// defaults: ", " after items and ": " after keys (top level only — the
// detail map is flat).
func pythonDumpSpacing(b []byte) []byte {
// Flat map, one level: transform compact Go JSON to Python json.dumps
// default separators. State machine over bytes; strings tracked.
var out strings.Builder
inStr := false
esc := false
for i, c := range b {
if inStr {
out.WriteByte(c)
if esc {
esc = false
} else if c == '\\' {
esc = true
} else if c == '"' {
inStr = false
}
continue
}
switch c {
case '"':
inStr = true
out.WriteByte(c)
case ',':
out.WriteByte(c)
if i+1 < len(b) {
out.WriteByte(' ')
}
case ':':
out.WriteByte(c)
if i+1 < len(b) {
out.WriteByte(' ')
}
default:
out.WriteByte(c)
}
}
return []byte(out.String())
}
// droppedBlockParity guard: Python dict drops preserve first-seen order —
// the _re.Dropped slice must NOT be re-sorted. (Asserted in the truth rows.)
var _ = strings.TrimSpace
+199
View File
@@ -0,0 +1,199 @@
[
{
"op": "probe_classes",
"want": [
"OSError",
"ValueError",
"TypeError",
"KeyError",
"ProbeBudgetExceeded"
]
},
{
"op": "mq",
"trace": {
"blocks": [
{
"name": "constitution",
"tokens": 400,
"admitted": true
},
{
"name": "history",
"tokens": 900,
"admitted": false
},
{
"name": "pins",
"tokens": 120,
"admitted": true
}
],
"memory_tokens": 520
},
"want": {
"admitted": {
"constitution": 400,
"pins": 120
},
"dropped": [
{
"name": "history",
"tokens": 900
}
],
"memory_tokens": 520
}
},
{
"op": "obs_compaction",
"event": {
"tokens_before": 8000,
"tokens_after": 3000,
"turns_summarized": 12,
"triggered": true,
"archived": false,
"failed": 0,
"persisted": "yes"
},
"want": {
"kind": "compaction",
"summary": "history compacted: 8000 -> 3000 tokens, 12 turns summarized",
"detail": "{\"archived\": false, \"failed\": 0, \"persisted\": \"yes\", \"triggered\": true}"
}
},
{
"op": "obs_degraded",
"degraded": [
"voice",
"cache",
"voice"
],
"want": [
{
"kind": "degraded",
"summary": "subsystem unavailable: cache"
},
{
"kind": "degraded",
"summary": "subsystem unavailable: voice"
}
]
},
{
"op": "verif_exit",
"success": true,
"tool_events": [
{
"kind": "completed",
"request": {
"call_id": "c1",
"name": "run_command",
"arguments": {},
"source": "op"
},
"result": {
"success": true,
"result": "r"
}
}
],
"degraded": [],
"want": {
"method": "exit_code",
"passed": true,
"status": "completed",
"vid": true,
"degraded": []
}
},
{
"op": "verif_test",
"success": true,
"tool_events": [
{
"kind": "completed",
"request": {
"call_id": "c1",
"name": "run_command",
"arguments": {},
"source": "op"
},
"result": {
"success": true,
"result": "r"
}
},
{
"kind": "completed",
"request": {
"call_id": "c1",
"name": "run_tests",
"arguments": {},
"source": "op"
},
"result": {
"success": true,
"result": "r"
}
}
],
"degraded": [],
"want": {
"method": "test",
"passed": true
}
},
{
"op": "verif_none",
"success": true,
"tool_events": [],
"degraded": [
"voice"
],
"want": {
"v_is_none": true,
"status": "completed",
"degraded": [
"voice"
]
}
},
{
"op": "verif_toolfail",
"success": true,
"tool_events": [
{
"kind": "completed",
"request": {
"call_id": "c1",
"name": "run_command",
"arguments": {},
"source": "op"
},
"result": {
"success": true,
"result": "r"
}
},
{
"kind": "failed",
"request": {
"call_id": "c1",
"name": "web",
"arguments": {},
"source": "op"
},
"result": {
"success": false
}
}
],
"degraded": [],
"want": {
"passed": false,
"status": "completed",
"vid": ""
}
}
]
@@ -0,0 +1,138 @@
package main
// truth_operator30_test.go — #2479 operator-batch parity gate: replays
// truth_operator30.json (generated from the LIVE Python oracle
// src/rune/rune_operator.py) through the Go kernels.
import (
"encoding/json"
"os"
"reflect"
"testing"
)
type op30Row struct {
Op string `json:"op"`
Trace map[string]any `json:"trace"`
Event map[string]any `json:"event"`
Degraded []string `json:"degraded"`
Success *bool `json:"success"`
ToolEvents []map[string]any `json:"tool_events"`
Want map[string]any `json:"want"`
WantList []map[string]any `json:"want_list"`
WantStrings []string `json:"want_strings"`
}
// toF normalizes JSON numbers (float64 on decode) vs kernel ints.
func toF(v any) float64 {
switch x := v.(type) {
case float64:
return x
case int:
return float64(x)
case int64:
return float64(x)
default:
return -1e308
}
}
func TestOperator30Parity(t *testing.T) {
raw, err := os.ReadFile("truth_operator30.json")
if err != nil {
t.Fatalf("truth_operator30.json missing: %v", err)
}
var rows []struct {
Op string `json:"op"`
Trace map[string]any `json:"trace"`
Event map[string]any `json:"event"`
Degraded []string `json:"degraded"`
Want json.RawMessage `json:"want"`
WantList []map[string]any `json:"want_list"`
WantStrings []string `json:"want_strings"`
}
if err := json.Unmarshal(raw, &rows); err != nil {
t.Fatalf("unparseable: %v", err)
}
// wire into the ops CLI style: each kernel callable from the test
for i, c := range rows {
switch c.Op {
case "probe_classes":
got := ProbeFailureClasses(true)
var want []string
_ = json.Unmarshal(c.Want, &want)
if !reflect.DeepEqual(got, want) {
t.Errorf("row %d probe_classes: got %v want %v", i, got, want)
}
case "mq":
got := MemoryQueryFromTrace(c.Trace, "t1")
want := map[string]any{}
_ = json.Unmarshal(c.Want, &want)
if !reflect.DeepEqual(got["admitted"], want["admitted"]) {
t.Errorf("row %d mq admitted: got %v want %v", i, got["admitted"], want["admitted"])
}
if !reflect.DeepEqual(got["dropped"], want["dropped"]) {
t.Errorf("row %d mq dropped: got %v want %v", i, got["dropped"], want["dropped"])
}
if toF(got["memory_tokens"]) != toF(want["memory_tokens"]) {
t.Errorf("row %d mq memory_tokens: got %v want %v", i, got["memory_tokens"], want["memory_tokens"])
}
case "obs_compaction":
got := ObservationFromCompaction(c.Event, "t1")
want := map[string]any{}
_ = json.Unmarshal(c.Want, &want)
for _, k := range []string{"kind", "summary", "detail"} {
if got[k] != want[k] {
t.Errorf("row %d obs_compaction %s: got %v want %v", i, k, got[k], want[k])
}
}
case "obs_degraded":
got := degradedObservations(c.Degraded, "t1")
var wantList []map[string]any
_ = json.Unmarshal(c.Want, &wantList)
// oracle want_list carries {kind, summary}; Go returns summaries
for j, w := range wantList {
wantSummary := w["summary"].(string)
if got[j] != wantSummary {
t.Errorf("row %d obs_degraded[%d]: got %q want %q", i, j, got[j], wantSummary)
}
}
}
}
}
func TestVerificationAndOutcomeContract(t *testing.T) {
mk := func(name, kind string, success bool) map[string]any {
return map[string]any{
"kind": kind,
"request": map[string]any{"name": name},
"result": map[string]any{"success": success, "result": "r"},
}
}
// exit_code path
got := VerificationAndOutcome(true, []map[string]any{mk("run_command", "completed", true)}, nil, "t1")
if got["method"] != "exit_code" || got["passed"] != true || got["status"] != "completed" {
t.Errorf("exit_code: got %v", got)
}
if got["verification_id"] == "" {
t.Errorf("exit_code: verification_id must be set when passed")
}
// test precedence over exit_code
got2 := VerificationAndOutcome(true, []map[string]any{mk("run_command", "completed", true), mk("run_tests", "completed", true)}, nil, "t1")
if got2["method"] != "test" {
t.Errorf("test precedence: got %v", got2["method"])
}
// none-branch: no evidence ran — verification must NOT be claimed
got3 := VerificationAndOutcome(true, nil, []string{"voice"}, "t1")
if got3["method"] != "none" || got3["verification_id"] != "" {
t.Errorf("none-branch: got %v", got3)
}
if !reflect.DeepEqual(got3["degraded"], []string{"voice"}) {
t.Errorf("none-branch degraded: got %v", got3["degraded"])
}
// tool failure falsifies: passed=false, verification_id empty even with method
got4 := VerificationAndOutcome(true, []map[string]any{mk("run_command", "completed", true), mk("web", "failed", false)}, nil, "t1")
if got4["passed"] != false || got4["verification_id"] != "" {
t.Errorf("toolfail: got %v", got4)
}
}
+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.156.2"
__version__ = "0.158.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 -1
View File
@@ -233,7 +233,7 @@ def main() -> int:
)
check(
"Rune minor version advertises provisioning and restore verification",
'__version__ = "0.156.2"' in rune_version,
'__version__ = "0.158.0"' in rune_version,
failures,
)
# #169 policy update: auto-bump on merge is sanctioned (Nick directive:
+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.156.2
Version: v0.158.0
Features: 41 (24 original + 17 new native commands)
Usage:
@@ -2037,7 +2037,7 @@ class RuneApp(App):
# Show version info
self.chat_channel.add_message(
"system",
f"[dim]Rune v0.156.2 | Textual TUI | {len(loaded)} native modules[/dim]",
f"[dim]Rune v0.158.0 | Textual TUI | {len(loaded)} native modules[/dim]",
)
# Auto-show night mode suggestion if evening/night hours
+68
View File
@@ -0,0 +1,68 @@
{
"_doc": "DICHOTOMY DEBT (dichotomy_language_verdict D2): pre-existing ported-but-never-delegated facades. Tracked debt \u2014 the list ONLY shrinks; new facades fail the henxels gate. Each entry is wired off per the dichotomy tranche batches.",
"updated": "2026-10-10",
"facades": [
"attention_capsule",
"build_basis",
"cache",
"capability_ledger",
"cognitive_budgeter",
"construction_activation",
"construction_commands",
"construction_depth",
"construction_intent",
"construction_interface",
"construction_mode",
"construction_pattern",
"construction_patterns_builtin",
"construction_projection",
"context_pressure",
"contracts",
"dependency_tracker",
"drift_cache",
"drift_ledger",
"drift_observability",
"drift_resume",
"failure_recovery",
"graph_memory",
"graph_projection",
"impact_preview",
"inference_trace",
"intent_continuity",
"iteration",
"layout_contract",
"memory_selector",
"microkernel",
"outcome_ledger",
"programme_continuation",
"programme_gates",
"progressive_escalation",
"project_registry",
"prompt_sync",
"recall_uplift",
"response_adapter",
"route_risk_flags",
"rune_profiler",
"rune_spinner",
"salience_gate",
"scaffold",
"self_improve",
"shard_manager",
"structural_migration",
"structural_model",
"structural_store",
"subconscious_pass",
"system_registry",
"task_gate",
"task_persist",
"testing_mode",
"time_awareness",
"toolchain",
"voice_hybrid",
"voice_sync",
"voicebox",
"wait_guard",
"wait_guard_corpus",
"warm_neuron_store"
]
}
+83
View File
@@ -0,0 +1,83 @@
{
"_doc": "DICHOTOMY RATCHET (dichotomy_language_verdict D3): the floor of ported modules. Never decreases; every dichotomy batch extends it. A ratcheted module whose kernel directory disappears fails the henxels gate.",
"updated": "2026-10-10",
"ported": [
"abstraction",
"attention_capsule",
"audit_ledger",
"behavior",
"behaviour_ledger",
"build_basis",
"cache",
"capability_broker",
"capability_fit",
"capability_ledger",
"claim_audit",
"cognitive_budgeter",
"construction_activation",
"construction_commands",
"construction_decision",
"construction_depth",
"construction_intent",
"construction_interface",
"construction_mode",
"construction_pattern",
"construction_patterns_builtin",
"construction_projection",
"context_pressure",
"contracts",
"dependency_tracker",
"drift_cache",
"drift_core",
"drift_ledger",
"drift_observability",
"drift_resume",
"failure_recovery",
"graph_memory",
"graph_projection",
"impact_preview",
"inference_trace",
"intent_continuity",
"iteration",
"layout_contract",
"memory_selector",
"microkernel",
"outcome_ledger",
"pins",
"programme_continuation",
"programme_gates",
"progressive_escalation",
"project_registry",
"prompt_sync",
"recall_uplift",
"response_adapter",
"route_risk_flags",
"rune_profiler",
"rune_spinner",
"salience_gate",
"scaffold",
"self_improve",
"shard_manager",
"spine",
"spine_loader",
"structural_migration",
"structural_model",
"structural_store",
"subconscious_pass",
"system_registry",
"task_gate",
"task_persist",
"testing_mode",
"time_awareness",
"token_optimizer",
"toolchain",
"verification_layer",
"voice_hybrid",
"voice_sync",
"voicebox",
"wait_guard",
"wait_guard_corpus",
"warm_neuron_store",
"witness"
]
}
File diff suppressed because it is too large. Load diff