Handover: consumer-side wishlist for the loco ABI (lance-graph → ogar-loco session) - #243
Merged
Merged
Conversation
…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
marked this pull request as ready for review
August 5, 2026 14:13
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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)thencompose(&v)— so a hooks-unstable vocabulary can pass validation on one set of answers and freeze a table composed from another, including abody_refs > 3that re-opens the traversal edge the wrapper's proof fences (theprogram.rsdebug_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):
pushes_result+ the silent-mask-coarsening can-fire test ride in with the mint)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