| Ticket Hash: | 09a4a80218dc1b457c3777adface0d94e450a82a | ||
| Title: | ocx2 thread fails on a private repository, since it asks the server's receipts unsigned | ||
| Status: | Open | Type: | Code_Defect |
| Severity: | Severe | Priority: | High |
| Subsystem: | tools | Resolution: | |
| Last Modified: |
2026-11-02 02:39:37 9.2 days ago |
Created: |
2026-11-02 02:33:10 9.2 days ago |
| Version Found In: | b297c80b37 | ||
| Description: | ||||
|
From a clone, thread asks the server who sent each post through ReceiptCommand.asked (src/ocx/commands/receipt.cr:243), which strips the login from the URL and asks as anyone. On a repository whose nobody cannot read, the receipt tool answers everything as not received, and thread refuses: 'the server says it has not received HASH ... lets no one read' (src/ocx/commands/thread.cr:106). The pull just before it succeeds with the clone's remembered login, so the agent can read the posts and still cannot get them. spec/ocx/thread_spec.cr:133 pins this refusal and passes today (3 examples, 0 failures, 2026-11-02); not run here against a real private server.
The same seam, by reading and not run: post with references (src/ocx/commands/post.cr:250) would refuse with 'push it first', which sends the agent the wrong way; questions (src/ocx/commands/questions.cr:142) would drop what it cannot confirm; and post's reading of a user's capabilities (post.cr:314) would get nothing. Change: in ReceiptCommand.asked, the one seam, sign in as the clone's user, as Server::Asked does for a node with its password file (Fossil's login page, then the cookie). The password is the clone's remembered one, read for that request and kept nowhere. AGENTS.md says never to copy a password out of a clone, so this needs the maintainer's word; the alternative, the receipt tool answering hash-only to anyone, tells anyone who sent a post of a private repository. Passes when: thread, post with references and questions answer from a clone of a repository whose nobody has no capabilities, and the spec's refusal becomes that of a clone with no login. Confirmed on a real private repository, 2026-11-02: the swk-ai session on x86-1 (node swk-ai-node, login swk-ai-session) reports 'ocx2 thread' refusing 64b3644963 and 47b7a71f41 with this ticket's message, ask_server_receipts being the step that stops. /swk-ai/timeline answers an unsigned visitor with a redirect to login. It reads threads with 'fossil artifact' meanwhile. | ||||