final deferred - xopherdeep/do-it-for-the-xp GitHub Wiki
Task 1: minor (deferred): packExport.ts strips createdBy/draft but not project; drop the project link if project quests can reach pack export (implementer concern 2)
Task 1: minor (deferred): isQuestActiveOn ignores date for a woken project quest, so past-day boards (TownHall.ts:164, MyCalendar.vue:196) may show it before it woke; compare date with wokenAt there if it matters (plan-mandated rule)
Task 1: minor (deferred): a malformed project.dueOn parses as today (parseLocalDate fallback) and never goes overdue; T6's questsForProject must always write a valid dueOn (carried to T6)
Task 1: minor (deferred): a project chore must be basicSchedule "once" or getQuestWindow gives it a daily window (carried to T6)
Task 1: minor (deferred): no test for wokenAt with a past endsOn, or Extra Time on a project chore; QuestSchedule now imports services/core/packs/heroAge (follows precedent)
Task 2: minor (deferred): the slider steps are copied in movingOut.ts and the spec; questWizard.ts SIZE_CHOICES has them; one exported FIBONACCI_STEPS + nearestDifficulty in packCommon.ts would serve T4/T9 (carry to T4)
Task 2: minor (deferred): projectTypes.spec copies movingPack.spec's 28-line DB mock block because projectTypes imports movingPack (storage); moving the template data to its own module would drop it
Task 2: minor (deferred): content: no dusting chore (little has nothing of its own on Deep Clean); doorknob/switch wipe is any (a little may get liquid near switches); kitchen deep clean is thin (no fridge/cabinets)
Task 2: minor (deferred): PROJECT_TYPES suggestion objects are shared singletons: T4/T9 must copy before the GM edits (carry to T4, T9)
Task 3: minor (deferred): the roundSettled guard is not pinned (no test input where it matters; shares [0.05, 0.2, 0.05, 0.1] over 6 days would pin it); the test comment cites 0.1+0.2 wrongly
Task 3: minor (deferred): an unparsable date reads as today (parseLocalDate fallback): T9's wizard must validate date strings before extendWindows/phaseWindows (carry to T9)
Task 3: minor (deferred): roof window has no helper (windows[windows.length-1]) — T6/T8 must use the last phase's window for the roof (carry to T6, T8)
Task 3: minor (deferred): extendWindows from today can overlap a floor cleared early whose dueOn is still ahead (ruling-consistent); T10's extend UI should expect it; dayAfterStart helper sits mid-file in the spec
Task 4: who stored); team/roof chores don't pick up heroes who joined since; a re-assigned chore keeps its size unclamped and clampToBand is private (T9 may export it)
Task 4: minor (deferred): movingOut.ts re-exports nearestDifficulty only for projectTypes.spec's import (repoint and drop the shim); re-run collision suffix "~r2-2" is not stripped next run; garbled test title at projectChores.spec.ts:482
Task 5: minor (deferred, final review should triage): solveTemple now runs deadFloorClearedStairs (one extra explore) and roomsToClearByFloor inside every explore for EVERY temple, none of which has the lock today; an early return when no door is floorCleared would save the generator's loop the cost
Task 5: minor (deferred): untested variants: a stairs room that itself holds questIds; the floor's only chore room beyond the stairs; a chore room behind a small-key or boss door
Task 6: ${typeId}-${startOn} (T9 should build it in one helper); ProjectFloor re-declares ProjectTowerFloor's fields; the JSON round-trip test's toEqual hides undefined keys
Ruling: ${typeId}-${startOn} and so the abandoned run's paid quest ids: old paid entries would settle 1F at once -> real, carried to T10 (startProject picks a fresh id).
Task 9: minor (deferred): a rooms change on the house step rebuilds the chores and also drops the GM's own custom chores (keep custom chores); "1 chores" in projectWizard.chores.count / projectWizard.build.chores (no plural); stale basement:true when storage is unticked (nothing reads it yet); no "sitting out" band like MovingHouseModal; per-row controls scroll with the list (thumb-reach); previewWindows builds copy to test a condition (return a code)
Task 10: minor (deferred): extendProject failures all show "too soon"; a failed re-read after a successful move flips the sheet to "No tower"; the stairs lock refreshes only on page show / floor change (a GM approval mid-visit needs a re-show); buildingShapes.ts (906 lines) grew by 72 (a sibling projectTowerShape.ts would be tidier)
Task 10: custom chores
Task 12: minor (deferred): the "Moving Out retires the Old House" rule sits in XpProjectWizardModal.vue (move to projectWizard.ts); dead .moving-bands + .moving-check CSS and a stale movingPack.ts:75 comment about floors; project-tower.spec.js uses fixed cy.wait sleeps and tests 2-3 depend on test 1; moving-temple.spec.js run line points at :8100; unnamed compound conditions in movingOutPrefill.ts filter callbacks; PacksSettings Moving House card copy is a raw template string; prefill ignores moveDate for endOn
Task 12: