Polish backlog & findings
What this is
Two streams of "known, tracked, not-yet-done" work:
- The app polish backlog — ~114
PB-NNNitems inmanpoweriq/docs/polish_backlog.md, surfaced during sprint work (the authoritative, living source). - The wiki findings (F1–F9) — discrepancies and gaps this documentation effort surfaced while verifying claims against the running system.
Nothing here is a blocker; it's the honest "what's left" list.
Findings (F1–F9)
These were found while building this wiki (Phase 0 ground-truth, Phase 3 runtime verification, Phase 6 API generation). They are documented on the relevant reference pages and summarised here.
| # | Finding | Severity | Where |
|---|---|---|---|
| F1 | No runtime path sets DemandPlanStatus.Locked — the state is defined but unreachable (publish/approve leaves the plan as-is). Either wire publish→lock or remove the state. |
Medium | Demand API · Schema |
| F2 | The seeded cross-pool lending rule's target was never reachable in the demo data — the lending path was exercised only via an added rule. | Low (demo-data) | Cross-pool history |
| F3 | Attendance import rejects cross-midnight Time_Out — blocks accurate actuals for any shift ending at/after midnight. |
Medium | Attendance API |
| F4 | Flat seeded work-history made OFFDAY/OVERTIME equalization cluster at the "At" tier — resolved in Phase 3.1 by seeding work-history variance. | Low (demo-data) — resolved | Equalization history |
| F5 | The RequiresApproval=true cross-pool block path is present and documented but was not exercised in a run (all demo lending rules are RequiresApproval=false). |
Low (coverage) | Pools API |
| F6 | A Planner cannot see per-rule ineligibility reasons — they're gated to allocation_run.debug (SYS_ADMIN only). The role that runs allocations can't see why a candidate was excluded. |
Medium (usability) | Rosters & runs API |
| F7 | No certifications UI — cert data is API-/import-only, with no view/manage screen in v1, despite certifications gating allocation. | Medium | Certifications (concept) |
| F8 | Equalization tiers + the cross-pool eligible-reason are computed by the engine but not surfaced in the frontend (only the numeric score/eligibility shows). | Low (visibility) | Rosters & runs API |
| F9 | The six /api/diagnostics/* controllers carry a self-documented pre-production cleanup obligation ([AllowAnonymous] + IsDevelopment(); three have a "remove or restrict before production" TODO). Logged to the app backlog as PB-114. |
Medium (security/cleanup) | Diagnostics API |
(Two further items — F-A and F-B — were screenshot-capture barriers during Phase 3.2, not product findings; they were resolved by recommending manual capture.)
The app polish backlog (PB-NNN)
The full list lives in manpoweriq/docs/polish_backlog.md (the source of truth — each entry names the sprint/task that surfaced it, the problem, options, and a recommendation). It is not reproduced in full here. By theme:
- Test infrastructure — flaky parallel tests (PB-002), WAF test-project split (PB-022), CI orchestration (PB-045), provider-sensitive INSERT failures (PB-083). See Test patterns.
- DemoDataSeeder — non-idempotent seed migrations vs truncation (PB-025), seeder shape/identifier drift (PB-026/027/028, A10/A12 repairs).
- Allocation/run UX — duplicate-rule 409 (PB-001), run-detail enrichment (PB-055–061), "why not selected" (PB-057), score breakdown (PB-058).
- Monthly roster — leave overlay, collapse, month picker, saved views, compare-mode (PB-063–069, 073–074).
- Reports — equalization/utilization name joins (PB-111, 113), utilization export trio (PB-112).
- Conventions/cleanup —
extractErrorMessageconsolidation (PB-078), helper-extraction triggers (PB-085/087/091/092), perm cleanups (PB-086/089). See §G discipline. - Pre-production — diagnostics cleanup (PB-114 / F9), row_version sweep (PB-043), authorization tests (PB-038/084).
Related
- Sprint history — where each item was surfaced.
- Test patterns, §G discipline.
- Source:
manpoweriq/docs/polish_backlog.md; Phase-3 verification report (F1–F9).