chore(sisyphus): complete modifier-profiles-t2 boulder

This commit is contained in:
Joey Yakimowich-Payne 2026-04-19 10:20:26 -06:00
commit 646b16a8c0
No known key found for this signature in database
5 changed files with 19 additions and 28 deletions

Binary file not shown.

View file

View file

@ -1,9 +0,0 @@
{
"active_plan": "/home/joey/Projects/rules/.sisyphus/plans/modifier-profiles-t2.md",
"started_at": "2026-04-19T14:42:06.329Z",
"session_ids": [
"ses_267b9d7a2ffeFkGcPFn1iv223J"
],
"plan_name": "modifier-profiles-t2",
"agent": "atlas"
}

View file

@ -223,7 +223,7 @@ Wave FINAL (4 parallel reviewers):
**Commit**: `docs(adr): T2 polish architecture decisions` **Commit**: `docs(adr): T2 polish architecture decisions`
- [ ] 2. **Turn-boundary queue server-side** - [x] 2. **Turn-boundary queue server-side**
**What to do**: **What to do**:
- Replace `handleModifierProfileUpdate`'s immediate-apply with queue semantics: - Replace `handleModifierProfileUpdate`'s immediate-apply with queue semantics:
@ -252,7 +252,7 @@ Wave FINAL (4 parallel reviewers):
**Commit**: `feat(server): turn-boundary queue for modifier profile updates` **Commit**: `feat(server): turn-boundary queue for modifier profile updates`
- [ ] 3. **Two-player consent protocol** - [x] 3. **Two-player consent protocol**
**What to do**: **What to do**:
- New WS messages in `protocol.ts`: - New WS messages in `protocol.ts`:
@ -285,7 +285,7 @@ Wave FINAL (4 parallel reviewers):
**Commit**: `feat(server): two-player consent for modifier profile swaps` **Commit**: `feat(server): two-player consent for modifier profile swaps`
- [ ] 4. **Editor undo/redo snapshot stack** - [x] 4. **Editor undo/redo snapshot stack**
**What to do**: **What to do**:
- In `ModifierProfileEditor.tsx`: - In `ModifierProfileEditor.tsx`:
@ -310,7 +310,7 @@ Wave FINAL (4 parallel reviewers):
**Commit**: `feat(ui): modifier editor undo/redo` **Commit**: `feat(ui): modifier editor undo/redo`
- [ ] 5. **Copy/paste modifiers between pieces** - [x] 5. **Copy/paste modifiers between pieces**
**What to do**: **What to do**:
- In `PerInstancePanel.tsx`: - In `PerInstancePanel.tsx`:
@ -334,7 +334,7 @@ Wave FINAL (4 parallel reviewers):
**Commit**: `feat(ui): copy/paste modifiers between pieces` **Commit**: `feat(ui): copy/paste modifiers between pieces`
- [ ] 6. **Inline conflict resolution panel** - [x] 6. **Inline conflict resolution panel**
**What to do**: **What to do**:
- New component `ConflictResolutionPanel.tsx`: - New component `ConflictResolutionPanel.tsx`:
@ -358,7 +358,7 @@ Wave FINAL (4 parallel reviewers):
**Commit**: `feat(ui): inline conflict resolution panel` **Commit**: `feat(ui): inline conflict resolution panel`
- [ ] 7. **Modified-piece indicator on live board** - [x] 7. **Modified-piece indicator on live board**
**What to do**: **What to do**:
- New component `ModifiedPieceIndicator.tsx`: - New component `ModifiedPieceIndicator.tsx`:
@ -379,7 +379,7 @@ Wave FINAL (4 parallel reviewers):
**Commit**: `feat(ui): modified-piece indicator on board` **Commit**: `feat(ui): modified-piece indicator on board`
- [ ] 8. **Enhanced source-chain in pinned panel** - [x] 8. **Enhanced source-chain in pinned panel**
**What to do**: **What to do**:
- Update `ModifierPinnedPanel.tsx`: - Update `ModifierPinnedPanel.tsx`:
@ -401,7 +401,7 @@ Wave FINAL (4 parallel reviewers):
**Commit**: `feat(ui): enhanced modifier source chain in pinned panel` **Commit**: `feat(ui): enhanced modifier source chain in pinned panel`
- [ ] 9. **Consent UI (proposal notification + buttons)** - [x] 9. **Consent UI (proposal notification + buttons)**
**What to do**: **What to do**:
- New component `ModifierProposalDialog.tsx`: - New component `ModifierProposalDialog.tsx`:
@ -424,7 +424,7 @@ Wave FINAL (4 parallel reviewers):
**Commit**: `feat(ui): consent dialog for modifier profile proposals` **Commit**: `feat(ui): consent dialog for modifier profile proposals`
- [ ] 10. **Playwright e2e additions (8 feature scenarios + solo regression guards)** - [x] 10. **Playwright e2e additions (8 feature scenarios + solo regression guards)**
**What to do**: **What to do**:
- Add 8 new T2-feature tests to `packages/chess/e2e/modifier-profiles.spec.ts`: - Add 8 new T2-feature tests to `packages/chess/e2e/modifier-profiles.spec.ts`:
@ -460,7 +460,7 @@ Wave FINAL (4 parallel reviewers):
**Commit**: `test(e2e): T2 polish vertical slice + solo regression guards` **Commit**: `test(e2e): T2 polish vertical slice + solo regression guards`
- [ ] 11. **ADR updates — Implementation Retrospective T2 addendum** - [x] 11. **ADR updates — Implementation Retrospective T2 addendum**
**What to do**: **What to do**:
- Append to `docs/adr/modifier-profiles.md`: - Append to `docs/adr/modifier-profiles.md`:
@ -476,7 +476,7 @@ Wave FINAL (4 parallel reviewers):
**Commit**: `docs(adr): T2 implementation retrospective` **Commit**: `docs(adr): T2 implementation retrospective`
- [ ] 12. **User docs updates** - [x] 12. **User docs updates**
**What to do**: **What to do**:
- Update `docs/user/modifier-profiles.md`: - Update `docs/user/modifier-profiles.md`:
@ -496,19 +496,19 @@ Wave FINAL (4 parallel reviewers):
## Final Verification Wave ## Final Verification Wave
- [ ] F1. **Plan Compliance Audit** — `oracle` - [x] F1. **Plan Compliance Audit** — `oracle`
Verify all 12 tasks' deliverables exist. Verify T1 simplifications resolved. Check evidence files. Verify all 12 tasks' deliverables exist. Verify T1 simplifications resolved. Check evidence files.
Output: `Must Have [N/N] | Must NOT Have [N/N] | ADR Decisions [3/3] | VERDICT: APPROVE/REJECT` Output: `Must Have [N/N] | Must NOT Have [N/N] | ADR Decisions [3/3] | VERDICT: APPROVE/REJECT`
- [ ] F2. **Code Quality Review** — `unspecified-high` - [x] F2. **Code Quality Review** — `unspecified-high`
`bun run check`. Scan for slop patterns. Verify server-shared schemas. `bun run check`. Scan for slop patterns. Verify server-shared schemas.
Output: `Build [PASS/FAIL] | Lint [PASS/FAIL] | Tests [N pass] | VERDICT` Output: `Build [PASS/FAIL] | Lint [PASS/FAIL] | Tests [N pass] | VERDICT`
- [ ] F3. **Manual QA** — `unspecified-high` (+ `playwright`) - [x] F3. **Manual QA** — `unspecified-high` (+ `playwright`)
Execute all 26 Playwright scenarios. Multiplayer proposal/consent roundtrip. Undo/redo combos. Execute all 26 Playwright scenarios. Multiplayer proposal/consent roundtrip. Undo/redo combos.
Output: `Scenarios [N/N] | Integration [pass] | VERDICT` Output: `Scenarios [N/N] | Integration [pass] | VERDICT`
- [ ] F4. **Scope Fidelity** — `deep` - [x] F4. **Scope Fidelity** — `deep`
No T3 features smuggled (no custom authoring, no auras, no multi-profile stacking). No breaking WS changes. No T3 features smuggled (no custom authoring, no auras, no multi-profile stacking). No breaking WS changes.
Output: `Tasks [N/N compliant] | Contamination [CLEAN] | VERDICT` Output: `Tasks [N/N compliant] | Contamination [CLEAN] | VERDICT`

