Original task: Display the AI-generated "Was macht dieser Skill?" description excerpt in the scan list (Verlauf) and dashboard "Kürzliche Scans" cards. The field (`description`) is already serialized by the API (serializeScan). Changes: - artifacts/skillguard/src/pages/scan-history.tsx: render a 2-line clamped paragraph below the metadata row when scan.description is present; nothing shown otherwise (clean for old/non-AI scans). - artifacts/skillguard/src/pages/dashboard.tsx: render a 1-line clamped description excerpt in recent-scan rows; added min-w-0 + gap so truncation works. Deviations / extra fixes required to make this work in the isolated env: - The dev/test Postgres `scans` table was missing the `description` column even though lib/db schema defines it. Ran drizzle-kit push (lib/db) — the list endpoint and several api-server tests were 500ing on `column "description" of relation "scans" does not exist`. Adding a nullable column is non-destructive. - lib/api-client-react built `dist/*.d.ts` was stale (missing description and other fields), so artifact tsc via project references failed. Rebuilt with `tsc -b lib/api-client-react/tsconfig.json`. Vite runtime was unaffected (uses src via exports). Verification: list + dashboard render the excerpt (temporarily seeded one scan, screenshotted, reverted to null); api-server tests 59/59 pass; changed files typecheck clean (remaining tsc errors are pre-existing from other unmerged tasks). Replit-Task-Id: 381de506-681e-4564-bc60-7d2fdd66ba82
1.2 KiB
1.2 KiB
- lucide-react icon name collisions —
Badge/Activityfrom lucide collide with shadcn/ui Badge and React 19 Activity; import Badge from ui, Activity from lucide. - OpenAI gpt-5 temperature — gpt-5* reject
temperature != 1; omit temperature in OpenAI-compatible clients or AI analysis silently fails. - NDJSON streaming on Replit — use
res.on("close")+writableFinished(NOTreq.on("close")); persist on disconnect; proxy doesn't buffer; gate fallback to avoid dup rows. - Skill fingerprint & relation matching — don't put display name in fingerprint path; match modified by file-path Jaccard (hash-Jaccard misses single-file edits), report content-aware similarity.
- Testing api-server from shell — external
$REPLIT_DEV_DOMAIN/apicurl returns HTTP 000; curlhttp://localhost:<PORT>/apiinstead (port from workflow log). - Stale codegen & unapplied migrations — "field already in API" tasks: dev/test DB + lib
dist/*.d.tslag; run drizzle push +tsc -bthe lib.