@@ -13,104 +13,75 @@ to the task file and note completion in this notebook.
1313
1414## HANDOFF — as of 2026-08-10
1515
16- ** State (verified this session, not recalled):** branch ` main ` , tree clean,
17- ** unpushed commits ahead of ` origin/main ` ** — check with ` git status ` and push
18- when ready. HEAD is the last of six 1a commits.
16+ ** All figures below were run in this session, not recalled.**
1917
20- ** Compiler:** ` ../bin/riddlc ` is ** ` 2.0.0-rc.10-57-e012ebb9 ` ** and ` build.sbt ` 's
21- ` With.Riddl.library ` pin matches it exactly. Both checked by command. It is
22- restaged often — re-check both and keep them equal, or the docs describe a
23- grammar the examples were never validated against.
18+ ** State:** branch ` main ` , tree clean, ** 0 commits ahead of ` origin/main ` ** ,
19+ HEAD ` e446a20 ` . Everything is pushed; CI has deployed from it.
2420
25- ** Gate, re-run this session:** 2.0 — ** 171 validated / 55 skipped / 0 failed,
26- exit 0** ; 1.31 — 6/0/0. ` mkdocs build --strict ` on ` sites/riddl ` clean.
21+ ** Compiler:** ` ../bin/riddlc ` is ** ` 2.0.0-rc.10-57-e012ebb9 ` ** and ` build.sbt ` 's
22+ ` With.Riddl.library ` pin matches exactly. The Homebrew ` riddlc ` on PATH is
23+ ** 2.0.0-rc.5** and is the WRONG compiler for the 2.0 docs. riddlc is restaged
24+ often — re-check the binary against the pin at session start.
2725
28- ** The gate's scope is a FILE LIST, and it is now written down** in CLAUDE.md
29- § "Compiling RIDDL examples". Compare a figure only against one taken over the
30- same scope; if one fails to reproduce, re-measure the baseline against the
31- parent commit rather than trusting it.
26+ ** Gates:** 2.0 — ** 171 validated / 55 skipped / 0 failed, exit 0** ; 1.31 —
27+ 6/0/0. ` mkdocs build --strict ` on ` sites/riddl ` clean.
3228
33- ** ` task/ ` is empty ** ( only ` done/ ` ). Nothing awaits triage here .
29+ ** ` task/ ` holds only ` done/ ` . ** Nothing awaits triage.
3430
3531### In flight — BACKLOG 1a
3632
37- ** 49 blanket skips remain** , from 118 at the start of the session.
38- ` concepts/ ` and ` introduction/ ` are ** finished** . ` language-reference.md ` has
39- had a first slice (23/52 → 35/40, 12 retired); its remaining ** 32 are restored
40- verbatim** , so the page is green and the work is still tracked.
33+ Retiring the blanket ` "illustrative fragment" ` skips. ** 49 remain** , from 118
34+ at session start. ` concepts/ ` and ` introduction/ ` are ** finished** .
4135
42- ** BACKLOG 1a now carries the measured analysis of those 32 ** — which want
43- ` in-handler ` , which want ` in-domain ` plus a domain prelude the page does not
44- yet have, which are genuinely unskippable, and which hide known content bugs.
45- Read it before touching the page; it cost a full pass to derive .
36+ ` references/language-reference.md ` is ** half-done and is where to resume ** : 12
37+ of its 44 retired (page 23/52 → 35/40), and ** the other 32 were restored
38+ verbatim ** so the page is green. That restore is deliberate, not abandoned
39+ work — the gate must never be left red .
4640
47- The other 17 sit in ` migration/ ` and ` guides/ ` , ** outside the gate scope** ,
48- whose trees carry 4 pre-existing failures. Starting them starts BACKLOG 1b —
49- decide that deliberately.
41+ ** BACKLOG 1a carries the measured analysis of those 32** — which want
42+ ` in-handler ` , which want ` in-domain ` plus a domain prelude the page still
43+ lacks, which are genuinely unskippable, and which hide known content bugs.
44+ Read it first; it cost a full pass to derive.
5045
51- Nothing is half-edited; every page is committed at a green gate.
46+ The other 17 sit in ` migration/ ` and ` guides/ ` , ** outside the gate scope** ,
47+ in trees carrying 4 pre-existing failures. Starting them starts BACKLOG 1b.
5248
5349### Traps
5450
55- - ** Most pages hide real errors** — 13 found so far by compiling. Three pages
56- hid none, so it is not a law, but budget for content repair.
57- - ** Re-run the FULL gate after any wrapper edit** , never just the page in hand.
58- Wrapper changes regressed other pages three times. Wrapper-internal names must
59- keep the ` Example ` prefix: a record named ` OrderData ` collided with
60- ` language-reference.md ` 's own prelude.
61- - ** A page prelude must be self-contained.** It must not name anything a
62- * fence* defines either, not just anything the wrapper defines — that breaks
63- every other fence on the page, with errors pointing at innocent lines.
64- - ** Never name a prelude entry ` Tax ` .** The ` in-function ` wrapper supplies a
65- sibling ` context Tax ` ; a prelude ` function Tax ` makes every ` Tax.… ` path
66- ambiguous and breaks that page's in-function fences. The known rule was the
67- mirror image — wrapper names colliding with prelude names — the same wall
68- from the other side.
51+ - ** The gate's scope is a FILE LIST, not a directory** — exact command in
52+ CLAUDE.md § "Compiling RIDDL examples". A figure is only comparable within
53+ one scope; if one fails to reproduce, re-measure against the parent commit
54+ rather than trusting it. That is why the inherited "108/107" was discarded.
55+ - ** The gate truncates diagnostics** to a position. For the real message,
56+ import the script as a module, re-wrap with ` wrap() ` (mirroring any
57+ ` no-prelude ` ), and run ` ../bin/riddlc validate <file> ` — a bare path, there
58+ is no ` --input-file ` flag.
59+ - ** Re-run the FULL gate after any wrapper or script edit.** Wrapper changes
60+ have regressed unrelated pages four times.
6961- ** ` annotate-riddl-examples.py ` places a fence against the prelude AS IT
70- WAS** , so extending the prelude afterwards can invalidate earlier
71- placements. It silently invalidated 8 on ` language-reference.md ` .
72- - ** A context-level prelude cannot supply a sibling context** , and contexts do
73- NOT nest (verified rc.10-57). A fence naming ` Other.SomeEvent ` must either
74- show its enclosing context (making it ` in-domain ` , which reads the
75- domain-prelude) or resolve the name locally. Injecting the domain-prelude
76- into every wrapper was tried and reverted: it collides with the epic
77- wrappers, which already define ` user Customer ` .
78- - ** A dotted path is anchor-then-DIRECT-child, not a deep search.**
79- ` Storefront.Credentials ` fails when ` Credentials ` sits inside a page; it must
80- be ` Storefront.LoginPage.Credentials ` .
81- - ** A fence naming an outlet cannot be fixed by a prelude.** An outlet lives in
82- a processor and a prelude lands at context level, so no statement wrapper can
83- reach one. Show the owning processor, or skip with a precise reason.
84- - ** ` scratchpad/dump.py ` ignores ` no-prelude ` ** , so its output is not what the
85- gate sees; a "duplicate name" error from it is an artifact. Get the gate's own
86- error before diagnosing.
87- - ** The gate truncates diagnostics.** It prints the ` [error] ` position and
88- little else. To read the real message, re-wrap with ` wrap() ` (import the
89- script as a module, mirror the ` no-prelude ` logic) and run
90- ` ../bin/riddlc validate <file> ` yourself. Note the subcommand takes a bare
91- path — there is no ` --input-file ` flag.
92- - ** Annotate fences by LINE NUMBER.** Matching on a fence's first line put two
93- directives on one fence and left two bare — two fences both began
94- ` entity Account is { ` .
62+ WAS.** Extending the prelude afterwards silently invalidated 8 placements.
63+ - ** Prelude/wrapper name collisions run both ways.** Wrapper names keep an
64+ ` Example ` prefix; equally, a prelude must not take a name a wrapper supplies
65+ — ` function Tax ` broke every in-function fence on its own page.
66+ - ** Annotate fences by LINE NUMBER** , never by matching a fence's first line.
9567
9668### Certainty
9769
98- ** Verified by command this session:** branch/push state, compiler version, pin
99- agreement, both gates, ` mkdocs build --strict ` on ` sites/riddl ` . Every gate
100- figure quoted above was measured, including the pre-change baselines.
101- ** Verified by compiling:** every example on the six pages changed; that an
102- entity-level handler satisfies a state's handler requirement; that a query
103- declares its response with ` replies ` and that ` yields ` on a query is an Error;
104- that predefined types do not resolve as alternation members; that
105- ` BottomlessPit ` /` ForeverEmpty ` need no import.
70+ ** Verified by command this session:** git state, both compiler versions, the
71+ pin, both gates, the strict build, that ` task/ ` is empty, and that no
72+ unexecuted plan in ` ~/.claude/plans/ ` holds open work for this repo.
73+
74+ ** Verified by compiling:** every example on the 25 pages changed, plus the
75+ rules recorded in BACKLOG 1a and in the pass entries below.
76+
10677** Assumed, not re-verified:** BACKLOG item 5's 18 site items were carried over
107- as written and none was re-checked against the current site.
78+ as written and none was re-checked against the current site. The gh-pages
79+ deploy triggered by the last push was not inspected.
10880
10981### Pointers
11082
111- Open work is ** BACKLOG.md** — 1a is the live one. Durable facts are
112- ** CLAUDE.md** , notably § "Things that will bite" for the grammar protocol
113- (** always ` sbt extractGrammar ` , never ` cp ` ** ).
83+ Open work is ** BACKLOG.md** — 1a is live. Durable facts are ** CLAUDE.md** ,
84+ notably § "Things that will bite" and § "Compiling RIDDL examples".
11485
11586** Run ` /ossuminc-skills:check-tasks ` in the new session.**
11687
0 commit comments