Skip to content

§6-Mint: ogar:Constrains/Onchange — TTL-Registry + Emitter-Arme in Lockstep (5+3-Council GO)#179

Merged
AdaWorldAPI merged 3 commits into
mainfrom
claude/mint-armb-ttl
Jul 7, 2026
Merged

§6-Mint: ogar:Constrains/Onchange — TTL-Registry + Emitter-Arme in Lockstep (5+3-Council GO)#179
AdaWorldAPI merged 3 commits into
mainfrom
claude/mint-armb-ttl

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

Was

Der governte §6-Mint (Operator-Ruling „spec" 2026-07-07, danach 5+3-Council: einstimmig GO), tilgt die in #170 gepinnte Emitter-Schuld — @api.constrains/@api.onchange-Modelle emittieren nicht länger ogar:Unknown mit verworfenen Pfaden.

Vier Vokabeln, an BEIDEN Deklarationsorten in Lockstep (Council-S3-P0: die OWL-Registry vocab/ogar.ttl existiert und hätte sonst gedriftet):

  • vocab/ogar.ttl: ogar:Constrains + ogar:Onchange als ogar:KausalKind-Instanzen, ogar:kausalConstrainsPath/ogar:kausalOnchangePath als rdf:Property — exakt das kausalDependsPath-Muster. Plus Council-B1-Nebenbefund geschlossen: ogar:Unknown war nie als KausalKind deklariert, obwohl der Wildcard ihn längst emittiert — jetzt deklariert.
  • ogar-emitter::kausal_triples: zwei Arme vor dem Wildcard, exakt der Depends-Shape (kind-spezifische Pfad-Prädikate — Option b, verworfen: Prädikat-Reuse [konflatiert Recompute/Validierung/UI] und generisches kausalPath [erzwingt kausalKind-Joins]). Der _ => ogar:Unknown-Wildcard bleibt (unter #[non_exhaustive] zwingend) und deckt nur noch echte künftige Varianten.
  • Dotted-Path-Pathologie (Council-S5): Odoo verbietet dotted paths in beiden Decorators (silently ignored, odoo/orm/decorators.py) — der Emitter spiegelt das: drop-with-no-triple pro Pfad, kausalKind-Triple bleibt, eigener Test.
  • Konflations-Fuse im Test: kein ogar:dependsPath/kausalDependsPath auf ActionDefs (Codex-Regel 2026-06-04 — sonst inferiert eine Action als ComputedField).

Test-Flip (designtes Verhalten)

Der #170-Characterization-Test …currently_emit_unknown_pending_emitter_wiring ist GENAU DAFÜR gebaut worden, beim Wiring laut zu brechen — ersetzt durch kausal_constrains_onchange_emit_declared_kinds_and_paths (Positiv + Negativ-Guards) + …drop_dotted_paths_without_triple. kausal_spec_variants_emit_distinct_kinds um beide Varianten erweitert.

Verifikation

ogar-emitter 29/0 (28→29: 1 ersetzt, 2 neu) · ogar-vocab 122/0 · clippy -D warnings clean · cargo build --workspace Finished (1 pre-existing unused-import in ogar-from-elixir, unberührt). ogar-adapter-ttl parst kein kausal (verifiziert, Module-Doc „Not yet supported") — TTL bleibt write-only für kausal, dokumentiert statt still. Ledger: append-only DEBT-RESOLVED-Absatz am D-ATC2-KAUSAL-RUFF-GATED-Eintrag in Grade-Sprache.

Downstream: odoo-rs' AT-CONSUME-Pin liest den Struct — unberührt (grüner Paritäts-Test existiert). SPOG-Mirror (RFC-DTO-LENS v3) konsumiert die Vokabeln, sobald er existiert. Py/C#-SDK emittiert kein kausal-TTL — kein Touch.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Cg8DSUz1U4AvKqXiy9Xx2f

claude added 3 commits July 7, 2026 21:39
SPEC-MINT-ARM-B-TTL §1: register the two Arm B KausalSpec variants in
the ogar.ttl OWL registry in lockstep with the emitter (Council-S3
correction — there IS a separate registry, contra the earlier claim).
Same pattern as the five pre-existing ogar:KausalKind instances and the
ogar:kausalDependsPath/-Context precedent.

Council-B1 nebenbefund folded in: ogar:Unknown was declared only as
ogar:EnumSourceKind, never as ogar:KausalKind, even though the emitter's
_ => ogar:Unknown wildcard has always emitted it as a kausalKind object —
a pre-existing declaration gap, now closed alongside this mint.
SPEC-MINT-ARM-B-TTL §2: add KausalSpec::Constrains/Onchange match arms
to kausal_triples, exactly the Depends shape (lib.rs:836-848) — one
ogar:kausalKind triple plus one ogar:kausalConstrainsPath /
ogar:kausalOnchangePath triple per field path. The `_ => ogar:Unknown`
wildcard stays, now covering only genuine future variants.

Council-S5 pathology: dotted paths (Odoo silently drops these in
@api.constrains/@api.onchange, odoo/orm/decorators.py:106-108/213-215)
are drop-with-no-triple for that path only; the kausalKind triple still
emits. Filter applied to both new arms.

Test-flip (§3): the characterization test
kausal_constrains_onchange_currently_emit_unknown_pending_emitter_wiring
is replaced by two tests —
kausal_constrains_onchange_emit_declared_kinds_and_paths (positive
kausalKind + path assertions, plus the Konflations-Fuse negative guards:
no ogar:Unknown, no ogar:dependsPath, no ogar:kausalDependsPath) and
kausal_constrains_onchange_drop_dotted_paths_without_triple. Also
extends kausal_spec_variants_emit_distinct_kinds to cover both new
variants.

Roundtrip: verified ogar-adapter-ttl has no kausal-consumer/parser (its
module doc lists ActionDef/KausalSpec under "Not yet supported"), so
TTL remains write-only for kausal; no roundtrip case added.
Append-only correction paragraph on the existing 2026-07-06 entry,
analogous to its HONEST CORRECTION sub-bullet: the emitter-debt P2 is
closed by SPEC-MINT-ARM-B-TTL — kausal_triples arms + ogar.ttl registry
now in lockstep, the characterization test flipped to a positive test
as designed, 5+3-Council GO. No new ad-hoc tag, no deletion.
@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_3e7d1ef8-3ec7-42fd-8300-32d55ddf4616)

@AdaWorldAPI AdaWorldAPI merged commit 1d4c22c into main Jul 7, 2026
2 of 3 checks passed
AdaWorldAPI pushed a commit that referenced this pull request Jul 8, 2026
…migration shm race

The parity tests shell out to dotnet on two threads. On a cold runner
(~/.dotnet absent), each first dotnet process runs .NET's first-time-use
NuGet migration, which opens a named mutex under /tmp/.dotnet/shm/session<N>.
Two migrations racing lose with mkdir==EEXIST / stat==ENOENT — the
intermittent failure seen on OGAR #179 (main was green on the same commit).

A static Mutex gate serializes all dotnet invocations, so the migration
completes once uncontended and later calls skip it. Verified with dotnet-sdk
8.0.128: cold-start (rm -rf /tmp/.dotnet before each run) x8 -> 8/8 green;
the same stress on the unserialized code flakes ~4/6.

Note: an earlier attempt isolated TMPDIR/HOME/DOTNET_CLI_HOME/NUGET_PACKAGES
per test — that does NOT work; the shm dir stays at /tmp/.dotnet/shm
regardless of those vars (empirically confirmed), so serialization, not env
relocation, is the fix.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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