Skip to content

Handover: consumer-side wishlist for the loco ABI (lance-graph → ogar-loco session) - #243

Merged
AdaWorldAPI merged 1 commit into
mainfrom
claude/loco-consumer-wishlist
Aug 5, 2026
Merged

Handover: consumer-side wishlist for the loco ABI (lance-graph → ogar-loco session)#243
AdaWorldAPI merged 1 commit into
mainfrom
claude/loco-consumer-wishlist

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

One handover file, no code: .claude/handovers/2026-08-05-1430-lance-graph-orchestrator-to-ogar-loco.md — the consumer-side wishlist for the loco ABI, written after a source-verified review of merged #241 from the seat that will consume it (lance-graph's rig/rs-graph-llm oracle loop + the compiled-template stack).

One FINDING (F-1, small, fail-loud): validate() samples the domain hooks twice — check(&v) then compose(&v) — so a hooks-unstable vocabulary can pass validation on one set of answers and freeze a table composed from another, including a body_refs > 3 that re-opens the traversal edge the wrapper's proof fences (the program.rs debug_asserts already name the non-deterministic case; release degrades to a safe index panic). Shared half unaffected; stable vocabularies unaffected.

The wishlist (consumer-priority order):

  • W-1 compose-then-check hardening (closes F-1; keep the method-drift check, add a shape check over the STORED table)
  • W-2 the name column — the prompt-legend / oracle-schema enabler, under the same unforgeable-shared-half rule
  • W-3 the NARS-34 vocabulary mint (ids operator-gated; 112 domain slots force recipes-not-atoms; pushes_result + the silent-mask-coarsening can-fire test ride in with the mint)
  • W-4 funnel telemetry as data — per-candidate refusal statistics; validity feedback loops raw, fitness feedback stays behind the observer-effect payload law
  • W-5 the >64-statement split contract (doc-only)

Explicitly not asked: the gated 144-atom unification, PA control mints, replay/session representation, any cross-repo dependency — the consumer wants the table as data. Two open questions left for the loco session (name-column placement; the 144-shared-slots coincidence, labeled numerology until ruled otherwise).

🤖 Generated with Claude Code

https://claude.ai/code/session_01K3RyLEbuNSHxxB3NTTrGki


Generated by Claude Code

…trator)

Written after a source-verified review of merged #241 from the seat that
will consume it: the rig/rs-graph-llm oracle loop and the compiled-
template stack. Five items in consumer-priority order: W-1 compose-then-
check hardening (closes the one letter-vs-spirit finding F-1 - validate()
samples the domain hooks twice, so a hooks-unstable vocabulary can freeze
a table that was never itself validated; fail-loud today, three lines to
close); W-2 the name column (the prompt-legend/oracle-schema enabler,
same unforgeable-shared-half rule); W-3 the NARS-34 vocabulary mint (ids
operator-gated; slot arithmetic forces recipes-not-atoms - 112 domain
slots vs 144 atoms; pushes_result comes due at mint time, with the
silent-mask-coarsening trace as its can-fire test); W-4 funnel telemetry
as data (the oracle contract's smallest safe slice, with the validity-
vs-fitness feedback distinction pinned); W-5 the >64-statement split
contract (doc-only).

Explicitly NOT asked: the gated 144-atom unification, PA control mints,
replay/session representation, or any cross-repo dependency - the
consumer wants the table as data. Two open questions left for the loco
session (name-column placement; the 144-shared-slots coincidence,
labeled numerology until ruled otherwise).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3RyLEbuNSHxxB3NTTrGki
@AdaWorldAPI
AdaWorldAPI marked this pull request as ready for review August 5, 2026 14:13
@AdaWorldAPI
AdaWorldAPI merged commit f6d3a60 into main Aug 5, 2026
1 check passed
AdaWorldAPI pushed a commit that referenced this pull request Aug 5, 2026
… handover

Implements the source-verified consumer-priority wishlist in
.claude/handovers/2026-08-05-1430-lance-graph-orchestrator-to-ogar-loco.md
(#243), written from the seat that will consume the loco ABI: lance-graph's
rig/rs-graph-llm oracle loop and the compiled-template stack. W-3 (the
NARS-34 mint) stays deferred, exactly as the handover asked -- ids are the
operator's.

W-1 closes finding F-1 (compose-then-check hardening): validate() now
composes the table FIRST and re-checks the shape invariant on the STORED
table, not only through the method sweep. The prior check-then-compose
order sampled the domain hooks twice, so a phase-unstable vocabulary
could pass check() on one set of answers while compose() froze a
different one into the table the wrapper carries -- including a
body_refs past a call's capacity, reopening the traversal edge the
CheckedVocabulary proof exists to close. Two-directional can-fire test:
poisoning EITHER sampling (the table's or the method sweep's) is caught,
whichever gate sees it; a stable vocabulary still validates clean.

W-2 adds the name column: shared_core::name + Vocabulary::name /
domain_name, landing IN FnSpec per OQ-1 (the table stays the single
artifact -- a legend becomes a serialization of the validated table, not
a second lookup surface that can drift from it). Names are NOT coverage
-- WAIT/STOP/etc are named so a legend can say "exists, refused" instead
of omitting them into apparent nonexistence. A fourth drift channel,
guarded exactly like stack_arity/body_refs/pushes_result (can-fire test:
a vocabulary renaming ADD is caught by name).

W-4 adds telemetry::FunnelTally / RefusalGate: a plain data tally over a
generate-and-filter batch (ConformanceError / StatementError / PoolError
-> gate -> count). Deliberately validity-feedback-only -- no scoring, no
ranking, no fitness scalar; that boundary is lance-graph's
observer-effect payload law, out of scope here by design.

W-5 is doc-only, in statements.rs: the >64-statement split contract.
Split unit is a sibling function (StepMask stays u64 forever, never
widened); statement ordinals restart at 0 per split function; the cut
falls on a statement_bounds boundary, never mid-statement; which call
enters the sibling is the vocabulary's decision, this crate mints none.

Also records both open questions the handover left (OQ-1 resolved in
FnSpec; OQ-2 left as numerology, not ruled on) in the plan ledger.

Gates: fmt, clippy -D warnings, tests (51 loco + 7 blockly), rustdoc
-D warnings -- all green.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants