# v4.9.5 Slice 1 — Manual reproduction recipe

## What this verifies

The new curated-skill install flow:

- Onboarding wizard Step 4 — "Install curated skills? (y/N)"
- Two-stage confirm: ask → fetch manifest → preview table → confirm install
- Preview table column order: **Name | Author | Category | License | Size**
- `/skills setup` slash command (re-invokable)
- `/skills list` shows Author column with `(uncredited)` marker for community skills

## Pre-conditions

- `aiden-runtime@4.9.5` installed
- Network access (the install fetches from `github.com/taracodlabs/aiden-skills`)
- The `taracodlabs/aiden-skills` repo must exist with a populated `manifest.json` — **the curated catalog is a separate dispatch**. Until it's populated, the curated install will return "Curated catalog is empty. Nothing to install." or a 404 on manifest fetch.

## Recipe — wizard Step 4

1. **Fresh install** (or `aiden setup` on an existing install):
   ```
   aiden setup
   ```

   Slice 1.6 wired this subcommand through the full fresh-install boot
   path: disclaimer → animated loading → wizard → curated Step 4 →
   success screen → REPL handoff. Identical to typing `aiden` on a
   true fresh install. (Prior to Slice 1.6 the subcommand was a
   minimal "rerun wizard core only" entry point that skipped the
   disclaimer + loading screens AND exited to the shell after success
   instead of dropping into the REPL — that footgun is gone.)

2. Walk through Steps 1-3 (provider, credentials, model). Persistence runs.

3. **Expected new Step 4**:
   ```
     ▎  Set up Aiden  step 4

     Optional: install curated skills?
     (Hand-picked from the open-source ecosystem with full author attribution.)

   ? Install curated skills? (y/N)
   ```

4. **Type `y` + Enter** → wizard fetches manifest:
   ```
     Fetching curated skills manifest…

     Available curated skills:

   ┌────────────────────────┬────────────────┬──────────┬──────────┬──────────┐
   │ Name                   │ Author         │ Category │ License  │     Size │
   ├────────────────────────┼────────────────┼──────────┼──────────┼──────────┤
   │ pdf-extractor          │ Jane Doe       │ files    │ MIT      │   4.1 KB │
   │ csv-summarizer         │ Open Data      │ data     │ Apache-2 │   1.8 KB │
   │ …                      │ …              │ …        │ …        │      …   │
   └────────────────────────┴────────────────┴──────────┴──────────┴──────────┘

     N skills · X.X KB total · pinned to commit abc1234

   ? Install these N skills (X.X KB)? (y/N)
   ```

5. **Type `y` + Enter** → sequential install, success line:
   ```
     ✓ Installed N curated skills.
   ```

6. **Confirm column order on screen**: `Name | Author | Category | License | Size`. Author **must** be the second column (visible without scrolling).

## Recipe — `/skills setup` re-invoke

After the wizard completes and you're in the REPL:

