Repository navigation
Home: Archive Chief hides a Cloud Chief even when the cloud can't archive it - #25557
Conversation
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Not verified: macOS jobs did not run: compile and app tests were skipped on CI passes on Written by Default changesThis pull request changes 3 defaults at
Needs a review. It passes with an independent review receipt on this commit: a comment or review whose first line is Merge receipt: merged as Regenerate the snapshot with Shipped in:
|
|
Bead |
e6035e2 to
9d9913c
Compare
Verification (agent)Cause. The hosted Cloud Chief is always the account's default Chief ( Review. An independent correctness review of
The fleet compile caught 2 errors, fixed in Tests (
Live before/after. Two tagged builds, same agent account, which has a default hosted Chief and a Chief · Cloud row. In each, Archive Chief was performed through the row's real context menu.
Screenshots and window recordings are in the agent's local proof report. Observed / Not run
Builds: |
|
Red proof finished. At |
f589b83 to
de92de3
Compare
|
Found 3 test failures on Blacksmith runners: Failures
|
Correctness review (subagent) of the final change, and resolutionReviewed The reviewer confirmed:
Resolved in
Kept, by design or out of scope: Tests at
|
2a6e3f9 to
87096af
Compare
azooz2003-bit
left a comment
There was a problem hiding this comment.
Review (claude-correctness-subagent): SHIP at 87096af
Independent correctness review of the full change, with no blocking findings. Its 3 fixable findings were fixed in the reviewed code; see the review comment above. This head is that code rebased onto the current base, with no change to the PR's files.
The defaults guard lists 5 declaration fingerprints: bindHomeConversations, report and driveDockList in the app's Home code, and chief and visible in TopHomePageView. None of them changes a default anyone gets: no action keys, no setting default, no tunable value, no feature flag.
|
Labeled
|
|
Review (claude-indep-reviewer): SHIP at 87096af Independent review of the full diff What I checked
Compile evidence for this head: green. Red checks: Risk tier: Non-blocking notes (follow-ups):
|
|
|
…tApp (app-size) The pre-push hook refused this PR's squash on the current tip: CmuxNextApp grew +64 lines (arch-ratchet app_lines). The PR's own new App code moves to its domain packages, and the App keeps thin call sites: - HomeDirectory (the file this PR grows) moves whole to CmuxNextHostedChief, next to HomeChiefArchive and HomeChiefRecord. FeedServiceError, which it throws and reads, moves to CmuxNextCloud; the App keeps a typealias. - The menu-run refusal helper becomes ActionRegistry.trackOrRefuse(_:) (CmuxNextActions). - The archived-Chief row filter and the page's "never open an archived Chief" rule become HomeArchivedChiefs (CmuxNextHomeEngine). No behavior change.
…xNextHomeEngine CmuxNextHostedChief is a service target: HomeDirectory there would add the edges service -> ui (CmuxNextHome) and service -> domain (CmuxHomeCore). CmuxNextHomeEngine (the Home engine moved out of CmuxNextApp/Home) already depends on CmuxNextHome, CmuxHomeCore and CmuxNextCloud, so the three files move there; HostedChief already depends on HomeEngine, so no cycle forms. FeedServiceError is CmuxNextCloud's; its App users import it (no typealias, which a test importing both modules would find ambiguous). No behavior change.
…y's package); HomeArchivedChiefs stays main-actor as the page's statics were
…hief HomeCloudChiefs is HostedChief's type; its extension moved to HomeEngine with HomeChiefRecord and did not compile there (fleet step 4ae16b75733b). It is its own file in HostedChief now, which already imports HomeEngine.
|
Review (claude-opus-5.5 review subagent): SHIP at 11136d9 Scope: the whole PR diff against the merge base ( What I checked:
Non-blocking notes:
Not run by me: no local build or tests (this machine is not permitted). I did not make a capture or dogfood the change. |
|
App-size fix (merge service): the pre-push hook refused this PR's squash on the current feat-cmux-next tip. The arch ratchet's
Result:
Not run: a live Archive Chief in a tagged build after the move. Thank you @azooz2003-bit for the fix; the moves only relocate your code. |
|
Review (claude-opus-5.5 defaults reviewer): SHIP at 2a6e3c0 Defaults guard (3 source fingerprints; no setting default, no Tunable
Merge check: the PR diff at 11136d9 (against its merge base e72f16d) and at this head (against e7a61ac) are identical except for Correctness (whole diff, read only; I did not build or run tests):
Non-blocking findings (follow-ups, not holds):
|
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Summary
Archive Chief on Home's hosted Chief · Cloud row did nothing, so the row could not be removed.
Cause. The Hosted Chief is always the account's default Chief (
HomeCloudChiefs.ensureHostedsetsis_default). UserDO refuseschief.archivefor the default Chief (chief_is_default), and when the Cloud is unreachable the call fails outright. The Home row menu runs the action with no capturing caller, soregistry.trackdropped the failure: nothing was hidden and no message appeared.Fix.
HomeDirectory+ChiefArchive.swift: Archive Chief hides the Chief on this Mac immediately, and the hide persists across launches (archivedHere). The cloudchief.archiveruns right away when possible; otherwise (offline, signed out) it runs on the nextchief.listthat succeeds. The default Chief, which the cloud never archives, stays hidden on this Mac only. Any other refusal un-hides the row and returns the reason.AppActions+HomeConversations.swift: menu and keyboard runs of Archive Chief and Delete Chief now show their failure as a refusal instead of dropping it. CLI/MCP runs still await it.CmuxNextHostedChief/HomeChiefArchive.swiftowns that state machine (local hide, its persistence, the cloud archive and its retries);HomeDirectoryis only the adapter for the account'schief.listandchief.archivereplies.TopHomePageView.swift: an archived Chief's conversation is not the page's default, and the page leaves it if it was showing.DebugHome+Dock.swift(DEBUG only):debug.home.drive {action: list, op: menu}lists a Home row's menu and performs one item, for focus-free proof.Known limit: the default Chief is hidden on this Mac only; the Cloud keeps it (and other devices still list it) until the Cloud allows archiving a default Chief.
Testing
HomeDirectoryChiefArchiveTests(behavior at the API-call boundary, with a fake UserDO that refuses as the Worker does):feat-cmux-next-chief-archive-red, results below)Observed / Not run
70d21570b122(old code + the same scenarios), cmux-ci step2f2a53b89f9223ccfddea0ef: both archive scenarios fail witharchivedChiefs → []; the rename suite passes.chief-archive-beforevschief-archive, same signed-in account, Archive Chief performed through the Cloud row's real menu items: the row stays before, leaves about 1.3 s after (window recordings, see the verification comment).No capture: the visible change is the result of a menu action on a signed-in account that has a Cloud Chief, which no capture scene has; the before/after window recordings from the two tagged builds are described in the verification comment.
Changelog
Fixed: Archive Chief now removes a Cloud Chief from Home even when the Cloud is unreachable or the Chief is your default.
🤖 Generated with Claude Code