Skip to content

feat(agents): file new Solo chats in explicit personal workspaces - #2857

Merged
zrmarley merged 4 commits into
mainfrom
spuxx/solo-workspace-create
Nov 11, 2026
Merged

zrmarley merged 4 commits into
mainfrom
spuxx/solo-workspace-create

Conversation

@zrmarley

@zrmarley zrmarley commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Add solo_workspace_list and optional workspace on new private Solo creation, for locally hosted agent runs only. Require the host-bound owner explicitly in members and an exact existing personal workspace ID.
  • Reuse the existing encrypted Solo-preference/channel-kit writer. Preserve agent signing/creator, membership and existing no-workspace behavior; do not copy workspace defaults or Canvas.
  • Bind placement to each exact future chat ID with one-use creation provenance, including overlapping creates. Preserve the created ID and distinguish known pre-assignment refusal from uncertain completion after a write starts; never retry creation as recovery.
  • Do not add an arbitrary move operation, external/standalone capability, Nexus-worker support, or plugin-handle authority.

Validation — full suite is NOT green

Original reviewed head: bb37256a8dcf8a6b8997a7788d9eb6008f029f06 (independent workspace PR; picker ordering is separate).

  • Exact five complete affected test files: 734 passed, 1 existing skip; project type check and mandatory commit hooks passed.
  • Last exact full Vitest run: 996 files / 18,858 tests passed; 1 file / 1 test failed; 8 files / 22 tests skipped (1127.61s). Sole failure: browser-host/vite-config.test.mjs — config-loader Node subprocess hit its existing 30-second ETIMEDOUT limit. Root cause is not established. No timeout/assertion weakening and no further blind full-suite rerun.
  • Earlier full-run App.profile and WorkflowLanding timeouts passed as complete files in isolation and did not recur in the final run. Those isolated passes do not erase the final non-green result.
  • Deterministic real-runner overlap regression fails when shared provenance-map clearing is restored. Gated post-durable-write regression fails when uncertainty is incorrectly reported as definitive not-filed. Coverage includes actual preference-writer cancellation after fixture save and app-client retirement after completed placement.
  • Independent re-review: PASS, quality 9/10, after one completed fix/re-review cycle addressing overlap provenance and truthful uncertain outcomes.

Native and human exercise

Combined acceptance app at 1ef7c0a91361310a47a4c5fae4a173ddb12b1a8c contains this reviewed workspace implementation unchanged. It ran separately from installed Buzz with the existing owner identity and feedback community.

  • Owner saved a separate Chat Fixes Local Acceptance Goose agent. Matching native snapshot shows it running locally (place: here); its session 20261106_83 used an MCP listener owned by the acceptance app, not installed Buzz.
  • Recorded actual calls: solo_workspace_list resolved Test workspace, then channel_create supplied that exact workspace ID with solo: true, private visibility and explicit human + agent members. Result reported the created ID and filed in workspace.
  • Matching native sidebar/preferences show chat 678377f5-f225-41f5-916c-42de83b50f64 directly in workspace 819d0711-bbfb-48c2-847e-67506e19621f; metadata identifies the local agent as creator and the human as member. The human reported “worked!!” and requested PR publication.
  • The human-selected chat name was New chat, not the proposed distinctive test name. No duplicate was created to repair naming.
  • Prior Bedford attempt ran through the older installed host. Its separate unassigned chat 45df41eb-b9c1-4fbd-8a85-a6e83e6041fe is preserved and is not this successful acceptance result.

Remaining native evidence: test-instance restart persistence was not exercised or explicitly reported; no independent encrypted-delivery receipt, raw signature audit, or no-message/Canvas/default-copy inspection is claimed. The native successful workflow is evidence of actual tool wiring and placement, not proof of all those boundaries. Unit coverage establishes the modeled safety contracts.

November 11 integration and review readiness

Current head: c72d3d1479038e89d10a0eaaa67158445dbc2f45, merging original accepted bb37256 with main 128cd4c2f38801d5f773d5d5ec95a1ea5594b374. Original commits and attribution are preserved; no history rewrite.

  • Four conflict files reconciled. Upstream full-agent external access remains intact; remove only soloWorkspaces from the external run handle so workspace discovery/filing remains local-turn-only as agreed. Upstream external implementation/tests are unchanged. No UI redesign or unrelated CI repair.
  • Complete five affected test files: 752 passed, 1 existing skip (35.37s), plus project typecheck. Tested tree 60dd337ddabde8c5ed17240f2dad09b79e98ea0a equals the committed tree. New external-workspace refusal regression fails before the exclusion and passes in the complete service file.
  • Mandatory pre-push types/related tests passed (206.49s), design passed (7.31s); Clippy lane correctly skipped Rust compilation for this TS-only feature. Machine policy hooks passed. Exact local, remote and PR heads verified after push.
  • Independent integration-delta review: PASS, 9/10, no blockers at c72d3d1. Existing local/native and human workflow evidence above is retained; local placement behavior is unchanged. No new native or browser campaign was run.
  • Old CI at bb37256: JavaScript 3/6 timed out in unchanged App.profile.test.tsx; Vitest flake 1/2 first iteration timed out in an existing Attention polling case and had a follow-on fake-timer error, then passed iterations 2–5. No root cause claimed or unrelated repair added. Fresh hosted CI is pending for c72d3d1; old failures are not described as green.

Human authorized resumption, conflict reconciliation, publication and readiness on November 11. Required hosted checks and reviewer/code-owner approval still gate merge. No merge, release, installation or artifact cleanup is included. Historical full-suite and native evidence limitations above remain disclosed. No browser journeys added or removed.

November 11 — Kalvin P3 coverage follow-up

Current published head: 2c3af95; prior reviewed/accepted integration head c72d3d1479038e89d10a0eaaa67158445dbc2f45.

  • Test-only follow-up adds cached: true and writable: false independently to the existing unconfirmed-authority table. Both require list/prepare refusal, with no relay-evidence read or assignment. Existing valid authority/workspace setup is retained.
  • Guard-removal mutation (only state.cached || !preferences.writable removed): both new cases fail, resolving Kalvin's reported coverage gap. Restored production, complete service test file: 538 passed / 1 existing skip, 35.50s.
  • Production files are unchanged by this follow-up. Existing agent/human feature acceptance remains applicable; no new behavior or app-test campaign is claimed or required.
  • Focused independent review: PASS, 9/10, no blockers; normal pre-commit hooks passed. Pre-push types/related tests 194.08s and design 6.97s passed; Rust checks not applicable to this test-only delta. Exact remote head verified, clean worktree.
  • Fresh hosted checks for this successor head are pending; earlier hosted success applies only to c72d3d1. The PR remains ready for review; required human/code-owner approval is still pending. No merge authorized.

zrmarley and others added 2 commits November 6, 2026 11:08
Co-authored-by: Dr. Spuxx, the Living Mutagen <dbeea7b641217ab95b3c75e547b999cc044d294afebbf240df7fe90c249de836@feedback.communities.buzz.xyz>
Signed-off-by: Zach Marley <[email protected]>
Bind each prepared placement to its own future chat ID. Distinguish pre-assignment refusal from uncertain completion after the existing writer starts, without retrying creation or persistence.

Co-authored-by: Dr. Spuxx, the Living Mutagen <dbeea7b641217ab95b3c75e547b999cc044d294afebbf240df7fe90c249de836@feedback.communities.buzz.xyz>
Signed-off-by: Zach Marley <[email protected]>
Preserve upstream full-agent external connections without exposing local-turn workspace filing. Keep existing acceptance behavior and add the integration regression.

Co-authored-by: Dr. Spuxx, the Living Mutagen <dbeea7b641217ab95b3c75e547b999cc044d294afebbf240df7fe90c249de836@feedback.communities.buzz.xyz>
Signed-off-by: Zach Marley <[email protected]>
@zrmarley
zrmarley marked this pull request as ready for review November 11, 2026 18:02
@zrmarley
zrmarley requested a review from a team as a code owner November 11, 2026 18:02

@kalvinnchau kalvinnchau left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 One non-blocking test-coverage gap; no production defect established.

Comment thread src/features/agents/service.ts Resolved
Co-authored-by: Dr. Spuxx, the Living Mutagen <dbeea7b641217ab95b3c75e547b999cc044d294afebbf240df7fe90c249de836@feedback.communities.buzz.xyz>
Signed-off-by: Zach Marley <[email protected]>

@kalvinnchau kalvinnchau left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Approved at 2c3af95c8342e701f0d435383f12732b038909ce.

