Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0666c042fe | ||
|
|
4752db026d | ||
|
|
2c19cd0793 | ||
|
|
2ec9091229 | ||
|
|
956802dc39 | ||
|
|
6ad7a9efce | ||
|
|
b6af845c89 | ||
|
|
96e27fdaa2 | ||
|
|
86ac65b501 | ||
|
|
b27bd271d8 | ||
|
|
89b3cf7b25 | ||
|
|
40619a3eb5 |
No files matched your search
+53
-64
@@ -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,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.**
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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
@@ -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"
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
@@ -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
Reference in new issue
Block a user