A prompt that began with a Slack link produced a title made of the URL, because the stand-in took the first sentence. It now strips links, splits the prompt into clauses, prefers the clause naming a deliverable over reading steps, turns questions into decisions, resolves a leading pronoun, and cuts at phrase boundaries. Every title passes isUsableTitle (no links, at most 10 words) or falls back to Untitled task. The Haiku request tells the model to name the deliverable and ignore links. Adds the messy prompt as a regression story, fixes story interactions for the portaled modal, and wraps long links in the prompt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SWn6etZjfGz6p8NWYkCQve
@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.
Editor dependency identity
Keep the root and workspace overrides for @codemirror/state,
@codemirror/view, and @lezer/common aligned. CodeMirror requires shared
extension identity, while Lezer parsers and syntax highlighters require shared
NodeProp IDs. Multiple Lezer copies can crash code-block highlighting with
tags is not iterable. src/lib/codemirror-single-instance.test.ts checks the
installed dependency graph and highlights sample code through the editor's real
language dependencies. GitHub Actions owns regeneration of pnpm-lock.yaml.