1. `/skills setup`
2. Expected: same fetch → preview → confirm flow as Step 4 above.
3. **Note**: Per Phase B Q3 (cut #2), v4.9.5 does **not** reconcile against already-installed skills — it just installs everything from the manifest. `_installHash` makes re-install idempotent for unmodified skills. The proper update story ships in v4.10's `/skills update`.

## Recipe — `/skills list` author column

1. After curated install: `/skills list`
2. Expected: table with `Name | Author | Description` columns. Curated skills show the actual author (`Jane Doe`, etc.) in default color.
3. **Side-loaded community skills** (those installed via `/skills install <github/org/repo>` without an `author` frontmatter field) show **`(uncredited)`** in warn (amber) color.
4. **Builtin skills** (Aiden's own bundled ones, `_trustLevel: builtin` with no `author` field) show **`(builtin)`** in muted.

## Verification: rejection paths

### Stage 1 decline
Run wizard, get to Step 4, **press Enter alone** (default = N). Expected:
- Wizard prints `Cancelled (press 'y' to confirm; Enter alone = no).` (v4.9.2 Slice 3 confirm primitive)
- Wizard proceeds directly to success screen — no manifest fetch attempted.

### Stage 2 decline (after preview)
Run wizard, `y` at Stage 1, see the preview table, **press Enter alone at Stage 2**. Expected:
- Same cancellation reason as above
- No skills installed; wizard proceeds to success.

### Manifest fetch failure
Disconnect network → `/skills setup`. Expected:
- `Could not fetch curated skills: <network error>.`
- `Skipping. You can re-try later with /skills setup.`
- Returns cleanly to prompt — no crash.

## What to report back

If the wizard fails to render Step 4 at all on a fresh install, paste:
- The output of `aiden --version` (must be `4.9.5`)
- The first ~30 lines of the wizard run (so I can see which step it stalled at)

If the preview table appears but in the wrong column order (e.g. Author at the right edge instead of second), that's a `renderManifestPreview` regression. Paste the table — column-order verification is unit-tested in `tests/v4/core/skills/curatedManifest.test.ts:Author-before-Category` so a wrong rendering means the table renderer config differs from the test setup somehow.

If the curated catalog is empty (Slice 1 ships before the `taracodlabs/aiden-skills` repo is populated), the expected behaviour is:
```
  Available curated skills:

  (table with no rows)

  0 skills · 0.0 KB total · pinned to commit <sha>

  Curated catalog is empty. Nothing to install.
```
This is honest — Slice 1's job was wiring the import path; the catalog population is your separate dispatch.

---

## v4.9.5 Slice 1.5 — every provider fires Step 4

Slice 1 wired Step 4 only into the API-key wizard branch. Subscription
providers (Claude Pro, ChatGPT Plus) exit the wizard via a separate
OAuth branch (around L977 of `setupWizard.ts`) and silently bypassed
the curated-skills offer. **Slice 1.5 extracts `finalizeWithCuratedStep`
and calls it from both exits.** This recipe verifies the fix manually.

The Stage 2 prompt also changed from yes/no to three-tier
`(A)ll, (p)ick, (s)kip` with default = install all; per-skill picker
uses `inquirer.checkbox` with all rows checked by default.

### Provider matrix (mandatory four — run all)

For each provider, run `aiden setup --force` and confirm every line:

| # | Provider     | Branch    | Step 4 must fire? |
|---|--------------|-----------|-------------------|
| 1 | Groq         | API-key   | YES               |
| 2 | Anthropic    | API-key   | YES               |
| 3 | ChatGPT Plus | OAuth/sub | **YES ← was broken in Slice 1** |
| 4 | Claude Pro   | OAuth/sub | **YES ← was broken in Slice 1** |

For each row, verify:

1. Step 4 panel appears with `▎  Set up Aiden  step 4` chrome
   identical to steps 1–3 (same panel-bar glyph, same orange, same
   indent — only the digit differs).
2. Stage 1 prompt: `? Install curated skills? (y/N)` — pressing
   `y` proceeds, Enter alone cancels with the v4.9.2 Slice 3
   cancellation line.
3. After `y`: `Loading curated skills…` heading with one animated
   row `✓ Fetching curated catalog  N skills · commit abc1234`.
4. Preview table renders with column order: Name | Author | Category
   | License | Size.
5. Stage 2 prompt: `? Install N curated skills (X.X KB): (A)ll,
   (p)ick, (s)kip  →` with capital A indicating default.

### Three-tier behaviour matrix

| Input              | Expected outcome                                           |
|--------------------|-----------------------------------------------------------|
| `a` / `A` / `all` / `<Enter>` | Animated install of all N skills, summary line |
| `p` / `pick`       | Opens checkbox picker (all skills pre-checked)            |
| `s` / `skip` / `n` / `no` | `Skipped curated skills.` dim line, proceeds to success |
| garbage (e.g. `y`) | `Could not parse "y" — type a, p, or s.` + one re-prompt  |
| garbage twice      | `Could not parse "<x>" — skipping curated skills.` + skip  |

### Per-skill picker recipe

1. Reach Step 4 panel, type `y` + Enter.
2. Wait for `Loading curated skills…` → `✓ Fetching curated catalog`.
3. Preview table renders. Type `p` + Enter.
4. Inquirer checkbox opens with all rows pre-checked, showing
   `<name>  —  <author> · <category> · <license> · X.X KB`.
5. Space-toggle to un-check one or more skills. Press Enter.
6. `Installing N curated skills…` heading; one row per selected
   skill with status `<author> · X.X KB`. Un-checked skills are
   absent from this loading sequence.
7. Final summary: `✓ Installed N of N curated skills · X.X KB.`

### Cancel paths to verify

- **Esc in checkbox** → returns empty selection → wizard proceeds to
  success screen, no installs landed on disk.
- **Un-check all rows then Enter** → empty selection → same as Esc.
- **Type `s` at Stage 2** → `Skipped curated skills.` → success screen.
- **Type garbage twice** → `skipping curated skills.` → success screen.

### Reporting requirements

If Step 4 fails to appear on ANY of the four provider runs, paste:

- `aiden --version` (must be `4.9.5`)
- The wizard transcript from `step 1` panel onwards
- Note which provider branch was taken (OAuth vs API-key)

If the per-skill picker doesn't render checkboxes (only single-select
arrow keys), `@inquirer/prompts.checkbox` failed to load — paste any
error from the wizard run plus the `node --version`.

If the summary line shows fewer installs than selected without a
`failed` count, the runLoadingSequence integration likely silently
swallowed a throw — paste the loading-sequence rows so we can see
which step's `✗` was suppressed.
