Skip to content

Sea: paint the ORIGINAL's own seabed, not a synthetic gradient - #15

Merged
goetchstone merged 3 commits into
mainfrom
map/true-seabed-render
Jul 31, 2026
Merged

Sea: paint the ORIGINAL's own seabed, not a synthetic gradient#15
goetchstone merged 3 commits into
mainfrom
map/true-seabed-render

Conversation

@goetchstone

Copy link
Copy Markdown
Owner

Summary

Owner-reported: the map center reads as a featureless blue field. The sea was painted by a synthetic latitude gradient, while the real per-cell seabed (already extracted into terrain.json's depth) was never read by the compiler — dead data that never reached the client. Now the compiled mask carries the bands and the client paints the true shoals and channels. Render-only: sailability and determinism untouched.

Test plan

  • 1,249 tests green (4 new pure seabed tests + serializability guard pins depth)
  • lint clean
  • CI
  • Owner playtest of the center

🤖 Generated with Claude Code

goetchstone and others added 3 commits July 28, 2026 06:01
…pansion)

- js-yaml >=4.3.0 (high: vulnerable range >=4.0.0 <4.3.0) — only one
  version in the tree (4.2.0), pulled in by @eslint/eslintrc; resolves
  to 4.3.0, same major line.
- brace-expansion >=5.0.7 (high: vulnerable range >=3.0.0 <5.0.7),
  scoped as "minimatch@10>brace-expansion" — the tree carries TWO
  incompatible major lines: 1.1.15 (bare-function export) under
  minimatch@3.1.5 via eslint's own config-array/eslintrc chain, and
  5.0.6 (named exports) under minimatch@10.2.5 via
  @typescript-eslint/typescript-estree. Only the 5.x line is in the
  advisory's vulnerable range, so the override is qualified to that
  parent to avoid forcing a major bump onto minimatch@3.1.5 (which
  would break it the way an unscoped bump broke minimatch@3.x/
  @babel/core/istanbul on a sibling repo). Resolves to 5.0.8; the
  1.1.15 instance is untouched and out of the alert's range.

Full gate green with the new resolutions (1,245 tests, lint, build).
`pnpm audit` confirms both js-yaml and the 5.x brace-expansion finding
are gone; the untouched 1.x brace-expansion instance and a pre-existing
postcss advisory in packages/client are unrelated to these two alerts
and were left alone.

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

Follow-up to the js-yaml / brace-expansion@5 overrides in this branch.

- minimatch@3>brace-expansion -> ^1.1.16 clears GHSA-3jxr-9vmj-r5cp. Scoped to
  the 1.x line so minimatch@3's bare-function usage keeps working; a blanket
  brace-expansion override would break it (and @babel/core and istanbul), which
  is exactly how the equivalent bump failed on a sibling repo.
- postcss -> ^8.5.18 clears the sourceMappingURL path-traversal advisory
  reaching packages/client via vite.

Remaining after this: GHSA-mh99-v99m-4gvg still matches brace-expansion 1.1.16
under eslint>minimatch@3. It is unfixable — the advisory covers everything
<= 5.0.7 and upstream patched only the 5.x line, so no patched 1.x exists — and
it is dev-only. 'pnpm audit --prod' reports no known vulnerabilities, so nothing
vulnerable ships.

Verified on a clean 'pnpm install --frozen-lockfile': build, lint, and the full
workspace suite all pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Owner: "maybe you can fix the center now too" — the contested middle
rendered as one flat blue field. Root cause: the sea was painted by a
SYNTHETIC formula (waterDepth01: shallow near the north/south edges, deep
in between, 28 latitude slabs), so every cell at the same y got the same
colour. The real per-cell seabed WAS being extracted into terrain.json's
`depth` (deep/shallow/pink from the map's own minimap colours) but the
compiler never read it — dead data that never reached the client. The
original's middle is a braid of shoals and channels; ours was a gradient.

- core: WaterMask gains a packed render-only `depth` band per cell
  (0=land,1=deep,2=shallow,3=pink), decoded from terrain.json's existing
  RLE; absent/short data degrades to zeros. The SIM IGNORES it —
  sailability stays `cells` alone, so determinism is untouched (the
  serializability guard now pins it alongside `cells`).
- client: the static sea layer lays the true bands over the base grade,
  run-length merged and clipped to the viewport, inside the existing
  cached layer (rebuilt only on the sea signature). New pure
  `seabedBandTint` + 4 unit tests.

1,249 tests green; lint clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@goetchstone
goetchstone merged commit 7d9a259 into main Jul 31, 2026
1 check passed
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