docs(spec): the interactive-machinery design of record (spec-0031, spec-0032) - #343
Merged
Merged
Conversation
…ec-0032) An owner design session commissioned four things — a lift, a currency, a shop, and a death-and-recovery loop. Surveyed against vanilla 1.21.11 and against the engine, they share ONE missing primitive, so building any of them alone would have produced a private copy of the shared part. spec-0031 records that primitive and the verbs around it: clearable, comparable runtime state, with the comparison in the SHARED gate struct rather than on a shop verb — the gate struct's consumers (16 effect variants, 5 objective kinds, triggers, traps, cast placements, dialogue options, branch declarations) are exactly the comparison's consumers. Plus an `on_death` effect root; region fill/clear lifted off the two gate verbs that privately own it; status effect and player teleport as verbs; and a lethal volume. The lift is written down as a WORKED EXAMPLE and explicitly not a verb: once the primitives exist it is a `sequence`, and so is a rising drawbridge, a materialising bridge and a summonable cargo platform. Its full timing, its one-car invariant (create before clear — no tick has no car) and every corner case ruled that day are recorded there. spec-0032 records the economy. Its first line is a decision vanilla and a default already made silently: `keep_inventory true` means an item currency cannot drop on death, so the ledger is a score. The recovery stake is a glowing interaction point, not an item entity, placed at the nearest point to the death point on the walkable route between the respawn point in force and where the player died — restated so the compiler can prove it, and honest about the one substitution it makes (reachable-under-quest-state for "explored", which the engine does not track). CLAUDE.md gains two rules this session earned. A settled ruling is never re-asked: both questions put to the owner that day were already answered in the repo, one of them by the title of spec-0022. And a release is built from a frozen approved tree, never from a moving branch — the defect that shipped an unapproved package with nothing in the pipeline able to notice. Both specs list what is UNVERIFIED and to be settled by live measurement, led by whether the pre-respawn death advancement fires for void, fall and drowning deaths — load-bearing for a souls-shaped delve, and not answerable from recall.
Three steps genuinely fire on tick 0, and check-doc-dupes.py reads column 1 as the table key — so the table read as a merge artifact. Restructured as the check itself suggests: the step ordinal is the key, the tick is its own column. The sequence is unchanged. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AjQ5p1Kv5MrkGPumi7yXWL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Records an owner design session so it is executed, not re-asked.
The finding that shaped both specs
Four commissioned capabilities — a lift, a currency, a shop, a death-and-recovery loop — were surveyed against vanilla 1.21.11 and against the engine. They share one missing primitive, so building any of them alone would have produced a private copy of the shared part: the defect CLAUDE.md names first.
The missing primitive is clearable, comparable runtime state. The only author-visible state today is
FlagId— boolean, party-wide, and monotonic, with no verb that clears one. A lift needscar_at_floorandride_in_progress; a purse needs a balance; a stake needs an amount. All numeric, all must go down as well as up, and every one is read as a condition on some other effect.So the comparison goes into the shared gate struct, not onto a shop verb. The gate struct's consumers — 16 effect variants, all 5 objective kinds, triggers, traps, cast placements, dialogue options, branch declarations — are exactly the comparison's consumers. Decided at the first site; retrofitting at the second costs a
dsl_versionbump and an adoption round on every active campaign.What else was already there, privately
open-gate/close-gatealready fill and clear a declared region at runtime, andclose-gatealready teaches the completability model to treat it as solid from its DAG point.collapse'sthen_flooralready paves standable ground at runtime. The capability exists twice, inside two verbs; the only general spelling,set-block, places one block. spec-0031 moves it to the object class it acts on.on_deathdoes not exist — onlyon_respawn. With it, "the purse drops on death" becomes content expressed in a general mechanism rather than an engine feature.The lift is a worked example, and explicitly not a verb
Once the primitives exist, the owner's lift is a
sequenceof them — and so is a rising drawbridge, a materialising bridge, an opening wall, a summonable cargo platform. Its full timing, its one-car invariant (create before clear, so no tick can be saved with no car), and every corner case ruled that day are in the spec.Transport is by teleport, by owner ruling — not levitation, not a ridden entity, and no redstone mechanism. A separate consultation established why a solid moving platform is unavailable in vanilla 1.21.11 at all: display entities have no collision,
/datarefuses player data so player motion cannot be written, and the one stand-on entity drops its rider on ascent.Economy
The first decision was already made silently by a default:
gamerule keep_inventory truemeans an item currency cannot drop on death, andkeepInventoryis all-or-nothing — switching it off would also drop the pre-provided class kit in a zero-grind map. So the ledger is a score. Written down with its reasoning so a future session finds the why, not just the outcome. VillagerOffersis excluded for three independent reasons, any one sufficient.The recovery stake is a glowing interaction point collected by right-click, not an item entity, placed at the nearest point to the death point on the walkable route between the respawn point in force and where the player died — restated so it is a compile-time table rather than a runtime search, and honest about the one substitution it makes: reachable-under-quest-state stands in for "explored", which the engine does not track. That is recorded in the spec rather than quietly equated.
CLAUDE.md
Two rules this session earned:
traversaloverride in an earlier session, and "traps: redstone or commands" by the title ofspec-0022-traps-v2-command-driven.md, her own directive of 2026-08-03.mainat release time is what shipped a package the owner had not approved, with no place in the pipeline able to ask whether it was the accepted thing.What this PR does not do
No code. Both specs carry machine-checkable acceptance criteria and an explicit unverified list, led by whether the pre-respawn death advancement fires for void, fall and drowning deaths — load-bearing for a souls-shaped delve, and to be answered by a live spike rather than recall.