Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
775591d76c | ||
|
|
5c134537f7 | ||
|
|
a50466744f | ||
|
|
b8745ab455 |
No files matched your search
@@ -199,6 +199,9 @@ jobs:
|
||||
# the tmpfs (2026-10-07: venv creation failed disk-full across
|
||||
# every job). Keep the 3 newest; drop the rest.
|
||||
cd /tmp && ls -dt rune-ci-target-* 2>/dev/null | tail -n +4 | xargs -r rm -rf
|
||||
# deploy-test cache: rust targets accumulate ~15G (every crate's
|
||||
# release dir). The staged source survives; targets rebuild.
|
||||
find /tmp/rune-deploy-test/src/rust -maxdepth 2 -name target -type d 2>/dev/null | xargs -r rm -rf
|
||||
- name: go vet + go test + go build
|
||||
run: |
|
||||
for dir in src/go/*/; do
|
||||
@@ -353,7 +356,7 @@ jobs:
|
||||
fi
|
||||
- name: memory-store-deep text-kernel parity gate (HARD — #2479 batch: fts/mapreduce/entities)
|
||||
run: |
|
||||
cd src/go/memory-store-deep && go build -o /tmp/msd-${{ gitea.run_id }} . && go test -run TestTextKernelsParity -v
|
||||
cd src/go/memory-store-deep && go build -o /tmp/msd-${{ gitea.run_id }} . && go test -run "TestTextKernelsParity|TestDriftRerankBlendParity" -v
|
||||
- name: go race detector (every module's test suite under -race)
|
||||
run: |
|
||||
for dir in src/go/*/; do
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Rune
|
||||
|
||||
**Current release: v0.161.0**
|
||||
**Current release: v0.162.1**
|
||||
|
||||
**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.**
|
||||
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
||||
|
||||
[project]
|
||||
name = "rune"
|
||||
version = "0.161.0"
|
||||
version = "0.162.1"
|
||||
description = "Rune — a stateful coding assistant with persistent memory, orchestration, and TUI"
|
||||
requires-python = ">=3.10"
|
||||
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package main
|
||||
|
||||
// drift_rerank.go — #2479 memory_store batch 2: the drift-aware re-rank
|
||||
// BLEND kernel (combined = original*0.7 + drift*0.3, stable sort desc).
|
||||
// The DB reads and drift_core.compute_value calls stay in the Python
|
||||
// reactive seam (SQLite + cross-crate); the deterministic blend is here.
|
||||
// Oracle: src/rune/memory_store.py _drift_rerank's blend section.
|
||||
|
||||
import "sort"
|
||||
|
||||
// DriftRerankBlend — entries carry {"id", "orig", "drift"}; returns ids
|
||||
// sorted by combined score desc (stable — Python sort stability parity).
|
||||
func DriftRerankBlend(entries []map[string]any) []string {
|
||||
type scored struct {
|
||||
id string
|
||||
score float64
|
||||
seq int
|
||||
}
|
||||
ss := make([]scored, 0, len(entries))
|
||||
for i, e := range entries {
|
||||
id, _ := e["id"].(string)
|
||||
orig, _ := e["orig"].(float64)
|
||||
drift, _ := e["drift"].(float64)
|
||||
ss = append(ss, scored{id: id, score: orig*0.7 + drift*0.3, seq: i})
|
||||
}
|
||||
sort.SliceStable(ss, func(a, b int) bool { return ss[a].score > ss[b].score })
|
||||
out := make([]string, len(ss))
|
||||
for i, s := range ss {
|
||||
out[i] = s.id
|
||||
}
|
||||
return out
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
[
|
||||
{
|
||||
"op": "blend",
|
||||
"inputs": [
|
||||
{
|
||||
"id": "e1",
|
||||
"orig": 0.9,
|
||||
"drift": 0.2
|
||||
},
|
||||
{
|
||||
"id": "e2",
|
||||
"orig": 0.5,
|
||||
"drift": 0.9
|
||||
},
|
||||
{
|
||||
"id": "e3",
|
||||
"orig": 0.7,
|
||||
"drift": 0.7
|
||||
},
|
||||
{
|
||||
"id": "e4",
|
||||
"orig": 0.1,
|
||||
"drift": 1.0
|
||||
},
|
||||
{
|
||||
"id": "e5",
|
||||
"orig": 0.6,
|
||||
"drift": 0.6
|
||||
}
|
||||
],
|
||||
"want": [
|
||||
"e3",
|
||||
"e1",
|
||||
"e2",
|
||||
"e5",
|
||||
"e4"
|
||||
]
|
||||
},
|
||||
{
|
||||
"op": "blend",
|
||||
"inputs": [
|
||||
{
|
||||
"id": "a",
|
||||
"orig": 0.5,
|
||||
"drift": 0.5
|
||||
},
|
||||
{
|
||||
"id": "b",
|
||||
"orig": 0.5,
|
||||
"drift": 0.5
|
||||
},
|
||||
{
|
||||
"id": "c",
|
||||
"orig": 0.4,
|
||||
"drift": 0.7
|
||||
}
|
||||
],
|
||||
"want": [
|
||||
"a",
|
||||
"b",
|
||||
"c"
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,35 @@
|
||||
package main
|
||||
|
||||
// truth_drift_rerank_test.go — blend-kernel parity gate.
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestDriftRerankBlendParity(t *testing.T) {
|
||||
raw, err := os.ReadFile("truth_drift_rerank.json")
|
||||
if err != nil {
|
||||
t.Fatalf("truth_drift_rerank.json missing: %v", err)
|
||||
}
|
||||
var rows []struct {
|
||||
Inputs []map[string]any `json:"inputs"`
|
||||
Want []string `json:"want"`
|
||||
}
|
||||
if err := json.Unmarshal(raw, &rows); err != nil {
|
||||
t.Fatalf("unparseable: %v", err)
|
||||
}
|
||||
for i, c := range rows {
|
||||
got := DriftRerankBlend(c.Inputs)
|
||||
if len(got) != len(c.Want) {
|
||||
t.Errorf("row %d: got %d want %d", i, len(got), len(c.Want))
|
||||
continue
|
||||
}
|
||||
for j := range got {
|
||||
if got[j] != c.Want[j] {
|
||||
t.Errorf("row %d[%d]: got %q want %q", i, j, got[j], c.Want[j])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ This is the main entry point for the Rune program.
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
__version__ = "0.161.0"
|
||||
__version__ = "0.162.1"
|
||||
|
||||
# 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.161.0"' in rune_version,
|
||||
'__version__ = "0.162.1"' in rune_version,
|
||||
failures,
|
||||
)
|
||||
# #169 policy update: auto-bump on merge is sanctioned (Nick directive:
|
||||
|
||||
@@ -8,7 +8,7 @@ mode system, subject header, shared memory and identity.
|
||||
|
||||
This is not an interface. This is how I see, speak, and interact with the world.
|
||||
|
||||
Version: v0.161.0
|
||||
Version: v0.162.1
|
||||
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.161.0 | Textual TUI | {len(loaded)} native modules[/dim]",
|
||||
f"[dim]Rune v0.162.1 | Textual TUI | {len(loaded)} native modules[/dim]",
|
||||
)
|
||||
|
||||
# Auto-show night mode suggestion if evening/night hours
|
||||
|
||||
Reference in new issue
Block a user