---
plan: 07-08
phase: 07-workflow-smoke-convention-locks
status: complete
created: 2026-05-24
---

# Plan 07-08 — Smoke Test 8000×6400 3×3 GridVania

## Outcome

**PASS** — operator UAT verdict (2026-05-23/24). ADR 0011 D-09 (3×3 GridVania over 2×2/4×4 alternatives) and D-10 (chunk cols 2668/2664/2668, rows 2132/2136/2132) remain locked. No re-opening required per D-25.

## What was built

| Artifact | Location | Status |
|---|---|---|
| LDtk smoke world | `maps/_smoke/synth-8000x6400.ldtk` | Authored, operator-local only (gitignored — 134 MB inline tile-data blob) |
| SMOKE-NOTES.md | `.planning/phases/07-workflow-smoke-convention-locks/SMOKE-NOTES.md` | Committed (scaffold + verdict + lag observations + watchpoints) |
| Screenshot | `.planning/phases/07-workflow-smoke-convention-locks/smoke-screenshot.png` | Committed (186 KB) |
| `.gitignore` entry | `maps/_smoke/*.ldtk` | Committed (Phase 7 block with rationale) |

## Task breakdown

| Task | Type | Status | Notes |
|---|---|---|---|
| 1. SMOKE-NOTES.md scaffold | auto | complete (commit 283dda4) | Subagent in worktree; 9-row chunk table with literal ADR 0011 dims; PASS/FAIL placeholder; Escalation H2 |
| 2. Operator UAT in LDtk 1.5.3 | checkpoint:human-verify | complete (commit 88984aa) | Operator authored .ldtk + filled scaffold + screenshot + PASS verdict + watchpoints |

## Per-chunk lag (operator observations)

- Empty chunk open: `instant`
- Filled chunk open: `<1s`
- Paint-fill (Rectangle tool, full-level drag): `<1s`
- Save: `>2s` consistent across all filled chunks (CENTER + NW + N)

D-23 minimum (CENTER + 1 corner + 1 edge) satisfied. All 9 chunks created with exact ADR 0011 coords (verified via `node -e` JSON parse of the .ldtk file before commit).

## Verdict rationale

Open + paint-fill stay under 1 second. Save consistently lands in the >2s band but never blocks the editor. Workflow ships for v1.2 BNCentral conversion without re-opening D-09/D-10.

## v1.2 watchpoints (recorded in SMOKE-NOTES.md, non-blocking)

1. **File size:** 134 MB `.ldtk` after partial paint (3 of 9 chunks). Per-cell tile data stored inline. v1.2 BNCentral conversion should switch to `externalLevels=true` to split per-chunk `.ldtkl` files — re-evaluate if size exceeds 500 MB.
2. **Floor-tile straddling:** 2668/2664/2668 chunk widths are not multiples of 44 (floor tile pitch). ADR 0011 acknowledged limitation. v1.2 ldtk-import (Phase 9) will need an overlap/stitch strategy at the 6 internal chunk seams.
3. **Save latency:** revisit chunk-grid decision before completing BNCentral conversion if save degrades past ~5s on real content with all 9 chunks fully painted.

## Deviations

- **Task 2 step 11 (re-run `pnpm preflight` MUST exit 0)** not satisfied — `pnpm trace:check` (preflight chain link 4) has 209 pre-existing findings (REQ-X / REQ-XX-NN placeholders in archived `.planning/milestones/v1.0-phases/` docs and missing required_stages on v1.0 reqs). HYG-02 scope landed as lock-only (lint-no-req-placeholders.mjs blocks NEW placeholders) per Plan 07-05/07-06; retroactive cleanup of archived docs was not in scope. Not a smoke-test regression. Flagged in phase verification.

## Links

- ADR 0011 (chunk-grid source of truth): `docs/adr/0011-bncentral-gridvania-chunking.md`
- ADR 0009 (gridSize=4): `docs/adr/0009-ldtk-gridsize-convention.md`
- LDtk version pin: `tools/ldtk-version.txt` (1.5.3)
- CONTEXT D-22/D-23/D-24/D-25 (smoke-test category decisions): `07-CONTEXT.md`

[doc->REQ-MAP-02]
