Repository navigation
docs(exploration): triage the open PR backlog, and stop it recurring (0410) - #658
Merged
crs48 merged 10 commits intoJul 30, 2026
Merged
Conversation
added 9 commits
July 30, 2026 07:34
…blem Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Signed-off-by: xNet Test <test@xnet.dev>
…ames its consumer Signed-off-by: xNet Test <test@xnet.dev>
…nk copies Rebuilds the two remaining 0290 UI items against today's surfaces. The original #449 patched apps/web/src/workbench/SyncStatus.tsx, which 0406 deleted; the component now lives in packages/workbench, so the CTA 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. - SyncStatus exports openSyncStatusPanel(); both the desktop popover and the mobile sheet listen, and the panel shows an inline connect form while there is no hub. - ShareDialog's !ready branch explains why a hub is needed and offers "Connect a hub…"; private-hub links confirm before copying. - Adds normalizeHubUrl to the electron renderer's hub-url mirror, so a malformed URL is rejected loudly rather than persisted. Signed-off-by: xNet Test <test@xnet.dev>
…umbers Signed-off-by: xNet Test <test@xnet.dev>
…modes (0290) Signed-off-by: xNet Test <test@xnet.dev>
Signed-off-by: xNet Test <test@xnet.dev>
…riage-and-the-stranded-branch-problem
Signed-off-by: xNet Test <test@xnet.dev>
Contributor
|
Preview removed for PR #658. |
crs48
deleted the
claude/0410-open-pr-triage-and-the-stranded-branch-problem
branch
July 30, 2026 16:38
crs48
added a commit
that referenced
this pull request
Jul 30, 2026
…shim check (#661) ## What broke The `capture` job in `.github/workflows/visual-capture.yml` has failed its **Build Storybook** step on every PR since #656. Pre-existing on `main` (verified at `bcec607b1`), unrelated to the PR that surfaced it (#658). ``` "writeModeFor" is not exported by ".storybook/shims/xnet-plugins-browser.ts", imported by "packages/workbench/src/views/ai-chat-write-tools.ts". ``` `.storybook/workspace-aliases.ts:29` aliases `@xnetjs/plugins` to the browser shim, and 0394 phase-2 (#656) added a `writeModeFor` import the shim never got a matching export for. ## Why the gate didn't catch it `pnpm check:storybook-shim` stayed green the whole time — "873 modules walked, 114 shim exports". Its walker only knew the aliases parsed out of `workspace-aliases.ts`. **`@xnetjs/workbench` has no entry there**, so the walker silently dropped the specifier and never reached the importing module — while rollup resolved it through the workspace link and kept bundling. Everything past that point went unchecked. Per AGENTS.md: *"A gate that cannot go green teaches everyone to ignore red."* The inverse is worse — a gate that cannot go **red** on a live breakage. ## What changed **`.storybook/shims/xnet-plugins-browser.ts`** — adds `writeModeFor` / `WriteMode`, matching `packages/plugins/src/ai/connectors/types.ts:101`, plus the names the widened walk turned up. **`scripts/check-storybook-shim.mjs`** — resolves `@xnetjs/*` the way the build does rather than only via aliases: - aliases first (Vite applies them first), then the package's own `exports`/`main`; - `dist` entries map back to the source they're built from, so the walk doesn't stop at an artifact that may not be present; - an `@xnetjs/*` specifier it *cannot* resolve is now a **hard failure**, not a silent drop — the graph can't quietly shrink again; - seeds `.storybook/preview.tsx` and `manager.tsx`, which the build compiles too. Coverage: **873 → 1177 modules walked**. That turned up a **second real break** — `AgentAuditRecorder` in `views/ai-chat-ceremony.ts:32`, also a value import — plus ten type-only names the shim should mirror anyway. ### On "walk the full module graph instead" Rejected as framed. The story graph *was* nearly the whole build graph; the defect was that the **resolver was weaker than Vite's**, not that the seed set was too small. Matching resolution (plus the two extra entry seeds) closes the class without needing to run rollup to find out. ## Verification | Check | Result | | --- | --- | | `pnpm build:stories` (the capture job's exact command, after `turbo run build --filter='./packages/*'`) | ✅ `Storybook build completed successfully` | | `pnpm check:storybook-shim` | ✅ 1177 modules walked, 128 shim exports | | Regression proof — remove `writeModeFor` from the shim again | ✅ now **fails** with `· writeModeFor (…/ai-chat-write-tools.ts)`; the old walker passed | | Pre-push full suite | ✅ 11331 passed, 4 skipped | Labelled `skip-changelog`: dev tooling, nothing a user notices. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
This branch was previously deployed
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.
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 inmain, re-derived and landed weeks later by another route.NodeLineRunnerapps/electron/src/renderer/workspace/no longer existsfbc2965a2)[x]version of 0298#400was the load-bearing one:git diff origin/main pr400 -- packages/devkit/src/command-runner.tsshowed ~150 lines of deletion covering the whole 0391 streaming agent seam. Only itsCONFLICTINGstate had prevented that.#505'sbuild-and-smoke-testwent 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 inpackages/workbench, so the rebuild lands on desktop and web at once.WorkbenchHostgains ahubcapability (configuredUrl/connect) so the shell can offer a way out of the disconnected state without importing either app'shub-urlmodule.connectreturns a reason string on rejection — never a silent no-op.SyncStatusexportsopenSyncStatusPanel(); the desktop popover and mobile sheet both listen. The panel shows an inline hub-URL form while there is no hub.ShareDialog's!readybranch explains why a hub is needed and offers Connect a hub…; private-hub links now confirm before copying.normalizeHubUrlto the electron renderer'shub-urlmirror (+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 towss://hub.xnet.fyi; alocalhostlink'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-openexempts. Named consumer (the maintainer, weekly) and a decidable pass condition, per AGENTS.md./explorenext-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