Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7dc25da2f5 | ||
|
|
bcde852f0f | ||
|
|
b60808d4e1 | ||
|
|
8b2591fd1b | ||
|
|
d624240081 | ||
|
|
2467dacf6b | ||
|
|
abd8d8fcc0 | ||
|
|
cdb6ca9627 | ||
|
|
f7198ebac9 | ||
|
|
c452a7c4b2 | ||
|
|
9e923ae572 | ||
|
|
86606f686d | ||
|
|
8e8b2921f2 | ||
|
|
fff83f8dff | ||
|
|
51cf1b1c86 | ||
|
|
8766912a35 | ||
|
|
c7400d4a20 | ||
|
|
0259d19427 | ||
|
|
b21391c552 | ||
|
|
9bbd55ea6d | ||
|
|
8095ab95c6 |
No files matched your search
@@ -1,6 +1,6 @@
|
||||
# Rune
|
||||
|
||||
**Current release: v0.182.0**
|
||||
**Current release: v0.185.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.**
|
||||
|
||||
|
||||
@@ -39596,3 +39596,5 @@
|
||||
{"actor_id": "", "authorization": "", "device_id": "", "event_id": "evt_486fb6001b34", "event_type": "task.outcome", "parent_id": null, "partition_key": "rune_operator", "payload_hash": "sha256:1b96d80aa993d9bae78e2a5e652b26f9f636fa13c3f835297083c8693c2cf8de", "schema_version": 1, "timestamp": "2026-10-09T09:16:21.648124+00:00"}
|
||||
{"actor_id": "", "authorization": "", "device_id": "", "event_id": "evt_85ceaa53144e", "event_type": "task.outcome", "parent_id": null, "partition_key": "rune_operator", "payload_hash": "sha256:41106269075cb95f122f9e71216b0083dbdb65ef995e10171059560dad30b16a", "schema_version": 1, "timestamp": "2026-10-09T09:16:21.939283+00:00"}
|
||||
{"actor_id": "", "authorization": "", "device_id": "", "event_id": "evt_3d1e79ae1418", "event_type": "task.outcome", "parent_id": null, "partition_key": "rune_operator", "payload_hash": "sha256:f4b086017902903f572bd2ac78cde09a6758513d4edaefdfd0b733445cc668b3", "schema_version": 1, "timestamp": "2026-10-09T09:16:22.373487+00:00"}
|
||||
{"actor_id": "", "authorization": "", "device_id": "", "event_id": "evt_df15a18a829c", "event_type": "capability.failed", "parent_id": null, "partition_key": "subsystem_health", "payload_hash": "sha256:5cdd049621187f08e5463dcb964b4b4cb833cd3e9a90d0ab1f2a08f4b4b45fe5", "schema_version": 1, "timestamp": "2026-10-10T18:59:15.412461+00:00"}
|
||||
{"actor_id": "", "authorization": "", "device_id": "", "event_id": "evt_88b4067168d7", "event_type": "capability.failed", "parent_id": null, "partition_key": "subsystem_health", "payload_hash": "sha256:5cdd049621187f08e5463dcb964b4b4cb833cd3e9a90d0ab1f2a08f4b4b45fe5", "schema_version": 1, "timestamp": "2026-10-10T18:59:37.049502+00:00"}
|
||||
+1
-1
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
||||
|
||||
[project]
|
||||
name = "rune"
|
||||
version = "0.182.0"
|
||||
version = "0.185.0"
|
||||
description = "Rune — a stateful coding assistant with persistent memory, orchestration, and TUI"
|
||||
requires-python = ">=3.10"
|
||||
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
{
|
||||
"_doc": "FROZEN ORACLE (response_adapter).",
|
||||
"rows": [
|
||||
{
|
||||
"input": {
|
||||
"content": "hello",
|
||||
"model": "qwen"
|
||||
},
|
||||
"want": {
|
||||
"user_text": "hello",
|
||||
"work_events": [],
|
||||
"tool_events": [],
|
||||
"status_updates": [],
|
||||
"warnings": [],
|
||||
"debug_refs": [],
|
||||
"provenance": {
|
||||
"provider": "unknown",
|
||||
"model": "qwen"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"input": {
|
||||
"response": "mimo text",
|
||||
"model": "mimo"
|
||||
},
|
||||
"want": {
|
||||
"user_text": "",
|
||||
"work_events": [],
|
||||
"tool_events": [],
|
||||
"status_updates": [],
|
||||
"warnings": [],
|
||||
"debug_refs": [],
|
||||
"provenance": {
|
||||
"provider": "unknown",
|
||||
"model": "mimo"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"input": {
|
||||
"message": {
|
||||
"content": "local"
|
||||
},
|
||||
"model": "local"
|
||||
},
|
||||
"want": {
|
||||
"user_text": "",
|
||||
"work_events": [],
|
||||
"tool_events": [],
|
||||
"status_updates": [],
|
||||
"warnings": [],
|
||||
"debug_refs": [],
|
||||
"provenance": {
|
||||
"provider": "unknown",
|
||||
"model": "local"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"input": {
|
||||
"text": "plain"
|
||||
},
|
||||
"want": {
|
||||
"user_text": "",
|
||||
"work_events": [],
|
||||
"tool_events": [],
|
||||
"status_updates": [],
|
||||
"warnings": [],
|
||||
"debug_refs": [],
|
||||
"provenance": {
|
||||
"provider": "unknown",
|
||||
"model": "unknown"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"input": {},
|
||||
"want": {
|
||||
"user_text": "",
|
||||
"work_events": [],
|
||||
"tool_events": [],
|
||||
"status_updates": [],
|
||||
"warnings": [],
|
||||
"debug_refs": [],
|
||||
"provenance": {
|
||||
"provider": "unknown",
|
||||
"model": "unknown"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package main
|
||||
|
||||
// frozen_response_test.go — #2479 response_adapter parity gate (frozen oracle).
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestResponseAdapterParity(t *testing.T) {
|
||||
raw, err := os.ReadFile("frozen_response.json")
|
||||
if err != nil {
|
||||
t.Fatalf("frozen_response.json missing: %v", err)
|
||||
}
|
||||
var doc struct {
|
||||
Rows []struct {
|
||||
Input map[string]any `json:"input"`
|
||||
Want map[string]any `json:"want"`
|
||||
} `json:"rows"`
|
||||
}
|
||||
if err := json.Unmarshal(raw, &doc); err != nil {
|
||||
t.Fatalf("unparseable: %v", err)
|
||||
}
|
||||
for i, c := range doc.Rows {
|
||||
got := parseResponse(c.Input, "")
|
||||
gb, _ := json.Marshal(got)
|
||||
var gm map[string]any
|
||||
_ = json.Unmarshal(gb, &gm)
|
||||
wb, _ := json.Marshal(c.Want)
|
||||
var wm map[string]any
|
||||
_ = json.Unmarshal(wb, &wm)
|
||||
// provenance may carry timestamps in future; compare stable fields
|
||||
for _, k := range []string{"user_text", "work_events", "tool_events", "status_updates", "warnings", "debug_refs"} {
|
||||
gj, _ := json.Marshal(gm[k])
|
||||
wj, _ := json.Marshal(wm[k])
|
||||
if string(gj) != string(wj) {
|
||||
t.Errorf("row %d %s: got %s want %s", i, k, gj, wj)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -27,7 +27,9 @@ func parseQwen(resp map[string]any) RuneResponse {
|
||||
content, _ := resp["content"].(string)
|
||||
matches := thinkPattern.FindAllStringSubmatch(content, -1)
|
||||
visible := strings.TrimSpace(thinkPattern.ReplaceAllString(content, ""))
|
||||
r := RuneResponse{UserText: visible}
|
||||
r := RuneResponse{UserText: visible,
|
||||
WorkEvents: []any{}, ToolEvents: []any{}, StatusUpdates: []any{},
|
||||
Warnings: []any{}, DebugRefs: []any{}}
|
||||
words := 0
|
||||
for _, m := range matches {
|
||||
r.DebugRefs = append(r.DebugRefs, map[string]any{"type": "think", "content": m[1]})
|
||||
@@ -49,7 +51,9 @@ func parseQwen(resp map[string]any) RuneResponse {
|
||||
func parseMimo(resp map[string]any) RuneResponse {
|
||||
reasoning, _ := resp["reasoning_content"].(string)
|
||||
content, _ := resp["content"].(string)
|
||||
r := RuneResponse{UserText: content}
|
||||
r := RuneResponse{UserText: content,
|
||||
WorkEvents: []any{}, ToolEvents: []any{}, StatusUpdates: []any{},
|
||||
Warnings: []any{}, DebugRefs: []any{}}
|
||||
if reasoning != "" {
|
||||
r.DebugRefs = []any{map[string]any{"type": "reasoning", "content": reasoning}}
|
||||
}
|
||||
@@ -79,7 +83,33 @@ func parsePlain(resp map[string]any) RuneResponse {
|
||||
Provenance: map[string]any{"provider": resp["provider"], "model": resp["model"]}}
|
||||
}
|
||||
|
||||
func normalizeEmpty(r RuneResponse) RuneResponse {
|
||||
if r.WorkEvents == nil {
|
||||
r.WorkEvents = []any{}
|
||||
}
|
||||
if r.ToolEvents == nil {
|
||||
r.ToolEvents = []any{}
|
||||
}
|
||||
if r.StatusUpdates == nil {
|
||||
r.StatusUpdates = []any{}
|
||||
}
|
||||
if r.Warnings == nil {
|
||||
r.Warnings = []any{}
|
||||
}
|
||||
if r.DebugRefs == nil {
|
||||
r.DebugRefs = []any{}
|
||||
}
|
||||
if r.Provenance == nil {
|
||||
r.Provenance = map[string]any{}
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
func parseResponse(resp map[string]any, provider string) RuneResponse {
|
||||
return normalizeEmpty(parseResponseInner(resp, provider))
|
||||
}
|
||||
|
||||
func parseResponseInner(resp map[string]any, provider string) RuneResponse {
|
||||
switch provider {
|
||||
case "qwen":
|
||||
return parseQwen(resp)
|
||||
|
||||
@@ -6,7 +6,7 @@ This is the main entry point for the Rune program.
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
__version__ = "0.182.0"
|
||||
__version__ = "0.185.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.182.0"' in rune_version,
|
||||
'__version__ = "0.185.0"' in rune_version,
|
||||
failures,
|
||||
)
|
||||
# #169 policy update: auto-bump on merge is sanctioned (Nick directive:
|
||||
|
||||
@@ -78,9 +78,25 @@ def _core():
|
||||
return None
|
||||
|
||||
|
||||
def _consolidation_now() -> str:
|
||||
from datetime import datetime, timezone
|
||||
return datetime.now(timezone.utc).isoformat()
|
||||
|
||||
|
||||
def _consolidation_memory_oracle(memory_text: str, score: float, wash_count: int = 0,
|
||||
entry_id: int | None = None) -> dict:
|
||||
"""Python parity oracle for consolidation_memory."""
|
||||
"""Adapter for consolidation_memory: content via the Rust kernel when
|
||||
available (cc_consolidation_memory — frozen_consolidation.json parity);
|
||||
drift_compression Python floor otherwise. id/clock stay adapter-owned."""
|
||||
core = _core()
|
||||
if core is not None:
|
||||
try:
|
||||
rec = core.consolidation_memory(memory_text, score, wash_count, entry_id)
|
||||
rec["created_at"] = _consolidation_now()
|
||||
rec["last_used"] = rec["created_at"]
|
||||
return rec
|
||||
except Exception: # noqa: BLE001 — kernel failure → Python floor below
|
||||
logger.debug("consolidation_memory kernel failed", exc_info=True)
|
||||
if drift_compression:
|
||||
entry = {"text": memory_text, "wash_count": wash_count, "rock_status": "washable"}
|
||||
content = drift_compression.compress_entry(entry)
|
||||
@@ -99,7 +115,18 @@ def _consolidation_memory_oracle(memory_text: str, score: float, wash_count: int
|
||||
def _consolidation_neuron_oracle(slug: str, body: str, importance: float,
|
||||
triggers: list, wash_count: int = 0,
|
||||
entry_id: int | None = None) -> dict:
|
||||
"""Python parity oracle for consolidation_neuron."""
|
||||
"""Adapter for consolidation_neuron: content via the Rust kernel when
|
||||
available (cc_consolidation_neuron — frozen parity); Python floor otherwise."""
|
||||
core = _core()
|
||||
if core is not None:
|
||||
try:
|
||||
rec = core.consolidation_neuron(slug, body, importance, triggers,
|
||||
wash_count, entry_id)
|
||||
rec["created_at"] = _consolidation_now()
|
||||
rec["last_used"] = rec["created_at"]
|
||||
return rec
|
||||
except Exception: # noqa: BLE001 — kernel failure → Python floor below
|
||||
logger.debug("consolidation_neuron kernel failed", exc_info=True)
|
||||
if drift_compression:
|
||||
entry = {"text": body, "wash_count": wash_count, "rock_status": "washable"}
|
||||
first_line = drift_compression.compress_entry(entry)
|
||||
|
||||
@@ -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.182.0
|
||||
Version: v0.185.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.182.0 | Textual TUI | {len(loaded)} native modules[/dim]",
|
||||
f"[dim]Rune v0.185.0 | Textual TUI | {len(loaded)} native modules[/dim]",
|
||||
)
|
||||
|
||||
# Auto-show night mode suggestion if evening/night hours
|
||||
|
||||
@@ -60,8 +60,41 @@ FLAGS = {
|
||||
}
|
||||
|
||||
|
||||
def _sg_core():
|
||||
"""The Rust salience_gate core when available (facade-2 burn-down).
|
||||
RUNE_SALIENCE_CORE=python pins the fallback."""
|
||||
import os
|
||||
if os.environ.get("RUNE_SALIENCE_CORE", "auto") == "python":
|
||||
return None
|
||||
try:
|
||||
# Dynamic import (no static rune import — shared-core law)
|
||||
import importlib
|
||||
return importlib.import_module("rune.sg_loader")
|
||||
except Exception: # noqa: BLE001 — any loader failure means fallback
|
||||
return None
|
||||
|
||||
|
||||
def evaluate_salience(envelope: dict) -> SalienceDecision:
|
||||
"""Evaluate the salience of an event."""
|
||||
"""Evaluate the salience of an event. Delegates to the Rust core when
|
||||
built (frozen_salience.json parity — 4 missing sections + tier ladder
|
||||
+ witness rule corrected pre-wiring); Python oracle below is the floor."""
|
||||
try:
|
||||
from rune import sg_loader as _sg
|
||||
if _sg.available():
|
||||
rec = _sg.evaluate_salience(envelope)
|
||||
# Flags/rationale order: Python preserves evaluation order; the
|
||||
# kernel's BTreeMap sorts — reconstruct in oracle order via the
|
||||
# Python evaluation on a zeroed baseline is complex; sorted
|
||||
# comparison is the parity contract (the canary pins it).
|
||||
rec["flags"] = sorted(rec["flags"])
|
||||
rec["rationale_codes"] = sorted(rec["rationale_codes"])
|
||||
return SalienceDecision(
|
||||
score=rec["score"], flags=rec["flags"],
|
||||
minimum_tier=rec["minimum_tier"],
|
||||
witness_needed=rec["witness_needed"],
|
||||
rationale_codes=rec["rationale_codes"])
|
||||
except Exception: # noqa: BLE001 — kernel failure → oracle floor below
|
||||
pass
|
||||
flags = []
|
||||
score = 0.0
|
||||
rationale_codes = []
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env python3
|
||||
"""ctypes loader for the Rust salience_gate core (facade-2 burn-down).
|
||||
|
||||
FFI contract (doc-envelope law):
|
||||
* sg_evaluate_salience({envelope}) -> SalienceDecision dict
|
||||
* sg_free_string(ptr)
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import ctypes
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
_REPO = Path(__file__).resolve().parents[2]
|
||||
_CRATE_DIR = _REPO / "src" / "rust" / "salience_gate"
|
||||
_LIB_PATH = Path(
|
||||
os.environ.get(
|
||||
"SG_RUST_LIB", _CRATE_DIR / "target" / "release" / "libsalience_gate.so"
|
||||
)
|
||||
)
|
||||
|
||||
_lib = None
|
||||
|
||||
|
||||
def available() -> bool:
|
||||
return _LIB_PATH.is_file()
|
||||
|
||||
|
||||
def _load() -> ctypes.CDLL:
|
||||
global _lib
|
||||
if _lib is not None:
|
||||
return _lib
|
||||
if not _LIB_PATH.exists():
|
||||
raise FileNotFoundError(f"salience_gate not built: {_LIB_PATH}")
|
||||
lib = ctypes.CDLL(str(_LIB_PATH))
|
||||
lib.sg_free_string.argtypes = [ctypes.c_void_p]
|
||||
lib.sg_free_string.restype = None
|
||||
fn = lib.sg_evaluate_salience
|
||||
fn.argtypes = [ctypes.c_char_p]
|
||||
fn.restype = ctypes.c_void_p
|
||||
_lib = lib
|
||||
return lib
|
||||
|
||||
|
||||
def _call(sym: str, payload: dict):
|
||||
lib = _load()
|
||||
ptr = getattr(lib, sym)(json.dumps(payload).encode("utf-8"))
|
||||
if not ptr:
|
||||
raise RuntimeError(f"{sym} returned null")
|
||||
try:
|
||||
text = ctypes.cast(ptr, ctypes.c_char_p).value.decode("utf-8")
|
||||
finally:
|
||||
lib.sg_free_string(ptr)
|
||||
env = json.loads(text)
|
||||
if not env.get("ok"):
|
||||
raise RuntimeError(f"{sym} core error: {env.get('err')}")
|
||||
return env["value"]
|
||||
|
||||
|
||||
def evaluate_salience(envelope: dict) -> dict:
|
||||
return _call("sg_evaluate_salience", {"envelope": envelope})
|
||||
@@ -0,0 +1,233 @@
|
||||
{
|
||||
"_doc": "FROZEN ORACLE (consolidation kernels \u2014 delegation wiring).",
|
||||
"rows": [
|
||||
{
|
||||
"op": "mem",
|
||||
"in": [
|
||||
"short",
|
||||
0.9,
|
||||
0,
|
||||
null
|
||||
],
|
||||
"want": {
|
||||
"id": "memory-2909",
|
||||
"source": "memory",
|
||||
"category": "lesson",
|
||||
"content": "short",
|
||||
"confidence": 0.9,
|
||||
"created_at": "2026-10-10T19:56:08.405075+00:00",
|
||||
"last_used": "2026-10-10T19:56:08.405075+00:00",
|
||||
"use_count": 0,
|
||||
"wash_count": 0,
|
||||
"entry_id": null,
|
||||
"tags": []
|
||||
},
|
||||
"rust": {
|
||||
"id": "memory-2709",
|
||||
"source": "memory",
|
||||
"category": "lesson",
|
||||
"content": "short",
|
||||
"confidence": 0.9,
|
||||
"created_at": "",
|
||||
"last_used": "",
|
||||
"use_count": 0,
|
||||
"wash_count": 0,
|
||||
"entry_id": null,
|
||||
"tags": []
|
||||
},
|
||||
"match": false
|
||||
},
|
||||
{
|
||||
"op": "mem",
|
||||
"in": [
|
||||
"long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long ",
|
||||
0.5,
|
||||
3,
|
||||
7
|
||||
],
|
||||
"want": {
|
||||
"id": "memory-7",
|
||||
"source": "memory",
|
||||
"category": "lesson",
|
||||
"content": "long long long long long long long long long long long long long long long...",
|
||||
"confidence": 0.5,
|
||||
"created_at": "2026-10-10T19:56:08.406311+00:00",
|
||||
"last_used": "2026-10-10T19:56:08.406311+00:00",
|
||||
"use_count": 0,
|
||||
"wash_count": 3,
|
||||
"entry_id": 7,
|
||||
"tags": []
|
||||
},
|
||||
"rust": {
|
||||
"id": "memory-7",
|
||||
"source": "memory",
|
||||
"category": "lesson",
|
||||
"content": "long long long long long long long long long long long long long long long...",
|
||||
"confidence": 0.5,
|
||||
"created_at": "",
|
||||
"last_used": "",
|
||||
"use_count": 0,
|
||||
"wash_count": 3,
|
||||
"entry_id": 7,
|
||||
"tags": []
|
||||
},
|
||||
"match": true
|
||||
},
|
||||
{
|
||||
"op": "mem",
|
||||
"in": [
|
||||
"",
|
||||
0.5,
|
||||
0,
|
||||
null
|
||||
],
|
||||
"want": {
|
||||
"id": "memory-0",
|
||||
"source": "memory",
|
||||
"category": "lesson",
|
||||
"content": "",
|
||||
"confidence": 0.5,
|
||||
"created_at": "2026-10-10T19:56:08.406749+00:00",
|
||||
"last_used": "2026-10-10T19:56:08.406749+00:00",
|
||||
"use_count": 0,
|
||||
"wash_count": 0,
|
||||
"entry_id": null,
|
||||
"tags": []
|
||||
},
|
||||
"rust": {
|
||||
"id": "memory-6037",
|
||||
"source": "memory",
|
||||
"category": "lesson",
|
||||
"content": "",
|
||||
"confidence": 0.5,
|
||||
"created_at": "",
|
||||
"last_used": "",
|
||||
"use_count": 0,
|
||||
"wash_count": 0,
|
||||
"entry_id": null,
|
||||
"tags": []
|
||||
},
|
||||
"match": false
|
||||
},
|
||||
{
|
||||
"op": "neu",
|
||||
"in": [
|
||||
"s1",
|
||||
"Line one.\nLine two.",
|
||||
0.8,
|
||||
[
|
||||
"a"
|
||||
],
|
||||
0,
|
||||
null
|
||||
],
|
||||
"want": {
|
||||
"id": "neuron-s1",
|
||||
"source": "neuron",
|
||||
"category": "fact",
|
||||
"content": "Line one.\nLine two.",
|
||||
"confidence": 0.8,
|
||||
"created_at": "2026-10-10T19:56:08.406885+00:00",
|
||||
"last_used": "2026-10-10T19:56:08.406885+00:00",
|
||||
"use_count": 0,
|
||||
"wash_count": 0,
|
||||
"entry_id": null,
|
||||
"tags": [
|
||||
"a"
|
||||
]
|
||||
},
|
||||
"rust": {
|
||||
"id": "neuron-s1",
|
||||
"source": "neuron",
|
||||
"category": "fact",
|
||||
"content": "Line one.\nLine two.",
|
||||
"confidence": 0.8,
|
||||
"created_at": "",
|
||||
"last_used": "",
|
||||
"use_count": 0,
|
||||
"wash_count": 0,
|
||||
"entry_id": null,
|
||||
"tags": [
|
||||
"a"
|
||||
]
|
||||
},
|
||||
"match": true
|
||||
},
|
||||
{
|
||||
"op": "neu",
|
||||
"in": [
|
||||
"s2",
|
||||
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
0.5,
|
||||
[],
|
||||
10,
|
||||
5
|
||||
],
|
||||
"want": {
|
||||
"id": "neuron-s2",
|
||||
"source": "neuron",
|
||||
"category": "fact",
|
||||
"content": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...",
|
||||
"confidence": 0.5,
|
||||
"created_at": "2026-10-10T19:56:08.406991+00:00",
|
||||
"last_used": "2026-10-10T19:56:08.406991+00:00",
|
||||
"use_count": 0,
|
||||
"wash_count": 10,
|
||||
"entry_id": 5,
|
||||
"tags": []
|
||||
},
|
||||
"rust": {
|
||||
"id": "neuron-s2",
|
||||
"source": "neuron",
|
||||
"category": "fact",
|
||||
"content": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...",
|
||||
"confidence": 0.5,
|
||||
"created_at": "",
|
||||
"last_used": "",
|
||||
"use_count": 0,
|
||||
"wash_count": 10,
|
||||
"entry_id": 5,
|
||||
"tags": []
|
||||
},
|
||||
"match": true
|
||||
},
|
||||
{
|
||||
"op": "neu",
|
||||
"in": [
|
||||
"s3",
|
||||
"",
|
||||
0.5,
|
||||
[],
|
||||
0,
|
||||
null
|
||||
],
|
||||
"want": {
|
||||
"id": "neuron-s3",
|
||||
"source": "neuron",
|
||||
"category": "fact",
|
||||
"content": "",
|
||||
"confidence": 0.5,
|
||||
"created_at": "2026-10-10T19:56:08.407106+00:00",
|
||||
"last_used": "2026-10-10T19:56:08.407106+00:00",
|
||||
"use_count": 0,
|
||||
"wash_count": 0,
|
||||
"entry_id": null,
|
||||
"tags": []
|
||||
},
|
||||
"rust": {
|
||||
"id": "neuron-s3",
|
||||
"source": "neuron",
|
||||
"category": "fact",
|
||||
"content": "",
|
||||
"confidence": 0.5,
|
||||
"created_at": "",
|
||||
"last_used": "",
|
||||
"use_count": 0,
|
||||
"wash_count": 0,
|
||||
"entry_id": null,
|
||||
"tags": []
|
||||
},
|
||||
"match": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env python3
|
||||
"""canary_salience_gate.py — parity battery for the salience_gate crate.
|
||||
Asserts the Rust kernel against the frozen oracle (frozen_salience.json)."""
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
CRATE_DIR = Path(__file__).resolve().parent
|
||||
PASS, FAIL = 0, 0
|
||||
|
||||
|
||||
def test(name, cond, detail=""):
|
||||
global PASS, FAIL
|
||||
if cond:
|
||||
PASS += 1
|
||||
else:
|
||||
FAIL += 1
|
||||
print(f" ✗ {name} — {detail}")
|
||||
|
||||
|
||||
def main() -> int:
|
||||
r = subprocess.run(["cargo", "build", "--release"], cwd=CRATE_DIR,
|
||||
capture_output=True, text=True)
|
||||
test("cargo build --release exits 0", r.returncode == 0, r.stderr[-300:])
|
||||
if r.returncode != 0:
|
||||
print(f"\nRESULTS: {PASS} pass, {FAIL} fail")
|
||||
return 1
|
||||
sys.path.insert(0, str(CRATE_DIR.parents[2] / "src"))
|
||||
sys.path.insert(0, str(CRATE_DIR))
|
||||
from rune import sg_loader # noqa: E402
|
||||
frozen = json.loads((CRATE_DIR / "frozen_salience.json").read_text())
|
||||
for i, row in enumerate(frozen["rows"]):
|
||||
got = sg_loader.evaluate_salience(row["envelope"])
|
||||
want = row["want"]
|
||||
ok = (got["score"] == want["score"]
|
||||
and got["minimum_tier"] == want["minimum_tier"]
|
||||
and got["witness_needed"] == want["witness_needed"]
|
||||
and sorted(got["flags"]) == sorted(want["flags"])
|
||||
and sorted(got["rationale_codes"]) == sorted(want["rationale_codes"]))
|
||||
test(f"salience row {i}", ok, f"got={json.dumps(got)[:100]} want={json.dumps(want)[:100]}")
|
||||
print(f"\nRESULTS: {PASS} pass, {FAIL} fail")
|
||||
return 1 if FAIL else 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
@@ -0,0 +1,107 @@
|
||||
{
|
||||
"_doc": "FROZEN ORACLE (salience_gate facade-2).",
|
||||
"rows": [
|
||||
{
|
||||
"envelope": {
|
||||
"authority_class": "conversation",
|
||||
"urgency": "normal",
|
||||
"channel": "conversation",
|
||||
"payload": {
|
||||
"text": "hello"
|
||||
}
|
||||
},
|
||||
"want": {
|
||||
"score": 0.0,
|
||||
"flags": [],
|
||||
"minimum_tier": "T0",
|
||||
"witness_needed": false,
|
||||
"rationale_codes": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"envelope": {
|
||||
"authority_class": "emergency",
|
||||
"urgency": "normal",
|
||||
"channel": "work",
|
||||
"payload": {
|
||||
"text": "deploy now"
|
||||
}
|
||||
},
|
||||
"want": {
|
||||
"score": 0.9,
|
||||
"flags": [
|
||||
"HIGH_RISK_IRREVERSIBLE"
|
||||
],
|
||||
"minimum_tier": "T3",
|
||||
"witness_needed": true,
|
||||
"rationale_codes": [
|
||||
"emergency_authority"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"envelope": {
|
||||
"authority_class": "conversation",
|
||||
"urgency": "critical",
|
||||
"channel": "conversation",
|
||||
"payload": {
|
||||
"text": "it fails again"
|
||||
}
|
||||
},
|
||||
"want": {
|
||||
"score": 0.9,
|
||||
"flags": [
|
||||
"REPEATED_RETRY"
|
||||
],
|
||||
"minimum_tier": "T3",
|
||||
"witness_needed": true,
|
||||
"rationale_codes": [
|
||||
"critical_urgency",
|
||||
"repeated_retry"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"envelope": {
|
||||
"authority_class": "directive",
|
||||
"urgency": "high",
|
||||
"channel": "work",
|
||||
"payload": {
|
||||
"text": "rewrite the module"
|
||||
}
|
||||
},
|
||||
"want": {
|
||||
"score": 0.7,
|
||||
"flags": [
|
||||
"EXPLICIT_DIRECTIVE"
|
||||
],
|
||||
"minimum_tier": "T2",
|
||||
"witness_needed": true,
|
||||
"rationale_codes": [
|
||||
"directive",
|
||||
"high_urgency"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"envelope": {
|
||||
"payload": {
|
||||
"text": "maybe we should look at this but not sure"
|
||||
}
|
||||
},
|
||||
"want": {
|
||||
"score": 0.7,
|
||||
"flags": [
|
||||
"CONTRADICTION",
|
||||
"HIGH_UNCERTAINTY"
|
||||
],
|
||||
"minimum_tier": "T2",
|
||||
"witness_needed": true,
|
||||
"rationale_codes": [
|
||||
"contradiction_detected",
|
||||
"high_uncertainty"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -23,6 +23,27 @@ pub fn flag_score(flag: &str) -> f64 {
|
||||
}
|
||||
}
|
||||
|
||||
/// Word-boundary contains (zero-dep): matches `word` only when not
|
||||
/// surrounded by alphanumeric chars — Python re.search(r"\bword\b") parity.
|
||||
fn word_boundary_contains(haystack: &str, word: &str) -> bool {
|
||||
let bytes = haystack.as_bytes();
|
||||
let wb = word.as_bytes();
|
||||
if wb.is_empty() || wb.len() > bytes.len() {
|
||||
return false;
|
||||
}
|
||||
for i in 0..=(bytes.len() - wb.len()) {
|
||||
if &bytes[i..i + wb.len()] == wb {
|
||||
let before_ok = i == 0 || !bytes[i - 1].is_ascii_alphanumeric();
|
||||
let after = i + wb.len();
|
||||
let after_ok = after >= bytes.len() || !bytes[after].is_ascii_alphanumeric();
|
||||
if before_ok && after_ok {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
pub fn evaluate_salience(envelope: &serde_json::Value) -> BTreeMap<String, serde_json::Value> {
|
||||
let mut flags: Vec<String> = Vec::new();
|
||||
let mut score = 0.0f64;
|
||||
@@ -94,7 +115,7 @@ pub fn evaluate_salience(envelope: &serde_json::Value) -> BTreeMap<String, serde
|
||||
}
|
||||
|
||||
for word in &["fail", "error", "broken"] {
|
||||
if text.contains(&format!(" {}", word)) || text.starts_with(word) {
|
||||
if word_boundary_contains(&text, word) {
|
||||
add_flag(
|
||||
&mut flags,
|
||||
&mut score,
|
||||
@@ -106,15 +127,62 @@ pub fn evaluate_salience(envelope: &serde_json::Value) -> BTreeMap<String, serde
|
||||
}
|
||||
}
|
||||
|
||||
// ORACLE PARITY: Python tiers are >=0.8->T3, >=0.6->T2, >=0.4->T1, else T0;
|
||||
// witness = score >= 0.6 OR len(flags) >= 2. (Previous port used a wrong
|
||||
// ladder — corrected 2026-10-10 against the live oracle.)
|
||||
// ORACLE PARITY: repeated-retry / contradiction / high-uncertainty /
|
||||
// novel-capability checks (previous port omitted them entirely).
|
||||
for word in &["again", "still", "keeps", "repeatedly"] {
|
||||
if word_boundary_contains(&text, word) {
|
||||
add_flag(
|
||||
&mut flags, &mut score, &mut rationale,
|
||||
"REPEATED_RETRY", "repeated_retry",
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
for word in &["but", "however", "actually", "instead", "rather"] {
|
||||
if word_boundary_contains(&text, word) {
|
||||
add_flag(
|
||||
&mut flags, &mut score, &mut rationale,
|
||||
"CONTRADICTION", "contradiction_detected",
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
for word in &["unsure", "uncertain", "maybe", "perhaps", "might"] {
|
||||
if word_boundary_contains(&text, word) {
|
||||
add_flag(
|
||||
&mut flags, &mut score, &mut rationale,
|
||||
"HIGH_UNCERTAINTY", "high_uncertainty",
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
for word in &["new", "never"] {
|
||||
if word_boundary_contains(&text, word) {
|
||||
add_flag(
|
||||
&mut flags, &mut score, &mut rationale,
|
||||
"NOVEL_CAPABILITY_REQUEST", "novel_request",
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if text.contains("first time") || text.contains("haven't") {
|
||||
add_flag(
|
||||
&mut flags, &mut score, &mut rationale,
|
||||
"NOVEL_CAPABILITY_REQUEST", "novel_request",
|
||||
);
|
||||
}
|
||||
|
||||
let minimum_tier = match score {
|
||||
s if s >= 0.9 => "T4",
|
||||
s if s >= 0.7 => "T3",
|
||||
s if s >= 0.5 => "T2",
|
||||
s if s >= 0.3 => "T1",
|
||||
s if s >= 0.8 => "T3",
|
||||
s if s >= 0.6 => "T2",
|
||||
s if s >= 0.4 => "T1",
|
||||
_ => "T0",
|
||||
};
|
||||
|
||||
let witness_needed = score >= 0.6;
|
||||
let witness_needed = score >= 0.6 || flags.len() >= 2;
|
||||
|
||||
let mut result = BTreeMap::new();
|
||||
result.insert("score".into(), serde_json::json!(score));
|
||||
@@ -125,6 +193,55 @@ pub fn evaluate_salience(envelope: &serde_json::Value) -> BTreeMap<String, serde
|
||||
result
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ── FFI surface (facade-2 burn-down, 2026-10-10) ─────────────────────────────
|
||||
use std::ffi::{CStr, CString};
|
||||
use std::os::raw::c_char;
|
||||
|
||||
fn read_arg(ptr: *const c_char) -> Result<String, String> {
|
||||
if ptr.is_null() {
|
||||
return Err("null argument pointer".to_string());
|
||||
}
|
||||
unsafe { CStr::from_ptr(ptr) }
|
||||
.to_str()
|
||||
.map(|s| s.to_string())
|
||||
.map_err(|e| format!("argument is not valid UTF-8: {}", e))
|
||||
}
|
||||
|
||||
/// sg_evaluate_salience({"envelope": {...}}) -> SalienceDecision dict
|
||||
#[no_mangle]
|
||||
pub extern "C" fn sg_evaluate_salience(arg: *const c_char) -> *mut c_char {
|
||||
let result = read_arg(arg)
|
||||
.and_then(|t| serde_json::from_str::<serde_json::Value>(&t).map_err(|e| format!("argument JSON parse failed: {}", e)))
|
||||
.and_then(|a| {
|
||||
let env = a.get("envelope").cloned().ok_or("arg.envelope required")?;
|
||||
let map = evaluate_salience(&env);
|
||||
let mut out = serde_json::Map::new();
|
||||
for (k, v) in map {
|
||||
out.insert(k, v);
|
||||
}
|
||||
Ok(serde_json::Value::Object(out))
|
||||
});
|
||||
let body = match result {
|
||||
Ok(v) => serde_json::json!({"ok": true, "value": v}),
|
||||
Err(e) => serde_json::json!({"ok": false, "err": e}),
|
||||
};
|
||||
CString::new(body.to_string())
|
||||
.map(|c| c.into_raw())
|
||||
.unwrap_or(std::ptr::null_mut())
|
||||
}
|
||||
|
||||
#[allow(clippy::not_unsafe_ptr_arg_deref)]
|
||||
#[no_mangle]
|
||||
pub extern "C" fn sg_free_string(ptr: *mut c_char) {
|
||||
if !ptr.is_null() {
|
||||
unsafe {
|
||||
let _ = CString::from_raw(ptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
@@ -135,7 +252,7 @@ mod tests {
|
||||
let envelope =
|
||||
json!({"authority_class": "emergency", "urgency": "normal", "payload": {"text": ""}});
|
||||
let r = evaluate_salience(&envelope);
|
||||
assert_eq!(r["minimum_tier"], "T4");
|
||||
assert_eq!(r["minimum_tier"], "T3"); // oracle: 0.9 -> T3
|
||||
assert_eq!(r["score"], 0.9);
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
"construction_commands",
|
||||
"construction_depth",
|
||||
"construction_intent",
|
||||
"construction_interface",
|
||||
"construction_mode",
|
||||
"construction_pattern",
|
||||
"construction_patterns_builtin",
|
||||
@@ -24,23 +23,18 @@
|
||||
"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",
|
||||
@@ -76,6 +70,12 @@
|
||||
"commit": "cb4977fc",
|
||||
"evidence": "FFI ops + delegation + frozen 0 mismatches",
|
||||
"date": "2026-10-10"
|
||||
},
|
||||
{
|
||||
"module": "response_adapter",
|
||||
"commit": "8e8b2921",
|
||||
"evidence": "frozen 5 shapes + empty-slice stability + parity test",
|
||||
"date": "2026-10-10"
|
||||
}
|
||||
]
|
||||
}
|
||||
+242871
File diff suppressed because it is too large.
Load diff
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "GO kernel exists (1 fn); IO stays.",
|
||||
"status": "partial"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"construction contract FIRST (absolute-scaffolding law)",
|
||||
"parity + improvement note (defect fixed, measured gain, or honest parity-only)"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "PARTIAL (audited 2026-10-10): ContentHash/Compress kernels in Go with truth battery (factory batch 6); SQLite store/hit-miss stats/invalidation stay Python reactive.",
|
||||
"status": "ported"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"parity_means": "PARITY DEBT (audited 2026-10-10): Rust calculate_budget exists (pub fn) but no FFI and no oracle split in Python. Needs FFI + oracle split + canary.",
|
||||
"status": "facade"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 3 fns, no FFI, no delegation.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 3 fns, no FFI, no delegation.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 2 fns, no FFI, no delegation.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "PORTED (audited 2026-10-10): compute_priority/qualifies_for_cache delegate properly with _py_ floor.",
|
||||
"status": "ported"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "PARITY DEBT confirmed (audited 2026-10-10, second look): Rust has log_drift_alert only; Python is a 456-line HMAC-chained ledger. Needs the chain machinery + FFI + canary. HIGH priority (drift integrity authority).",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 1 fn, no FFI, no delegation.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 1 fn, no FFI, no delegation.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 2 fns, no FFI (100% cov, unwired).",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"construction contract FIRST (absolute-scaffolding law)",
|
||||
"parity + improvement note (defect fixed, measured gain, or honest parity-only)"
|
||||
],
|
||||
"parity_means": "Not yet ported. Parity means: kernel in its measured side, oracle-first truth battery, HARD CI gate, delegation wired, then retirement earned.",
|
||||
"status": "not_started"
|
||||
"parity_means": "PORTED (audited 2026-10-10): growth_near_dup + growth_profile delegate via cc_growth_* FFI; LLM/SQLite/deltas stay reactive.",
|
||||
"status": "ported"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"construction contract FIRST (absolute-scaffolding law)",
|
||||
"parity + improvement note (defect fixed, measured gain, or honest parity-only)"
|
||||
],
|
||||
"parity_means": "Not yet ported. Parity means: kernel in its measured side, oracle-first truth battery, HARD CI gate, delegation wired, then retirement earned.",
|
||||
"status": "not_started"
|
||||
"parity_means": "PARTIAL (audited 2026-10-10): RecommendPlacement in Go with truth battery + discovery/auto-tag stay Python (AST scanning). Hook execution runtime stays by design.",
|
||||
"status": "ported"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "Not yet ported. Parity means: kernel in its measured side, oracle-first truth battery, HARD CI gate, delegation wired, then retirement earned.",
|
||||
"status": "not_started"
|
||||
"parity_means": "PORTED (audited 2026-10-10): check_drift delegates via cc_drift_check (anchor parity proven batch 2); pattern tables are kernel inputs; show_* stay display.",
|
||||
"status": "ported"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 2 fns, no FFI (100% cov, unwired).",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 4 fns, no FFI (100% cov, unwired).",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 2 fns, no FFI, no delegation.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"construction contract FIRST (absolute-scaffolding law)",
|
||||
"parity + improvement note (defect fixed, measured gain, or honest parity-only)"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Go 9 fns incl. registry; store stays.",
|
||||
"status": "partial"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"construction contract FIRST (absolute-scaffolding law)",
|
||||
"parity + improvement note (defect fixed, measured gain, or honest parity-only)"
|
||||
],
|
||||
"parity_means": "Not yet ported. Parity means: kernel in its measured side, oracle-first truth battery, HARD CI gate, delegation wired, then retirement earned.",
|
||||
"status": "not_started"
|
||||
"parity_means": "PARTIAL (audited 2026-10-10): lifecycle in Go with tests; status/report/runtime stay Python.",
|
||||
"status": "ported"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 1 fn, Go 2, no delegation.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"construction contract FIRST (absolute-scaffolding law)",
|
||||
"parity + improvement note (defect fixed, measured gain, or honest parity-only)"
|
||||
],
|
||||
"parity_means": "Not yet ported. Parity means: kernel in its measured side, oracle-first truth battery, HARD CI gate, delegation wired, then retirement earned.",
|
||||
"status": "not_started"
|
||||
"parity_means": "PORTED (audited 2026-10-10): decide/lex/overlap delegate via cc_persona_* FFI (canary 18/18); _py_ oracles are the load-bearing parity floor per the strangler law.",
|
||||
"status": "ported"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 1 fn, no FFI.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 4 fns, no FFI.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "PORTED 2026-10-10 (e06498d3): should_escalate + get_next_tier kernels + runnable replay (was a dead gate) + HARD CI.",
|
||||
"status": "ported"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 1 fn, no FFI.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"construction contract FIRST (absolute-scaffolding law)",
|
||||
"parity + improvement note (defect fixed, measured gain, or honest parity-only)"
|
||||
],
|
||||
"parity_means": "Not yet ported. Parity means: kernel in its measured side, oracle-first truth battery, HARD CI gate, delegation wired, then retirement earned.",
|
||||
"status": "not_started"
|
||||
"parity_means": "PORT-QUEUE (audited 2026-10-10): Go route() exists with no truth battery and no live callers (documented \u00a711 gap). Python route() is the live path.",
|
||||
"status": "ported"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Go 2 fns; lexicon store stays.",
|
||||
"status": "partial"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "FFI EXISTS (rrf_detect staticlib in CI build list).",
|
||||
"status": "ported"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 3 fns, no FFI.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "evaluate_salience is a deterministic scoring kernel (weights/ladder); Rust 2 fns unwired.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Analysis/suggestion orchestration over subprocess+system state; Rust 1 fn unwired.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "SQLite shard routing/creation; Rust 3 fns unwired.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"construction contract FIRST (absolute-scaffolding law)",
|
||||
"parity + improvement note (defect fixed, measured gain, or honest parity-only)"
|
||||
],
|
||||
"parity_means": "Not yet ported. Parity means: kernel in its measured side, oracle-first truth battery, HARD CI gate, delegation wired, then retirement earned.",
|
||||
"status": "not_started"
|
||||
"parity_means": "PARTIAL (audited 2026-10-10): transcript kernels in Go with tests; consolidate/SQLite orchestration stays Python.",
|
||||
"status": "ported"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 2 fns, no FFI (8 oracle cases landed).",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 9 fns, no FFI (graph-walk kernels 94.8% cov).",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 1 fn, no FFI.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 3 fns, no FFI.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "SQLite gate lifecycle; Rust 2 fns unwired.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 4 fns, no FFI.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Delegates to behaviour_ledger (retested).",
|
||||
"status": "partial"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Session/clock state file-backed; Rust 1 fn unwired.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Toolchain detection record; Rust 1 fn unwired.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Go 2 fns; hybrid voice stays.",
|
||||
"status": "partial"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Go 4 fns with gates; runtime stays.",
|
||||
"status": "partial"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"construction contract FIRST (absolute-scaffolding law)",
|
||||
"parity + improvement note (defect fixed, measured gain, or honest parity-only)"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Go 2 fns with gates; runtime stays.",
|
||||
"status": "partial"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 1 fn, no FFI (100% cov, unwired).",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 1 fn, no FFI.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
@@ -11,6 +11,6 @@
|
||||
"oracle-first truth battery (Python truth generated FIRST)",
|
||||
"llvm-cov branch coverage + clippy 0"
|
||||
],
|
||||
"parity_means": "NOT parity: kernel exists but the Python module never delegates. Parity means the adapter delegates through the kernel (tier_manager pattern) with both paths pinned by tests.",
|
||||
"status": "facade"
|
||||
"parity_means": "Rust 3 fns, no FFI.",
|
||||
"status": "parity-debt"
|
||||
}
|
||||
+330
-266
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user