@@ -11,66 +11,64 @@ to the task file and note completion in this notebook.
1111
1212---
1313
14- ## HANDOFF — as of 2026-08-04
14+ ## HANDOFF — as of 2026-08-08
1515
16- ** State:** branch ` main ` , clean, ** 0 commits ahead of ` origin/main ` ** — the
17- invariant/` initial handler ` documentation work is committed and pushed. Open
18- work lives in ** ` BACKLOG.md ` ** (new this session, tracked); durable facts in
19- CLAUDE.md.
16+ ** State:** branch ` main ` , clean, ** 3 commits ahead of ` origin/main ` ** — not
17+ pushed. The concept-page gating work is committed in three parts: the validator
18+ wrappers, the doc corrections, the path-resolution reference.
2019
21- ** ` task/ ` is empty.** Everything is in ` task/done/ ` . Tasks A–K closed.
20+ ** ` task/ ` is empty.** Everything is in ` task/done/ ` .
2221
23- ** Nothing is in flight.** The session finished a complete round trip with riddl
24- and re-verified the result. Safe to start anything.
22+ ** Nothing is in flight.** Open work is in ` BACKLOG.md ` .
2523
26- ### The trap that bit twice today
24+ ### What is now true
2725
28- ** riddl ` release/2 ` moves several times a day, and a doc note that says "not
29- supported yet" is stale within hours.** This session shipped three such notes
30- and had to remove all three the same evening, after riddl fixed both bugs we
31- filed and restaged the binary.
32-
33- Before writing * anything* conditional on riddlc's behavior:
26+ ` sites/riddl/docs/concepts/ ` is ** fully gated** — 56 fences validated, 76
27+ skipped, 0 failed, exit 0, against ` ../bin/riddlc ` at rc.9-54. Re-run with:
3428
3529``` bash
36- ls -la ../bin/riddlc # restaged? compare to your last check
37- git -C ../riddl log --oneline -3 # what landed
38- diff sites/riddl/docs/references/riddl-grammar.ebnf \
39- ../riddl/language/src/main/resources/riddl/grammar/ebnf-grammar.ebnf
30+ python3 scripts/validate-riddl-examples.py ../bin/riddlc sites/riddl/docs/concepts/* .md
4031```
4132
42- The grammar copy drifted ** twice in one day** . Do not refresh it with `sbt
43- extractGrammar` — that resolves the * published* 1.x library and would look
44- successful. BACKLOG item 3 has the correct command.
45-
46- ### Verified this session, against ` 2.0.0-rc.9-54-64b7b413 `
47-
48- All by compiling, not by reading:
49-
50- - ` when not invariant X then ` and bare ` when not X ` — ** both** valid; the
51- ` invariant ` keyword is optional in a condition, and ` with <expr> ` is optional
52- even for a ` requires <type> ` invariant. A condition * asks* ; a ` require `
53- * applies* and must be handed its data.
54- - Duplicate entity-scope ` initial ` handlers — Error at ** any** state count.
55- - ` requires type T ` and bare ` requires T ` — ** both** valid;
56- ` aggregate_use_case ` includes ` "type" ` . See BACKLOG item 4; we briefly
57- believed otherwise.
33+ ` language-reference.md ` still has ** 3 pre-existing failures** (BACKLOG 1).
34+ Baselined against the committed validator to prove they are not a regression —
35+ ** do that before blaming a wrapper change for a failure** , it took one command
36+ and settled it:
5837
59- ### Certainty
60-
61- Verified by compiling: every RIDDL example in the six pages changed today.
62- Verified by command: all five sites build ` --strict ` clean, 80 cross-site
63- links resolve, ` check-riddl-blocks.py ` clean on every edited page.
64- ** Assumed, not verified:** that the ~ 50 unannotated concept pages still fail at
65- the counts recorded in BACKLOG item 1 — that number predates rc.9-54.
66-
67- ### Lesson worth not relearning
38+ ``` bash
39+ git show < rev> :scripts/validate-riddl-examples.py > /tmp/base.py
40+ python3 /tmp/base.py ../bin/riddlc < file.md>
41+ ```
6842
69- A failed compile proves the ** spelling** wrong, not the ** feature** missing.
70- ` when not invariant X ` failed, and we wrote it up — in the docs and in a riddl
71- task — as "invariants cannot be named in conditions". The bare form had worked
72- all along. Try the other spellings before concluding a capability is absent;
73- the negative test is cheap and we skipped it.
43+ ### Traps this session paid for
44+
45+ - ** ` --auto ` reports the LAST wrapping it tried, not the relevant one.** All 15
46+ initial failures showed an identical ` interactions ` error, which looked like
47+ one systemic bug and was an artifact. It is a * measurement* mode; diagnose
48+ fences one at a time.
49+ - ** A green fence can mean nothing was checked.** ` use-case.md:85 ` passed while
50+ referring to five definitions that did not exist — riddlc does not resolve
51+ references inside ` sequence ` /` parallel ` /` optional ` . Filed with riddl.
52+ - ** ` check-riddl-blocks.py ` is much weaker than it looks.** It reported all 129
53+ concept fences clean while two carried retired 1.x ` then ` -chains. Only
54+ compiling finds this class of error; do not read its "clean" as coverage.
55+ - ** A shared wrapper is load-bearing.** Injecting the ordinary prelude at domain
56+ level broke 4 fences in ` language-reference.md ` . Wrapper vocabulary may be
57+ ADDED but never renamed, and a change must be re-baselined against every page
58+ that uses that kind, not just the page in hand.
59+ - ** ` [severe] empty(1:1->1) ` means an exception was thrown in a pass** , not a
60+ language error — ` Pass.scala ` catches NonFatal and emits the stack trace,
61+ which can render empty. Bisect the model; do not read the message.
62+ - ** Do not trust an exit code read through a pipeline.** `riddlc ... | head;
63+ echo $?` reports ` head`'s status. It made a failing compile look like a silent
64+ pass, and the wrong claim reached Reid before being corrected.
65+
66+ ### Filed with riddl (in ` ../riddl/task/ ` )
67+
68+ - ` 2026-08-08-empty-severe-on-dotted-path-through-function.md ` — root-caused to
69+ an ` Option ` cast to ` Seq ` in ` findMatchingCandidate ` 's Function arm.
70+ - ` 2026-08-08-refs-unresolved-inside-interaction-groups.md ` — the silent one,
71+ and the more serious.
7472
7573** Run ` /ossuminc-skills:check-tasks ` in the new session.**
7674
0 commit comments