maniator / maniator/verticopolis

[Feature]: [P3] v1-to-v2 reflow safety net is tower-wide all-or-nothing

Open
#327 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
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, story e1c-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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.