Skip to content

Commit b3dcec3

Browse files
reid-spencerclaude
andcommitted
Graduate the concepts gating work out of BACKLOG
concepts/ is fully gated, so item 1 is rewritten to what actually remains: 3 pre-existing failures in language-reference.md, baselined against the committed validator to prove they are not a regression from the new wrapper kinds. HANDOFF records the traps that cost real time, since none is visible from the code: --auto reports the last wrapping it tried rather than the relevant one, so a systemic-looking error was an artifact; a green fence can mean nothing was checked, because riddlc does not resolve references inside interaction groups; check-riddl-blocks.py called 129 fences clean while two held retired 1.x syntax; and an exit code read through a pipeline reports the pipe's status, which turned a failing compile into a false "silent pass" claim before it was caught. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent 54cd4e1 commit b3dcec3

2 files changed

Lines changed: 59 additions & 61 deletions

File tree

BACKLOG.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,22 @@ what is durably true goes to CLAUDE.md.
66

77
---
88

9-
## 1. Annotate the concept pages with fence directives
9+
## 1. Annotate the remaining RIDDL fences outside `concepts/`
1010

11-
**What:** The ~50 pages under `sites/riddl/docs/concepts/` carry no per-fence
12-
`<!-- riddl: ... -->` directives, so `validate-riddl-examples.py` cannot gate
13-
them. Under `--auto`, 26 fences fail site-wide against rc.9.
11+
**What:** `sites/riddl/docs/concepts/` is now fully gated (56 validated, 76
12+
skipped, 0 failed). `language-reference.md` is not: **3 fences fail** and are
13+
pre-existing, unrelated to the concepts work.
1414

15-
**Why it is not urgent:** No file is above three failures, which is the agreed
16-
threshold, and the failures are dominated by fragments that reference
17-
definitions the page deliberately does not show — those need a per-page
18-
`<!-- riddl-prelude ... -->`, not a correction.
15+
**Verified 2026-08-08:** the 3 are `language-reference.md` at the fences on
16+
lines 861 (`in-context`), 1549 and 2138 (both `standalone`). Baselined against
17+
`git show HEAD:scripts/validate-riddl-examples.py` to confirm they predate the
18+
new wrapper kinds — they are not a regression from that work.
1919

20-
**Verified:** Counted this session; `quickstart.md` is fully annotated and
21-
validates clean on both 2.0 and 1.31. See CLAUDE.md § "Compiling RIDDL
22-
examples" for the directive table.
20+
**Also open:** `check-riddl-blocks.py` flags two items in
21+
`tutorials/rbbq/restaurant/online-ordering.md` (`state ... of O` without a
22+
record; a `prompt "` statement). Advisory, left alone as out of scope.
2323

24-
**Order:** Independent. Pick pages with the most fences first.
24+
**Order:** Independent of everything else.
2525

2626
---
2727

NOTEBOOK.md

Lines changed: 47 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)