What's left, why it's left, and what I need from you — the live tracker to audit against.
class gating on the-threadbool field type through the interpretergroup_fieldDesign calls I deliberately did not make. All are recorded in the corpus — in a divergence, a confidence note, or the gap report — so leaving them stays visible rather than becoming the status quo by default.
It named beat-the-clock, which has never existed anywhere. Cleared, with the three candidates I checked and rejected recorded. The gap report now shows it as awaiting a mechanic (true) rather than a broken reference (which understated it).
place-the-mark, or a second entry.Written at confidence 74 with its own falsification criterion: if a build shows the third call is expressible as violating a "the rally is void" rule, it folds back into Stamp or Reject and should be deleted. Nothing to do until a second instance exists.
Peregrine already ships Target Practice on Stream Screen, and the catalog says "Fault Sweep is this with the clock removed and the count given." That axis is the only thing keeping Cold Case from being Target Practice in a hat.
It declares checkpoint-authority, but its authored schema — verdict, faults, plausible_clean — is Stream Screen's contract. The one field that is checkpoint-authority's is interaction, whose prompt quotes that mechanic's failure mode almost verbatim. Untouched.
divergence instead of sitting silent.To make the rules bank, the rally, the whiteboard and Cold Case render at all, I had to declare their fields — which meant writing prompts. Mine are factual and serviceable; every other prompt in those files is yours, and the difference will be obvious.
In stellar/schema-extensions.json and peregrine/schema-extensions.json.
show-up-or-lose-it has no mechanic and no schema block — the second of the gap report's two proposals. Untouched.You said yes to these and I haven't done them. Listed in the order I'd take them.
You approved the Manual/Field Guide distinction "so long as we document that well, outline differences in the mechanics / display / presentation, and potentially include a validation of some kind." None of that is written. Right now the distinction lives only in the two templates and in a review doc.
README.md plus per-category notes in the corpus, so the contract sits next to the thing it governs. Validation was left open — my read is a soft check (a manual whose entries carry no chapter, a field guide with no grouping field) surfaced the way validation debt already is, rather than a hard error.You noted field guides should permit schema variation on a shared base. group_field got acrylics moved, but the base schema itself is untouched — Field Guide still declares entry_type / surface / beats, which only Things With a Cost uses, and only on 4 of its 28 entries.
title, metadata, body and the grouping key; push entry_type/beats into Things With a Cost's own extensions. Acrylics is frozen against its snapshot, so this touches the live category and the 28-entry guide only.You approved this with a condition: the shared design has to be efficient, intuitive and scannable, and worth drawing UI ideas from CodeRaven. That condition is the whole job — removing the tier is easy, earning it back is not.
Deliberately last: it's the biggest change and the least reversible, and it wants a design conversation rather than my invention.
instances in the gap reportChasing your Wager note turned up two stale cross-references (peregrine:wager, peregrine:lineup). Both fixed, but they drifted because nothing checks that field — the gap report validates mechanic references and not these. About five lines.
You said not a big deal. Parked, not dropped. The design stands if you want it: UserDefaults, not the corpus, since it's about your session rather than content.
Read this before auditing — it's where I'd expect you to find breakage.
| What | Why it's uncertain |
|---|---|
| All of it | I have never run the app. Everything is verified by compile, RavenKit's 4 tests, and export-machine --verify. Nothing was clicked. |
| Lazy document rendering | Changing to LazyVStack can affect scrollTo into unrealised rows and the section strip's active-tab tracking. Most likely place for a regression. Worth scrolling Stellar hard. |
| Acrylics after the move | Frozen guide, new category, new template path. Schema is pinned to its snapshot so fields are safe, but grouping and the suppressed brief are new behaviour on a 144-entry guide. |
| Terminal launch | AppleScript against Terminal.app; failures are swallowed. Needs a project path and macOS Automation permission. If it copies but no terminal opens, that's the permission prompt, not the code. |
| Export dialog | Web and To App run per guide in a loop. Two confirmation dialogs in a row for a two-guide To App run is untested ergonomically. |
| Corpus watcher | A 3-second echo-suppression window discards genuine external writes landing inside it. Real, pre-existing, untouched — out of scope but worth knowing. |
You said you've only seen the big structure so far. These are the areas I touched but couldn't evaluate as a user.
Committed, nothing pushed. App on stellar-projections, corpus on stellar-guide-and-registers.
| Commit | Repo |
|---|---|
8711560 make the game category workable, and sort the corpus into three kinds | app |
ab3a4e3 the games review, what changed, and the structural decisions | app |
17ee264 one export door, a "+" where the wand was, and sculpting as a tool | app |
4471aa2 declare what was already there — schema, mechanics, and three kinds | corpus |
Checkin recorded at 18/18; CodeRaven will auto-generate the completion. One task is marked obsolete rather than complete — the "four mini games built with zero entries" finding was mine and it was wrong: bank_target: 0 means no corpus bank is expected.