diff --git a/CLAUDE.md b/CLAUDE.md
index 483b89d..9895db8 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -37,9 +37,9 @@ Current decisions at a glance (each backed by an ADR):
simple to advanced (ADR-0003). No other sigils.
- **Project format:** `project.yaml` + `data/
.csv` +
`history.log`; `playground.db` is a derived artifact (ADR-0004,
- amended by ADR-0015). Implemented through Iteration 4 +
- cleanup; export/import (Iter 5) and migration framework /
- --resume / persistent input history (Iter 6) pending.
+ amended by ADR-0015). Fully implemented (ADR-0015 Iterations
+ 1–6): export/import, `--resume`, persistent input history, and
+ the migration framework scaffold are all done.
- **Project storage runtime:** every command persists through to
db + yaml + csv + history.log in one execution context, gated
by the combined db persistence logic; commit-db-last ordering
@@ -335,16 +335,8 @@ all of `target/`, forcing a full from-scratch rebuild).
These are explicitly tracked (mostly in `requirements.md`) but
not yet implemented:
-- **Project storage** (track 2): largely implemented through
- Iteration 4 + cleanup pass + safety hardening (Iterations
- 1–4 of ADR-0015). Pending pieces: `export` / `import` (Iter
- 5), `--resume` + persistent input history hydration +
- migration framework scaffold (Iter 6).
- **Modify relationship** (C3a): drop+add covers the use case
today.
-- **m:n convenience** (C4): auto-generates a junction table
- with appropriate FKs — depends on relationships being solid
- (they are).
- **Strong syntax-help in parse errors** (H1a): point users at
missing keywords/clauses rather than the unexpected
character. *(H1 — the friendly **database**-error layer — is
diff --git a/docs/requirements.md b/docs/requirements.md
index a30fc57..f578a1c 100644
--- a/docs/requirements.md
+++ b/docs/requirements.md
@@ -820,7 +820,12 @@ since ADR-0027.)
(`what`/`example`/`concept`) covers every command form + the 9 runtime
error classes, enforced by a comprehensiveness coverage test. Deferred:
the pre-submit-diagnostic route + `diagnostic.*` blocks (#38),
- clause-concept hints (#37).)*
+ clause-concept hints (#37). **Content verified 2026-06-15 (handoff-71):**
+ a semantic pass over every `hint.cmd.*`/`hint.err.*` block fixed four
+ errors — `create_table` (compound-PK misread), `save` (no inline name),
+ `import` (hyphen-rejecting target), and `foreign_key.child_side` (wrong
+ `on delete` remedy) — and added a catalogue-driven guard test that parses
+ every command example in its taught mode.)*
- [x] **H3** `help` provides general reference and per-command
help.
*(Done 2026-06-07: the **general reference** is `help` (no arg) —
diff --git a/src/dsl/grammar/mod.rs b/src/dsl/grammar/mod.rs
index 3842073..337b039 100644
--- a/src/dsl/grammar/mod.rs
+++ b/src/dsl/grammar/mod.rs
@@ -1012,6 +1012,75 @@ mod hint_key_tests {
assert!(cat.get(&key).is_some(), "missing tier-3 error block `{key}`");
}
}
+
+ /// Semantic-verification guard (handoff-71): every `hint.cmd.