Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions KNOWN-ISSUES.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,7 @@ In one full end-to-end run of three passes (201 tests, six workers) on this Wind
## KI-10 · Cloudflare refuses the account far below the daily limit
**Found:** 2026-10-20 · **Severity:** medium
Cloudflare answers 429, code 4006, "you have used up your daily free allocation of 10,000 neurons", while the day's use is far below it, as on 2026-10-20 and 2026-10-22. Staging is refused too, so visitors see the quota message (slice 8a) when the allocation isn't used up. Blocks last from minutes to about nine hours and end without a pattern found (not a rolling 24 hours, not request size). Every refused request's ray id and request id are in the measurement's not-run records (local). Fixing it is Cloudflare's, and the owner won't open a support ticket (2026-10-22), so the cause stays unknown; staging moved to a fresh Cloudflare account the same day.

## KI-11 · A local build or dev server can keep an old `globals.css`
**Found:** 2026-10-25 · **Severity:** low
After a change to `src/app/globals.css`, a production build in a worktree served the stylesheet as it was before the change: the count's roll at its old 0.27s and clip, though the file held the new values, while other style changes made the same day came through. The dev server did the same earlier that day (a label's new position never reached the page until the server restarted), and the owner saw old behaviour in the browser twice. Deleting `.next` and building again fixed it every time. A guess: Turbopack's cache under `.next` (Next.js 16.4.2, with the Tailwind loader `@tailwindcss/turbopack` 4.3.3) not seeing the change. CI builds from scratch, so it isn't affected. Until it's understood: when a style change doesn't show, check the served CSS, then stop the server, delete `.next` and start again.
3 changes: 2 additions & 1 deletion docs/decisions.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
Decisions that shape the app, one line each: `YYYY-MM-DD · decision · consequence`. When a decision changes, replace its line; Git keeps the old one. Agents read the section their task touches.

## Design
- 2026-10-22 · The chat is the main thing on the screen and the PRD supports it beside it (the owner, 2026-10-22: the PRD preview "takes up too much space in the web app. The chat should be the main thing and the preview should be supportive, yet not too congested or tight either", and it's "definitely way too large now"): on a laptop the PRD gets a supporting column and the chat the rest, its text kept to a comfortable reading width: on a 1440px laptop the PRD about 500px and the chat the rest (the owner, 2026-10-22), built as slice 27 after the motion of slice 26 · Replaces a chat column of steady width beside a PRD that takes the rest (2026-10-20), which on a 1440px laptop gave the PRD about 840px and the chat 520
- 2026-10-25 · A reply is typed out as opencode shows a streaming one (the owner, 2026-10-25: a large text "pops in" and feels odd; "look at how opencode types or renders in AI text responses"; opencode's `createPacedValue` in `packages/session-ui/src/message/message-content.tsx` and its `markdown-word-enter` in `packages/session-ui/src/components/markdown.css`, at acdcdb8, read 2026-10-25): what shows of a reply grows from the top a few words every 24ms, each step ending after a word, at about 600 characters a second and faster for a long reply, so it's all shown within about 2.5 seconds of arriving (the owner's choice over a real model's slower pace and over opencode's own rules, which show anything under 512 characters at once and only smooth a reply that streams); the words each step adds fade in together over 180ms, opacity only, as opencode's do (the owner's choice over the video's rise and blur); its formatting is in place as it types, never a half-typed mark; reduced motion shows it at once · Replaces the words of 2026-10-22, flowing in over at most about half a second, rising from a slight blur, every paragraph at once, which made a long reply flash in everywhere at the same moment
- 2026-10-22 · The chat is the main thing on the screen and the PRD supports it beside it (the owner, 2026-10-22: the PRD preview "takes up too much space in the web app. The chat should be the main thing and the preview should be supportive, yet not too congested or tight either", and it's "definitely way too large now"): on a laptop the PRD gets a supporting column and the chat the rest, its text kept to a comfortable reading width: on a 1440px laptop the PRD about 500px and the chat the rest (the owner, 2026-10-22), built as slice 27 after the motion of slice 26; as built, the PRD is 36% of the page and at least 448px, where its text keeps about 45 characters a line, so on a 1024px laptop the PRD 448px and the chat 496, and the chat's text, its messages and its message box share a centred column of at most 46rem (the agent's call) · Replaces a chat column of steady width beside a PRD that takes the rest (2026-10-20), which on a 1440px laptop gave the PRD about 840px and the chat 520
- 2026-10-22 · The app's motion follows the README's demo video as closely as it can (the owner, 2026-10-22: "bring it as close as possible"; the video's project is `D:\IT_Projects\Web Dev\prd-assistant-video`, outside the repository, its motion in `src/Showcase.tsx` and `src/ui/motion.ts`): one shared set of curves, the video's springs replayed in CSS with `linear()` (the owner left the build to whatever comes closest, and for one-way entrances CSS plays the same curve, so no library); what appears arrives, rising a few pixels, sharpening from a slight blur and settling; words flow in one after another even when a reply arrives whole, over at most about half a second, and words already shown never move again; searches in a row fold together with a short collapse, and a saved section's line gets a tick that draws itself, both departing from opencode's search form (2026-10-20) by the owner's choice; the pop-over opens and closes with a scale and fade, and its quote's highlight sweeps in. Reduced motion still turns all of it off, and nothing waits for an animation · Slices 25 and 26. The video looked smoother than the app: there, most things just appear, a reply that arrives whole fades in as one block in 0.18s, and five different timings are in use
- 2026-10-21 · The sign that the model is thinking is opencode's (the owner, 2026-10-21: "do what opencode does"; `packages/session-ui/component-tests/session-timeline-reasoning.spec.ts` at 50c5fce, read 2026-10-21): while the model thinks, the moving line is opencode's "Thinking" row; once the reply arrives, a line "Thought" with the time in grey after it, as "Thought 7s", the title and subtitle at 13px with a 16px line height, the form of the search lines' title and query. Unlike opencode's, whose line opens to the model's reasoning, it doesn't open, since the reasoning's words never reach the browser (2026-10-20, the interface polish). Slice 20 reads the rest from opencode's source when it's built: the Thinking row's exact words and how the time is written past a minute · Settles the words deferred on 2026-10-20, "Thought for 8s" or "Took 8s"
- 2026-10-21 · A PRD section's copy button is opencode's (the owner, 2026-10-21: as close to opencode as possible, without cluttering the PRD; `MessageActionButton` and the text part's copy row in `packages/session-ui/src/message/message-content.tsx` and `components/message-part.css`, the code block's in `components/markdown.tsx` and `markdown.css`, `packages/ui/src/actions/icon-button/icon-button.css` and `overlays/tooltip/`, at 50c5fce, read 2026-10-21): an icon button of 24px with a 14px grey copy icon and no border, a faint background on hover and a stronger one while pressed; on a screen with hover it shows only while the pointer is over the section or focus is inside it, fading in over 0.15s, and on a touch screen it always shows; after the pointer rests on it for 0.4s, a small label "Copy section" shows 4px above it (11px, medium weight, on a raised dark surface without a border, appearing in 0.12s), and it closes when the button is pressed; after a copy the icon is a check mark for two seconds and the button's name is "Copied". Unlike opencode's: it sits beside the section's tally; when the browser refuses the clipboard it reads "Couldn't copy" instead of doing nothing; and screen readers hear "Copied" · Replaces the quiet "Copy" word beside the tally (slice 17 as planned on 2026-10-20). The tooltip is CSS of the app's own, since opencode's comes from a library for its own framework
Expand Down
Loading
Loading