Repository navigation
Private task copies (opt-in), frame hints through the Raft relay, and two-computer fixes - #1944
Merged
Merged
Conversation
santoshkumarradha
marked this pull request as ready for review
October 25, 2026 21:43
santoshkumarradha
marked this pull request as draft
October 25, 2026 21:48
santoshkumarradha
marked this pull request as ready for review
October 26, 2026 05:41
…urrow v0.3.4 Brings the workspace-ownership branch up to dev cf282dd, which adds the Raft relay (#1950), the two-computer fixes (#1967), #1972, #1974 and #1976. - directory record types are now clusterstate aliases, so frame hints move into the replicated state machine: FrameHint and the frame_hints field on Cell, CellInit and Publish, bounded deterministically in the shared rules, dropped from listings and kept on single-cell reads. Signed v1 publishes with hints are accepted; unknown fields are still refused; existing canonical bytes are unchanged and no schema or protocol version moves. - every take path records the send lease, including the workspace-set and identity-adopting restores; an already-held chat keeps its hold when the record fails. - a removed computer cannot take through the folder-mapping road either, and unsent words and the pending send survive the root chooser. - the seal refuses a folder holding home before taking the checkpoint lock. - furrow pin follows dev at v0.3.4, which contains v0.3.2's non-mutating SQLite capture. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…d in New conversations persisted the private-task policy unconditionally, so every delegated task ran in a private copy that only /task apply could bring home, Apply refused on Windows, and older builds that took such a chat dropped its tasks. A new conversation now persists the policy only with CODEAF_PROTOTYPE_WORKSPACE_OWNERSHIP=1, an absolute CODEAF_HOME and a platform whose Apply works; a saved workspace identity alone no longer enables private placement; and a saved policy keeps working on Linux and macOS. In a chat with no private copies, /task review and /task apply say so and change nothing. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…write Apply hard-links its owned Git index from the profile's transaction folder into the project's .git, which fails as a busy index when the two live on different filesystems. Apply now compares the devices first and refuses with a plain sentence before staging, locking or touching the destination. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Every manual section about private task copies, Review/Apply, workspace roots and the folder mapping on a move now opens by saying it applies only with the experiment switch on Linux or macOS, so the ordinary landing pages stay the answer for ordinary chats. The relay and architecture references agree that private workspaces are implemented and opt-in, and name their compatibility, cost and platform limits. Source comments describe behaviour, not tools. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A window that learned its computer had been removed refused every send before looking at the chat, so even a new chat opened with /new could not reach the model. Removal now decides like an unreachable service: a chat this window held, or one never shared, goes on here only; a chat another computer took stays read-only with the removal sentence. A move that failed because the other machines could not be reached said only "other machines unreachable". It now says the chat could not be continued here and that the words are still in the box, as every other failed move does. Also rewrites the #1944 change entry against dev rather than against the branch's own earlier default. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…pply The ordinary-chat explanation pushed ApplyTaskWorkspaceRoot past the task engine's decision ceiling. Review and Apply now share one door check, and the read-root and already-applied refusals live in their own function. Also shortens the change entry's title to one line. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…reachable A move that failed because the other machines could not be reached put the full sentence in the chat's own tab, but the window lands on Home, and Home said only "other machines unreachable". Home now carries the same sentence: the chat stayed where it was and the words are still in the box. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The activity page took a chat's own row identity from the folder holding its transcript, which in the cell layout is the chat's internal state folder, so a chat with a finished task appeared twice and one row read the stale index as "incomplete". The row now uses the chat's own folder. A transferred run whose worker journal kept the fixed worker name could not reopen its transcript; history lookup now accepts that verified journal too. The worker manual no longer claims finished runs stay on the sidebar: they live in Tasks. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This was referenced Oct 26, 2026
AbirAbbas
approved these changes
Oct 26, 2026
AbirAbbas
left a comment
Collaborator
There was a problem hiding this comment.
Took over for Abir: the merge with dev, the opt-in gate and the review fixes are in. CI is green, and two real two-computer rounds pass.
AbirAbbas
added a commit
that referenced
this pull request
Oct 27, 2026
…and six rough edges (#1990) Fixes everything the real two-computer relay tests found after #1944, and what three further real PC + Mac rounds found on the way. - A take-back after a kill reaches its first acquire in about a second; ordinary chats restore once, after the lease. A copied chat can move back and forth any number of times, and a killed computer takes its chat back on the first try. - /quit waits for the final publish and release. Only a live hold sends without asking the relay; a displaced window raises the continue card on the next Enter and can never fork the chat. A removed computer keeps working in its own chats. - Words typed while /new opens, sent through a card, or left by a failed take land exactly once in the right box; drafts are keyed per chat. - Sealing recovery is claimed only when this chat's turns are saved, a stuck store gets a plain sentence, a failed final save names where the turns are kept, and closing never freezes the window. Embedded furrow 0.3.5 removes only its own socket. - A moved finished task opens read-only with its steps and worker transcript. - Plain sentences for cluster status, devices and pairing when the relay is down or slow; the holder says when it is not syncing; Home never offers this computer's own chat. Closes #1982, #1984, #1985, #1986. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Delegated work now owns its private folder layout instead of relying on a model to place files correctly. A chat can use several working roots, exact cooperating tasks share one admitted layout, and unrelated work keeps separate copies. Each receiver maps roots explicitly before taking over.
These paths describe ownership roles. Opaque identities survive relocation; equal names or Git remotes do not combine roots or grant write authority. New conversations persist the private-task policy; legacy conversations retain their placement. Foreground editing keeps the explicitly opened folder, and home/reference tasks do not clone a home directory.
Relay verifies complete carriers, resolves each missing root through the actual folder picker, checks destination conflicts, and acquires against the displayed holder before adoption. Recovery distinguishes immutable incoming provenance from receiver-local checkpoint paths. Forking preserves results/history while detaching inherited execution. Reopened task cards recover their local worker transcript and recorded model, including completed runs without a local plan database.
/task review <number> <root>freezes one root;/task apply <number> <root>applies that snapshot to the admitted destination. The filesystem/Git transaction preserves supported raw bytes, CRLF, permissions, literal links and empty directories, checks affected-path/ref/index conflicts, and preserves unrelated staged/dirty work. Explicit reviewed Apply may targetmain; automatic protected-branch landing stays blocked. Unsupported metadata refuses before destination writes.Evidence
Latest synchronization:
ca7ede171includes deve88e49af2(device-pairing UI). It merged without conflicts; local quick checks and focused pairing regressions pass. The live workflow evidence below remains pinned tod689b1621; it was not rerun for this synchronization. Latest-head CI passes all checks.d689b1621.deepseek/deepseek-v4.1-flash: 336,137 input + 14,664 output tokens, with $0.02407027 known upstream cost. An additional request was canceled before any response/model/usage metadata; this is not an independently audited account total. The worker built the two-root feature; restart, fork, both actual terminal Review/Apply operations and the received resident task card all passed.d689b1621; the documentation-only follow-upb1d3caf34passes local quick/link checks and its GitHub gate passes all checks. Quick/focused checks, the full Windows application cross-build and independent Standards/Spec reviews pass. Local session/TUI suites passed all eight shards each. Two command-fixture native teardown failures passed isolated diagnostic retries; they remain a local validation limitation. Native Windows runtime remains untested.The acceptance matrix separates actual-model work from deterministic replay and platform checks:
Deterministic replay covers the same complete workflow separately; it is not counted as live-model proof. Compatibility and special-metadata limits remain below.
These measurements do not establish a new multi-root savings percentage or a four-month automatic reclamation guarantee. The longer growth experiment was deferred. Generated test fixtures, task worktrees and task-specific build/download caches were removed; originals and shared caches were preserved. Genuine terminal captures and detailed receipts remain local: direct PR media attachment upload was unavailable, so no substitute evidence branch or repository directory was published.
Merge Danger
Door: One-way for new portable metadata.
New records require supported readers at both ends; rolling back the executable does not migrate them. Legacy records are preserved. Guaranteed early refusal by older clients remains unfinished, so mixed-version operation is not claimed safe.
Blast Radius: Storage.
This touches delegated placement, portable history, relay adoption and explicit application to working files. A model can omit a requested root from its proposal; omitted roots are not silently granted. One earlier incomplete proposal was canceled after the sibling-write guard refused it; it is not counted as a passing live run. URI association is separate from application permission. Shell placement is not an OS sandbox. Originals and uncertain writers remain protected; multi-root retirement stays excluded until whole-layout writer fencing and recovery are verified. External-process continuation and every filesystem's special metadata are not guaranteed.
Agent workspace, relay and migration contract.
Takeover changes
Merged current dev, so this now sits on top of the Raft relay (#1950) and the two-computer fixes (#1967). Seven
conflicts were resolved:
Frame hints ride the Raft relay. After Raft, the directory record types are aliases of the replicated state
machine's types, which decode a device's signed body strictly. So
FrameHintandframe_hintsnow live onclusterstateCell,CellInitandPublish:A critical review found three problems with the new default for every new chat:
/task apply.So the policy is now opt-in. A new chat persists it only with the switch on, on a platform where Apply works. An
identity alone no longer enables ownership. Without the switch, chats keep version-1 checkpoints and carriers. The
manual sections about private copies say they need the switch.
Other fixes:
where it was and the words are still in the box.
incomplete.ApplyTaskWorkspaceRootwas split to stay under the task engine's decision ceiling.Verification:
reopening on the other computer.
Follow-ups filed: #1982, #1984, #1985, #1986.