fix(hint): correct H2 corpus errors + add parse guard (handoff-71)
Semantic verification pass over the tier-3 `hint` corpus (ADR-0053). Four content errors corrected in src/friendly/strings/en-US.yaml: - cmd.create_table: the example `with pk id(serial), name(text), email(text)` declares a 3-column COMPOUND primary key, not a PK plus regular columns (every `with pk` column is a key member, ADR-0005). Rewritten to a single-column PK + `add column` for the rest; what/concept aligned. - cmd.save: `save as my-shop` does not parse — `save as` takes no inline name, it opens a path-entry prompt. Example -> `save as`; what no longer implies inline naming; added a temp-vs-named concept. - cmd.import: target `shop-copy` does not parse — the `as <target>` slot is a NewName ident that rejects hyphens. -> `shop_copy`. - err.foreign_key.child_side: dropped the bogus `on delete set null/cascade` remedy — that governs the parent direction; a child-side violation is fixed by inserting the parent first (matches the tier-1 hint). Adds every_cmd_hint_example_parses_in_its_mode — a catalog-driven guard that parses every hint.cmd.* example in its taught mode, backstopping syntactic drift (it caught the save and import errors). Registers the new hint.cmd.save.concept key. docs: drop two stale "deferred" entries from CLAUDE.md — project storage (export/import, --resume, input history, migration scaffold) and m:n convenience (C4) are all implemented (ADR-0015/0045); record the verification pass on requirements.md H2.
This commit is contained in:
@@ -430,8 +430,9 @@ hint:
|
||||
example: "rebuild"
|
||||
concept: "The text files (project.yaml + the data folder) are the source of truth; the database is derived and can always be rebuilt from them."
|
||||
save:
|
||||
what: "Save the current project under a name; `save as` copies it to a new one."
|
||||
example: "save as my-shop"
|
||||
what: "Save the current project; `save as` copies it to a new name or location."
|
||||
example: "save as"
|
||||
concept: "On a temporary project, `save` opens a prompt to give it a permanent name; a named project auto-saves as you work, so `save` on one is already done. `save as` always prompts for a new name or path — use it to copy a project."
|
||||
new:
|
||||
what: "Close the current project and start a fresh temporary one."
|
||||
example: "new"
|
||||
@@ -444,7 +445,7 @@ hint:
|
||||
concept: "The zip carries the schema and data as text, so anyone can rebuild the very same database from it."
|
||||
import:
|
||||
what: "Unpack a project zip into a new project and switch to it."
|
||||
example: "import my-shop.zip as shop-copy"
|
||||
example: "import my-shop.zip as shop_copy"
|
||||
mode:
|
||||
what: "Switch between simple mode (the guided teaching commands) and advanced mode (raw SQL)."
|
||||
example: "mode advanced"
|
||||
@@ -465,9 +466,9 @@ hint:
|
||||
example: "copy last"
|
||||
# DDL — schema-shaping commands (Phase C batch 2).
|
||||
create_table:
|
||||
what: "Create a new table — its columns, their types, and a primary key."
|
||||
example: "create table Customers with pk id(serial), name(text), email(text)"
|
||||
concept: "A table is a set of rows that share the same columns. The primary key uniquely identifies each row; a `serial` key numbers the rows for you."
|
||||
what: "Create a new table and declare its primary key."
|
||||
example: "create table Customers with pk id(serial)"
|
||||
concept: "A table is a set of rows sharing the same columns. `with pk` declares the primary key — one column, or several for a compound key; add the other columns afterwards with `add column`. A `serial` key numbers the rows for you."
|
||||
create_m2n:
|
||||
what: "Create a junction table linking two tables many-to-many."
|
||||
example: "create m:n relationship from Students to Courses"
|
||||
@@ -606,7 +607,7 @@ hint:
|
||||
child_side:
|
||||
what: "The value you gave for the child column doesn't match any parent row, so the foreign key has nothing to point at."
|
||||
example: "First insert the parent (insert into Customers …), then the child that references it."
|
||||
concept: "A foreign key is a promise that every child points at a real parent, so the parent must exist first. To allow orphans on delete instead, set the relationship's `on delete` to `set null` or `cascade`."
|
||||
concept: "A foreign key is a promise that every child points at a real parent, so the parent must exist before a child can reference it. (`on delete` actions like `cascade` or `set null` govern the other direction — what happens to children when their parent is removed — not this one.)"
|
||||
parent_side:
|
||||
what: "You're deleting or changing a row that other rows point at, which would orphan those children."
|
||||
example: "Delete the child rows first, or set the relationship's `on delete` to `cascade` (remove them too) or `set null` (keep them, unlinked)."
|
||||
|
||||
Reference in New Issue
Block a user