Skip to content

Local Quick Start: replace free-text service messages with typed message keys #865

Description

Problem

QuickStartService emits user-facing text as plain English strings on StageEvent.message / StageEvent.error
and QuickStartStatus.errorMessage. The webview renders them verbatim
(setSuccessMessage(event.message), setErrorMessage(event.error ?? event.message)) and the Connections view
renders status.errorMessage as the tree row description.

PR #798 wraps these in vscode.l10n.t with {0} placeholders (finding M2, option A) as the immediate fix.
That resolves the localization gap but leaves presentation concerns in the service layer.

Proposed work (the end state)

Replace the free-text messages with a typed message key on StageEvent and localize in the webview.

This is the pattern the same feature already uses for Docker diagnosis: the extension host returns typed keys
(DockerGuidanceKey, DockerFailureKind, DockerStartLabelKey, DockerRecoveryNoteKey, …) and
LocalQuickStart.tsx owns the copy. Applying the same shape to the provisioning messages would make the whole
feature consistent.

Benefits

  • Cleanly separates transport from presentation.
  • Copy changes stop touching the service layer.
  • Removes a class of "forgot to wrap this one in l10n.t" bugs.
  • Makes the messages testable by key rather than by string matching.

Scope

  • Define the key union + payload (some messages interpolate a port or an error detail).
  • Update provision(), resumeReadiness(), the lifecycle methods, and the tree row description.
  • Move the copy into the webview's existing lookup-map pattern and into LocalQuickStartItem for tree rows.

Why deferred

Larger refactor than the 0.10.0 release window allows, and it interacts with the Quick Start state-model work
still under discussion. Scheduling for 0.10.1, after 0.10.0 ships.

Context

From the PR #798 code review — finding M2, deferred option B.
See docs/ai-and-plans/PRs/798-local-quickstart/code-review-2026-08-04.md.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions