council Q5 + Q8: retarget od-posting off SurrealQL to PG/V3 + name/disposition the F17 imperative tail#29
Merged
Conversation
…3 storage matrix (council Q5)
The 4 GoBD invariants (single_tx_counter_create_hash_state,
chain_order_per_journal_sequence_prefix, append_only_no_update_delete_once_hashed,
serialization_byte_exact) are storage-agnostic and unchanged; only the framing
moves off the dead SurrealQL vocabulary (operator 2026-07-06: SurrealQL absolutely
deprecated; OGAR V3 transpile substrate, lance-graph V3 database).
Retarget to the storage matrix (PG facet table as SoR, lance-graph V3 read path):
BEGIN/COMMIT + LockType::Pessimistic -> PG BEGIN + SELECT..FOR UPDATE on the
counter row; one PG tx wraps counter RMW + INSERT + hash + state write.
hash DEFINE EVENT -> app-side / BEFORE INSERT trigger within the same tx.
DEFINE SEQUENCE/nextval rejection -> sharpened: a PG SEQUENCE is explicitly
gap-prone (no rollback on abort), so the gapless Belegnummer MUST use a
counter row under SELECT..FOR UPDATE, never a PG sequence.
Permissions{update:NONE,delete:NONE} -> REVOKE UPDATE,DELETE + BEFORE
UPDATE/DELETE trigger once posted_before=true.
serialization_byte_exact -> unchanged (float_repr, sorted JSON, strip $4$).
D-POST-SEQ Option B / surrealdb-fork DEFINE SEQUENCE proposal declared dead;
the counter-row-under-FOR-UPDATE IS the resolution. Trait/struct API unchanged,
still a skeleton. SurrealQL terms remain only as dated historical annotations.
Doc backticks clippy-clean. od-posting build+test green.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fy8D6Boh4ZBaHSBpadSENN
… Q8) The F17 body-triage probe COUNTED 18 order-dependent FAIL hooks but never named them, so the 5.1% tail was unowned. Add a diagnostic enumeration to the probe (no drift-fuse changed: hooks 393, resolved 354, pass 336, fail 18, (self-feedback,write+raise)=(30,2)) and author D-IMPERATIVE-TAIL.md dispositioning all 18 per the doctrine (essential-imperative -> hand-port, never recipe-forced). Finding: 16 of 18 self-feedback hooks are @api.depends extractor artifacts (the hook reads exactly its own written field at the c=0.75 body-inferred band vs the c=0.9 declarative write — the self-loop the RecomputeDag already drops, probe bound #2) -> declaratively-recoverable, NOT hand-ports. Only 2 write+raise hooks are genuine hand-ports (_inverse_l10n_latam_document_number -> od-posting; _onchange_partner_journal -> UI host, possibly guard+compute separable). True hand-port residue: 2 of 393, not 18 — the 5.1% headline over-counts by exactly the predicted artifact. 0 unowned/escaped. Probe still green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fy8D6Boh4ZBaHSBpadSENN
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_7b7624c0-0ab6-4d0e-bee8-703617fe3529) |
…ncil Q6 follow-up, lance-graph #669) Now that WideFieldMask::from_universe_present landed in lance-graph-contract (#669, merged) and floated in, view_mask::mint_wide_mask delegates to it instead of re-implementing the membership filter + 256-SOC-cap loop. The domain-blind minting logic lives ONCE upstream — the two minters can no longer disagree by construction. WideMaskError stays the crate-local error shape (MaskWords stays the dep-free harvest artifact); the contract's WideMaskCapError maps onto it. wide_mask_parity 2/2 green (delegate still agrees with mint_mask). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fy8D6Boh4ZBaHSBpadSENN
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.
Two 5+3-council queue items (
docs/COUNCIL-5+3-2026-07-07.md), executed by a Sonnet fleet under exact specs, verified centrally.Q5 —
od-postingretargeted off deprecated SurrealQL to the PG/V3 storage matrixThe 4 GoBD invariants (
single_tx_counter_create_hash_state,chain_order_per_journal_sequence_prefix,append_only_no_update_delete_once_hashed,serialization_byte_exact) are storage-agnostic and unchanged; only the framing moves off the dead SurrealQL vocabulary (operator 2026-07-06: SurrealQL absolutely deprecated).BEGIN…COMMIT+LockType::PessimisticBEGIN+SELECT … FOR UPDATEon the counter rowDEFINE EVENTBEFORE INSERTtrigger in the same txDEFINE SEQUENCE/nextvalrejectionSEQUENCEis explicitly gap-prone (no rollback on abort) → gapless Belegnummer MUST use a counter row underSELECT … FOR UPDATE, never a PG sequencePermissions {update:NONE,delete:NONE}REVOKE UPDATE, DELETE+BEFORE UPDATE/DELETEtrigger onceposted_before=trueserialization_byte_exact$4$)D-POST-SEQOption B / surrealdb-forkDEFINE SEQUENCEdeclared dead — the counter-row-under-FOR UPDATEis the resolution. Trait/struct API untouched, still a skeleton; SurrealQL terms remain only as dated historical annotations. Doc backticks clippy-clean;od-postingbuild + test green.Q8 — the F17 5.1% imperative tail: named + dispositioned
The probe counted 18 order-dependent FAIL hooks but never named them. Added a diagnostic enumeration (no drift-fuse changed: hooks 393 / resolved 354 / pass 336 / fail 18 / (self-feedback, write+raise)=(30,2)) and authored
specs/DECISIONS/D-IMPERATIVE-TAIL.mddispositioning all 18 per the doctrine (essential-imperative → hand-port, never recipe-forced).Finding: 16 of 18 self-feedback hooks are
@api.dependsextractor artifacts — the hook reads exactly its own written field at thec=0.75body-inferred band vs thec=0.9declarative write, the self-loop theRecomputeDagalready drops (probe bound #2) → declaratively-recoverable, not hand-ports. Only 2 write+raise hooks are genuine hand-ports (_inverse_l10n_latam_document_number→od-posting;_onchange_partner_journal→ UI host, possibly guard+compute separable). True hand-port residue: 2 of 393, not 18 — the 5.1% headline over-counts by exactly the predicted artifact. 0 unowned.Verification (central)
cargo test -p od-ontology --test body_triage_probe+cargo test -p od-postinggreen;cargo clippy -p od-postingclean (13 doc-backtick fixes applied). Q6 (theWideFieldMaskmask-minter relocation) ships separately in lance-graph; its od-ontology delegate is a float-gated follow-up.🤖 Generated with Claude Code
https://claude.ai/code/session_01Fy8D6Boh4ZBaHSBpadSENN
Generated by Claude Code