Authentication moves to the domain over LDAPS. Nothing in the spec covered auth against a directory, so per CLAUDE.md this is new scope with a new `D` id rather than a widened old one. D1-D12 were taken. Records what was verified against the live environment on Aug 21 rather than assumed: LDAPS on 636 with TLS 1.3, the DC cert chain up through PRIME CONTROLS ISSUING CA 1 to a root valid until 2051, six DCs in the SRV record, and `prime.local` in every DC cert's SAN - which is why the client connects to the domain name and not to a DC or an IP. Also records why the certificate already serving the site is not usable for this: it is a Let's Encrypt DV cert held by an OpenResty host outside this repo, and it carries no relationship to prime.local. The question was asked directly and the answer is not obvious, so it belongs in the record. Eight tasks, T10.1 through T10.8. Two questions are left open in the decision doc to be answered rather than guessed - break-glass access when the DC is unreachable, and whether existing usernames match sAMAccountName. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
12 KiB
Work Package Suite — Implementation Plan
Derived from Consolidated Change Request R2, August 14, 2026.
Companion document for humans: WorkPackageSuite_Consolidated_Change_Request_R2.docx.
55 items, 9 waves, dependency-ordered. Read CLAUDE.md first.
Ten further items (D1-D10) were decided on August 18 2026 and are recorded in
docs/waves/decisions-2026-08-18.md. 65 items total.
1. Where this came from
Three inputs were merged to produce this plan:
| Source | Produced | IDs |
|---|---|---|
| 13 in-app feedback comments, Aug 14 2026 (01:11–01:32 PM) | Functional change requests | CR-001–CR-018 |
| Micron EUV review meeting, Aug 14 2026 | Functional change requests and context | included above |
UX review of html/, Aug 14 2026, branch users/directory-super-user |
Rendering defects, structural findings, proposal assessment | F1–F6, S1–S13, A1–A7, B1–B7, C1–C4 |
F1–F6 were verified in a browser and are reproducible. S1–S13 were read from source
and carry file and line references. A/B/C items assess a separately proposed UX change
list; their IDs are carried over unchanged so the two documents line up.
2. Decisions (all closed)
Approved by Nick Siegfried, August 14 2026. Nothing in this plan is blocked pending a decision. Do not reopen these without a spec revision.
| ID | Decision |
|---|---|
CR-009 |
Keep and extend Kitting. Build CR-010, CR-011, CR-012. Ship it toggled off for the Micron EUV SOP via the CR-006 section toggles. Kitting is not happening at Micron today; the team expects to get there. |
CR-013 |
Build the lightweight material request. Line items (description, quantity, unit), needed-by date, requestor, delivery location, status. Defer the parts catalog, live inventory, and warehouse integration. Sequence after the creator has real section structure (see X6). |
B7 |
Dissolve the creator iframe. Scheduled as T7.1, the first task of wave 7. This is the largest engineering item in the plan and most of wave 7 depends on it. |
C1 |
Accessibility is in scope. Fold it into components already being rebuilt rather than treating it as a separate pass. Rules are in CLAUDE.md. |
B7was confirmed as "dissolve the iframe" on August 14 2026 and again at the wave 7 handoff. It is not a scheduling decision.
A second set of decisions closed on August 18 2026, at the wave 6 exit, in answer to
twenty-one questions and eleven follow-ups. They are recorded in
docs/waves/decisions-2026-08-18.md as D1-D10. They add three tasks and amend
acceptance criteria on seven others; they do not reopen anything above.
| ID | Decision | Amends |
|---|---|---|
D1 |
Sample data returns to the creator, visible on the unframed page | B7, S7 |
D2 |
The QA distribution list is configured in the SOP, not per work package | CR-014 |
D3 |
The creator stays one page: side navigation plus collapsible sections | F6 |
D4 |
Urgent surfaces the audited override; it does not bypass the constraint gate |
CR-003, A1 |
D5 |
Usage data moves to the admin console | B7 |
D6 |
The material list uploads at SOP configuration | CR-013 |
D7 |
Archived projects are readable, by project admins only | B3, C1 |
D8 |
5MB a file, 2GB a project, PDFs and images, stored in the same database | CR-007 |
D9 |
Ready for QA appears in Field View |
CR-014 |
D10 |
Email is switched on and off from the admin console | CR-011, CR-014 |
3. Cross-track dependencies
These are the reason the wave order is what it is. Each row is a change request that cannot be built as written, or cannot be built once, until something else lands.
| ID | Item | Depends on | Type | Why |
|---|---|---|---|---|
X1 |
CR-011, CR-014 |
S3 |
Blocking | Both promise an email containing a direct link to the work package. There is no pushState anywhere in the app, so no work package has an addressable URL. The emails cannot be built until URL state exists. |
X2 |
CR-015 |
A1 |
Blocking | The hold-not-clearing bug and the transition model are the same code. confirmEarlyRelease() in wp-creation-app.js is a deliberate logged-override path, so hold state is not purely derived from open constraints. Fixing them separately means fixing it twice. Corrected Aug 18 2026: this row and CLAUDE.md both cited wp-creation-app.js:1962-1972, which is deletePackage()/clearSaved(). The override path is confirmEarlyRelease(), called from the issue and release paths. Named by function so it survives the T7.1 rewrite. |
X3 |
CR-014 |
A1 |
Sequencing | Ready for QA is a new state and must land inside the guarded transition model, not beside it. |
X4 |
CR-006 |
B7 |
Sequencing | Section toggles must suppress sections inside the creator, which is an iframe child until T7.1. |
X5 |
CR-004, CR-018 |
B4 |
Blocking | Rollup by building, floor and sector cannot come from localStorage. Same data dependency that blocks the pipeline strip. |
X6 |
CR-013 |
F6, A4 |
Sequencing | A material request card is a 12th card on a form already ~4,700px tall. Build it after the form has section structure. |
X7 |
CR-003 |
C3 |
Sequencing | Priority color coding needs one source of truth for color, or Normal/High/Urgent get four implementations. |
X8 |
CR-007 |
F2, S2 |
Blocking | Offline drawing access is a tablet feature and the app bar breaks at 390px. Uploading into a form with no autosave risks losing the upload. |
X9 |
CR-005 |
A4, F5, S9 |
Sequencing | A new wizard step should be built during the stepper rebuild, with the read-only-looking fields and keyboard access fixed at the same time. |
X10 |
CR-002, CR-016 |
CR-006, C3 |
Sequencing | Both removals are expressed as toggles, not deletions. Without token consolidation the toggled styling drifts. |
4. Wave order
| Wave | Focus | File | Items |
|---|---|---|---|
| 0 | Orientation and file map | docs/waves/wave-0.md |
— |
| 1 | Rendering defects and tooling | docs/waves/wave-1.md |
F1 F3 F4 F5(interim) S13 |
| 2 | Drawer everywhere, flat strip deleted | docs/waves/wave-2.md |
B1 S4 F2 |
| 3 | Token consolidation and button system | docs/waves/wave-3.md |
C3 S5 A3 A5 |
| 4 | Platform prerequisites | docs/waves/wave-4.md |
B4 S3 S2 B5 S10 S11 S12 |
| 5 | Launcher and SOP wizard | docs/waves/wave-5.md |
A4 B3 S9 CR-005 CR-006 CR-002 CR-016 S1(wizard) |
| 6 | Work package general information | docs/waves/wave-6.md |
CR-001 CR-003 CR-004 CR-018 A7 |
| 7 | The creator | docs/waves/wave-7.md |
B7 A1 CR-015 A2 A6 CR-014 CR-007 B6 S1(creator) F6 D1 D2 D3 D4 D5 D8 D9 D10 |
| 8 | Kitting and material | docs/waves/wave-8.md |
CR-009 CR-010 CR-011 CR-012 CR-013 D6 D10 |
| 9 | Verification and cleanup | docs/waves/wave-9.md |
CR-008 CR-017 S6 S7 C1 C2 C4 D7 |
| 10 | Domain authentication over LDAPS | docs/waves/wave-10.md |
D13 |
Wave 10 was added on August 21, 2026 and is not part of the original nine-wave sequence. It
is new scope (docs/waves/decisions-2026-08-21.md), not a reinterpretation of anything
above, and it depends only on wave 9 being merged rather than on any particular item in it.
Waves 1 through 4 produce almost no field-visible change. That is deliberate and it is
roughly the first third of the effort. It is called out here because the Micron team is
already skeptical about time spent, and silence during these waves reads as nothing
happening. The trade is that waves 5 through 8 land once instead of being rebuilt, which is
the failure mode the review documented at work-package-suite-styles.css:336.
Deltas from the R2 sequence
The R2 document's nine-wave table did not place A5, A7, or F6. This plan places A5
in wave 3 (it depends on token consolidation), A7 in wave 6 (it is general-information
surface work), and F6 in wave 7 (its actual fix is section tabs, not a CSS change). F2
moves fully to wave 2 because B1 resolves it; wave 1 only stops the clipping.
5. Task format
Every task in a wave file follows this shape. Do not start a task that is missing a done-when list; flag it instead.
### T5.4 — CR-005: Upload location lists at SOP setup
- **Items:** CR-005
- **Depends on:** T5.1
- **Blocks:** T6.3
- **Surface:** html/ + server/
- **Files:** <paths from docs/reference/file-map.md>
- **Do:** ...
- **Do not:** ...
- **Done when:**
- [ ] verifiable check
- [ ] verifiable check
Done when entries must be checkable by running or looking at something. "Confirm with
Nick" is never a done-when; it goes in the PR description.
6. Traceability
Every one of the 55 items appears in exactly one wave, except where noted.
| Item | Wave | Item | Wave | Item | Wave |
|---|---|---|---|---|---|
| CR-001 | 6 | F1 | 1 | A1 | 7 |
| CR-002 | 5 | F2 | 1 interim, 2 full | A2 | 7 |
| CR-003 | 6 | F3 | 1 | A3 | 1 interim, 3 full |
| CR-004 | 6 | F4 | 1 | A4 | 5 |
| CR-005 | 5 | F5 | 1 interim, 3 full | A5 | 3 |
| CR-006 | 5 | F6 | 7 | A6 | 7 |
| CR-007 | 7 | S1 | 5 wizard, 7 creator | A7 | 6 |
| CR-008 | 9 | S2 | 4 | B1 | 2 |
| CR-009 | 8 | S3 | 4 | B2 | 2 |
| CR-010 | 8 | S4 | 2 | B3 | 5 |
| CR-011 | 8 | S5 | 3 | B4 | 4 |
| CR-012 | 8 | S6 | 9 | B5 | 4 |
| CR-013 | 8 | S7 | 9 | B6 | 7 |
| CR-014 | 7 | S8 | 9 | B7 | 7 |
| CR-015 | 7 | S9 | 5 | C1 | all, audited in 9 |
| CR-016 | 5 | S10 | 4 | C2 | all, audited in 9 |
| CR-017 | 9 (guard only) | S11 | 4 | C3 | 3 |
| CR-018 | 6 | S12 | 4 | C4 | 4 and 9 |
| S13 | 1 |
The August 18 items
| Item | Wave | Task | Item | Wave | Task |
|---|---|---|---|---|---|
| D1 | 7 | T7.1 | D6 | 8 | T8.6 |
| D2 | 7 | T7.6 | D7 | 9 | T9.8 |
| D3 | 7 | T7.2 | D8 | 7 | T7.7 |
| D4 | 7 | T7.3 | D9 | 7 | T7.6 |
| D5 | 7 | T7.10 | D10 | 7 and 8 | T7.6, T8.3 |
That is 65 items across 9 waves. D10 is the only one split across two waves: the gate and
its console control are built once at T7.6 and reused by T8.3.
F5 and A3 are the same defect from two sources. C1 and C2 are standing requirements
enforced per task under CLAUDE.md, with a dedicated audit in wave 9. CR-017 is a
do-not-remove guard rather than a build.
7. Out of scope
Deferred by decision. Do not build these, and do not treat them as gaps:
- Full material request and inventory system, including the parts catalog and warehouse integration. Revisit once Paul Coonrod is engaged.
- Asset database integration. Clinton's team owns that database; the Assets section is
toggled off in the interim (
CR-016). - CxAlloy or GC QA system integration. The QA gate is notification-only until CxAlloy lands.
- P6 activity list import and validated lookup.
CR-001uses free text.
8. Inputs the plan is waiting on
These do not block code, but they block the data that makes several features real. Track them; do not invent placeholder values in their absence.
| Input | Owner | Blocks |
|---|---|---|
| B100 floor and area list | David Leal | CR-004, CR-005 real data |
| Material spreadsheet | Nate, via David Leal | CR-013 field set |
| Master material workbook, preferred request format | Paul Coonrod | CR-013 scope |
| QA process of record (Excel questionnaire moving into CxAlloy) | David Ramstorf, Lupe, Cody Schaefer | CR-014 beyond notification |
Where a list is required and not yet supplied, build the upload path (CR-005) and seed with
an obviously-fake sample. Do not hardcode guessed floor names.
Status, August 18 2026. None of the four has arrived. Confirmed at the wave 6 exit that
this does not change the plan: D6 extends the CR-005 upload pattern to the material list
so CR-013 is buildable without Nate's spreadsheet, and the B100 list is still expected
through the same door. Because no real list has ever been loaded, every location on record
is sample data - which is why the free-text migration question was closed without work
(decisions-2026-08-18.md, "Closed without work"). That answer does not survive the first
real project.