Skip to content

docs(exploration): sharing non-doc-room nodes (channels, workspaces) - #463

Closed
crs48 wants to merge 1 commit into
mainfrom
docs/0298-share-non-doc-room-nodes
Closed

docs(exploration): sharing non-doc-room nodes (channels, workspaces)#463
crs48 wants to merge 1 commit into
mainfrom
docs/0298-share-non-doc-room-nodes

Conversation

@crs48

@crs48 crs48 commented Jul 10, 2026

Copy link
Copy Markdown
Owner

Exploration 0298 — designs the real fix for the channel/workspace share bug found today: shared channels open an empty 'untitled' channel because channels/messages/workspaces are plain NodeStore nodes that sync only in a per-author DID room, while share grants only authorize per-doc Yjs rooms (xnet-doc-<id>).

Captures requirements (ongoing message sync, comment/write role semantics, revocation, DM exclusion, owner's channel list, workspace transitive content) and compares three transports — (A) per-resource share room, (B) server fan-out/grant pull, (C) container room generalizing the 0179 Space cascade — recommending A, phased and generalized toward C. Includes root-cause diagrams, example code sketches, and implementation/validation checklists.

Doc only; no code changes. Follows the decision to design before building.

🤖 Generated with Claude Code

…spaces)

Signed-off-by: xNet Test <test@xnet.dev>
@crs48 crs48 added the skip-changelog Exclude this PR from the changelog label Jul 10, 2026
@crs48
crs48 temporarily deployed to pr-463 July 10, 2026 22:33 — with GitHub Actions Inactive
github-actions Bot added a commit that referenced this pull request Jul 10, 2026
@github-actions

github-actions Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Preview removed for PR #463.

@crs48

crs48 commented Jul 30, 2026

Copy link
Copy Markdown
Owner Author

Closing as superseded. main carries docs/explorations/0298_[x]_SHARING_NON_DOC_ROOM_NODES_CHANNELS_AND_WORKSPACES.md at 485 lines, marked implemented; this PR adds a 442-line [_] draft of the same exploration. The number is taken and the work is done. Triage: docs/explorations/0410_[_]_OPEN_PR_TRIAGE_AND_THE_STRANDED_BRANCH_PROBLEM.md.

@crs48 crs48 closed this Jul 30, 2026
github-actions Bot added a commit that referenced this pull request Jul 30, 2026
crs48 added a commit that referenced this pull request Jul 30, 2026
…(0410) (#658)

Implements exploration
`0410_[_]_OPEN_PR_TRIAGE_AND_THE_STRANDED_BRANCH_PROBLEM.md`, written in
the previous turn.

## What this closes out

Eight PRs were open, the oldest from March. Checking each one's **actual
diff against `main`** (rather than its description) found that four
described work already in `main`, re-derived and landed weeks later by
another route.

| PR | Age | Action taken |
| --- | --- | --- |
| #400 | 24d | **Closed** — fix landed on main in a better form; branch
predates 0391 and would have deleted `NodeLineRunner` |
| #9 | 145d | **Closed** — draft;
`apps/electron/src/renderer/workspace/` no longer exists |
| #595 | 11d | **Closed** — byte-identical to main (`fbc2965a2`) |
| #463 | 20d | **Closed** — main has a longer, `[x]` version of 0298 |
| #13 | 141d | **Closed** — both fixes on main verbatim |
| #505 | 17d | **Merged** — exploration 0318 + scale bench |
| #389 | 25d | **Merged** — exploration 0270 |
| #449 | 20d | **Rebuilt here** — see below |

`#400` was the load-bearing one: `git diff origin/main pr400 --
packages/devkit/src/command-runner.ts` showed ~150 lines of *deletion*
covering the whole 0391 streaming agent seam. Only its `CONFLICTING`
state had prevented that.

`#505`'s `build-and-smoke-test` went green on a rebase, confirming it
was branch staleness rather than the diff.

## The #449 rebuild (0290 bugs #2 and #3)

The original patched `apps/web/src/workbench/SyncStatus.tsx`, which 0406
deleted; the component now lives in `packages/workbench`, so the rebuild
lands on **desktop and web at once**.

- `WorkbenchHost` gains a `hub` capability (`configuredUrl` / `connect`)
so the shell can offer a way out of the disconnected state without
importing either app's `hub-url` module. `connect` returns a reason
string on rejection — never a silent no-op.
- `SyncStatus` exports `openSyncStatusPanel()`; the desktop popover and
mobile sheet both listen. The panel shows an inline hub-URL form while
there is no hub.
- `ShareDialog`'s `!ready` branch explains why a hub is needed and
offers **Connect a hub…**; private-hub links now confirm before copying.
- Adds `normalizeHubUrl` to the electron renderer's `hub-url` mirror (+4
unit tests), so a malformed URL is rejected loudly rather than
persisted.

Verified by driving the real app against a local hub — the CTA closes
the dialog and opens the panel; an invalid URL shows an error and
persists nothing; `https://hub.xnet.fyi/` normalises to
`wss://hub.xnet.fyi`; a `localhost` link's first Copy click asks "Copy
local-only link?" and writes nothing, the second copies. No console
errors. 0290 is now `[-]` at 11/20.

## Stopping the recurrence

Time-to-merge for the last 20 merged PRs was **0 hours median, 1 hour
max** — there is no review queue, so a PR that outlives its session is
abandoned, not pending.

- `.github/workflows/stale.yml` — warns at 14d, closes at 21d,
`keep-open` exempts. Named consumer (the maintainer, weekly) and a
decidable pass condition, per AGENTS.md.
- Fixed the `/explore` next-number command, which read only the working
tree and so handed out numbers already claimed on branches. Seven
explorations were found stranded that way.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-changelog Exclude this PR from the changelog

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant