Skip to content

Launch nested Canvas Designer shell from Wizard - #36

Merged
nicolehaugen merged 7 commits into
mainfrom
nicolehaugen-canvas-designer-launch-pr
Sep 30, 2026
Merged

nicolehaugen merged 7 commits into
mainfrom
nicolehaugen-canvas-designer-launch-pr

Conversation

@nicolehaugen

@nicolehaugen nicolehaugen commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Launch an app-native nested Canvas Designer session from the Wizard's Generate canvas dialog, starting from the project's default branch without changing the Wizard's project.
  • Send a versioned, immutable handoff of active phase IDs and explicit preset, extension, and bundle selections. The child saves the handoff in its session artifacts; the Designer extension bundled with the installed Wizard plugin validates it on open.
  • Keep this increment shell-only. The child opens the plugin-provided canvas by ID; no provider files or selected design packages are installed into the child checkout. Designer pages and package installation are deferred.

Stack

Depends on #38 for the standalone Canvas Designer provider. Native stack order is #35 → #38 → #36 (PR numbers do not determine stack order).

Verification

Copilot AI balanced review requested due to automatic review settings September 30, 2026 00:36
@nicolehaugen
nicolehaugen added this pull request to stack #37 September 30, 2026 00:38

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

The provider is copied to an undiscoverable extension location, and stale dialog state can bypass catalog-change validation.

Review effort: Balanced
Findings: 1 High severity · 1 Medium severity

Open (2)
What changed in this PR

Adds nested Canvas Designer session launching from the Wizard using validated, versioned handoffs and a minimal child-session shell.

Changes:

  • Enables Designer launch from the Wizard dialog.
  • Adds catalog fingerprinting, handoff validation, and shell provider bootstrapping.
  • Adds unit/E2E coverage and synchronizes Wizard version metadata.
File Description
README.md Updates Wizard version.
plugins/​spec-kit-copilot-wizard/​plugin.json Bumps plugin to 0.3.0.
.github/​plugin/​marketplace.json Updates marketplace versions.
.../​ui/​modals.js Clarifies deferred installation messaging.
.../​ui/​canvas-designer-dialog.js Enables launch request handling.
.../​test/​modals.test.mjs Updates modal assertions.
.../​test/​designer-launch.test.mjs Tests handoff and shell launch behavior.
.../​test/​canvas-designer-dialog.test.mjs Tests dialog launch behavior.
.../​server/​handlers-designer.mjs Validates and dispatches Designer launches.
.../​server.mjs Registers the launch endpoint.
.../​README.md Documents nested Designer sessions.
.../​e2e/​server.mjs Enables launch in the E2E fixture.
.../​e2e/​canvas-designer.spec.mjs Covers launch through the browser.
.../​catalog/​designer-fingerprint.mjs Fingerprints eligible design catalog entries.
.../​canvas-runtime/​snapshot.mjs Adds the Designer fingerprint to snapshots.
.../​speckit-canvas-designer/​server.mjs Serves the minimal Designer shell.
.../​speckit-canvas-designer/​handoff.mjs Validates and reads handoffs.
.../​speckit-canvas-designer/​extension.mjs Registers the Designer canvas.
.../​speckit-canvas-designer/​bootstrap.mjs Copies the provider into the child session.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread plugins/spec-kit-copilot-wizard/extensions/speckit-canvas-designer/bootstrap.mjs Outdated
Copilot AI balanced review requested due to automatic review settings September 30, 2026 01:04

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Provider bootstrap can follow a symlinked extension directory and write outside the child worktree.

Review effort: Balanced
Findings: 1 High severity

Open (1)
Resolved since last review (2)

Comment thread plugins/spec-kit-copilot-wizard/extensions/speckit-canvas-designer/bootstrap.mjs Outdated
@nicolehaugen
nicolehaugen force-pushed the nicolehaugen-canvas-designer-launch-pr branch from a7b4412 to 5c7023a Compare September 30, 2026 01:43
Copilot AI balanced review requested due to automatic review settings September 30, 2026 01:43
@nicolehaugen
nicolehaugen removed this pull request from stack #37 September 30, 2026 01:44
@nicolehaugen
nicolehaugen changed the base branch from nicolehaugen-wizard-canvas-generation-dialog to nicolehaugen-canvas-designer-provider-layer September 30, 2026 01:44
@nicolehaugen
nicolehaugen added this pull request to stack #39 September 30, 2026 01:45

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

Concurrent provider lifecycle callbacks can leak servers or return stale URLs, and release descriptions need synchronization.

Review effort: Balanced
Findings: 1 High severity

