cliffhall
8535ae0c2f
fix(core): say why a never-acknowledged subscriptions/listen ended
...
A modern-era `subscriptions/listen` is a long-lived request: the first
message on its stream must be `notifications/subscriptions/acknowledged`,
and the JSON-RPC `result` for the listen id is reserved as the
graceful-closure marker. A server that answers the listen request with a
bare `result` is saying "acknowledged and closed in the same breath" — the
SDK settles the subscription `graceful` and rejects the pending `listen()`.
The Inspector read that rejection as an ordinary drop: eight re-lists over
roughly a minute, the badge flickering `Reconnecting…`, and a final bare
`Stream ended` that said nothing about why. Accepting the message was
never wrong — it is a well-formed graceful-closure response. The silence
was.
- `core/mcp/subscriptionAck.ts` owns the predicate. The SDK gives this
close no code of its own — it is the same `SdkError(ConnectionClosed)`
any pre-ack close carries — so the predicate reads the message, since
the alternative is refusing to retry a genuinely transient drop.
- The condition is deterministic, so the stream ends on the first
occurrence instead of spending the whole backoff run. Both routes are
covered: the one a subscribe/unsubscribe reaches, and the one a
reconnect reaches when an acknowledged stream drops and the server has
since started refusing.
- A `"never-acknowledged"` status of its own, not `"ended"` — `ended`
means an expected close. It surfaces as the thrown error's message, an
orange "Not acknowledged" badge, and a notice in the panel.
- `subscriptions-never-acknowledged-http.json` reproduces it. It
acknowledges the first listen that subscribes to a resource and refuses
every one after, which is what makes the badge reachable by hand.
Closes #2097
Signed-off-by: cliffhall <cliff@futurescale.com>
2026-08-27 20:49:55 -04:00
..
AnnotationBadge
refactor(web): sweep AGENTS.md TypeScript + Mantine rule violations ( #1771 )
2026-07-25 11:38:49 -04:00
AppElicitation
fix(apps): make a covered elicitation dialog inert
2026-08-23 00:02:37 -04:00
AppRenderer
chore(scripts): rename the local pre-push gate off ci, and guard it out of CI ( #2146 )
2026-08-26 23:56:34 -04:00
CapabilityItem
SDK v2 migration (behavior-neutral, versionNegotiation: 'legacy') ( #1624 )
2026-07-15 10:44:24 -04:00
CategoryBadge
chore(lint): enable no-floating-promises in all five ESLint scopes
2026-08-16 20:57:32 -04:00
ClearButton
fix(web): section-header hover outline + clear buttons out of tab order ( #1487 ) ( #1488 )
2026-06-14 22:27:46 -04:00
CodeHighlight
feat(web): use the Ace JSON editor everywhere, and restore the raw-JSON toggle
2026-08-27 02:24:22 -04:00
ConnectionToggle
web: Accessibility — accessible palette + WCAG AA contrast, labels, names, roles ( #1679 )
2026-07-13 18:20:55 -04:00
ContentViewer
fix(web): reject an underflowing literal, and route embedded JSON resources
2026-08-27 06:26:23 -04:00
CopyButton
fix: disambiguate the two token rows' controls for screen readers ( #2019 )
2026-08-15 21:13:11 -04:00
CopyrightBadge
web: server-screen, footer, monitoring-sidebar, and responsive-header polish ( #1683 )
2026-07-14 08:55:39 -04:00
EditReplayButton
feat(web): use the Ace JSON editor everywhere, and restore the raw-JSON toggle
2026-08-27 02:24:22 -04:00
EmbeddableScrollArea
chore(lint): enable no-floating-promises in all five ESLint scopes
2026-08-16 20:57:32 -04:00
EnlargeButton
fix(web): take the enlarge button out of the tab order
2026-08-26 01:13:32 -04:00
EraBadge
History: MRTR conversation grouping + modern message vocabulary ( #1705 )
2026-07-17 20:02:11 -04:00
ExpandToggle
chore(lint): enable no-floating-promises in all five ESLint scopes
2026-08-16 20:57:32 -04:00
FilterToggleButton
refactor(web): sweep AGENTS.md TypeScript + Mantine rule violations ( #1771 )
2026-07-25 11:38:49 -04:00
JsonEditor
fix(web): re-apply the editor's accessible name, and correct the README's scope
2026-08-27 03:16:44 -04:00
JsonObjectInput
feat(web): use the Ace JSON editor everywhere, and restore the raw-JSON toggle
2026-08-27 02:24:22 -04:00
ListChangedIndicator
test(coverage): bootstrap vitest unit infra and add tests at 90%+ per file ( #1245 ) ( #1269 )
2026-05-01 15:15:32 -04:00
ListLoadError
fix: surface list-fetch failures instead of swallowing them
2026-08-08 16:48:48 -04:00
ListPaginationControls
Thread cacheMode through managed list refresh via SDK cache-aware verbs ( #1721 ) ( #1723 )
2026-07-19 01:06:31 -04:00
ListToggle
refactor(web): sweep AGENTS.md TypeScript + Mantine rule violations ( #1771 )
2026-07-25 11:38:49 -04:00
LogEntry
refactor(web): sweep AGENTS.md TypeScript + Mantine rule violations ( #1771 )
2026-07-25 11:38:49 -04:00
LogLevelBadge
refactor(web): sweep AGENTS.md TypeScript + Mantine rule violations ( #1771 )
2026-07-25 11:38:49 -04:00
MalformedItemsWarning
fix: salvage a list result's valid entries when one is malformed ( #1909 )
2026-08-15 16:52:11 -04:00
McpErrorBadge
chore(lint): enable no-floating-promises in all five ESLint scopes
2026-08-16 20:57:32 -04:00
MessageBubble
SDK v2 migration (behavior-neutral, versionNegotiation: 'legacy') ( #1624 )
2026-07-15 10:44:24 -04:00
MessageDirectionBadge
chore(lint): enable no-floating-promises in all five ESLint scopes
2026-08-16 20:57:32 -04:00
MethodBadge
chore(lint): enable no-floating-promises in all five ESLint scopes
2026-08-16 20:57:32 -04:00
MonitoringToggle
chore(lint): enable no-floating-promises in all five ESLint scopes
2026-08-16 20:57:32 -04:00
MrtrOriginNote
refactor(web): sweep AGENTS.md TypeScript + Mantine rule violations ( #1771 )
2026-07-25 11:38:49 -04:00
PinToggle
chore(lint): enable no-floating-promises in all five ESLint scopes
2026-08-16 20:57:32 -04:00
ProgressDisplay
SDK v2 migration (behavior-neutral, versionNegotiation: 'legacy') ( #1624 )
2026-07-15 10:44:24 -04:00
ReplayButton
chore(lint): enable no-floating-promises in all five ESLint scopes
2026-08-16 20:57:32 -04:00
ResizeHandle
chore(lint): enable no-floating-promises in all five ESLint scopes
2026-08-16 20:57:32 -04:00
ResourceLinkInfo
web: Group tool-result resource_links in a scrollable "Resource Links" box with Protocol colors ( #1686 )
2026-07-15 14:07:27 -04:00
SchemaFindingsList
feat: flag unportable tool schemas in all three clients
2026-08-25 01:18:53 -04:00
ScreenStage
chore(lint): enable no-floating-promises in all five ESLint scopes
2026-08-16 20:57:32 -04:00
SecretStorageFooter
fix(auth): land the round-20 UI wiring that never applied, and nonce the staging name
2026-08-22 22:30:21 -04:00
ServerStatusIndicator
web: server-screen, footer, monitoring-sidebar, and responsive-header polish ( #1683 )
2026-07-14 08:55:39 -04:00
SortToggle
refactor(web): sweep AGENTS.md TypeScript + Mantine rule violations ( #1771 )
2026-07-25 11:38:49 -04:00
SubscribeButton
refactor(web): sweep AGENTS.md TypeScript + Mantine rule violations ( #1771 )
2026-07-25 11:38:49 -04:00
SubscriptionStreamBadge
fix(core): say why a never-acknowledged subscriptions/listen ended
2026-08-27 20:49:55 -04:00
TaskStatusBadge
refactor(web): sweep AGENTS.md TypeScript + Mantine rule violations ( #1771 )
2026-07-25 11:38:49 -04:00
Toasts
chore(web): move App.tsx's module-level block into files ( #2127 )
2026-08-26 18:07:40 -04:00
TransportBadge
refactor(web): sweep AGENTS.md TypeScript + Mantine rule violations ( #1771 )
2026-07-25 11:38:49 -04:00
VersionBadge
web: server-screen, footer, monitoring-sidebar, and responsive-header polish ( #1683 )
2026-07-14 08:55:39 -04:00
accessibleTextColor.test.ts
web: Accessibility — accessible palette + WCAG AA contrast, labels, names, roles ( #1679 )
2026-07-13 18:20:55 -04:00
accessibleTextColor.ts
web: Accessibility — accessible palette + WCAG AA contrast, labels, names, roles ( #1679 )
2026-07-13 18:20:55 -04:00
filledBadgeColor.test.ts
web: Accessibility — accessible palette + WCAG AA contrast, labels, names, roles ( #1679 )
2026-07-13 18:20:55 -04:00
filledBadgeColor.ts
web: Accessibility — accessible palette + WCAG AA contrast, labels, names, roles ( #1679 )
2026-07-13 18:20:55 -04:00