Login
View Ticket
Login
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.