Compare commits

...
21 Commits
Author SHA1 Message Date
conductor 7dc25da2f5 chore(release): auto-bump version to 0.185.0 — earned by # (minor: converged release (push-to-master bump))
deploy / deploy (push) Skipped
CI Pipeline / best-practices (push) Successful in 10s
CI Pipeline / rust-surface (push) Failing after 15s
CI Pipeline / documentation (push) Successful in 5s
Auto-version and Release / release (push) Successful in 17s
CI Pipeline / gitea-offline (push) Successful in 22s
CI Pipeline / lint (push) Failing after 53s
CI Pipeline / type-check (push) Failing after 50s
CI Pipeline / canary (push) Failing after 2m36s
CI Pipeline / go-surface (push) Successful in 3m13s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 8m41s
Promotion record: (unknown)
2026-10-10 21:41:57 +01:00
Nick bcde852f0f feat(salience_gate): facade-2 burn — 4 missing sections + wrong ladder/witness/matching FIXED, FFI live, delegation wired
CI Pipeline / type-check (push) Canceled after 0s
CI Pipeline / gitea-offline (push) Canceled after 0s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / rust-surface (push) Canceled after 8s
CI Pipeline / lint (push) Canceled after 6s
CI Pipeline / unit-tests (push) Canceled after 6s
CI Pipeline / go-surface (push) Canceled after 6s
CI Pipeline / canary (push) Canceled after 6s
CI Pipeline / best-practices (push) Canceled after 6s
Auto-version and Release / release (push) Canceled after 14s
deploy / deploy (push) Canceled after 2s
CI Pipeline / documentation (push) Canceled after 7s
The Rust port was a stub pretending to be parity: 4 ENTIRE sections missing
(repeated-retry/contradiction/uncertainty/novel-capability), wrong tier
ladder (0.9->T4 vs oracle 0.9->T3), wrong witness rule (score-only vs
score-OR-2-flags), prefix-style word matching vs word-boundary. ALL fixed
pre-wiring. FFI (sg_evaluate_salience) + sg_loader + delegation with sorted
flags as the parity contract (kernel BTreeMap sorts). Frozen oracle + 6-test
canary. 5/5 frozen + 6/6 canary + ruff clean.
2026-10-10 21:41:44 +01:00
Nick b60808d4e1 chore: time_awareness/toolchain/salience_gate parity-debt verdicts
CI Pipeline / best-practices (push) Successful in 7s
CI Pipeline / documentation (push) Successful in 5s
CI Pipeline / rust-surface (push) Failing after 11s
Auto-version and Release / release (push) Successful in 15s
CI Pipeline / gitea-offline (push) Successful in 22s
CI Pipeline / lint (push) Failing after 52s
CI Pipeline / type-check (push) Failing after 49s
CI Pipeline / canary (push) Failing after 2m28s
CI Pipeline / go-surface (push) Successful in 3m11s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 12m46s
deploy / deploy (push) Canceled after 12m36s
2026-10-10 21:29:00 +01:00
Nick 8b2591fd1b chore: self_improve/shard_manager/task_gate parity-debt verdicts
CI Pipeline / best-practices (push) Successful in 9s
CI Pipeline / documentation (push) Successful in 7s
Auto-version and Release / release (push) Successful in 13s
CI Pipeline / rust-surface (push) Failing after 13s
CI Pipeline / gitea-offline (push) Successful in 20s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / type-check (push) Canceled after 31s
CI Pipeline / unit-tests (push) Canceled after 41s
CI Pipeline / go-surface (push) Canceled after 41s
CI Pipeline / canary (push) Canceled after 40s
CI Pipeline / lint (push) Canceled after 42s
deploy / deploy (push) Canceled after 36s
2026-10-10 21:28:17 +01:00
Nick d624240081 chore: growth_delta verdict — ported (delegation live)
CI Pipeline / best-practices (push) Successful in 9s
CI Pipeline / documentation (push) Successful in 3s
Auto-version and Release / release (push) Successful in 11s
CI Pipeline / rust-surface (push) Failing after 12s
CI Pipeline / gitea-offline (push) Successful in 20s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / type-check (push) Canceled after 25s
CI Pipeline / lint (push) Canceled after 35s
CI Pipeline / unit-tests (push) Canceled after 35s
CI Pipeline / go-surface (push) Canceled after 35s
CI Pipeline / canary (push) Canceled after 36s
deploy / deploy (push) Canceled after 25s
2026-10-10 21:27:40 +01:00
Nick 2467dacf6b chore: identity_anchors verdict — ported (delegation live, tables are inputs)
Auto-version and Release / release (push) Successful in 11s
CI Pipeline / best-practices (push) Successful in 8s
CI Pipeline / documentation (push) Successful in 8s
CI Pipeline / rust-surface (push) Failing after 12s
CI Pipeline / gitea-offline (push) Successful in 21s
CI Pipeline / lint (push) Failing after 50s
CI Pipeline / type-check (push) Failing after 46s
CI Pipeline / canary (push) Failing after 2m27s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / go-surface (push) Canceled after 2m31s
CI Pipeline / unit-tests (push) Canceled after 2m31s
deploy / deploy (push) Canceled after 2m27s
2026-10-10 21:25:01 +01:00
Nick abd8d8fcc0 chore: drift_ledger debt confirmed (HMAC chain, high priority)
CI Pipeline / rust-surface (push) Failing after 13s
CI Pipeline / best-practices (push) Successful in 6s
Auto-version and Release / release (push) Successful in 17s
CI Pipeline / documentation (push) Successful in 9s
CI Pipeline / gitea-offline (push) Successful in 23s
CI Pipeline / lint (push) Failing after 49s
CI Pipeline / type-check (push) Failing after 45s
CI Pipeline / canary (push) Failing after 2m29s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / go-surface (push) Canceled after 2m41s
CI Pipeline / unit-tests (push) Canceled after 2m46s
deploy / deploy (push) Canceled after 2m26s
2026-10-10 21:22:19 +01:00
Nick cdb6ca9627 chore: journal sync
CI Pipeline / best-practices (push) Successful in 9s
CI Pipeline / documentation (push) Successful in 5s
Auto-version and Release / release (push) Successful in 12s
CI Pipeline / rust-surface (push) Failing after 12s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / gitea-offline (push) Canceled after 20s
CI Pipeline / type-check (push) Canceled after 21s
CI Pipeline / go-surface (push) Canceled after 30s
CI Pipeline / lint (push) Canceled after 30s
CI Pipeline / unit-tests (push) Canceled after 30s
CI Pipeline / canary (push) Canceled after 30s
deploy / deploy (push) Canceled after 27s
2026-10-10 21:21:45 +01:00
Nick f7198ebac9 chore: batch verdicts for 36 facades (surface audit: FFI/delegation/IO state)
Auto-version and Release / release (push) Successful in 15s
CI Pipeline / best-practices (push) Successful in 4s
CI Pipeline / documentation (push) Successful in 3s
CI Pipeline / rust-surface (push) Failing after 12s
CI Pipeline / gitea-offline (push) Successful in 17s
CI Pipeline / lint (push) Failing after 47s
CI Pipeline / type-check (push) Failing after 43s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / go-surface (push) Canceled after 55s
CI Pipeline / canary (push) Canceled after 55s
CI Pipeline / unit-tests (push) Canceled after 1m1s
deploy / deploy (push) Canceled after 1m12s
2026-10-10 21:20:42 +01:00
Nick c452a7c4b2 chore: cache verdict — partial (hash/compress in Go, store stays)
Auto-version and Release / release (push) Successful in 11s
CI Pipeline / documentation (push) Successful in 7s
CI Pipeline / best-practices (push) Successful in 8s
CI Pipeline / rust-surface (push) Failing after 11s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
deploy / deploy (push) Canceled after 17s
CI Pipeline / gitea-offline (push) Canceled after 20s
CI Pipeline / type-check (push) Canceled after 20s
CI Pipeline / lint (push) Canceled after 30s
CI Pipeline / unit-tests (push) Canceled after 31s
CI Pipeline / go-surface (push) Canceled after 31s
CI Pipeline / canary (push) Canceled after 31s
2026-10-10 21:20:05 +01:00
Nick 9e923ae572 chore: burn response_adapter facade
CI Pipeline / best-practices (push) Successful in 10s
Auto-version and Release / release (push) Successful in 16s
CI Pipeline / documentation (push) Successful in 2s
CI Pipeline / rust-surface (push) Failing after 13s
CI Pipeline / gitea-offline (push) Successful in 17s
CI Pipeline / lint (push) Failing after 47s
CI Pipeline / type-check (push) Failing after 43s
CI Pipeline / canary (push) Failing after 2m16s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / go-surface (push) Canceled after 2m50s
CI Pipeline / unit-tests (push) Canceled after 2m55s
deploy / deploy (push) Canceled after 3m0s
2026-10-10 21:17:08 +01:00
conductor 86606f686d chore(release): auto-bump version to 0.184.0 — earned by # (minor: converged release (push-to-master bump))
CI Pipeline / best-practices (push) Successful in 6s
CI Pipeline / rust-surface (push) Failing after 13s
CI Pipeline / documentation (push) Successful in 5s
Auto-version and Release / release (push) Successful in 16s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / gitea-offline (push) Canceled after 16s
CI Pipeline / type-check (push) Canceled after 21s
deploy / deploy (push) Canceled after 16s
CI Pipeline / go-surface (push) Canceled after 32s
CI Pipeline / lint (push) Canceled after 32s
CI Pipeline / unit-tests (push) Canceled after 32s
CI Pipeline / canary (push) Canceled after 31s
Promotion record: (unknown)
2026-10-10 21:16:36 +01:00
Nick 8e8b2921f2 feat(response-adapter): frozen parity gate + empty-slice JSON stability
CI Pipeline / documentation (push) Canceled after 0s
CI Pipeline / type-check (push) Canceled after 0s
CI Pipeline / gitea-offline (push) Canceled after 0s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
Auto-version and Release / release (push) Canceled after 16s
CI Pipeline / lint (push) Canceled after 10s
CI Pipeline / unit-tests (push) Canceled after 10s
CI Pipeline / go-surface (push) Canceled after 7s
CI Pipeline / rust-surface (push) Canceled after 8s
CI Pipeline / canary (push) Canceled after 8s
CI Pipeline / best-practices (push) Canceled after 8s
deploy / deploy (push) Canceled after 20s
5 frozen parse shapes (qwen/mimo/local/plain/unknown). Improvement: Go nil
slices marshaled as null vs Python [] — normalizeEmpty emits JSON-stable
empty collections. Parity test + HARD CI gate. GO verdict.
2026-10-10 21:16:20 +01:00
Nick fff83f8dff chore: debt list sync — 5 modules re-audited as non-facades (delegation/ports verified)
CI Pipeline / documentation (push) Successful in 9s
CI Pipeline / best-practices (push) Successful in 9s
Auto-version and Release / release (push) Successful in 11s
CI Pipeline / rust-surface (push) Failing after 12s
CI Pipeline / gitea-offline (push) Successful in 20s
CI Pipeline / lint (push) Failing after 50s
CI Pipeline / type-check (push) Failing after 44s
CI Pipeline / canary (push) Failing after 2m15s
CI Pipeline / go-surface (push) Successful in 3m4s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
deploy / deploy (push) Canceled after 4m55s
CI Pipeline / unit-tests (push) Canceled after 5m16s
2026-10-10 21:11:08 +01:00
Nick 51cf1b1c86 chore: cognitive_budgeter debt + drift_cache ported verdicts
CI Pipeline / best-practices (push) Successful in 6s
CI Pipeline / documentation (push) Successful in 5s
CI Pipeline / rust-surface (push) Failing after 11s
Auto-version and Release / release (push) Successful in 13s
CI Pipeline / gitea-offline (push) Successful in 19s
CI Pipeline / lint (push) Failing after 49s
CI Pipeline / type-check (push) Failing after 48s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / go-surface (push) Canceled after 1m15s
CI Pipeline / unit-tests (push) Canceled after 1m16s
CI Pipeline / canary (push) Canceled after 1m16s
deploy / deploy (push) Canceled after 1m6s
2026-10-10 21:09:50 +01:00
Nick 8766912a35 chore: persona_gate verdict — ported (delegation live, floor retained per strangler law)
Auto-version and Release / release (push) Successful in 12s
CI Pipeline / best-practices (push) Successful in 8s
CI Pipeline / documentation (push) Successful in 8s
CI Pipeline / rust-surface (push) Failing after 12s
CI Pipeline / gitea-offline (push) Successful in 21s
CI Pipeline / lint (push) Failing after 51s
CI Pipeline / type-check (push) Failing after 46s
CI Pipeline / canary (push) Failing after 2m18s
CI Pipeline / go-surface (push) Successful in 3m6s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 3m31s
deploy / deploy (push) Canceled after 3m26s
2026-10-10 21:06:15 +01:00
Nick c7400d4a20 chore: recall_router verdict — port-queue (unwired Go port, no truth, no callers)
CI Pipeline / best-practices (push) Successful in 9s
Auto-version and Release / release (push) Successful in 14s
CI Pipeline / documentation (push) Successful in 3s
CI Pipeline / rust-surface (push) Failing after 15s
CI Pipeline / gitea-offline (push) Successful in 19s
CI Pipeline / lint (push) Failing after 52s
CI Pipeline / type-check (push) Failing after 46s
CI Pipeline / canary (push) Failing after 2m27s
CI Pipeline / go-surface (push) Successful in 3m7s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 3m16s
deploy / deploy (push) Canceled after 3m21s
2026-10-10 21:02:59 +01:00
conductor 0259d19427 chore(release): auto-bump version to 0.183.0 — earned by # (minor: converged release (push-to-master bump))
deploy / deploy (push) Skipped
Auto-version and Release / release (push) Successful in 14s
CI Pipeline / best-practices (push) Successful in 12s
CI Pipeline / documentation (push) Successful in 8s
CI Pipeline / rust-surface (push) Failing after 19s
CI Pipeline / gitea-offline (push) Successful in 21s
CI Pipeline / lint (push) Failing after 47s
CI Pipeline / type-check (push) Failing after 45s
CI Pipeline / canary (push) Failing after 2m16s
CI Pipeline / go-surface (push) Successful in 3m5s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 3m46s
Promotion record: (unknown)
2026-10-10 20:59:11 +01:00
Nick b21391c552 feat(memory_consolidation): wire dead delegation — cc kernels now authoritative for content
CI Pipeline / best-practices (push) Successful in 9s
CI Pipeline / documentation (push) Successful in 8s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
deploy / deploy (push) Canceled after 0s
CI Pipeline / rust-surface (push) Canceled after 11s
CI Pipeline / lint (push) Canceled after 11s
CI Pipeline / unit-tests (push) Canceled after 10s
CI Pipeline / go-surface (push) Canceled after 11s
CI Pipeline / type-check (push) Canceled after 2s
Auto-version and Release / release (push) Canceled after 16s
CI Pipeline / canary (push) Canceled after 15s
CI Pipeline / gitea-offline (push) Canceled after 3s
The _consolidation_* oracles never called the cc kernels (dead delegation —
the #2481 class). Wired: kernel content via cc_consolidation_memory/neuron
(frozen_consolidation.json parity on content/wash_count), adapter-owned
clock/id. 20 consolidation regression green, ruff clean.
2026-10-10 20:58:54 +01:00
Nick 9bbd55ea6d chore: night_mode + sleep_time verdicts — partial (Go kernels + tests, orchestration stays)
Auto-version and Release / release (push) Successful in 13s
CI Pipeline / best-practices (push) Successful in 7s
CI Pipeline / documentation (push) Successful in 8s
CI Pipeline / rust-surface (push) Failing after 11s
CI Pipeline / gitea-offline (push) Successful in 20s
CI Pipeline / lint (push) Failing after 49s
CI Pipeline / type-check (push) Failing after 45s
CI Pipeline / canary (push) Failing after 2m15s
CI Pipeline / go-surface (push) Successful in 3m4s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 4m56s
deploy / deploy (push) Canceled after 4m45s
2026-10-10 20:53:54 +01:00
Nick 8095ab95c6 chore: progressive_escalation intent — ported (replay revived)
Auto-version and Release / release (push) Successful in 13s
CI Pipeline / best-practices (push) Successful in 6s
CI Pipeline / documentation (push) Successful in 7s
CI Pipeline / rust-surface (push) Failing after 11s
CI Pipeline / gitea-offline (push) Successful in 17s
CI Pipeline / lint (push) Failing after 47s
CI Pipeline / type-check (push) Failing after 44s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / go-surface (push) Canceled after 1m10s
CI Pipeline / unit-tests (push) Canceled after 1m10s
CI Pipeline / canary (push) Canceled after 1m16s
deploy / deploy (push) Canceled after 1m31s
2026-10-10 20:52:29 +01:00
67 changed files with 244116 additions and 385 deletions

No files matched your search

+1 -1
View File
@@ -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.**
+2
View File
@@ -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
View File
@@ -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)
}
}
}
}
+32 -2
View File
@@ -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)
+1 -1
View File
@@ -6,7 +6,7 @@ This is the main entry point for the Rune program.
import json
from pathlib import Path
__version__ = "0.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
+1 -1
View File
@@ -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:
+29 -2
View File
@@ -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)
+2 -2
View File
@@ -8,7 +8,7 @@ mode system, subject header, shared memory and identity.
This is not an interface. This is how I see, speak, and interact with the world.
Version: v0.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
+34 -1
View File
@@ -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 = []
+63
View File
@@ -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())
+107
View File
@@ -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"
]
}
}
]
}
+124 -7
View File
@@ -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);
}
+6 -6
View File
@@ -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"
}
]
}
File diff suppressed because it is too large. Load diff
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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"
}
+2 -2
View File
@@ -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
View File
File diff suppressed because it is too large. Load diff