View file

@ -53,19 +53,19 @@ function applyFix(
} }
export function ConflictResolutionPanel({ profile, layout, onResolve }: Props) { export function ConflictResolutionPanel({ profile, layout, onResolve }: Props) {
const result = useMemo(() => { const validationOutcome = useMemo(() => {
if (layout === null) return { errors: [], warnings: [], valid: true }; if (layout === null) return { errors: [], warnings: [], valid: true };
return validateProfile(profile, layout); return validateProfile(profile, layout);
}, [profile, layout]); }, [profile, layout]);
if (result.valid && result.warnings.length === 0) return null; if (validationOutcome.valid && validationOutcome.warnings.length === 0) return null;
return ( return (
<div <div
data-testid="conflict-panel" data-testid="conflict-panel"
className="m-4 flex flex-col gap-2" className="m-4 flex flex-col gap-2"
> >
{result.errors.map((err) => ( {validationOutcome.errors.map((err) => (
<div <div
key={`${err.code}-${err.square ?? ''}`} key={`${err.code}-${err.square ?? ''}`}
className="flex items-center justify-between px-3 py-2 text-sm text-red-800 bg-red-50 border border-red-200 rounded" className="flex items-center justify-between px-3 py-2 text-sm text-red-800 bg-red-50 border border-red-200 rounded"
@ -83,7 +83,7 @@ export function ConflictResolutionPanel({ profile, layout, onResolve }: Props) {
)} )}
</div> </div>
))} ))}
{result.warnings.map((warn) => ( {validationOutcome.warnings.map((warn) => (
<div <div
key={`${warn.code}-${warn.square}`} key={`${warn.code}-${warn.square}`}
className="flex items-center justify-between px-3 py-2 text-sm text-amber-800 bg-amber-50 border border-amber-200 rounded" className="flex items-center justify-between px-3 py-2 text-sm text-amber-800 bg-amber-50 border border-amber-200 rounded"