maniator / maniator/verticopolis
[Feature]: [P3] v1-to-v2 reflow safety net is tower-wide all-or-nothing
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 5
- Forks
- 1
- PR merge metrics
- No merged PRs in 30d
Description
Imported from the engineering backlog (
_bmad-output/implementation-artifacts/backlog.md, storye1c-migration).
Priority P3 (do-first order) | Severity: low | Status: open | Epic: SimTower parity | Type: review-deferral | Recorded: 2026-07-07
Problem / motivation
Ready, quality, not correctness. The v1→v2 reflow safety net (saveMigration.ts upgradeV1toV2) is tower-WIDE all-or-nothing: if migrationLooksValid rejects the reflow (one overflowing/degenerate floor), the WHOLE tower reverts to legacy widths, clean floors don't canon-ize either. It's always safe (no corruption, the Edge Case Hunter confirmed no overlap/off-lot ever reaches the player), just coarse, and the fallback is silent. Enhancement: fall back per-floor (reflow the clean floors, keep legacy only on the offending one) and log a migrationNotes/telemetry line when a fallback fires so a no-op load is diagnosable. Also (Acceptance Auditor F4): re-pave doesn't enforce "a floor may not be wider than the floor below", harmless on real saves, add a clamp if a pathological save ever trips it. (Edge Case Hunter + Acceptance Auditor, E1c review.) ADDED 2026-07-13 (express-parity party): ALSO fold in a single general "N elevator shaft(s) widened to their 1994 footprint" load note covering ALL widenLegacyElevatorShafts moves (standard 3->4 AND express 4->6). The widen migration has always been SILENT; an express-only note was cut from spec-express-elevator-parity.md as inconsistent favoritism. Do this ONCE for every widen when the transparency channel (migrationNotes -> bulletin) is built, not per-kind.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in saveMigration.ts with upgradeV1toV2, migrationLooksValid, re-pave behavior, and widenLegacyElevatorShafts. Trace how migrationNotes reach the bulletin and identify existing migration coverage before changing behavior. Done means clean floors can reflow independently, pathological widths are handled, and all standard or express shaft widens produce one general load note.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- backend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100