Repository navigation
Conversation
|
@Stener1 is attempting to deploy a commit to the seanbrydonio's projects Team on Vercel. A member of the Team first needs to authorize it. |
|
This is a draft only because of the open-PR limit; it turns ready on its own when a slot frees. I can't add labels here, so could a maintainer add |
There was a problem hiding this comment.
All reported issues were addressed across 16 files
Reply with feedback, questions, or to request a fix.
View guided diff | Re-trigger cubic
ec26e31 to
2ef40c5
Compare
|
Rebased onto |
2ef40c5 to
e4704cf
Compare
|
Rebased onto
No code changes besides those. After the rebase: |
Paste an image into a question's "Something else…" or drop files on the
card, and they go with the answer as their paths after the words, on one
line ("this one is off [attached: /…/shot.png]"), which Claude opens with
Read on the terminal and structured drivers alike. Images already in the
reply box, or dropped there while the question waits, show on the card
and go with it, then leave the reply box. Submit waits for the uploads
it sends; a submit that fails keeps them.
The box's terminal driver reads an answer back from Claude Code's form,
which breaks a path longer than a line in the middle: it now takes a
line break as a space or nothing, and only there.
The dev box no longer passes the caller's BERTH_* to its agents (a
structured worker's BERTH_DRIVER turned their hooks off), and no longer
re-sends the last prompt when its folder is already trusted.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…a space The paths after an answer's words are parted by ", " and the next path's "/", so a worktree in a folder with a space, or a path with a bracket, splits back into the same paths. Not quotes: on Claude's SDK the box reads the answer back from Claude's "question"="answer" text, which doesn't escape them. A name the box counted on (20261025-152924-1-shot.png) shows as shot.png. dev-box.sh waits for Claude's trust question or its prompt and stops when neither shows, and its env quotes a box dir with a space. The live scenario drops a file whose name has a space and none of the image's words, waits for both words at once, and checks the answer again once Claude's record has it. The changelog says files, not images. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
e4704cf to
87567a5
Compare
Summary
Claude's question card takes screenshots. Paste one into a question's Something else…, or drop files on the card, and they go with the answer for Claude to look at. Files already in the reply box, or dropped there while the question waits, move to the card. They leave the reply box once the answer goes, so they aren't sent again.
An answer stays one line of text. No box API change.
Paths are parted by
,and the next path's/, so a path with a space stays one. Not quotes: on Claude's SDK the box reads the answer back from Claude's"question"="answer"result text, which doesn't escape quotes inside an answer.attachedTo/splitAttachedsit next towithAttachmentsinlib/attachments.ts. The answered card shows the files by name (📎 checkout-step-2.png, pasted-…png), not by path, without the box's time and same-second count (20261025-152924-1-shot.png→shot.png).Box, terminal driver: Claude Code breaks a path that is longer than a line inside it (
…/acme-shop/.b⏎erth/attachments/…). The screen check used to join wrapped lines with a space, so in an 80x24 pane the answer stuck. Nowanswer.gotreats a line break as either a space or nothing, and only there; a space anywhere else still counts.Verify skill:
features/attachments.mdis new (the composer and the card).features/chat-questions.mdgets the card case. New scenarioschat-question-images(mock) andchat-question-images-live(real box, either driver).dev-box.shgets two fixes:BERTH_*no longer reaches the box's agents. Started from a structured worker,BERTH_DRIVER=structuredturned their hooks off.envquotes a box dir with a space (VERIFY_BOX_DIR='/tmp/verify berthd').Evidence
After the rebase onto
mainand the review fixes (head2ef40c56):chat-question-images-liveon a dev box built from this branch, withVERIFY_BOX_DIR='/tmp/vb 2541', so every attached path has a space in it. The dropped file is namedcheckout step 2.png(the box makes itcheckout-step-2.png). Both drivers pass, with no console errors. The scenario now also checks the answer again after Claude's record replaces the one sent.this one is off [attached: /tmp/vb 2541/acme-shop/.berth/attachments/20261027-134208-checkout-step-2.png, /tmp/vb 2541/acme-shop/.berth/attachments/20261027-134209-pasted-134209.png], thenReadof both.this one is off [attached: /tmp/vb 2541/acme-web/.berth/attachments/20261027-134246-checkout-step-2.png, /tmp/vb 2541/acme-web/.berth/attachments/20261027-134248-pasted-134248.png], thenReadof both."…"). The terminal driver passed, but on the structured driver the answered card showedthis one is off [attached:once Claude's record came back, cut at the first quote. That's why the format uses commas.dev-box.sh's trust wait, driven with a stubbed tmux: trust question → answered once → prompt; already trusted → straight on; neither → exit 1 with the screen;capture-panefailing → exit 1.From the first round (before the rebase):
Mock, production build (
drive.mjs chat-question-images, no console errors):Real Claude Code on a dev box,
chat-question-images-live. Claude asks a question; the prompt says nothing about images. One image is dropped on the reply box and one pasted into the card. Both have words on them that only reading them reveals.Terminal driver, pane at 80x24. Box log:
answer ask: answered 1 questions. Transcript:Read: …-giraffe.png, …-pasted-163655.png. Claude: "One is an orange card reading "ORANGE GIRAFFE 7316" and the other a teal card reading "TEAL ANCHOR 0948"…"Structured driver (Claude's SDK).
answer sdk: answered 1 questions, two Reads. Claude: "…one is a plain orange card reading "ORANGE GIRAFFE 7316" and the other is a teal card reading "TEAL ANCHOR 0948"."Answered in Claude's own terminal instead: the card closes and the image is back in the reply box.
Before: at 80x24 the same answer failed with
Claude's form didn't take your words: it shows "this is the one that is off [attached: /tmp/verify-berthd-bo…". Real screen:testdata/answer/own-words-paths-80.txt.Tests:
TestDriveAttachedPathsOnAShortPaneandTestReadFormRealScreens(the new fixture) failed; both pass now.TestWordsAsWrapped:"use /tmp/a b"doesn't hold"use /tmp/ab","now here"doesn't hold"nowhere", and a path broken at a line end does hold.chat.spec.ts:answer-attachments.test.tscovers the one-line format, round-trips paths with a space, a comma and brackets, andshownNamewith the same-second count.Checks:
go vet: passes.go test -race ./...: passes except tests that fail onorigin/mainon this machine too.TestTheCatalogIsCappedcounts the machine's own commands.TestReviewRoutesOverTheWire,TestReviewSetupSays…,TestGitHubLooks…,TestDetachandTestAnSSHRouteThatFails…flake under load (after the rebase,TestAnSSHRouteThatFails…failed in the full run at load ~50 and then passed 5/5 on both this branch andorigin/main): the same combination failed 1 in 3 onorigin/main, and each passes on its own.typecheck:plugins,check:*,pnpm test(583),pnpm buildandtsc -p e2epass.chat,composer,dropandask-cardspecs, 29 tests, pass. The new tests passed 5× repeated. After the rebase: the two attachment tests inchat.spec.tspass, anddrive.mjs chat-question-images(mock) passes.cargo checkcan't run on this Linux VM (no GTK dev libraries); no Rust changed.Pre-PR review: Codex
reviewandadversarial-review. Fixed after review:Merge Danger
Door: two-way
Reverting restores the old card, reply box and screen check. Uploads still land in
<worktree>/.berth/attachmentsas before. The box API and stored data are unchanged.Blast Radius: chat
ChatFiles. A bug there shows up as chips missing or attachments not sent from the chat's reply box. Home's composer and the prompt dialog are untouched, apart fromuseAttachmentsnow returning stable handlers.mainat 71efa89, after fix(chat): a structured agent's question can always be answered from the chat #186 and feat(app): shortcuts show your keyboard's keys, ⌘Å and ⌘¨ for Back and Forward on Norwegian #180 merged.dev-box.shkeepsmain'sVERIFY_DRIVER=claudesession andrestart; the trust wait runs only for the terminal session.conversation-pane.tsxkeepsmain's structured-form changes beside theChatFilestarget. Still overlaps with feat(plugins): api.attach gives an agent a file, and api.localPaths #181 (lib/attachments.ts,dev-box.shheader).🤖 Generated with Claude Code