Configurable sections + interactive picker (#3) - #10
Conversation
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
#3) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Wires pickSections into runInit and offerCreate behind stdinIsTerminal(), so interactive users' chosen sections flow into scaffold and offerClaudeHook; non-interactive stdin keeps using defaultSections().
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ReviewSolid PR overall. The scope discipline is real: The A few things worth fixing before merge. a. The picker only guards stdin, not stdout
The existing func interactiveTTY() bool {
return stdinIsTerminal() && term.IsTerminal(int(os.Stdout.Fd()))
}and call that instead of b. Ctrl+C means "use the defaults" instead of "abort"
Esc-means-defaults is a defensible documented choice. Ctrl+C isn't; it's a universal abort and users will hit it expecting nothing to be written. Split it out — give the picker an While you're in there: c. The default template lost its pruning instructionThe old Per-section hints cover the first half, but It generalizes without knowing section names — something like d. The CLAUDE.md section list renders as one run-on paragraph
Prefix each with e. Picker help line is wider than the pane sidecar targetsThe help string at Simplest fix is splitting the help across two lines. If you'd rather make it responsive, let Minor
|
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Thanks for the thorough pass. Adjudication + fixes (commit f2c3711): a. stdout not guarded — Fixed. Added b. Ctrl+C = defaults — Fixed. Split c. Lost prune instruction — Fixed. d. CLAUDE.md run-on paragraph — Fixed. Section list now renders as a real markdown list ( e. Help line width — Fixed. Split across two lines. Minor (blink) — Left as-is: purely cosmetic, and fixing it means opening the Minor (dedup) — Deliberately not changing. The spec explicitly chose to allow duplicate section names (no dedup) — it's a documented decision, so I'm keeping it rather than override the spec. Happy to revisit if you feel strongly. Full suite green (38 tests), |
|
Claude finished @than's task in 2m 38s —— View job Re-review of commit f2c3711
All five findings check out in the diff: a. stdout guard — b. Ctrl+C vs Esc — cleanly split. c. Prune instruction — restored as a fixed, section-name-agnostic line ( d. CLAUDE.md list formatting — e. Help line width — split across two lines ( Minors — blink cosmetic gap and no-dedup are both left as-is per your stated reasoning; agreed on both, especially dedup being an explicit spec decision. One small thing still openCtrl+C only aborts in nav mode. Once you're inside an edit ( Everything else looks solid — clean bill otherwise. Note: I wasn't able to run |
updateEditing only handled Enter/Esc, so KeyCtrlC fell through to textinput and was swallowed. Handle it like nav mode: set interrupted and quit, so Ctrl+C is a universal abort everywhere in the picker. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
@claude one more pass please — fixed the open item: Ctrl+C now aborts from inside an edit too (updateEditing handles KeyCtrlC → interrupted, matching nav mode), with a TestPickerInterruptWhileEditing covering it. Full suite green (39), vet+gofmt clean. Commit incoming. |
|
Claude finished @than's task in 1m 17s —— View job Re-review of commit 3e694bc
The fix is exactly scoped to the one open item —
A couple of things worth confirming, both check out:
This closes out the last open item from the previous review. Nothing else outstanding — clean bill. Note: I wasn't able to execute |
…tions # Conflicts: # docs/superpowers/plans/2026-07-28-configurable-sections.md
|
Reviewed as a Go reviewer with the viewer invariants in mind. Overall: solid, well-scoped work. The scope claim in the description holds — One real problem and a few nits. Re-running
The README calls out re-running as the supported upgrade path — "running Before this PR the section list was hardcoded everywhere, so it was at least self-consistent; making sections configurable is what opens the gap. Cheapest fix is to recover the sections from the file that already exists rather than assuming defaults: if _, err := os.Stat(abs); err == nil {
fmt.Printf("%s already exists — leaving it untouched.\n", target)
if existing := parseSections(abs); len(existing) > 0 {
sections = existing
}
}where
Nits
Test coverage for the picker is genuinely good — driving the model with synthetic key messages gets real behavioral coverage on toggle/reorder/bounds/add/edit/delete/cancel without needing a TTY. |
Closes #3.
What
sidecar initnow lets you choose your own queue sections — emoji, name, hint, and order — via an interactive bubbletea picker, instead of the fixed five (🧠 Needs action / 🚧 In progress / 🚘 Parked / ✅ Done / 📦 Shipped).The chosen set flows into all three init-time outputs:
Picker keys
jkmove ·spacetoggle ·J/Kreorder ·eedit ·aadd ·ddelete ·⏎done ·esccancelEdit walks emoji → name → hint; each field shows the current value as placeholder (Enter keeps it, typing replaces). Add-then-abandon and empty-name rows drop automatically.
Scope / safety
stdinIsTerminal()guard. Piped/non-interactive stdin, cancel, all-deselected, or any picker error all fall back to the default five — never a zero-section file, never a TUI in scripts/CI.bubbles/textinput(already-presentbubblesmodule) pulls one small indirect dep (atotto/clipboard).Tests
37 passing. New coverage: Section model, template generation (incl. hintless sections), CLAUDE.md note + reconcile message for custom sections, and the full picker model (toggle/reorder/bounds/add/edit/delete/cancel/empty-fallback) driven via synthetic key messages.
Spec:
docs/superpowers/specs/2026-07-28-configurable-sections-design.mdPlan:
docs/superpowers/plans/2026-07-28-configurable-sections.mdNot covered (follow-ups)
🤖 Generated with Claude Code