1c2361b45a
improvise-odbc named two readings of the parse failure at
`- JORDAN MARTINEZ` and said to decide by asking whether improvise can
WRITE that line today. It cannot: `item_list`'s `name` is
`pipe_quoted | bare_name`, `bare_name` is `[A-Za-z_][A-Za-z0-9_-]*`, and
`quote_name` mirrors it character for character, so a spaced item name is
emitted `|JORDAN MARTINEZ|`. So the reader and the writer agree and the
round-trip property is not incomplete — the file was stale.
It was stale by hand, not by drift. c48a5cd migrated it to v2025-04-09 by
editing it in place: the `Date` items were pipe-quoted and the `Entity`
ones were not, and every line of its `## Data` section names a category
`Measure` where the file declares `_Measure`. It has not been loadable
since April, and nothing loaded it, so nothing said so. Deleted rather
than regenerated: there is no generator for it — it is hand-written fake
bank data — so "regenerating" would mean inventing a canonical form and
checking in 1200 lines whose only property is that they parse, which the
generator-driven proptests already establish over a far wider input space.
What is kept is the evidence and the gap the incident actually exposed:
- `an_item_name_the_item_line_cannot_carry_round_trips` puts the file's own
item names through `format_md`/`parse_md` and asserts the spaced ones come
back quoted and the bare-legal one stays bare.
- `a_bare_item_name_with_a_space_is_rejected` asserts the reader really does
refuse the unquoted line, with the quoted form parsing as the precondition.
Without it the first test would be consistent with the reader accepting
both spellings, which is not what happened.
- `tests/shipped_documents_load.rs` closes "a sample document exercised by
nothing": it walks the two directories `.gitignore` un-ignores and loads
every `.improv` in them. A directory walk, not a list of names, because a
list is a second place to remember. Proved discriminating by dropping the
offending line into `examples/` and watching it fail.
Unrelated, reported not fixed: `foo.improv` in the repo root has no version
line at all and is equally unloadable.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>