Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
f2350cd
Add live-CLI integration + fixture-drift tests for artifact adapter
nicolehaugen Aug 25, 2026
0a62ac8
Fix blank flash on wizard first-open (boot overlay race)
nicolehaugen Aug 25, 2026
bb5edf2
Parallelize catalog hydration to cut boot time
nicolehaugen Aug 25, 2026
34fb942
Revert "Parallelize catalog hydration to cut boot time"
nicolehaugen Aug 25, 2026
9fdbcc8
Fix catalog-loading hang: async parallel CLI fan-out
nicolehaugen Aug 25, 2026
b9b95d1
Harden catalog boot: timeouts + group-level parallelism
nicolehaugen Aug 25, 2026
237d05d
Move composition to single-call CLI shape (uptake PR #4305)
nicolehaugen Aug 25, 2026
013f877
Regen live-cli-list.json against post-#4305 CLI
nicolehaugen Aug 25, 2026
187bb33
Split 'Loading catalogs' into catalog + composition tracker steps
nicolehaugen Aug 25, 2026
7a898ff
Scrub PR #4305 references and past-tense narration from comments
nicolehaugen Aug 25, 2026
60d5305
Remove live-CLI integration test — belongs in spec-kit repo
nicolehaugen Aug 25, 2026
2a811e6
Address review comments: scrub phantom AGENTS.md quotes and dev title
nicolehaugen Aug 26, 2026
ce6d39e
Potential fix for pull request finding
nicolehaugen Aug 26, 2026
659333b
Potential fix for pull request finding
nicolehaugen Aug 26, 2026
19560a7
Recover from composition boot failures
Copilot Aug 26, 2026
65490c6
Potential fix for pull request finding
nicolehaugen Aug 26, 2026
633e908
Potential fix for pull request finding
nicolehaugen Aug 26, 2026
3ba4d51
Preserve CLI artifact source paths
Copilot Aug 26, 2026
e1e8c41
Merge branch 'main' of https://github.com/github/spec-kit-copilot int…
nicolehaugen Sep 8, 2026
a2a9dc0
Align wizard provider identity with artifact contract
nicolehaugen Sep 9, 2026
6b6332a
Use public registry URL in wizard lockfile
nicolehaugen Sep 9, 2026
d26e5c7
Restrict hook suppression to active extension
nicolehaugen Sep 9, 2026
9e14423
Restore focused wizard pipeline coverage
nicolehaugen Sep 9, 2026
087b03a
Use source IDs for extension providers
nicolehaugen Sep 9, 2026
f2132f6
Correct composition refresh documentation
nicolehaugen Sep 9, 2026
c485eab
Test extension hook enrichment
nicolehaugen Sep 9, 2026
e41293c
Revert unintended js-yaml upgrade
nicolehaugen Sep 9, 2026
f8e5025
Use extension manifest display metadata
nicolehaugen Sep 9, 2026
73f0c43
Preserve authoritative hook targets
nicolehaugen Sep 9, 2026
3fd5128
Preserve CLI provider precedence
nicolehaugen Sep 9, 2026
084596a
Document project layer scope
nicolehaugen Sep 9, 2026
4075c10
Remove artifact stack version badges
nicolehaugen Sep 9, 2026
1f308e8
Read nested extension metadata
nicolehaugen Sep 9, 2026
37f796d
Address scoped composition regressions
nicolehaugen Sep 9, 2026
a95b4df
Use authoritative extension manifest paths
nicolehaugen Sep 9, 2026
4993503
Retain existing provider ordering
nicolehaugen Sep 9, 2026
4c24927
Document provider ordering scope
nicolehaugen Sep 9, 2026
f5b772e
Document artifact inventory bound
nicolehaugen Sep 9, 2026
f8ef930
Clarify provider summary scope
nicolehaugen Sep 9, 2026
7ec1d4f
Preserve kind-qualified artifacts
nicolehaugen Sep 9, 2026
76fc884
Document temporary hook compatibility scope
nicolehaugen Sep 10, 2026
6d99a97
Ensure wizard prefers managed CLI paths
nicolehaugen Sep 10, 2026
dbaa728
Document project override source fallback
nicolehaugen Sep 10, 2026
96b7689
Clarify unsupported project overrides
nicolehaugen Sep 10, 2026
f3090fa
Preserve existing PATH precedence
nicolehaugen Sep 10, 2026
812d918
Treat task-to-issues as an optional phase
nicolehaugen Sep 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Address review comments: scrub phantom AGENTS.md quotes and dev title
- project-scanner.mjs: rewrite composition-block comment to describe current

  behavior only; drop 'used to look at' language and the fabricated AGENTS.md

  citation.

- artifact-cli.mjs: drop the phantom 'AGENTS.md: CLI is the source of truth

  for composition.' line from the doc header.

- pipeline-fast-path.mjs: rename 'LLM Stage 2' → 'LLM path' (there was no

  Stage 1) and 'Fast path' → 'Deterministic path' to match the actual code.

- ui/index.html, ui/boot.js: drop '- Dev' suffix from the wizard title in

  all four spots to prepare for check-in.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 2d44fd06-6323-4654-8a80-b756561ef669
  • Loading branch information
nicolehaugen committed Aug 26, 2026
commit 2a811e6535cb48a91cefba59220b7d99261c58e0
Original file line number Diff line number Diff line change
Expand Up @@ -377,8 +377,7 @@ function applyHookAttributions(artifacts, extensionHookInfo, hooksMap) {
* ## Upstream contract
*
* `specify artifact list --json` returns one row per artifact carrying the
* FULL composition stack (i.e. list rows include `stack: [...]`). See
* AGENTS.md: "CLI is the source of truth for composition."
* FULL composition stack (i.e. list rows include `stack: [...]`).
*
* If a CLI ships where `list --json` omits `stack`, this function still
* returns a well-formed payload — artifacts get empty stacks and the
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@
// still need a **pipeline order** for the wizard's Composition tab. Two
// ways to produce one:
//
// • **Fast path (this file, deterministic, no LLM).** When the active
// command set is the canonical spine with only `replace` overrides and
// no new commands, we synthesize the pipeline from the canonical spine
// • **Deterministic path (this file, no LLM).** When the active command
// set is the canonical spine with only `replace` overrides and no new
// commands, we synthesize the pipeline from the canonical spine
// directly.
// • **LLM Stage 2** (`prompts/composition.mjs::inferPipeline`). Needed
// when an extension adds a non-canonical command or uses `wrap` /
// `prepend` / `append`, because ordering then depends on prose in the
// extension's README that only an LLM can interpret.
// • **LLM path** (`prompts/composition.mjs::inferPipeline`). Needed when
// an extension adds a non-canonical command or uses `wrap` / `prepend`
// / `append`, because ordering then depends on prose in the extension's
// README that only an LLM can interpret.
//
// This module decides which of the two applies.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,7 @@ export { readMarkdownArtifact };

// Composition is read exclusively from `specify artifact list --json` (see
// composition/artifact-cli.mjs) and overlaid via `overlayCachedComposition`.
// No direct fs read here for presets or extensions — see AGENTS.md:
// "CLI is the source of truth for composition. No direct fs reads. Ever."
// No direct fs read here for presets or extensions.

// deps shape:
// readFile(path, enc) → Promise<string>
Expand Down Expand Up @@ -127,12 +126,9 @@ export async function scanWorkspace(workspacePath, deps) {
warnings.push(`hydrateExtensionArtifactsFromCache failed: ${err?.message ?? err}`);
});

// Composition — no direct fs read. `scanComposition` used to look at
// `.specify/{presets,extensions}.json` which no `specify` CLI version
// ever wrote (dead code). The wizard's real composition data comes from
// `runFastComposition` (CLI-driven, see composition/artifact-cli.mjs)
// and is applied via `overlayCachedComposition` after this scan runs.
// Start empty so the overlay step has a clean base.
// Composition data comes from `runFastComposition` (CLI-driven, see
// composition/artifact-cli.mjs) and is applied via `overlayCachedComposition`
// after this scan runs. Start empty so the overlay step has a clean base.
const composition = { presets: [], extensions: [] };
Comment thread
nicolehaugen marked this conversation as resolved.

// Preset catalog — from CLI-authored catalog.json inside .specify/.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ function render() {

const title = document.createElement("h1");
title.className = "boot-title";
title.innerHTML = '<span class="boot-title-mark" aria-hidden="true">◈</span>Starting Spec Kit Wizard - Dev';
title.innerHTML = '<span class="boot-title-mark" aria-hidden="true">◈</span>Starting Spec Kit Wizard';
panel.appendChild(title);

const subtitle = document.createElement("p");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Spec Kit Wizard - Dev</title>
<title>Spec Kit Wizard</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="/ui/styles/foundation.css" />
<link rel="stylesheet" href="/ui/styles/stepper.css" />
Expand All @@ -17,14 +17,14 @@
<body>
<div id="boot-overlay" class="boot-overlay">
<div class="boot-panel">
<h1 class="boot-title"><span class="boot-title-mark" aria-hidden="true">◈</span>Starting Spec Kit Wizard - Dev</h1>
<h1 class="boot-title"><span class="boot-title-mark" aria-hidden="true">◈</span>Starting Spec Kit Wizard</h1>
<p class="boot-subtitle">Preparing your project…</p>
</div>
</div>
<header class="app-header">
<div class="brand">
<span class="brand-mark" aria-hidden="true">◈</span>
<span class="brand-text">Spec Kit Wizard - Dev</span>
<span class="brand-text">Spec Kit Wizard</span>
</div>
<nav class="tabs" role="tablist" aria-label="Main tabs">
<button class="tab" data-tab="setup" role="tab" aria-selected="true">Setup</button>
Expand Down