Repository navigation
Description
Implementation: FlyBot (ours) — PR follows within 24h. Do not pick up without a pickup-ok comment on this issue.
Written-by: FlyBot Lead
Claimed-by: FlyBot Lead
Claim-Id: c69d3ec8466f4f81b232498768dd3a48
Branch: dev/1-reach-ready-only
Base: 1be6eae
At: 2026-11-04T04:26:08Z
Implementation: FlyBot (ours) — PR follows within 24h. Do not pick up without a pickup-ok comment.
Written-by: FlyBot Lead
What happens
#2323 gave each schedule row the sentence Runs with <connectors>: the reach an unattended run carries. On live main 1be6eae5976a755e66bdab8efc80bc57daca50a3 it counts a connector whose connection failed, and one that is still connecting, as carried.
core/src/client/schedules.js:126-134 builds that list from connectedConnectors(roster) filtered by isOn(bot, connector.id); core/src/client/connector-bots.js:18-21 keeps a connector when connector.state !== 'off', so error and connecting pass. The host has exactly four states — off, connecting, ready, error — and reconcile() in core/src/host/connectors.js:703-757 unmounts the connection (await unmount(c), :752) before it sets state: 'error' (:754); the insecure branch (:717-720) never mounts. So an error connector's tools are gone: the row claims a reach that does not exist, while the same roster on the Connectors page says Could not connect: {reason} (core/src/client/connectors.js:42-50).
Reproduction (real module at 1be6eae5)
reachText imported straight from core/src/client/schedules.js (only react stubbed), task { botId: 'b1' }, Bot with no per-Bot record (every switch on):
| connector states | row today | expected |
|---|---|---|
ready, ready |
Runs with GitHub, Composio |
same |
ready, error (401) |
Runs with GitHub, Composio |
Runs with GitHub |
error, error |
Runs with GitHub, Composio |
Runs with no connectors |
ready, off |
Runs with GitHub |
same |
Expected
The row names only a connector that can give the run tools at the moment it fires: state === 'ready'. An error or connecting connector drops out exactly like off; when none is left the row keeps saying Runs with no connectors.
Scope
core/src/client/schedules.js— one predicate insidereachText. LeaveconnectedConnectorsas it is: the Connectors page and a Bot's settings still draw a switch for anerror/connectingconnector, which is how the owner reconnects or opts out.core/test/schedules-client.test.js— the fixture must move with the fix::849-850and:875usestate: 'connected', a value the host never writes (onlyoff/connecting/ready/error), which is why the current tests stay green either way. Move them toreadyand add red-first cases for anerrorand aconnectingconnector.core/client.jsandpatches/ds-bot/0008-client-bundle.patchare regenerated bynpm run build+node scripts/ds-bot-patches.mjs generate; that churn is mechanical, not the change.changelog.d/<issue>-reach-ready-only.fixed.md— user-visible wording fix.
Not in scope: one shared connector-state vocabulary (weighed separately as an enhancement), and the two smaller notes the audit carried — a paused or finished row still reads Runs with …, and the five tests read the flattened <Text> rather than the assembled line.
Duplicate check
Live main 1be6eae5 grep: reachText appears only in core/src/client/schedules.js and its test; state !== 'off' only in core/src/client/connector-bots.js:18. GitHub search: reachText 2 hits (#2323 closed issue, #2344 closed PR — this feature itself); "Runs with" 237 hits, newest are #2323/#2344 plus unrelated PRs, no open issue on this face; connector state error title search 0 hits.
Activity
client: a schedule row names only a ready connector as carried
client: a schedule row names only a ready connector as carried
HugoXK commentedon Nov 4, 2026
Release
Written-by: FlyBot Lead
Released: c69d3ec8466f4f81b232498768dd3a48
Reason: merged as 8c58f3a (#2357); issue closed by the squash
At: 2026-11-04T05:40:54Z