Skip to content

Fix the Fable review findings for today's audit PRs - #299

Merged
henrychu04 merged 4 commits into
coder-onlyfrom
t3code/fable-review-fixes-2026-10-31
Oct 31, 2026
Merged

henrychu04 merged 4 commits into
coder-onlyfrom
t3code/fable-review-fixes-2026-10-31

Conversation

@henrychu04

Copy link
Copy Markdown
Owner

Fixes from the Fable 5.1 review of today's PRs (#290–#297): three read-only reviewers covering (A) the gateway, coder-cli, helper and bridge, (B) the four restored features, and (C) the upstream sync and seams tooling. No high findings, one medium per area, and no merge losses in the sync.

Fixed

  • Gateway: failed forward rules were retried on every config save (pre-existing; every Forward click and failure cleanup restarted them), contradicting docs/user/workspaces.md. A save now skips rules in the Failed state; startup and changed rules still start. Scratch test: on coder-only a save retried the rule (1 → 2 attempts), here it does not.
  • Bridge: the per-thread job cap missed calls still inside their inline budget, so concurrent calls near the limit all passed. Slots are now reserved before the tool starts. Scratch test: with 15 jobs running, 8 concurrent calls were all accepted before (23 total), now exactly one.
  • Helper shutdown: a negotiated helper whose stdin is already closed is signalled right away instead of waiting a grace period for an undeliverable shutdown request.
  • Forward: reuses a rule another tab already saved for the same server instead of adding a second, never removes a rule it did not add, and shows the local address in a toast when the browser blocks the tab.
  • Sync tooling: sync-resolve-deleted.mjs resolves ~/ and @t3tools/<pkg>/... (through each package's exports) when looking for keep candidates, not only relative imports. Checked against known specifiers in isolation.
  • Markers and docs: Coder: markers on the feat(web,mobile): the @ picker lists threads on linked machines pingdotgg/t3code#26201 non-carry (composerThreadItems.ts, composerContextReferences.ts) and the ChatGPT usage-limit cut (ThreadErrorBanner.tsx); coder-only.md says the web build carries the manifest again and names the kept readOnly prop and managementFailure reasons; docs/user/workspaces.md notes the Labs switch for @ workspaces; sync.md states the keep-candidate resolution and the lost check's scope.

Not changed, with reasons

  • Windows free-port probe (medium, unverified): a 127.0.0.1 bind can succeed on Windows while another program listens on 0.0.0.0. The suggested fix (a loopback connect) would break boundaryGuard.test.ts's no-outbound-connection rule, and a wildcard bind would break boundary 1. Documented as a known limitation in coder-only.md.
  • Port-forward listener cleanup on an unconfirmed stop: the suggested ensuring breaks two existing tests; keeping the listeners is what lets a retry on the same child observe its exit. Reverted.
  • Unused readOnly prop and managementFailure reasons in the Kilo sessions code stay as upstream has them (upstream's own browser test passes the prop); listed in the seams doc.

Verification

  • pnpm test:coder passes end to end (exit 0), including web unit 277/277 and browser 102/102 files and the server suite with no failures.
  • pnpm build, all typechecks, knip, vp fmt --check and seams-check pass.
  • Live check on the local Coder harness: gateway checks (caching, helper stats, oversized frame, connect cancel) and port discovery + Forward pass; drive.mjs passes except the known persisted-project conflict.

🤖 Generated with Claude Code

henrychu04 and others added 4 commits October 31, 2026 17:31
- T3ToolBridge counts calls still inside their inline budget toward the
  per-thread cap, reserving the slot before the tool starts, so concurrent
  calls near the limit can no longer all pass the check (15 jobs + 8
  concurrent calls accepted all 8 before; now one).
- A negotiated helper whose stdin is already closed is stopped by signals
  right away instead of waiting a grace period for an undeliverable
  shutdown request.
- coder-only.md: the web build carries the manifest again; note that on
  Windows the free-port probe may call a port free while another program
  listens on 0.0.0.0, which the gateway cannot detect within boundary 1 and
  its no-outbound-connection rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Gateway: a config save no longer retries forward rules that failed (every
  Forward click and failure cleanup restarted them), matching the documented
  behaviour; startup and changed rules still start.
- Forward reuses a rule another tab already saved for the same server
  instead of adding a second one, and never removes a rule it did not add.
- A Forward whose tab the browser blocks shows the local address in a toast.
- Coder: markers on the pingdotgg#26201 non-carry in composerThreadItems.ts and
  composerContextReferences.ts.
- Docs: the @ workspace list needs Labs > Linked environments; rewrap the
  Servers paragraph; the seams entry names the kept readOnly prop and
  managementFailure reasons.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- sync-resolve-deleted.mjs finds keep candidates imported through the web
  app's ~/ alias or a @t3tools/<pkg>/... export, not only relative imports,
  so the documented bulk removal cannot delete such a file.
- ThreadErrorBanner.tsx marks its ChatGPT usage-limit cut.
- sync.md states the keep-candidate resolution and the lost check's scope
  (apps/ and packages/, outside tests).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@henrychu04
henrychu04 merged commit 506c993 into coder-only Oct 31, 2026
henrychu04 added a commit that referenced this pull request Nov 1, 2026
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.

1 participant