The added cached/read-only preference cases close the previously reported regression-test gap. They exercise the production authority guard through both workspace listing and preparation. Removing either guard independently fails its corresponding case; removing both fails both cases, and bypassing preparation’s guarded lookup also fails the new assertions. No new actionable findings were identified in the test-only delta.

Validation included 538 passing service tests (one existing skip), 742 passing tests across four affected files (overlapping coverage), and four Chromium/WebKit journeys using the actual frontend and production broker. These covered authority rejection and recovery, normal filing and reload, navigation/composer focus, and cancellation after a modeled durable preference write. The tests fit the existing service authority contract without changing production abstractions.

Remaining limits: authority states were injected and relay/native boundaries were modeled. Real authority transitions, native OS/IPC/signing, real-relay restart, cross-device delivery, and whole-app reconnect were not validated. Earlier combined multi-create/reload uncertainty remains unresolved; this approval does not claim those boundaries are verified.

@zrmarley
zrmarley merged commit c048b39 into main Nov 11, 2026
64 checks passed
@zrmarley
zrmarley deleted the spuxx/solo-workspace-create branch November 11, 2026 19:38
tlongwell-block added a commit that referenced this pull request Nov 11, 2026
* origin/main: (121 commits)
  Expose Solo region state before a component mounts (#3296)
  fix(builderlab): say a 401 was refused, not expired, and show each sign-in failure once (#3241)
  feat(agents): file new Solo chats in explicit personal workspaces (#2857)
  perf(css): limit broad style invalidation (#3267)
  Delay and fade in the Bestie badge celebration (#3292)
  fix(github): show private-repo body images from signed links (#3252)
  NEXUS-4029: Preserve semantic chips in the core composer (#2303)
  Make plugin signature enforcement opt-in (#2212)
  NEXUS-4156: Add workspace Leads and choose a chat's workspace (#2788)
  feat(plugins): report conclusively retired update providers (#3263)
  feat(messages): let attachment renderers open files from the host file card (#2239)
  feat(charts): bundle a Charts code-block renderer (#3226)
  Expose native reply grouping through Conversation.ui (#3245)
  NEXUS-4163: Keep plugin-owned chat deletion in Solo (#2787)
  NEXUS-4156: Expose Solo Workspaces to plugin regions (#2786)
  NEXUS-4022: Start region chats in the New Chat editor (#2784)
  feat(link-previews): unfurl web links below messages by default (#3225)
  fix(messages): keep names in literal Markdown as written when editing (#2834)
  feat(plugins): fetch a packaged managed plugin policy from a URL (#2504)
  fix(goose): enable deferred tool loading for goose agents (#3227)
  ...

Signed-off-by: Tyler Longwell <[email protected]>
Co-authored-by: Eva <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@buzz.block.builderlab.xyz>
joahg added a commit to joahg/buzz-app that referenced this pull request Nov 11, 2026
* origin/main:
  NEXUS-4029: Offer folder chips in the composer (block#2789)
  perf(css): narrow effort button invalidation (block#3297)
  NEXUS-4433: Expose saved plugin installation source kind (block#3242)
  fix(identity): keep an unbacked key safe on Replace and unblock a corrupt saved key (block#3233)
  Expose Solo region state before a component mounts (block#3296)
  fix(builderlab): say a 401 was refused, not expired, and show each sign-in failure once (block#3241)
  feat(agents): file new Solo chats in explicit personal workspaces (block#2857)
  perf(css): limit broad style invalidation (block#3267)
  Delay and fade in the Bestie badge celebration (block#3292)
  fix(github): show private-repo body images from signed links (block#3252)
  NEXUS-4029: Preserve semantic chips in the core composer (block#2303)
  Make plugin signature enforcement opt-in (block#2212)
  NEXUS-4156: Add workspace Leads and choose a chat's workspace (block#2788)
  feat(plugins): report conclusively retired update providers (block#3263)
  feat(messages): let attachment renderers open files from the host file card (block#2239)
  feat(charts): bundle a Charts code-block renderer (block#3226)
  Expose native reply grouping through Conversation.ui (block#3245)

Signed-off-by: Joah Gerstenberg <[email protected]>

# Conflicts:
#	src/features/conversation/ComposerCompletions.test.tsx
#	src/features/conversation/ComposerCompletions.tsx
#	src/features/messages/MessageComposer.tsx
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants