Skip to content

Run 1 Foundation — Byproducts

Date: 2026-03-19

The stock shadcn Button component is present in BOTH:

  • src/components/canary/primitives/button.tsx — stock shadcn variants (default, destructive, outline, secondary, ghost, link)
  • src/components/canary/atoms/button/button.tsxArdaButton with Arda-specific variants (primary, secondary, ghost, destructive, outline)

The icon-button atom imports from primitives/button. This is intentional and architecturally sound (atom consumes primitive). However, this creates an implicit question for later runs: when organisms/molecules import Button from the callil branch (@/components/ui/button), which target should they use?

Recommendation for Run 3: The import mapping in primitives.md maps @/components/ui/buttonatoms/button. This means organisms using the stock shadcn Button API (with variant="default" etc.) will need to either:

  • Switch to ArdaButton with Arda variants, or
  • Import from primitives/button when they need the stock shadcn API

Clarify this in Run 3 organism migration.

The stock shadcn Badge component is at src/components/canary/atoms/badge/badge-base.tsx rather than in primitives/. The plan specified the base goes into the atom directory alongside the wrapper. This is consistent: badge.tsx (ArdaBadge wrapper) imports from ./badge-base. No change needed.

3. icon-button and read-only-field Missing index.ts on Branch Entry

Section titled “3. icon-button and read-only-field Missing index.ts on Branch Entry”

The worktree’s icon-button directory had no index.ts. The main clone inherited this gap. Both were created in this run.

4. search-input Not Copied in Previous Session

Section titled “4. search-input Not Copied in Previous Session”

The search-input atom was present in the callil worktree but was not copied during the pre-session work. Created in this run with all four files (component, test, stories, index.ts).

5. Storybook Build Requires Vendored Deps Install Step

Section titled “5. Storybook Build Requires Vendored Deps Install Step”

Running npx storybook build directly fails because react-redux (and 16 other vendored dependencies) are not in node_modules. The npm run build-storybook script correctly runs node tools/install-vendored-deps.js first. Any CI gate using build-storybook must use npm run build-storybook (not npx storybook build).

6. Prettier Print Width Disagreements on Index Files

Section titled “6. Prettier Print Width Disagreements on Index Files”

Prettier’s print-width rule triggers on multi-item exports that exceed 80 characters. Three files needed reformatting:

  • Long single-line exports need multi-line format
  • Multi-line imports that fit on one line need collapsing

Run the lint fix with npm run lint:fix proactively after copying files to avoid repeated lint failures.

#TodoTarget Run
1Clarify Button vs ArdaButton usage in organism migrationRun 3
2Consider moving badge-base.tsx to primitives/ for consistency with button.tsx — or add a note in primitives.md explaining the asymmetryRun 3 planning
3Add missing index.ts files for other atoms that may lack them — audit before Run 3Run 3 setup
4Remove src/utils.ts if it only exports cn — Run 7 cleanupRun 7
5After full organism migration (Run 3), verify no @/components/ui/ imports remain anywhere in src/ (not just canary/)Run 3 exit

Significant work had been done in a prior session: tokens.css, globals.css, all 14 primitives, most atoms, hooks, and cn rewrite were complete. This run completed the remaining gaps (search-input, two index.ts files, sidebar.tsx lint fix, three Prettier fixes, and the primitives.stories.tsx).

The main clone’s tokens.css already contained all the Arda orange tokens described in the plan (state ramp, sidebar, font vars, control heights, destructive-foreground, dark mode). No changes were needed.