Files
Parsons/docs/memory/session-log.md
Richie aa7cdeecf0 Add workflow infrastructure — ESLint, Prettier, Husky, Vitest, 7 new skills
Phase 1: Session log archived (1096→91 lines), D031 token access convention
Phase 2: ESLint v9 + Prettier + jsx-a11y, initial config and lint fixes
Phase 3: 7 new skills (polish, harden, normalize, clarify, typeset, quieter, adapt)
         + Vercel reference docs, updated audit/review-component refs
Phase 4: Husky + lint-staged pre-commit hooks, preflight updated to 8 checks
Phase 5: Vitest + Testing Library + /write-tests skill

- Badge.tsx colour maps unified to CSS variables (D031)
- 5 empty interface→type alias fixes (Switch, Radio, Divider, IconButton, Link)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 16:41:57 +11:00

6.8 KiB

Session log

This file tracks work completed across Claude Code sessions. Every agent MUST read this file before starting work and update it after completing work.

Earlier sessions (2026-03-24 through 2026-03-26d) archived in docs/memory/archive/sessions-through-2026-03-26.md

Format

Each entry follows this structure:

### Session [date] — [brief description]
**Agent(s):** [which agents were active]
**Work completed:**
- [bullet points of what was done]
**Decisions made:**
- [any design/architecture decisions with brief rationale]
**Open questions:**
- [anything unresolved that needs human input]
**Next steps:**
- [what should happen next]

Sessions

Session 2026-03-27a — Workflow improvement (5-phase infrastructure upgrade)

Agent(s): Claude Opus 4.6 (1M context)

Work completed:

  • Phase 1A: Archived session log — moved 25 old sessions to docs/memory/archive/sessions-through-2026-03-26.md, trimmed active log from 1096 to 91 lines
  • Phase 1B: Documented token access convention as D031 — theme.palette.* for semantic tokens, var(--fa-*) for component tokens. Fixed Badge.tsx colour map inconsistency (unified to CSS vars). Updated component-conventions.md.
  • Phase 2: Added ESLint v9 (flat config) + Prettier. Installed eslint, @eslint/js, typescript-eslint, eslint-plugin-react, eslint-plugin-react-hooks, eslint-plugin-jsx-a11y, eslint-config-prettier, prettier. Ran initial format pass across all 54 .tsx files. Fixed 5 empty interface warnings (Switch, Radio, Divider, IconButton, Link). Added lint, lint:fix, format, format:check scripts.
  • Phase 3: Created 7 new impeccable-adapted skills: /polish, /harden, /normalize, /clarify, /typeset, /quieter, /adapt. Downloaded Vercel reference docs (web-design-guidelines, react-best-practices). Updated /audit and /review-component with optional Vercel references. Total skills: 19.
  • Phase 4: Added Husky v9 + lint-staged for pre-commit automation. ESLint + Prettier auto-run on staged files. Updated /preflight skill with ESLint and Prettier checks (now 8 checks total).
  • Phase 5: Added Vitest v4 + jsdom + @testing-library/react. Created vitest.config.ts and test setup. Created /write-tests skill for test generation guidance. Added test and test:watch scripts. Note: @storybook/test-runner deferred — requires Storybook 10+ (we have 8).

Decisions made:

  • D031: Token access convention — theme accessors for semantic, CSS vars for component (see decisions-log)
  • ESLint story files exempt from react-hooks/rules-of-hooks and no-console (Storybook render pattern)
  • Empty interface extends changed to type = for ESLint compliance (5 wrapper atoms)
  • Storybook test-runner deferred until Storybook upgrade to v10
  • Prettier printWidth set to 100 (matching observed code style)

Open questions:

  • Storybook upgrade to v10 — would unlock @storybook/test-runner for CI test execution
  • Whether to add a Claude Code pre-commit hook in addition to Husky

Next steps:

  • Use /write-tests on interactive components (SearchBar, ServiceOption, Button first)
  • Use /normalize atoms to scan all atoms for consistency now that D031 convention is documented
  • Continue component work (ArrangementForm, remaining planned components)

Session 2026-03-26f — FuneralFinder v3 build + polish

Agent(s): Claude Opus 4.6 (1M context)

Work completed:

  • Created FuneralFinderV3 — clean vertical form based on user's Figma layout (5919:29445), restyled to FA design system
  • Two side-by-side StatusCards (Immediate Need default-selected / Pre-planning), stack on mobile
  • Standard card container (surface.raised, card shadow) — initially built with glassmorphism, user redirected to standard palette
  • Overline section labels (text.secondary) for "How Can We Help", "Funeral Type", "Location"
  • Standard outlined fields (white bg, neutral border, brand border on focus, no focus ring per user request)
  • Location input with LocationOnOutlined pin icon
  • CTA "Find Funeral Directors →" always active — validates on click, scrolls to first missing field
  • Dividers after header and before CTA for visual rhythm
  • Funeral type options: same as V2 + "Show all options"
  • WAI-ARIA roving tabindex on radiogroup, aria-labelledby via React.useId()
  • Semantic tokens throughout (border-brand, surface-warm, text-brand, interactive-focus, text-disabled)
  • Error messages conditionally rendered in aria-live regions (brand copper tone — gentle validation)
  • First pass scored Critique 33/40, Audit 13/20 → iterated on all findings → re-audit 18/20
  • Polish pass: revised copy, fixed spacing, defaults, label rename

Decisions made:

  • Status cards replace V2's step-circle + dropdown — simpler, more visual, side-by-side on desktop
  • Standard design system styling (user clarified Figma was for structure only, not colour scheme)
  • "Immediate Need" selected by default — most common use case, status error essentially unreachable
  • Section renamed from "Current Status" (programmatic) to "How Can We Help" (warm, human)
  • Copy: "A recent loss or one expected soon" — "expected soon" differentiates from pre-planning gently
  • Copy: "Planning ahead for yourself or a loved one" — "planning ahead" reinforces non-urgency
  • No sequential unlock — all fields accessible immediately
  • CTA always active — validates on click, scrolls to missing field
  • Form simplified to 3 fields (status, funeral type, location) vs V2's 4
  • Focus ring suppressed on Select/Input per user requirement — status cards retain focus-visible
  • Error colour uses text.brand (copper) not feedback.error (red) — intentional for funeral context

Open questions:

  • Location autocomplete integration still pending across all versions
  • Decision: V1 vs V2 vs V3 for production

Next steps:

  • User to review final V3 in Storybook
  • If V3 chosen: location autocomplete, possible further refinements

Session 2026-03-26e — FuneralFinder v2 polish + consistency fixes

Agent(s): Claude Opus 4.6 (1M context)

Work completed:

  • Fixed location input styling to match select fields (border color, hover, disabled, error states)
  • Added active prop to StepCircle — step 1 uses brand-500 primary fill by default
  • Aligned Input with full selectSx overrides (bgcolor, disabled opacity+dashed, error border)
  • Investigated systemic Input vs Select visual differences — confirmed issue is component-local overrides, not theme

Decisions made:

  • Custom field styling kept within FuneralFinderV2 (intentional divergence from theme for this component's design)
  • Step 1 circle uses primary fill since it's always active — visual "start here" signal

Next steps:

  • v2 is feature-complete and polished — ready for user review in Storybook
  • Decision pending: v1 vs v2 for production
  • If v2 chosen: add location autocomplete, write flow logic reference doc