Skip to content

docs(spec): spec-0030 — deliberate shorelines (the flood verb) - #329

Open
stellarfeline wants to merge 6 commits into
mainfrom
docs/spec-shallows
Open

docs(spec): spec-0030 — deliberate shorelines (the flood verb)#329
stellarfeline wants to merge 6 commits into
mainfrom
docs/spec-shallows

Conversation

@stellarfeline

Copy link
Copy Markdown
Owner

Owner ruling (b), 2026-08-06: the island's waterline cells are intended, not a defect — so they need a first-class declaration.

The constraint that decided the design: a declaration that merely suppresses the check is the same hole with a nicer name. DW0364 has no waterline exemption deliberately — that exemption is what made #149 invisible.

Four decisions:

  1. A new stage-7 verb flood: the author names an envelope, and the compiler works out what the sea actually reaches inside it and builds that water. It does not place water on request and it does not skip anything.
  2. DW0364 is untouched. A cell stops being a violation only by ceasing to be ground — water is not standable. The verb can only take walkable cells away, never grant one. That is why this is not an exemption in a costume.
  3. The claim is falsifiable, with two new reds: DW0394 (the sea reaches nothing here) and DW0395 (the water does not stop where you said).
  4. Over-declaring is not an escape: a wider envelope wets more of your own map, and an envelope that swallows a corridor floods it and turns nav red. The feat(dsl,compiler): map editor L2 massing verbs — swap/insert/remove/rewire/reseed-piece (spec-0017 PR 3) #149 drowned room can never be declared away — a sealed interior is unreachable by the sea; there is a fixture where flood over it is DW0394, never green.

One of the island's 26 cells stays red, correctly — a sealed one-block dry pocket the sea cannot reach. A genuine content defect DW0364 found and the declaration refuses to hide; the content half fills it. (The other correction: 26 was 25 + a bug — one cell was never shoreline.)

Numbered 0030, not 0029: two workers picked the next free number on the same day from main, where the highest is 0028, and neither could see the other's branch. spec-0029 is taken by i18n v2.

Player-visible bytes move (24 appended lines in world_edits.mcfunction, one forceload, manifest hashes), so this belongs to the owner's playtest batch and is held, not merged on green.

stellarfeline and others added 6 commits August 4, 2026 00:32
…er-area walk_y datum, DW0364/DW0366/DW0367 (WIP: tests/docs follow)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…er-area walk_y datum, DW0364/DW0366/DW0367 (dsl 0.9.0)

Stage-1 horizon generalizes into the spec-0026 composition: string shorthands
(byte-identical for void/ocean) OR the object form {base, ...params}, all six
bases parsed and param-validated; flatland lands end-to-end (grass superflat
ambient one block under the scene walk plane, plains biome, bare);
valley/cherry-valley/summit/sky are reserved (DW0141) until their surround
slices. Placement moves to the per-area datum walk_ref_y - walk_y (DW0367),
retiring plan::OCEAN_BASE_Y; DW0364 proves every placed piece's standable
cells sit above the flood level empirically, with no waterline_y exemption —
the #149 flooded-interior class is now impossible by construction.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…dation

# Conflicts:
#	crates/compiler/src/lib.rs
#	crates/compiler/tests/cli.rs
#	crates/dsl/src/envelope.rs
#	crates/dsl/src/lib.rs
#	docs/reference/compiler.md
#	versions.toml
…am, not by this slice

The DW0366 row claimed `summit.vista_radius`'s floor was unenforceable because
the spec contradicted itself (floor 192 vs default 176). That was true when the
foundation slice reported it and stopped being true on 2026-08-04: the spec-0026
amendment (PR #261, on `main` for 66 commits now) resolved both open params —
`vista_radius` measured from the scene bounding box, floor 192, default 208; and
`blend_width` 1..=16.

Enforcement is deliberately NOT added here. Both params configure surrounds this
slice does not emit, and the valley slice (task #155 W-B, PR #259, based on this
branch) already carries the checks and the corrected default verbatim.
Implementing them twice would put a duplicate in the dependent branch's path for
no behaviour gained. The row now says what is true: the ambiguity is resolved,
the enforcement is owed, and which slice owes it.

No behaviour change: `dsl::validate::horizon_rules` and `horizon_defaults` are
byte-identical to this branch's pre-merge state.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AjQ5p1Kv5MrkGPumi7yXWL
…compiler proves (task #shallows)

`DW0364` refuses standable ground at or below the horizon's flood line with no
exemption, deliberately: that exemption is what made #149 invisible. Applied to
the released `nobodys-cave-island` it fires on 26 cells at world y=62 — the
shoreline the two bank-falls batches exist to make. Owner ruling 2026-08-06: the
sculpted shoreline stays, and it needs a first-class declaration.

The declaration is NOT a suppression switch. `flood` admits the horizon's
ambient sea into a declared envelope; the compiler computes which cells the sea
actually reaches and materializes them as water, in the model AND in the emitted
world. A cell stops being a `DW0364` violation only by ceasing to be ground.

Three properties do the safety work, and none of them is "skip the check":
- a sealed room under the sea is unreachable by the sea, so declaring `flood`
  over the #149 fixture is `DW0394`, never green — it only changes which red;
- over-declaring costs you your own map (a wider envelope wets more of it, and
  an envelope that swallows a corridor turns nav red), so it silences nothing;
- under-declaring is `DW0395`: water that runs on past the envelope into an
  undeclared air cell of a placed piece means the shoreline is not where the
  author said it is. Re-proved after every later batch.

`DW0364` keeps its exact rule, tier and domain. A campaign that declares no
`flood` emits byte-for-byte what it emitted before (`DW0141` fences the verb
below world-edits 0.9.0).

Spec (proposal) in `docs/specs/spec-0029-deliberate-shorelines.md`; the proof is
`crates/compiler/tests/spec0029_flood.rs` plus the island build, which goes
green on exactly this declaration with 25 wetted cells while `DW0364` goes on
refusing the one sealed pocket the envelope also covers.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AjQ5p1Kv5MrkGPumi7yXWL
…ken on an unmerged branch

Two workers picked the next free spec number on the same day from
`main`, where the highest is 0028. Neither could see the other's
branch: `docs/spec-0029-i18n-v2` already holds
`spec-0029-i18n-v2-client-selected-language.md`.

Text-only rename plus the test-file name; no behaviour change.
`spec0030_flood` 6/6 green.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant