Skip to content

ogar: record + pin the Arm B emitter debt (Opus review P2), add constrains/onchange constructors#170

Merged
AdaWorldAPI merged 2 commits into
mainfrom
claude/atc2-emitter-debt-characterization
Jul 7, 2026
Merged

ogar: record + pin the Arm B emitter debt (Opus review P2), add constrains/onchange constructors#170
AdaWorldAPI merged 2 commits into
mainfrom
claude/atc2-emitter-debt-characterization

Conversation

@AdaWorldAPI

@AdaWorldAPI AdaWorldAPI commented Jul 7, 2026

Copy link
Copy Markdown
Owner

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_triples hat keinen Constrains/Onchange-Arm — beide fallen durch den zwingenden Wildcard _ => ogar:Unknown (lib.rs:779), die Feld-Pfade werden bei der TTL-Emission verworfen. KausalSpec ist #[non_exhaustive], also MUSS jeder cross-crate match einen Wildcard tragen — die kausal_spec_match_is_exhaustive-Fuse schützt nur ogar-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 die ActionDef.kausal direkt lesen (z.B. der odoo-rs AT-CONSUME-Paritäts-Pin) sind unberührt; nur die TTL-Projektion ist verlustbehaftet.

Namens-Korrektur: SPEC §6 (Zeile 219) nennt noch einen "SurrealQL-Adapter" als deferred Consumer — stale. Per Operator-Ruling (2026-07-05, im Ledger: "Odoo's spog lives now in V3 substrate in lance-graph <>OGAR, not surrealdb AST") ist das Forward-Substrat der OGAR-v3 / lance-graph-Pfad; der SurrealQL-AST-Adapter ist deprecated. Die lebende Schuld ist der ogar-emitter-TTL-Pfad (konsumiert von ogar-adapter-ttl + v3-Substrat), nicht SurrealQL.

Was dieser PR tut (kein Mint, keine spec-deferred Arbeit)

  • ogar-emitter: Characterization-Test 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ädikate ogar: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.
  • ogar-vocab: KausalSpec::{constrains,onchange}-Konstruktoren (spiegeln depends()/lifecycle()) — additive-API-Lücke aus lift_actions: KausalSpec::Constrains/Onchange + ComputedField.stored — AT-CARRY-2 Arme B+D #169; Test + Consumer brauchen sie.
  • DISCOVERY-MAP: 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 --workspace clean inkl. ogar-from-rails (der float-on-main-Risikopunkt), cargo test --workspace 479/0. Dieser PR: ogar-vocab 109 + ogar-emitter 28 (inkl. neuer Test) grün, clippy --all-features -D warnings clean.

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

…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.
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@cursor

cursor Bot commented Jul 7, 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_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.
@AdaWorldAPI AdaWorldAPI merged commit d305d2e into main Jul 7, 2026
1 check passed
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