From 8a5a4dc1286a0c13c721a049c640f899c01e9871 Mon Sep 17 00:00:00 2001 From: Richie Date: Fri, 27 Mar 2026 21:22:06 +1100 Subject: [PATCH] Archive FuneralFinder V1/V2, set V3 as production (D032) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - V1 stories → Archive/FuneralFinder V1 - V2 stories → Archive/FuneralFinder V2 - V3 stories → Organisms/FuneralFinder (primary) - Component registry updated (V3 = done, V1/V2 = archived) - Retroactive review plan confirmed: P0/P1 only, interleaved (D033) - CLAUDE.md: added proactive session startup review procedure - Build skills updated with internal QA stages Co-Authored-By: Claude Opus 4.6 (1M context) --- CLAUDE.md | 8 ++++++++ docs/memory/component-registry.md | 6 +++--- docs/memory/decisions-log.md | 16 ++++++++++++++++ docs/reference/retroactive-review-plan.md | 15 +++++++-------- .../FuneralFinder/FuneralFinder.stories.tsx | 2 +- .../FuneralFinder/FuneralFinderV2.stories.tsx | 2 +- .../FuneralFinder/FuneralFinderV3.stories.tsx | 2 +- 7 files changed, 37 insertions(+), 14 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index d041716..89df72f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -76,6 +76,14 @@ This project uses structured markdown files for cross-session memory. - `docs/memory/token-registry.md` — All tokens with their current values and usage notes - `docs/memory/session-log.md` — Recent sessions (last 2-3); older sessions in `docs/memory/archive/` +**Session startup — proactive review pass (do this automatically):** +Check `docs/reference/retroactive-review-plan.md` for the current review state. If +there are tiers or components that haven't been reviewed yet, run the next review +step (typically `/normalize {tier}` or `/audit {component}`) at the start of the +session before the user's main request. Keep this to ~30-60 min, then report +findings and shift to whatever the user wants to work on. This is "morning +housekeeping" — the user has approved this and expects it to happen without asking. + **After completing work, update:** - The relevant memory files with what changed - `docs/memory/session-log.md` with a summary of what was accomplished and next steps diff --git a/docs/memory/component-registry.md b/docs/memory/component-registry.md index 593be7d..5a2a14b 100644 --- a/docs/memory/component-registry.md +++ b/docs/memory/component-registry.md @@ -54,9 +54,9 @@ duplicates) and MUST update it after completing one. | ServiceSelector | done | ServiceOption × n + Typography + Button | Single-select service panel for arrangement flow. Heading + subheading + ServiceOption list (radiogroup) + optional continue Button. Manages selection state via selectedId/onSelect. maxDescriptionLines pass-through. | | PricingTable | planned | PriceCard × n + Typography | Comparative pricing display | | PackageDetail | done | LineItem × n + Typography + Button + Divider | Right-side package detail panel. Warm header band (surface.warm) with "Package" overline, name, price (brand colour), Make Arrangement + Compare (with loading) buttons. Sections (before total) + total + extras (after total, with subtext). T&C grey footer. Audit: 19/20. Maps to Figma Package Select (5405:181955). | -| FuneralFinder | done | Typography + Button + Chip + Input + Divider + Link + custom ChoiceCard/TypeCard/CompletedRow/StepHeading | Hero search widget v1. Full stepped conversational flow: Intent → Planning For (conditional) → Funeral Type + preferences (optional themes) → Service preference (conditional, auto-advance) → Location + CTA (always visible). Smart defaults — minimum search: intent + location. Types: Cremation, Burial, Water Burial (QLD only), Explore All. Service: With/No/Flexible. Themes: eco-friendly, budget-friendly, religious specialisation. Loading prop, location validation. Audit: 14/20 (Good). Critique: 29/40 (Good). Future: progress indicator, roving tabindex, location autocomplete. | -| FuneralFinderV2 | done | Typography + Button + Input + Divider + Select + MenuItem + custom StepCircle | Hero search widget v2 — quick-form approach. 4-step vertical form with numbered circles (48px, brand-200 default → brand-500 completed) and connector lines. Steps: (1) Intent — 3 options, (2) Planning for — conditional auto-set for arrange-now, (3) Funeral type — 5 options, (4) Location — text input. Sequential unlock: each step enables when previous is filled. Display serif heading + subheading with divider. CTA disabled until location filled. Trust signal below CTA. Critique: 33/40 (Good). Audit: 18/20 (Excellent). | -| FuneralFinderV3 | done | Typography + Button + Divider + Select + MenuItem + OutlinedInput + custom StatusCard/SectionLabel | Hero search widget v3 — clean form with status cards. Standard card container (surface.raised, card shadow). "How Can We Help" section: two side-by-side StatusCards (Immediate Need default-selected / Pre-planning) — white bg, neutral border, brand border + warm bg when selected, stack on mobile. "Funeral Type" Select + "Location" OutlinedInput with pin icon — standard outlined fields, no focus ring (per design). Overline section labels (text.secondary). CTA "Find Funeral Directors →" always active — validates on click, scrolls to first missing field. Required: status + location. Funeral type defaults to "show all". Dividers after header and before CTA. WAI-ARIA roving tabindex on radiogroup. aria-labelledby via useId(). Critique: 33/40 (Good). Audit: 18/20 (Excellent). | +| FuneralFinder (V3) | done | Typography + Button + Divider + Select + MenuItem + OutlinedInput + custom StatusCard/SectionLabel | **Production version.** Hero search widget — clean form with status cards. Standard card container (surface.raised, card shadow). "How Can We Help" section: two side-by-side StatusCards (Immediate Need default-selected / Pre-planning) — white bg, neutral border, brand border + warm bg when selected, stack on mobile. "Funeral Type" Select + "Location" OutlinedInput with pin icon — standard outlined fields, no focus ring (per design). Overline section labels (text.secondary). CTA "Find Funeral Directors →" always active — validates on click, scrolls to first missing field. Required: status + location. Funeral type defaults to "show all". Dividers after header and before CTA. WAI-ARIA roving tabindex on radiogroup. aria-labelledby via useId(). Critique: 33/40 (Good). Audit: 18/20 (Excellent). | +| FuneralFinder V1 | archived | Typography + Button + Chip + Input + Divider + Link + custom ChoiceCard/TypeCard/CompletedRow/StepHeading | Archived — viewable in Storybook under Archive/. Stepped conversational flow. Audit: 14/20. Critique: 29/40. | +| FuneralFinder V2 | archived | Typography + Button + Input + Divider + Select + MenuItem + custom StepCircle | Archived — viewable in Storybook under Archive/. Quick-form with step circles. Audit: 18/20. Critique: 33/40. | | ArrangementForm | planned | StepIndicator + ServiceSelector + AddOnOption + Button + Typography | Multi-step arrangement wizard. Deferred — build remaining atoms/molecules first. | | Navigation | done | AppBar + Link + IconButton + Button + Divider + Drawer | Responsive site header. Desktop: logo left, links right, optional CTA. Mobile: hamburger + drawer with nav items, CTA, help footer. Sticky, grey surface bg (surface.subtle). Real FA logo from brandassets/. Maps to Figma Main Nav (14:108) + Mobile Header (2391:41508). | | Footer | done | Link × n + Typography + Divider + Container + Grid | Dark espresso (brand.950) site footer. Logo + tagline + contact (phone/email) + link group columns + legal bar. Semantic HTML (footer, nav, ul). Critique: 38/40 (Excellent). | diff --git a/docs/memory/decisions-log.md b/docs/memory/decisions-log.md index ab28f62..2e95327 100644 --- a/docs/memory/decisions-log.md +++ b/docs/memory/decisions-log.md @@ -269,3 +269,19 @@ contradict a previous one. **Rationale:** The codebase naturally evolved this dual-path pattern. Semantic tokens are mapped into the MUI theme by `src/theme/index.ts`, making `theme.palette.*` the idiomatic MUI access path. Component-tier tokens exist only as CSS variables (Style Dictionary output). Forcing all access through one path would either require mapping every component token into MUI (over-engineering) or abandoning MUI's type-safe theme accessors (losing DX). **Affects:** All component files, `docs/conventions/component-conventions.md`, Badge.tsx (normalized to CSS vars for colour maps) **Alternatives considered:** CSS vars only — rejected because it loses MUI's TypeScript-safe theme API. Theme accessors only — rejected because component tokens aren't in the MUI theme. + +### D032 — FuneralFinder V3 is the production version +**Date:** 2026-03-27 +**Category:** component +**Decision:** FuneralFinderV3 is the production widget. V1 and V2 are archived — their Storybook stories moved to `Archive/FuneralFinder V1` and `Archive/FuneralFinder V2`. Code remains in the repo for reference and client walkthroughs. +**Rationale:** User chose V3 after reviewing all three. V3 scored highest on usability (clean form, no sequential lock, always-active CTA) while maintaining audit/critique scores (18/20, 33/40). V1 and V2 must remain viewable for client presentations showing the design evolution. +**Affects:** FuneralFinder stories (title changes), component-registry (V3 = done, V1/V2 = archived), retroactive review (only V3 gets full treatment) +**Alternatives considered:** Deleting V1/V2 — rejected because user needs them for client walkthroughs. + +### D033 — Retroactive review uses P0/P1 only, interleaved with new work +**Date:** 2026-03-27 +**Category:** architecture +**Decision:** Existing components are reviewed using a condensed process (normalize → audit → fix P0/P1 only). Review runs as a proactive "morning housekeeping" pass at the start of each session (~30-60 min), then shifts to new component work. +**Rationale:** P0/P1 are the issues that affect usability and accessibility. P2/P3 are cosmetic — not worth the risk of changing approved components. Interleaving ensures the foundation is solid before building on it, without dedicating entire sessions to review. +**Affects:** Session workflow, CLAUDE.md startup procedure, docs/reference/retroactive-review-plan.md +**Alternatives considered:** Dedicated review sessions — rejected as less efficient. Full P0-P3 fixes — rejected as too risky for approved components. diff --git a/docs/reference/retroactive-review-plan.md b/docs/reference/retroactive-review-plan.md index f58f2e0..9602a9b 100644 --- a/docs/reference/retroactive-review-plan.md +++ b/docs/reference/retroactive-review-plan.md @@ -126,12 +126,11 @@ improve the patterns used in new components. --- -## Decision needed from user +## Decisions (confirmed 2026-03-27) -Before starting, confirm: -1. **FuneralFinder version** — Which version (v1/v2/v3) should get the full - review? The others can be lightly maintained or archived. -2. **Depth vs speed** — Do we fix all P2 issues too, or strictly P0/P1 only? - P0/P1 only is faster and doesn't risk changing things that already work. -3. **Interleave with new work** — Review in dedicated sessions, or mix with - building remaining components (FormField, ArrangementForm, PricingTable)? +1. **FuneralFinder version** — V3 is production. V1/V2 archived (viewable in + Storybook under Archive/). Only V3 gets the full review. +2. **Depth** — P0/P1 only. Don't touch P2/P3 — not worth the risk on approved components. +3. **Approach** — Interleaved. Start each session with a review pass (~30-60 min), + then shift to new component work. This is automated — the agent runs it + proactively at session start without being asked. diff --git a/src/components/organisms/FuneralFinder/FuneralFinder.stories.tsx b/src/components/organisms/FuneralFinder/FuneralFinder.stories.tsx index 23b7eb6..9673e32 100644 --- a/src/components/organisms/FuneralFinder/FuneralFinder.stories.tsx +++ b/src/components/organisms/FuneralFinder/FuneralFinder.stories.tsx @@ -30,7 +30,7 @@ const FALogoNav = () => ( // ─── Meta ─────────────────────────────────────────────────────────────────── const meta: Meta = { - title: 'Organisms/FuneralFinder', + title: 'Archive/FuneralFinder V1', component: FuneralFinder, tags: ['autodocs'], parameters: { layout: 'centered' }, diff --git a/src/components/organisms/FuneralFinder/FuneralFinderV2.stories.tsx b/src/components/organisms/FuneralFinder/FuneralFinderV2.stories.tsx index 7e71595..43f8634 100644 --- a/src/components/organisms/FuneralFinder/FuneralFinderV2.stories.tsx +++ b/src/components/organisms/FuneralFinder/FuneralFinderV2.stories.tsx @@ -3,7 +3,7 @@ import Box from '@mui/material/Box'; import { FuneralFinderV2 } from './FuneralFinderV2'; const meta: Meta = { - title: 'Organisms/FuneralFinderV2', + title: 'Archive/FuneralFinder V2', component: FuneralFinderV2, parameters: { layout: 'padded', diff --git a/src/components/organisms/FuneralFinder/FuneralFinderV3.stories.tsx b/src/components/organisms/FuneralFinder/FuneralFinderV3.stories.tsx index 0abfd37..096665c 100644 --- a/src/components/organisms/FuneralFinder/FuneralFinderV3.stories.tsx +++ b/src/components/organisms/FuneralFinder/FuneralFinderV3.stories.tsx @@ -3,7 +3,7 @@ import Box from '@mui/material/Box'; import { FuneralFinderV3 } from './FuneralFinderV3'; const meta: Meta = { - title: 'Organisms/FuneralFinderV3', + title: 'Organisms/FuneralFinder', component: FuneralFinderV3, parameters: { layout: 'padded',