ogar-loco: consumer wishlist W-1/W-2/W-4/W-5 from the lance-graph/rig handover - #244
Merged
Merged
Conversation
… 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.
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_1ae673f7-aa59-46c3-b7cb-53282f10873b) |
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.
Implements the source-verified consumer-priority wishlist from
.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 passcheck()on one set of answers whilecompose()froze a different one into the table the wrapper carries — including abody_refspast a call's capacity, reopening the traversal edgeCheckedVocabulary's proof exists to close. Two-directional can-fire test: poisoning either sampling is caught, by whichever gate sees it; a stable vocabulary still validates clean.W-2 — the name column
shared_core::name+Vocabulary::name/domain_name, landing inFnSpec(OQ-1 resolved toward "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 the other three (can-fire: a vocabulary renamingADDis caught by name).W-4 — funnel telemetry as data
telemetry::FunnelTally/RefusalGate: a plain tally over a generate-and-filter batch's outcomes (ConformanceError/StatementError/PoolError→ gate → count). Deliberately validity-feedback-only — no scoring, no ranking, no fitness scalar; that boundary stays lance-graph's (the observer-effect payload law), out of scope here by design.W-5 — the >64-statement split contract (doc-only)
In
statements.rs: the split unit is a sibling function (StepMaskstaysu64forever, never widened); statement ordinals restart at 0 per split function; the cut falls on astatement_boundsboundary, never mid-statement; which call enters the sibling is the vocabulary's decision — this crate mints none.Open questions resolved
FnSpec, as above.Gates
fmt / clippy
-D warnings/ tests (51 ogar-loco + 7 ogar-blockly) / rustdoc-D warnings— all green, scoped.🤖 Generated with Claude Code
https://claude.ai/code/session_011DN5odWu4eisdevH9bPWyz
Generated by Claude Code