feat: sprint 4 — UI polish + dark mode + workflow tightening + process hygiene #7
Reference in New Issue
Block a user
Delete Branch "sprint/4-ui-polish"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
localStoragepersistence) avec split de tokensink(text themed) vsslab(surface dark fixe non-inversée). Audit complet des composants pour zéro couleur hardcodée hors-tokens.doneretourne 409 ; nouveau cas transitiondone → review_requiredouvert aux 3 rôles. UI cohérente (read-only + bouton Reopen seul).planned → activeautomatique à la première simulationin_progress. Pas de retour arrière auto.design-reviewer(run après frontend-builder), screenshots devenu MANDATORY au DoD du frontend-builder.scripts/open-pr.sh+make open-pr SPRINT=N TITLE="..." BODY=path— cette PR est ouverte avec ce nouveau target (dogfood AC-25.4).Test plan
ruff+mypyclean).typecheck+lintclean).Path(__file__)(plus de hardcoded paths).Comment tester en local
Scénarios :
☀️ / 🌙 / 🖥dans la topbar pour cycler light/dark/system. Recharge → la pref persiste.T1059etTA0007(référence seule). Survol = nom complet en tooltip.review_required, édition redevient possible.active./admin/users. Les 3 labels Username/Password/Role sont sur la même baseline, idem pour les inputs et le bouton Create.make open-pr(dogfood).Notes
GET /api/mitre/matrixretourne maintenanttactic_iden TA-format (TA0007) au lieu du slug interne (discovery). Aligne sur le format accepté par PATCHtactic_ids. Caught by e2e — fixed in commita824df0.ba313a3.🤖 Generated with Claude Code
US-24 — Process hygiene UI: - New .claude/agents/design-reviewer.md (model: opus, read-only) — visual + design-system reviewer that runs after frontend-builder and before code-reviewer. Audits alignment, DESIGN.md tokens, light/dark consistency, typo hierarchy, whitespace rhythm, responsive sanity at 1280x720, button convention, V1 a11y. Output format mirrors code-reviewer. - Updated .claude/agents/frontend-builder.md DoD: screenshots are MANDATORY (one per feature/state introduced or modified, light+dark when theming is in scope). Hard block on "Dev server not started" — must be flagged explicitly. Screenshots feed the design-reviewer step. US-25 — PR helper: - scripts/open-pr.sh wraps `POST /api/v1/repos/{owner}/{repo}/pulls`. Detects host/owner/repo from `git remote get-url origin`, reads basic-auth credentials from `~/.git-credentials` (same source as `git push`, no token in env), uses jq to compose the multiline-safe payload. Validates args, prints PR URL on success, exits non-zero with the server message on failure. - Makefile target `open-pr TITLE="..." BODY=path/to/body.md [BASE=main]` wraps the script with the same arg validation. - README.md "Make targets" table extended. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>- Simulation model: add tactic_ids JSON column (nullable=False, default=[]) - Migration 0004: ADD COLUMN tactic_ids (server_default='[]', no batch needed) - mitre.py: add _TACTIC_IDS map, lookup_tactic(), get_tactic_name() - simulation_workflow.py: done guard (409) before RBAC; SOC gate += tactic_ids; _resolve_tactic_ids() validates against hardcoded map; auto-transition += tactic_ids; transition done→review_required is Reopen (all 3 roles); _maybe_activate_engagement hook - serializers.py: _enrich_tactics() → serialize_simulation adds tactics:[{id,name}] - test_simulations_tactics.py: valid/invalid/dedup/SOC gate/auto-transition/no-bundle - test_simulations_done_readonly.py: 409 all roles, Reopen all roles, invalid transitions, after-reopen ok - test_engagement_lifecycle.py: planned→active on auto-transition, already active/closed unchanged, migration 0004 round-trip - Updated test_simulations_patch.py + test_simulations_workflow.py for AC-18 behavior Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>Remove test.fail annotation from AC-21.6 "Apply from modal includes tactic in result". GET /api/mitre/matrix now returns tactic_id in TA-format ("TA0007") so the PATCH succeeds and the tactic chip appears. Update button selector in both AC-21.6 tests from title*="discovery" to title*="TA0007" to match the fixed matrix response format. Suite: 158 passed, 0 failed. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>