Skip to content

Run 3: Composition Components

Implements Wave 2 — the four composition molecules that assemble foundation components (Run 2 outputs) into higher-order interaction surfaces.

  • Base branch: jmpicnic/item-image-upload-components (branched from main)
  • Parallelism: Tasks 3.1, 3.2, 3.3 are independent; 3.4 depends on 3.1. Parallel agents use separate worktrees and task branches, merging back to the base branch at the end of the wave.
  • Run 2 exit gate passed: lint, build-storybook, and test all exit 0 on the base branch.
  • Base branch jmpicnic/item-image-upload-components contains all Run 2 commits.
PropertyValue
TypeMolecule
Locationsrc/components/canary/molecules/image-hover-preview/
Tests6
Stories4
Depends onImageDisplay (Run 2), popover primitive (Run 1)

Acceptance Criteria:

  • Configurable hover delay triggers popover open correctly.
  • Image load errors inside the popover are suppressed (no propagation to parent error boundary).
PropertyValue
TypeMolecule
Locationsrc/components/canary/molecules/image-inspector-overlay/
Tests8
Stories4
Depends onDialog atom (existing)

Acceptance Criteria:

  • Open, close, and edit-mode transition states all work correctly.
  • Keyboard dismiss (Escape) closes the overlay.
PropertyValue
TypeMolecule
Locationsrc/components/canary/molecules/image-comparison-layout/
Tests6
Stories5
Depends onImageDisplay (Run 2), tabs primitive (Run 1)

Acceptance Criteria:

  • Desktop breakpoint renders side-by-side layout.
  • Mobile breakpoint renders tabbed layout.
PropertyValue
TypeMolecule
Locationsrc/components/canary/molecules/form/image/
Tests11
Stories7
Depends onImageHoverPreview (3.1), ImageDisplay (Run 2), alert-dialog primitive (Run 1)

Acceptance Criteria:

  • Hover affordances delegate correctly to ImageHoverPreview.
  • Remove flow triggers alert-dialog confirmation before clearing the field.
  • Disabled state suppresses all interactions.
TaskComponentTestsStoriesStatus
3.1ImageHoverPreview64Pending
3.2ImageInspectorOverlay84Pending
3.3ImageComparisonLayout65Pending
3.4ImageFormField117Pending
Total3120

Tasks 3.1, 3.2, and 3.3 are independent and may be implemented in parallel. Task 3.4 depends on Task 3.1 (ImageHoverPreview) and must begin only after 3.1 is complete and passing.

3.1 ImageHoverPreview ─┐
3.2 ImageInspectorOverlay ─┤─ (independent, parallel)
3.3 ImageComparisonLayout ─┘
└─► 3.4 ImageFormField

All of the following must pass before Run 4 may begin:

  • npm run lint exits 0 (zero warnings).
  • npm run build-storybook exits 0.
  • npm run test exits 0.
  • 31 new unit tests pass (cumulative count includes Run 1 and Run 2 tests).
  • 20 new Storybook stories render without console errors.

Artifacts produced by Run 3 and their consumers in Run 4:

ArtifactConsumed By (Run 4)
ImageHoverPreviewImageCellDisplay (Task 4.1)
ImageComparisonLayoutImageUploadDialog (Task 4.3)
ImageFormFieldBarrel exports (Task 4.6)
ImageInspectorOverlayBarrel exports (Task 4.6)

Copyright: (c) Arda Systems 2025-2026, All rights reserved