diff --git a/docs/superpowers/plans/2026-06-16-output-tab-four-acts.html b/docs/superpowers/plans/2026-06-16-output-tab-four-acts.html new file mode 100644 index 0000000..8036db7 --- /dev/null +++ b/docs/superpowers/plans/2026-06-16-output-tab-four-acts.html @@ -0,0 +1,183 @@ + + +
+ + +Keep the existing #t0–#t27 panels, their render functions, and show(n) behavior. Add a pure, unit-tested output-acts.js that groups tab indices into four ordered acts. Replace the flat nav markup with a two-tier nav (primary act row + a secondary row showing only the active act's tabs), generated from the model. Make show(n) also highlight the owning act and render its secondary row. No background.js / message-contract changes.
TAB_SLUGS) and show() already writes the hash + per-repo recall — so deep links and restore already work; the model just adds "which act owns this tab."show() currently toggles panels by DOM index (idx === n), relying on panel order matching tab number. Task 4 switches to selecting by id (#t{n}) so it stays correct regardless of order.
+ output-acts.js + tests/output-acts.test.jsACTS, TAB_LABELS, actForTab(), tabsForAct(), ACT_ORDER. Tests assert every index 0–27 is covered exactly once, plus helper correctness.output-tab.html.tab-nav + dropdown menus with two containers (#act-nav, #act-subnav) and Mono-Ink styles (secondary row reuses .tab-btn).output-tab.jsrenderActNav() (primary acts) + renderSubNav(actId) (active act's tabs). Buttons keep data-tab so the existing show() path is reused.output-tab.js#t{n}; set the active act button + render/mark its secondary row; hash + per-repo recall kept verbatim.output-tab.js#act-subnav (delegated, survives re-renders).output-tab.jsrenderActNav() runs before the initial hash/recall route resolves; show() handles the rest.output-tab.js, output-tab.htmloutput-tab.js (renderHighlights)output-tab.jsoutput-tab.js (renderSubNav)output-tab.js, library.jsvitest run (857 + 5 new) · eslint . 0 errors · check:html · node --check · Playwright screenshots at 320/768/1024/1440 + deep-link, keyboard, reduced-motion, a11y checks.background.js streaming, which the spec puts out of scope. Deliberate follow-up.Gamification/juice (Pillar 3), settings redesign, new analysis features, rewriting section internals or the analysis pipeline.
+ + + +The output tab is information-rich and genuinely good — the problem is purely presentation and flow. From a current-state audit:
+background.js runners, prompts, parsers stay as-is).Four Acts, two-tier navigation. Four primary acts as the top-level nav; each act opens its own focused, bounded view containing its grouped sections. The user always knows which act they are in; never an endless scroll. Keyboard navigation preserved. Cleanest fit for the zero-build codebase.
+ +Default = shown immediately after a scan. On-demand = user triggers an AI run.
+ +"should I use this, and what do I do about it?" — the landing
+| Element | When | Notes |
|---|---|---|
| Fit verdict (level + label + why) | Default | Anchored at top |
| Bottom line (one-liner) | Default | |
| Decision control (Adopt/Trial/Hold/Reject + note) | Default | Moved to the top (was buried at page bottom) |
| At-a-glance facts (health, stars/license/lang, pros/cons/flag counts) | Default | Compact summary row |
| Top red flags (up to 3) | Default | Distinct "warning" treatment; link to full list |
| Where-to-start cards | Default | if present |
| Since-last-scan diff callout | Default | if prior scan |
| "Worth noting" highlights | Default | Now anchor to their home section (no context-thrash) |
deep reading; all pre-computed, no waiting
+| Element | When | Notes |
|---|---|---|
| ELI5 (+ analogies) | Default | |
| Technical | Default | |
| Use Cases (4-grid) | Default | |
| Skip If (4-grid) | Default | |
| Enables | Default | |
| Pros / Cons (full) | Default | Verdict shows counts → jump here |
| Red Flags (full list) | Default | Decide shows top 3 → jump to the canonical full list here |
| Alternatives | Default | |
| Health (full: 4 signals + summary) | Default | Add metric explanations |
| Tech Stack (full: built_with + key_dependencies) | Default | Verdict shows language chips → jump here |
De-duplication rule: where Verdict shows a preview, the full version lives here and Verdict links to it. One source of truth per element.
+on-demand lenses about THIS repo; each a labeled card
+Each lens card shows: name · one-line "what it does" · prerequisite badge · time estimate · live stage progress.
+| Lens | Prerequisite | Notes |
|---|---|---|
| Deep Dive (atoms → lineage → Feynman) | — | ~90s, 3 stages with progress |
| Canvas / Blueprint | Needs Deep Dive | prereq badge shown |
| Systems / Ideate / Prioritize | — | framework chips |
| SKTPG | — | auto-run by default (toggle) |
| Docs Quality | — | |
| Maintenance | — | can be slow; show progress |
| License | library context | |
| Since Last Scan | prior scan |
do something with it
+| Element | Notes |
|---|---|
| Save | clear saved-state feedback |
| Ask this repo | requires a completed scan — state up front |
| Share | |
| Against your library: Similar · Versus · Synergies · Connections · Combine · Fits-My-Stack | Honest "needs N scans" unlock states. Deeper gamified treatment is Pillar 3. |
1–4 select acts; within-act keys for sections; preserve r/f/l/o.#decide, #understand/health, #deeper/deep-dive, #act/versus) with a legacy slug map so every old #slug still resolves.repolens_tab_<repoId>).Extract a pure act-model module (e.g. output-acts.js), no DOM/network, exporting: ACTS, sectionToAct(), routeForHash() / hashForRoute(), LEGACY_SLUG_MAP + resolveLegacySlug(), and keyboardMap. output-tab.js consumes it to render the act shell and route; section render functions stay as-is and mount into act containers. Routing/grouping logic becomes unit-testable independent of the DOM.
output-tab.html + output-tab.js; no framework/bundler/deps.prefers-reduced-motion (reuse --dur-*/--ease-*).node --check + a *-demo.html harness.background.js contract changes — message types unchanged; front-end reorganization only.node --check on glue.output-tab demo harness; Playwright screenshots at 320 / 768 / 1024 / 1440; reduced-motion; accessibility (keyboard, focus, contrast).eslint . 0 errors; HTML parse gate passes.#slug links resolve.eslint . 0 errors; HTML gate passes.