Add private remote attachment retrieval - #191
Conversation
|
Pilot evidence (hostname-neutral): the canonical deployment used Tailscale Standalone 1.102.2 with one additive tailnet-only HTTPS port, the pre-existing root Serve handler unchanged, and Funnel disabled. Canonical doctor was healthy on the tested head. The owner-only remote profile completed authenticated health and pending checks, canonical-only creation with the exact remote source snapshot, deep-link activation, human feedback and PNG attachment handoff, authenticated 315,844-byte retrieval with MIME/SHA-256 verification and no canonical path, and edit → get → revise; the current-thread pending list ended empty. The real store also exposed 53 parseable historical v1 artifacts rejected by full portable validation. The bounded receipt-only audit now proves idempotency-key uniqueness without returning or rewriting those artifacts and remains fail-closed on malformed JSON, headers, managed IDs, receipts, incompatible versions, and unreadable files. Full local CI passed with 859 tests and Electron smoke. The branch was subsequently rebased onto three unrelated mainline UI commits; GitHub CI and the full local suite are green on that exact rebased head. Review follow-up: the packaged remote CLI now exposes verified get-attachment retrieval on head 99f173a; it writes only authenticated bytes to a new owner-only file and omits credentials and private URLs from stdout. Second review follow-up: head 3783351 aligns local creation, remote projection, and download on the existing 32 MiB response ceiling. The exact-boundary focused suite, GitHub CI, and exact-head automated review are green; all review threads are resolved. |
49edb20 to
c4d9f75
Compare
4f933b7 to
a80044d
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4f933b704c
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review |
|
Codex Review: Didn't find any major issues. Already looking forward to the next diff. Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 99f173af4f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review |
|
Codex Review: Didn't find any major issues. What shall we delve into next? Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Closes the final implementation slice of #187 for the private two-host pilot.
What changed
Why the transport changed
The initial Unix-domain-socket pilot failed on the installed sandboxed macOS Tailscale network extension: direct owner access succeeded, while the extension was denied access to the socket under Application Support. A loopback TCP backend is compatible with Tailscale Serve, but another local account can reach loopback and can occupy a fixed port while Markover is stopped. The challenge-response protocol therefore proves server and client possession of the protected credential without transmitting it, and instance-scoped attachment grants prevent replay into a restarted gateway.
Validation
npm run ci:local/healthreturned HTTP 200 with the canonical protocol/reviews/pendingreturned HTTP 200 with a valid v1 responseremote-agentoriginedit → get → revisecompleted and the current-thread pending list returned emptyPilot status
The canonical deployment is additive on a separate tailnet-only HTTPS port; the existing root Serve handler remains unchanged and Funnel remains disabled. The authenticated health, pending, create, handoff, attachment-download, edit, and revise checks passed through the live Serve-to-loopback hop. The first sentinel
openexposed historical parseable v1 artifacts that fail full portable validation; the bounded receipt-only audit proved uniqueness without returning or rewriting those artifacts. Deep-link QA returned human feedback and a screenshot, the signed bytes verified, and the review completed with no pending current-thread reviews.