Skip to content

feat(design): DS-H-02a hall tiles and generator checks - #1642

Merged
mergify[bot] merged 3 commits into
mainfrom
claude/ds-h-02a
Oct 16, 2026
Merged

mergify[bot] merged 3 commits into
mainfrom
claude/ds-h-02a

Conversation

@Cuarroc

@Cuarroc Cuarroc commented Oct 16, 2026 •

Copy link
Copy Markdown
Owner

Die Probe-Halle hat jetzt ihre ersten echten Kacheln: Boden, Wand, Tür und ein Förderband mit Rückweg, als Text gezeichnet und daraus automatisch zu Bildern gebaut. Der Bildgenerator weist fehlerhafte Eingaben jetzt mit klaren Meldungen ab, und das sichern neue Tests. Du musst nichts tun; zwei unabhängige Prüfer schauen sich das noch an.

Report

Plan-ID: DS-H-02a

What changed

  • src/design/hall/tiles/hall.px.ts: seven hand-placed 16×16 text rasters in the DS-H-01 format: tile-floor-0, tile-wall-0, tile-door-0 (delta of the wall), tile-belt-0, tile-return-0 (delta of the belt, chevrons reversed), tile-belt-turn-0 (left → down), tile-return-turn-0 (top → left). Palette indices only (ASSETS.md §2), light from the top left.
  • src/design/hall/tiles/layout.ts: the probe hall floor as a 12×6 tile grid (FLOOR) and its character → tile-id map (TILE); belt runs right, turns down and comes back as the return path. Split/merge pieces are not needed by this layout (they belong to DS-WF-3).
  • src/design/hall/sprites/hall-tiles-{light,dark}.png + hall-tiles.json: generator output (112 × 16, 468 bytes each); figures atlases unchanged.
  • scripts/dev/build-sprites.mjs (carry-over from the feat(design): DS-H-01 sprite format, generator and pixel scale #1637 review): --root <dir> reads tokens and sources from another tree (used by the tests); --out/--root without a value fail with <flag> needs a directory (R1637-G1); mkdirSync(out, {recursive:true}) (R1637-K5); token blocks found by regex, tolerant to :root{ and whitespace/newline before the brace (R1637-K4).
  • src/design/hall/usePixelScale.ts: getServerSnapshot returns 1 (R1637-K3).
  • src/design/hall/sprites/provenance.json: entry for tiles/hall.px.ts (agent:claude, MIT, references none).
  • docs/PLAN.md: own DS-H-02a row only (No-Test: plan text only, commit 1a296cd9).

Red → green

Red commit 0294d8b6 (tests only + layout data), green at 9d6c6457. Named tests (Test-First trailers):

  • src/design/hall/tiles.test.ts::every tile used by the layout exists in the atlas
  • src/design/hall/sprites.test.ts:: the build rejects a malformed frame id, … a duplicate frame id, … a frame of the wrong size, … a figure frame with more than eight colours, … an atlas over its size limit, … a token that is not an opaque hex colour, the build reads token blocks without a space before the brace, the build creates a missing output directory, the build fails clearly when --out has no value (R1637-K2/K4/K5/G1, all through the script's CLI on a throw-away --root)
  • src/design/hall/pixelScale.test.ts::server rendering assumes a device pixel ratio of 1 (R1637-K3)

Evidence (Linux server)

  • npx vitest run src/design/hall → exit 0 (3 files, 16 tests)
  • npm run typecheck → exit 0
  • node scripts/contrast-check.mjs → exit 0
  • node scripts/dev/build-sprites.mjs → exit 0, git status clean afterwards (atlases byte-identical)
  • BASE_SHA=$(git merge-base origin/main HEAD) HEAD_SHA=$(git rev-parse HEAD) bash scripts/ci/red-first.sh → exit 0 (all 11 red at base, green at head)
  • bash scripts/ci/gates.sh lane prepush → exit 0 (298 s at 9d6c6457; again exit 0, 282 s, at head 1a296cd9 after the PLAN row)
  • Push verified with git ls-remote origin claude/ds-h-02a.
  • Visual check (rule 2): 4× previews of the tile sheet and of the full floor layout, light and dark, rendered from the committed atlases and inspected: ds-h-02a-tiles-4x-{light,dark}.png, ds-h-02a-layout-4x-{light,dark}.png in the orchestrator's report folder (not committed). Belt pieces meet edge to edge; door sits in the wall course.

Size

291 diff lines including the PLAN row (PNG binaries not counted), within 300.

NICHT ABGEDECKT

  • Windows half: #[cfg(windows)] tests and the Windows clippy arms do not run on Linux; the Windows lane runs in the merge queue.
  • In the dark theme the palette's "faint" tone (--g-faint) is lighter than the floor, so the one-tone shadow under the belt reads as a light line there; that follows the §2 token mapping and is not changed here.
  • No rendering in the app or gallery (DS-H-04/07); the layout is data only, nothing imports it yet.
  • PNG size limits/§5 budgets only checked by the generator's own limits, no decoded-memory measurement.

Review

Review: pending, Root commissions (tier B, two non-Anthropic reviewers).

🤖 Generated with Claude Code on the ProjectA server worker

Root acceptance (head 1a296cd, 2026-10-16 17:35 MESZ)

Tier B (TS + dev script scripts/dev/build-sprites.mjs). Author family Anthropic (server job, claude-opus-5-5@high). Reviewers on diff origin/main...1a296cd9 via OpenRouter: Gemini 3.8 Flash (Google) APPROVE, Kimi K3 (Moonshot) APPROVE. Files: pa-orch/review-openrouter/out/pr1642-{gemini,kimi}-1a296cd9.md. R1637-K2..K5/G1 carried into this package are covered by the new generator tests.

ID Source Severity Finding Disposition
R1642-G1/K1 Gemini, Kimi low devicePixelRatio override not restored (pixelScale.test.ts:19-23) follow-up DS-H-02b
R1642-K2 Kimi K3 low two generator tests do not assert run.status === 0 (sprites.test.ts:99-104) follow-up DS-H-02b
R1642-K3 Kimi K3 low tiles.test.ts does not check unused TILE mappings follow-up DS-H-02b (optional)
R1642-K4 Kimi K3 low ~282 lines, near the cap noted: split raster from tooling in later tile PRs

No open high finding. review-ok bound to 1a296cd.

Cuarroc and others added 3 commits October 16, 2026 16:56
The layout grid needs tiles the atlas does not have yet; the build script gets
negative cases (malformed/duplicate id, wrong size, too many colours, atlas
overflow, non-hex token), tolerant token blocks, a missing output directory and
a bare --out; usePixelScale gets a server snapshot.

Test-First: src/design/hall/tiles.test.ts::every tile used by the layout exists in the atlas
Test-First: src/design/hall/sprites.test.ts::the build rejects a malformed frame id
Test-First: src/design/hall/sprites.test.ts::the build rejects a duplicate frame id
Test-First: src/design/hall/sprites.test.ts::the build rejects a frame of the wrong size
Test-First: src/design/hall/sprites.test.ts::the build rejects a figure frame with more than eight colours
Test-First: src/design/hall/sprites.test.ts::the build rejects an atlas over its size limit
Test-First: src/design/hall/sprites.test.ts::the build rejects a token that is not an opaque hex colour
Test-First: src/design/hall/sprites.test.ts::the build reads token blocks without a space before the brace
Test-First: src/design/hall/sprites.test.ts::the build creates a missing output directory
Test-First: src/design/hall/sprites.test.ts::the build fails clearly when --out has no value
Test-First: src/design/hall/pixelScale.test.ts::server rendering assumes a device pixel ratio of 1

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Seven 16x16 tiles drawn as text rasters (floor, wall, door, belt, return
path and the two turns that join them) plus the floor layout that uses
them; the committed atlases are the generator's output.

Generator hardening from the DS-H-01 review: --root for tests, a bare
--out or --root fails with a clear message, the output directory is
created, and token blocks are found regardless of spacing before the
brace. usePixelScale gets a server snapshot of ratio 1.

Test-First: src/design/hall/tiles.test.ts::every tile used by the layout exists in the atlas
Test-First: src/design/hall/sprites.test.ts::the build rejects a malformed frame id
Test-First: src/design/hall/sprites.test.ts::the build rejects a duplicate frame id
Test-First: src/design/hall/sprites.test.ts::the build rejects a frame of the wrong size
Test-First: src/design/hall/sprites.test.ts::the build rejects a figure frame with more than eight colours
Test-First: src/design/hall/sprites.test.ts::the build rejects an atlas over its size limit
Test-First: src/design/hall/sprites.test.ts::the build rejects a token that is not an opaque hex colour
Test-First: src/design/hall/sprites.test.ts::the build reads token blocks without a space before the brace
Test-First: src/design/hall/sprites.test.ts::the build creates a missing output directory
Test-First: src/design/hall/sprites.test.ts::the build fails clearly when --out has no value
Test-First: src/design/hall/pixelScale.test.ts::server rendering assumes a device pixel ratio of 1

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No-Test: plan text only

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Cuarroc
Cuarroc marked this pull request as ready for review October 16, 2026 15:28
@Cuarroc Cuarroc added the review-ok Pipeline: review disposition complete, no open high finding label Oct 16, 2026
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-16T15:31:28.612387Z 1a296cd Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@Cuarroc

Cuarroc commented Oct 16, 2026

Copy link
Copy Markdown
Owner Author

@Mergifyio queue

@Cuarroc

Cuarroc commented Oct 16, 2026

Copy link
Copy Markdown
Owner Author

Root auto-queue: head 1a296cd unchanged since review-ok, all checks green. @Mergifyio queue

@mergify mergify Bot mentioned this pull request Oct 16, 2026
30 of 46 tasks
@mergify

mergify Bot commented Oct 16, 2026

Copy link
Copy Markdown
Contributor

queue

☑️ This pull request is already queued

@mergify mergify Bot added the queued label Oct 16, 2026
@mergify
mergify Bot merged commit a7af21d into main Oct 16, 2026
25 checks passed
@mergify

mergify Bot commented Oct 16, 2026

Copy link
Copy Markdown
Contributor

Merge Queue Status

  • ✅ Entered queue — 2026-10-16 15:39 UTC · Rule: default · triggered by merge protections
  • ✅ Checks passed · on draft merge queue: checking #1642 on main (1256c96) #1644
  • ✅ Merged — 2026-10-16 15:52 UTC · at a7af21d5c788e0ff905924475c1977c08ef2f430 · merge

This pull request spent 12 minutes 34 seconds in the queue, including 11 minutes 52 seconds running CI.

Required conditions to merge
  • check-success = gates (linux)
  • check-success = gates (windows)
  • check-success = red-first
  • github-review-approved [🛡 GitHub repository ruleset rule main-pr-required-checks]
  • label != do-not-merge
  • any of [🛡 GitHub repository ruleset rule main-pr-required-checks]:
    • check-success = @github-actions/gates (linux)
    • check-neutral = @github-actions/gates (linux)
    • check-skipped = @github-actions/gates (linux)
  • any of [🛡 GitHub repository ruleset rule main-pr-required-checks]:
    • check-success = @github-actions/gates (windows)
    • check-neutral = @github-actions/gates (windows)
    • check-skipped = @github-actions/gates (windows)
  • any of [🛡 GitHub repository ruleset rule main-pr-required-checks]:
    • check-success = @github-actions/red-first
    • check-neutral = @github-actions/red-first
    • check-skipped = @github-actions/red-first
  • any of [🛡 GitHub repository ruleset rule main-pr-required-checks]:
    • check-neutral = @mergify/Mergify Merge Protections
    • check-skipped = @mergify/Mergify Merge Protections
    • check-success = @mergify/Mergify Merge Protections

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review-ok Pipeline: review disposition complete, no open high finding

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant