Commit Graph
4 Commits
Author SHA1 Message Date
Nick bf5eb53d1e fix(lifecycle): research_required nonterminal disposition + recall A/B honesty + hook hardening
Pre-PL1 closure (handoff 2026-09-10):

1. research_required: new nonterminal task status (records enum, state
   machine edges created/running -> research_required -> running/
   completed/failed/cancelled/superseded). The operator's RESEARCHED_CHANGE
   disposition now transitions to research_required instead of failed —
   research routing is not failure. Live canary: status=research_required,
   outcome_ref=research_dispatch, route_ref set.

2. Experience consumer skips research-dispatch tasks — no false
   failure-learning evidence in PL0 (verified: 0 FAILURE records for
   research tasks).

3. recall_uplift A/B documented honestly in the module: latency 521-1213ms
   → 14-18ms; terms bounded (893-1665 → 16-21); recall ROW COUNTS identical
   per query but 1/8-7/7 of recalled IDs differ (expansion terms differ →
   different lexical candidates). Marked PROVISIONAL — quality not proven
   equivalent; harness original retained for rollback.

4. Hook hardening: durable fire-trace (/tmp/rune-bridge-fire.log, one line
   per actual injection with token count) + harness-internal-step guard
   (checkpoint-writer/compaction steps no longer receive capsules).

5. QX7 canary fully purged: entries, contentless-FTS ghosts, both stores;
   retrieval-level verification shows zero hits.

1227 tests pass; ratchet 353/80; henxels clean.
2026-09-10 20:08:50 +01:00
Nick d59b8a1800 feat(core): Option C unified route authority + builder bridge + PL0 qualification
Handoff 2026-09-10 §§2–10. One canonical implementation, not copied logic:

1. Route authority moved into Rune Core (src/rune/):
   adaptive_router.py, route_risk_flags.py (renamed — the old name
   collided with the research-stage concept), evidence_probe.py.
   Dependency direction enforced: executor imports Core; Core never
   imports the executor. Research executor consumes via
   rune.adaptive_router / rune.evidence_probe (dual-import guards for
   standalone script execution).
2. derive_sufficiency() in Core (unified grounding semantics): the
   research path passes contract-compiler fields; the operator path
   grounds from task-text absence-of-defeaters. NONE vs UNKNOWN fixed
   (no test surface = determined NONE, not unknown).
3. Live operator consumption: send_task routes every task via the same
   authority, persists INITIAL_ROUTE to ~/.rune/routes/route.jsonl,
   records task.route, and attaches an actionable research dispatch
   (executor-consumable payload) for RESEARCHED_CHANGE. Proven live:
   local task → STANDARD_CHANGE (research chain not entered);
   floor architecture task → RESEARCHED_CHANGE + dispatch recorded.
   The dispatch's downstream consumer is still the MiMo session
   (documented §11 gap, not solved here).
4. builder_bridge.py: thin adapter over Rune Core — preflight(task)
   runs derive_sufficiency → classify_route → (optional) memory
   selection. Zero model calls, bounded capsule (12 memory / 6 lesson
   lines). lesson_lines stays empty until PL1 promotes its first
   lesson — the seam exists, the pressure does not.
5. PL0 qualification: qualify_experience() (TELEMETRY vs CANDIDATE,
   cheap rule-based, no model). Live ledger: 132 raw → 54 candidates.
   Raw outcomes preserved verbatim; SEED never auto-VALIDATED.
6. Umbrella manifest updated (4 new modules → capability umbrella).

Verification: 1213 tests pass; ruff clean; silent-handler ratchet at
baseline (353/80). The audit's §1 qualification is honored: the
earlier spine canary proved model routing, not task-class routing —
task-class routing on the live spine is proven HERE.
2026-09-10 17:47:28 +01:00
Nick ec2cba62ee feat(reachability): Live Rune Slice P0 — outcome producer edge + spine defect fixes
Runtime Reachability audit (reports/RUNTIME_REACHABILITY_AUDIT_2026-09-10.md,
4 parallel tracers + live canaries) established: ONE real end-to-end path
exists (send_task → ContextBroker → Ollama tool loop → durable events),
proven live by canary during the audit. The spine exists; the missing
pieces were edges, not architecture.

P0 implemented (choice-free items):

1. task.outcome producer edge: send_task emits a typed journal event on
   EVERY terminal transition (completed AND failed) with task/model/
   verification/route fields — the producer PL0/PL1 needs (outcome_ledger
   was de-wired; experience ledger had zero producers).
2. Experience consumer: scripts/process_experience.py
   record_operator_outcomes() reads the authoritative task-state
   checkpoint (the journal is a one-way integrity journal — payload_hash
   only) and appends idempotent SEED experience records. 132 live records
   created; rerun = 0 (idempotent).
3. Spine defect: _routing_profiles_path and the profile-save site had bare
   relative imports that fail in standalone CLI mode — trace recording
   degraded to tier-2 on every CLI run (mislabeled 'inference_trace').
   Fixed with the established dual-import pattern; verified clean run.
4. Standalone bootstrap: package parent now on sys.path for script
   execution.
5. hook_engine.fire dead call removed (rune_tui called a nonexistent
   function; AttributeError silently swallowed — hooks never ran). Left
   as an honest note, not a false-liveness surface.

Verification: Phase 8 canary through the real spine — all 9 rungs
observable from persisted state (trace v5 fields incl. memory
abstention + broker budget, routing reason, checkpoint outcome, journal
event, idempotent experience record). 1213 tests pass; ruff clean;
ratchet at baseline.

The route-authority placement choice (A/B/C) is presented in the audit
report §G and awaits Nick's decision before wiring adaptive routing into
the operator path.
2026-09-10 17:04:52 +01:00
Nick deba21fe54 feat(TASK-I): PL0 passive Experience Ledger — 10 seed Process Experiences from real runs
scripts/process_experience.py: ExperienceLedger with 12 root-cause layers,
3 result types, confidence tracking, evidence references, correction
tracking, recurrence classification, cost measurement, reusable flag.

10 seed Process Experiences from real runs (#161/#163/#164/#310/#311):
- 5 failures (schema drift, field naming, missing disposition, validator
  mismatch, duplicate contract authority)
- 3 successes (gate blocked missing M1, INNOVATION correctly skipped,
  real external evidence produced decision-changing results)
- 2 inefficiencies (routing waste, detection gap)

All 10 marked reusable_lesson=True. No autonomous self-editing —
observation and evidence capture only.
2026-09-10 02:22:49 +01:00