- Relax isBookLikeResponse threshold (>=2 to >=1) - Widen book patterns: inline prose, verb-preceded, numbered bold, em-dash - Remove overly aggressive film/song gating on book extraction - Allow songs to coexist with film/book tags (explicit tags always returned) - Strengthen TV patterns: seasons, created by, standalone "tv" query match - Fix TV_EXT_RE to handle both Title|Year|Creator and Title|Creator|Year - Widen place patterns: type word search in descriptions, bold fallback - Add "pizza" to isPlaceQuery and preferredFirstTab - Add Code tab: isCodeQuery, isCodeLikeResponse, extractCodeBlocks, wiring - Fix image threshold: single image with meaningful alt text shown - Refactor filterTabsByContext: specialized paths now append remaining content - Add code mode UI: orange input styling, design system selection, file selection - DesignSystemGrid: selection toggle only on checkmark, card click opens detail - Add 64-test extraction quality test suite - Update overnight plan.md and prompt.md for hardening run Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
3.5 KiB
3.5 KiB
You are hardening the AIUI content extraction pipeline and completing incomplete features. Read these files first:
loop/plan.md— Your task checklist (mark items- [x]as you complete them)CLAUDE.md— Project conventions, design system rules, and coding standards
Key Context
The content extraction pipeline lives in:
packages/app/src/composables/contentExtraction.ts— Extracts books, films, TV, songs, podcasts, places, images, code blocks, apps from AI response textpackages/app/src/composables/contentFiltering.ts— Query/response classifiers (isBookQuery, isTVQuery, etc.) and tab routing (filterTabsByContext)packages/app/src/composables/useContentPanel.ts— Wires extraction functions to Vue reactive state and tab systempackages/app/src/components/content/ContentPanel.vue— Main content panel rendering grids and detail viewspackages/app/src/components/content/ContentGridView.vue— Grid view (already has ImageGrid/PlaceGrid wired)packages/app/src/__tests__/extractionQuality.test.ts— Extraction quality test suite (currently 64 tests)
Content flows: AI response text → extraction functions → useContentPanel refs → filterTabsByContext → ContentPanel/ContentGridView rendering
Design System Rules (must follow for every file you touch)
- Glass morphism only — use
.glass,.glass-card,.glass-button,.glass-button-smfromsrc/styles/main.css - No light-mode conditionals — never use
isDark ?pattern. The app is dark-only. Remove any existing light-mode code you encounter. - No
bg-gray-*orbg-white— usebg-white/5,bg-white/10,bg-black/35etc. - Text opacity scale —
text-white/25→/40→/60→/70→/80→/90→/96→text-white - Accent colour —
text-accent(#F7931A),bg-accent/15,border-accent/30for Bitcoin-orange highlights - Touch targets — min 44×44px, 8px gaps between targets
- Font size — min
16pxon all inputs (prevents iOS zoom) - Animations —
animate-scale-in,animate-fade-up,animate-fade-infrom design system only
For each task in loop/plan.md:
- Find the first unchecked
- [ ]item - Read the task description carefully
- Read the relevant source files before making changes
- Implement the feature/fix following conventions and design system rules
- Run
pnpm typecheck && pnpm lint— fix all errors before committing - Run
pnpm test— fix any failing tests - If the task involves tests, run
cd packages/app && npx vitest run src/__tests__/extractionQuality.test.tsspecifically - Commit:
type(scope): description(conventional commits) - Mark it done
- [x]inloop/plan.md - Move to the next unchecked task immediately
Rules
- Never skip a testing gate — if tests fail, fix them before moving on
- If a task is proving difficult, keep trying different approaches. Make at least 30 genuine attempts before giving up and moving on.
- Always run typecheck + lint after every code change
- Keep initial bundle < 250 KB gzipped — lazy-load anything heavy
- Bitcoin only — never altcoins, never fiat payment flows
- Privacy first — no external analytics calls, no telemetry
- Do not stop until all tasks are checked or you are rate limited
- When adding tests, aim for realistic AI response patterns, not trivial examples
- When wiring components into ContentPanel.vue, follow the exact same pattern used for existing content types (BookGrid/BookDetail, TVSeriesGrid/TVSeriesDetail, etc.)