ogar: record + pin the Arm B emitter debt (Opus review P2), add constrains/onchange constructors#170
Merged
Conversation
…rains/onchange constructors Post-merge Opus review of #169 (AT-CARRY-2 arms B+D) found one P2: the TTL emitter kausal_triples has no Constrains/Onchange arm, so both fall through the mandatory wildcard to ogar:Unknown and drop their field paths. KausalSpec is #[non_exhaustive], so cross-crate matches CANNOT be wildcard-free — the kausal_spec_match_is_exhaustive fuse only guards ogar-vocab, never the emitter. Spec §6 defers emitter wiring, so this is spec-conform, not a violation, but it is actively-wrong TTL for any @api.constrains/@api.onchange model. - ogar-emitter: characterization test pins the interim ogar:Unknown + dropped-paths behaviour so it is documented, not silent, and flips loudly when §6 wires the emitter. - ogar-vocab: add KausalSpec::{constrains,onchange} constructors mirroring depends()/lifecycle() (additive-API gap from #169; the test + consumers need them). - DISCOVERY-MAP: D-ATC2-KAUSAL-RUFF-GATED — the owed B+D ledger entry, with an honest correction of the overstated cross-crate 'loud break' rationale and the recorded emitter debt. Post-merge workspace verification (479/0 vs ruff main 9ef26c1) noted. No vocab mint (ogar:Constrains/Onchange kinds + path predicate) — that is the §6 governed follow-up.
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
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_f9316934-4501-4789-9027-8bfdddec8b48) |
The D-ATC2-KAUSAL-RUFF-GATED debt note echoed SPEC-ATC2-OGAR §6's stale 'SurrealQL-Adapter' wording. Per the operator ruling already in this ledger (2026-07-05: 'Odoo's spog lives now in V3 substrate in lance-graph <>OGAR, not surrealdb AST'), the forward substrate is OGAR-v3 / lance-graph; the SurrealQL-AST adapter is deprecated. The live emitter debt is the TTL path (ogar-emitter → ogar-adapter-ttl + v3 substrate), not SurrealQL.
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.
Kontext
Post-merge Opus-adversarial-Review von #169 (AT-CARRY-2 Arme B+D — die vor Merge KEINE Review hatten, nur Grinder-self-verifiziert). Verdikt: CLEAN Implementierung, ein P2. Dieser PR schließt den P2 ehrlich, ohne spec-deferred Arbeit vorzuziehen.
Der P2 (real, aber spec-conform)
Der TTL-Emitter
ogar-emitter::kausal_tripleshat keinenConstrains/Onchange-Arm — beide fallen durch den zwingenden Wildcard_ => ogar:Unknown(lib.rs:779), die Feld-Pfade werden bei der TTL-Emission verworfen.KausalSpecist#[non_exhaustive], also MUSS jeder cross-cratematcheinen Wildcard tragen — diekausal_spec_match_is_exhaustive-Fuse schützt nurogar-vocab, nie den Emitter. Die AUTARK-Ledger-Behauptung, die Fuse lasse Consumer "laut brechen statt still defaulten", war cross-crate überzogen.SPEC-ATC2-OGAR §6 defert die Downstream-Consumer-Verdrahtung — also keine Spec-Verletzung, aber aktiv-falsches (nicht bloß fehlendes) TTL für jedes
@api.constrains/@api.onchange-Modell. Der IR-Struct ist korrekt: Consumer dieActionDef.kausaldirekt lesen (z.B. der odoo-rs AT-CONSUME-Paritäts-Pin) sind unberührt; nur die TTL-Projektion ist verlustbehaftet.Was dieser PR tut (kein Mint, keine spec-deferred Arbeit)
kausal_constrains_onchange_currently_emit_unknown_pending_emitter_wiring— PINnt das Interim (ogar:Unknown+ dropped paths) als DOKUMENTIERTE, getestete Tatsache. Wenn §6 den Emitter verdrahtet (Prädikateogar:Constrains/ogar:Onchange+ kausal-Path-Prädikat, ein governter Vokabular-Mint), bricht dieser Test LAUT und zwingt zum Update — genau der cross-crate "loud break", den die Fuse nicht liefern kann.KausalSpec::{constrains,onchange}-Konstruktoren (spiegelndepends()/lifecycle()) — additive-API-Lücke aus lift_actions: KausalSpec::Constrains/Onchange + ComputedField.stored — AT-CARRY-2 Arme B+D #169; Test + Consumer brauchen sie.D-ATC2-KAUSAL-RUFF-GATED— der geschuldete B+D-Ledger-Eintrag, mit ehrlicher Korrektur der überzogenen Fuse-Rationale, der protokollierten Emitter-Schuld + der Namens-Korrektur oben.Verifikation
OGAR-Workspace grün gegen ruff main
9ef26c1(post-#169):cargo build --workspaceclean inkl.ogar-from-rails(der float-on-main-Risikopunkt),cargo test --workspace479/0. Dieser PR: ogar-vocab 109 + ogar-emitter 28 (inkl. neuer Test) grün, clippy--all-features -D warningsclean.NICHT in diesem PR
Die eigentliche Emitter-Verdrahtung (neue TTL-Vokabeln
ogar:Constrains/ogar:Onchange+ Path-Prädikat, konsumiert vom v3 / lance-graph-Substrat) — das ist der §6-governte Follow-up-Mint und braucht Spec/Ruling, nicht autonom.🤖 Generated with Claude Code
https://claude.ai/code/session_01Cg8DSUz1U4AvKqXiy9Xx2f