Open (1)

Copilot AI balanced review requested due to automatic review settings September 30, 2026 02:00
@nicolehaugen
nicolehaugen force-pushed the nicolehaugen-canvas-designer-launch-pr branch from 5c7023a to 86bae78 Compare September 30, 2026 02:00

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

The Wizard plugin needs a synchronized new version so installed 0.3.0 users can receive this launch functionality.

Review effort: Balanced
Findings: 1 High severity · 1 Medium severity

Open (2)

Comment thread .github/plugin/marketplace.json
@nicolehaugen
nicolehaugen force-pushed the nicolehaugen-canvas-designer-launch-pr branch from 86bae78 to c504e1a Compare September 30, 2026 02:10
Copilot AI balanced review requested due to automatic review settings September 30, 2026 02:10

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Empty catalogs can permanently disable launch, and the changed Wizard plugin version is not synchronized across release metadata.

Review effort: Balanced
Findings: 1 High severity · 2 Medium severity

Open (3)

Copilot AI balanced review requested due to automatic review settings September 30, 2026 02:17
@nicolehaugen
nicolehaugen force-pushed the nicolehaugen-canvas-designer-launch-pr branch from c504e1a to 70dadd1 Compare September 30, 2026 02:17

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Launch dispatch blocks on agent completion, and the Wizard plugin version was not synchronized with its changed implementation.

Review effort: Balanced
Findings: 1 High severity · 3 Medium severity

Open (4)

Copilot AI balanced review requested due to automatic review settings September 30, 2026 02:30

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Deferred dispatch and concurrent bundle inspection currently have correctness issues.

Review effort: Balanced
Findings: 1 High severity · 2 Medium severity

Open (3)
Resolved since last review (3)

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Catalog readiness can be published before preset hydration completes, and one stale-pipeline race returns an internal error.

Review effort: Balanced
Findings: 1 Medium severity

Open (1)
Resolved since last review (3)
Previously missed (1)

In code that hasn't changed since last review

Medium severity Handle invalid second pipeline snapshot as stale

plugins/​spec-kit-copilot-wizard/​extensions/​speckit-wizard-canvas/​server/​handlers-designer.mjs:127

Treat an invalid second pipeline snapshot as stale instead of letting it escape as a 500. The first snapshot is validated, but if the pipeline changes to an invalid ID or exceeds 30 phases before this second read, designerPhaseIds(current) throws inside the condition; the top-level server catch then reports an internal error rather than the intended reopen response for a changed pipeline.

@nicolehaugen
nicolehaugen force-pushed the nicolehaugen-canvas-designer-launch-pr branch from 82d2932 to 31dc843 Compare September 30, 2026 14:48
Base automatically changed from nicolehaugen-canvas-designer-provider-layer to main September 30, 2026 14:51
@nicolehaugen
nicolehaugen force-pushed the nicolehaugen-canvas-designer-launch-pr branch from 31dc843 to 0fef5e6 Compare September 30, 2026 14:51
Copilot AI balanced review requested due to automatic review settings September 30, 2026 16:56

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

State can become stale during provider readiness, and the UI incorrectly promises installation in this handoff-only increment.

Review effort: Balanced
Findings: 2 Medium severity

Open (2)
Resolved since last review (1)

Copilot AI balanced review requested due to automatic review settings September 30, 2026 17:05

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

Live nested-session and extension RPC behavior is mocked rather than exercised end to end.

Review effort: Balanced
Findings: None

Resolved since last review (2)

nicolehaugen and others added 7 commits September 30, 2026 12:17
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Preserve community and bundle selection behavior while closing the dialog on accepted launch. Gate Designer readiness on fully hydrated catalogs and streamline child kickoff.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Reject stale catalog or pipeline snapshots if they change while the provider is starting, and cover both races with a deferred-readiness test.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings September 30, 2026 17:17
@nicolehaugen
nicolehaugen force-pushed the nicolehaugen-canvas-designer-launch-pr branch from 5407509 to 9f61d85 Compare September 30, 2026 17:17
@nicolehaugen
nicolehaugen merged commit e1b00e4 into main Sep 30, 2026
8 checks passed

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Dialog readiness can mix refreshed state with stale rendered selections, causing launch failures during catalog hydration.

Review effort: Balanced
Findings: 1 Medium severity

Open (1)

Comment on lines +54 to +56
const ready = ["presets", "extensions", "bundles"].every((kind) =>
Array.isArray(state.snapshot?.catalog?.[kind]))
&& typeof state.snapshot.catalog.designerFingerprint === "string";
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.

2 participants