Skip to content

final deferred

Xopher edited this page Oct 28, 2026 · 1 revision

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: ⚠️ packCommon.ts/movingOut.ts edits outside the brief's file list: confirmed, the lead's dispatch asked for one FIBONACCI_STEPS/nearestDifficulty in packCommon Task 4: minor (deferred, carry to T9): re-runs guess team chores from assignee count (no 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: ⚠️ resolved: an empty middle floor must read floorCleared true and wake the next floor (carry to T8, T10); a deleted key-guard chore must still drop the Boss Key (carry to T8); T8/T9 must pass heroes (carried) Task 6: minor (deferred): last phase with a single chore not pinned by a test; "nothing ticked" excluded from the matrix though it builds; WHOLE_HOUSE_ID "house" duplicates projectChores.ts:74; finale re-check duplicated (projectTower.ts:187); roof window taken by array order; two adjacent cells can share a room name (boss's room + its other chores) Task 6: minor (deferred): on a very dense floor the guard (placed last, wing zone) could fail to find a spot touching only its anchor (no matrix case gets near); the key guard can sit beside a different room than its name Task 7: minor (deferred): ProjectDb isRecord checks only id+status (a record without floors would throw downstream); id copied from input.projectId with no shared builder for ${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: ⚠️ site table — the site refuses an unknown store per record (recordOutbox: a refusal is final, the batch goes on), so __projects needs a family row in the site's Xophz_Compass_Xp_Family_Record_Rules (xophz-compass-xp, outside this repo) before projects sync; noted for the PR, no change here — costs unsynced project records until the site row lands. Ruling: ⚠️ family scope vs who settles — the floor settle runs on the device that pays the chore; ProjectDb is family scope, so a hero phone's local settle never syncs; T8 keeps the settle derived from the quest log and guarded by clearedAt (idempotent per device); a cross-device double bonus is Family Sync's concern, flagged to the final review — costs a double floor bonus on a two-device family until sync settles projects centrally. Task 8: minor (deferred): class loot bonus (paidQuestRewards in applyQuestRewards) raises a Thief/Ninja's GP share after the even split — brief mandates applyQuestRewards; owner call, named in the PR Task 8: minor (deferred): "The Roof" written in projectService.ts:66 and projectTower.ts:140; no spec loads the real QuestCompletionService with the real projectService (the lazy-import cycle is covered only by the build/CI) Task 8: minor (deferred): a retry re-stamps the floor above's quests with the later wokenAt; a crash between the record save and the bonus payment loses that bonus (never doubles it) Task 9: ⚠️ resolved: usersAz -> HeroProfile[] typechecks (gate clean); same-day abandon + restart reuses ${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: ⚠️ for the e2e (T12) and owner phone look: clock row height at 390x844; "Floor cleared!" stacking with a battle drop reveal Task 10: minor (deferred): useProjectTower.ts:53-62 comment (and the TempleGroundsModules spec title) says undefined floorCleared means "no lock"; travel.ts:143 keeps a floorCleared flight shut on undefined (ruled above: trophy towers are not walked); ProjectTowerSheet.vue:6 aria-label="Close" hard-coded; "Floor bonus: " label is plain English (ruled in T8) Ratchet cleanup: minor (deferred): QuestSchedule.ts sits at exactly 500 lines (no headroom); travel.ts's isKeyLock/isFloorLock aliases rely on narrowing (the typecheck after T11 confirms); the brief's "switch at travel.ts ~L71" was the older doorActions switch, the new one (canOpenClimb ~L153) was replaced Task 11: minor (deferred): look() runs on every route change through the inTurn queue (cache "nothing to tell" until the next clear); XpApprovals/MyPortal/HomeTown template wiring has no mount test; the reward row sits above "No pending achievement approvals"; TrophyView.typeId typed string, untyped defineEmits in ProjectTrophySheet; XpDashboard [true]/[] shim; credits.spec hard-codes the six names (say so in credits.ts's comment); ProjectDb.ts holds a third copy of the comparator Task 11: minor (deferred): ProjectDb.lastOfType spells the cleared stamp itself (pinned to newestCleared by a spec) Task 12: minor (deferred, final review should triage — same as T9's): a room change on the handed-over wizard's house step refills chores from suggestions and drops the carried move-* chores, so the board keeps them and the tower gets suggestions (the "every chore twice" case): withHouse should keep 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: ⚠️ by ruling: abandoning a Moving Out run deletes its open project quests; the move-* quests it carried already left the board at build, so the family re-runs the Moving House pack to get them back

Table of Contents


Home - See Pages

Developer Docs

Start Screen

User Management

My Portal

My Home

The City (Hometown)

The World Map

The Dungeon

Game Master

Settings

Support & Glossary

About XP

Clone this wiki locally