mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-27 02:44:50 +01:00
the recovery classification change added `deliberate_wait_without_target` to `ISSUE_RECOVERY_ACTION_KINDS` without updating its UI consumer. The two `Record<IssueRecoveryActionKind, string>` maps in the recovery card are exhaustive, so the two branches typechecked in isolation but broke the moment they met: IssueRecoveryActionCard.tsx(117,7): error TS2741: Property 'deliberate_wait_without_target' is missing ... Give the kind first-class copy instead of letting it fall through to the generic `missing_disposition` headline. Per the spec this kind means a run stopped to wait on something that does not exist, and the original owner gets bounded disposition-repair attempts — so while one of those attempts is live or queued the display derivation already resolves it to the recessed `in_progress` state, which is exactly this task's thesis. No derivation change was needed; the liveness logic is kind-agnostic. Prevention: the break was invisible to both branches' own test runs, so add a guard that renders every kind in the shared union and asserts each gets distinct, non-empty copy. Verified by mutation — pointing the new kind at the generic headline fails the guard. Verified: tsc clean, 218 UI tests across 9 affected suites, the recovery back end's disposition-repair server suite, and all three token gates clean. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-Authored-By: Paperclip <noreply@paperclip.ing>
@paperclipai/ui
Published static assets for the Paperclip board UI.
What gets published
The npm package contains the production build under dist/. It does not ship the UI source tree or workspace-only dependencies.
Storybook
Storybook config, stories, and fixtures live under ui/storybook/.
pnpm --filter @paperclipai/ui storybook
pnpm --filter @paperclipai/ui build-storybook
Typical use
Install the package, then serve or copy the built files from node_modules/@paperclipai/ui/dist.