Skip to content

council Q5 + Q8: retarget od-posting off SurrealQL to PG/V3 + name/disposition the F17 imperative tail#29

Merged
AdaWorldAPI merged 3 commits into
mainfrom
claude/odoo-transcode-ruff-ast-5ejqvr
Jul 8, 2026
Merged

council Q5 + Q8: retarget od-posting off SurrealQL to PG/V3 + name/disposition the F17 imperative tail#29
AdaWorldAPI merged 3 commits into
mainfrom
claude/odoo-transcode-ruff-ast-5ejqvr

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

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-posting retargeted off deprecated SurrealQL to the PG/V3 storage matrix

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).

was (SurrealQL) now (PG facet SoR / lance-graph V3 read path)
BEGIN…COMMIT + LockType::Pessimistic PG BEGIN + SELECT … FOR UPDATE on the counter row
hash DEFINE EVENT app-side / BEFORE INSERT trigger in the same tx
DEFINE SEQUENCE / nextval rejection sharpened: a PG SEQUENCE is explicitly gap-prone (no rollback on abort) → 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 declared dead — the counter-row-under-FOR UPDATE is the resolution. Trait/struct API untouched, still a skeleton; SurrealQL terms remain only as dated historical annotations. Doc backticks clippy-clean; od-posting build + 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.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_numberod-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-posting green; cargo clippy -p od-posting clean (13 doc-backtick fixes applied). Q6 (the WideFieldMask mask-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

claude added 2 commits July 8, 2026 15:44
…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
@cursor

cursor Bot commented Jul 8, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot 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
@AdaWorldAPI AdaWorldAPI merged commit fb1787b into main Jul 8, 2026
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