Skip to content

feat(capability): wire SubgroupConfigPopover to processMap.subgroupAxes#74

Merged
jukka-matti merged 2 commits into
mainfrom
feat/frame-capability-wiring
Apr 18, 2026
Merged

feat(capability): wire SubgroupConfigPopover to processMap.subgroupAxes#74
jukka-matti merged 2 commits into
mainfrom
feat/frame-capability-wiring

Conversation

@jukka-matti
Copy link
Copy Markdown
Owner

Summary

Completes the capability-storytelling leg of the FRAME umbrella (ADR-070): the rational-subgroup selector in the capability view now reads from the tributaries the user nominated in FRAME, not from the full factors list. Same microcopy, same popover — but the candidates now reflect process structure, not keyword-matched columns.

Stacked on #73. When it merges, this rebases onto main.

What ships

  • packages/core/src/frame/subgroupAxes.ts — new pure helper subgroupAxisColumns(map) resolving processMap.subgroupAxes (tributary IDs) to column names, preserving order, tolerating dangling references (axes pointing at deleted tributaries).
  • __tests__/subgroupAxes.test.ts — 6 tests covering null / undefined / empty / populated / ordering / dangling references.
  • packages/core/src/frame/index.ts — export the helper from the /frame barrel alongside inferMode and detectGaps.
  • apps/pwa/src/components/Dashboard.tsx — read processContext from projectStore, derive subgroup candidates via subgroupAxisColumns, fall back to factors when the map has no axes set (backward compat for projects without a map).
  • apps/azure/src/components/Dashboard.tsx — mirror of the PWA wiring.

UX contract

  • Has a FRAME map with subgroup axes picked → the popover's "By column" dropdown shows only those axes (one click, fewer decisions, story-matched).
  • No map, or no axes picked → falls back to all factors (existing behavior preserved; no regression for pre-FRAME projects).

Test plan

  • pnpm --filter @variscout/core test2580 tests pass (+6 from subgroupAxes)
  • pnpm --filter @variscout/ui test — 1179 tests pass
  • pnpm --filter @variscout/pwa test — 111 tests pass
  • pnpm --filter @variscout/azure-app test — 771 tests pass
  • bash scripts/pr-ready-check.sh green (tests + lint + docs:check)
  • Visual walk with claude --chrome across a seeded sample end to end:
    • open FRAME tab → add steps + tributaries + toggle a tributary as subgroup axis
    • switch to Analysis → flip the toggle to Cpk stability
    • confirm the SubgroupConfigPopover's "By column" dropdown now shows only the nominated tributary columns
    • toggle subgroupAxes off in FRAME → confirm the dropdown falls back to the full factor list

Context

Plan: .claude/plans/i-was-interviewing-greg-dynamic-umbrella.md
Spec: docs/superpowers/specs/2026-04-18-frame-process-map-design.md
ADR: docs/07-decisions/adr-070-frame-workspace.md

🤖 Generated with ruflo

@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 18, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
mean-beoynd-lite-pwa Ready Ready Preview, Comment Apr 18, 2026 8:15pm
variscout_website Ready Ready Preview, Comment Apr 18, 2026 8:15pm

jukka-matti added a commit that referenced this pull request Apr 18, 2026
… microcopy

End-to-end walk of the FRAME umbrella in browser surfaced four issues; this
commit fixes all of them so the umbrella (ADR-070, PRs #69–74) is ready to
merge after MBB review.

1. PWA showFrame hook forwarding (fixes runtime crash on Frame tab click)
   - apps/pwa/src/hooks/useAppPanels.ts: the hook wrapped panelsStore but
     stripped showFrame and left 'frame' out of activeView typing. Clicking
     Frame tab threw "panels.showFrame is not a function".

2. WorkspaceView type gained 'frame' (unblocks Azure build)
   - packages/core/src/ui-types/index.ts (ViewState.activeView)
   - packages/stores/src/sessionStore.ts (WorkspaceView)
   - apps/azure/src/components/AppHeader.tsx (local WorkspaceView)
   - Pre-existing breakage from c4872d1 that tsc caught: Frame route in
     AppHeader/usePanelsPersistence/Editor typed against a view enum that
     still didn't list 'frame'. All three build paths now clean.

3. Investigation-showcase seeds processMap (ADR-070)
   - packages/data/src/types.ts: SampleConfig gains optional processMap.
   - packages/hooks/src/useDataIngestion.ts: loadSample now writes
     sample.config.processMap into projectStore.processContext (merging with
     whatever context already exists), and clears a prior processMap when
     loading a mapless sample.
   - apps/pwa/src/hooks/useDataIngestion.ts + apps/azure/src/hooks/...:
     thread setProcessContext/getProcessContext through to the base hook.
   - packages/data/src/samples/investigation-showcase.ts: seeds the Fill
     Weight showcase with a single "Fill" step, 4 tributaries (Line as the
     nominated subgroup axis), CTS=Fill_Weight_g with 495/500/505, and two
     hunches. The Frame workspace now opens ready-made for the pre-built
     Findings/Questions story — no rebuild required.

4. Gap detector microcopy polish
   - packages/core/src/frame/gapDetector.ts: unnamed steps produced
     "No CTQ at "". Add …" and Step "" has no tributaries.". Now reads
     "No CTQ at this step …" and "This step has no tributaries …" when
     step.name is empty/whitespace. Named steps still get quoted.
   - +2 tests in gapDetector.test.ts covering both branches.

Tests green: 44 frame (core), 21 ProcessMapBase (ui), 10 useDataIngestion
(hooks). pr-ready-check green (turbo tests + lint + docs:check).

Part of the FRAME umbrella (PRs #69/#70/#71/#72/#73/#74, ADR-070).

Co-Authored-By: ruflo <ruv@ruv.net>
@jukka-matti jukka-matti force-pushed the feat/frame-azure-integration branch from c4872d1 to a6d9614 Compare April 18, 2026 20:04
jukka-matti and others added 2 commits April 18, 2026 23:05
Completes the capability-storytelling leg of the FRAME umbrella (ADR-070):
the rational-subgroup selector in the capability view now reads from the
tributaries the user nominated in FRAME, not from the full factors list.
Same microcopy, same popover, but the candidates now reflect process
structure.

Changes:
- packages/core/src/frame/subgroupAxes.ts — new pure helper
  `subgroupAxisColumns(map)` that resolves tributary IDs in
  processMap.subgroupAxes to their column names, preserving order and
  tolerating dangling references (axes pointing at deleted tributaries).
- packages/core/src/frame/__tests__/subgroupAxes.test.ts — 6 tests for
  null / undefined / empty / populated / ordering / dangling cases.
- packages/core/src/frame/index.ts — export the helper from the /frame
  barrel alongside inferMode and detectGaps.
- apps/pwa/src/components/Dashboard.tsx — read processContext from
  projectStore, derive subgroup candidates via subgroupAxisColumns,
  fall back to factors when the map has no axes set (backward compat).
- apps/azure/src/components/Dashboard.tsx — mirror of the PWA wiring.

Tests: 2580 core (+6 from subgroupAxes), 1179 ui, 111 pwa, 771 azure;
pr-ready-check green (tests + lint + docs:check).

Stacked on feat/frame-azure-integration (PR #73) — uses
@variscout/core/frame. When #73 merges, this rebases onto main.

Plan: .claude/plans/i-was-interviewing-greg-dynamic-umbrella.md
Spec: docs/superpowers/specs/2026-04-18-frame-process-map-design.md
ADR:  docs/07-decisions/adr-070-frame-workspace.md

Co-Authored-By: ruflo <ruv@ruv.net>
… microcopy

End-to-end walk of the FRAME umbrella in browser surfaced four issues; this
commit fixes all of them so the umbrella (ADR-070, PRs #69–74) is ready to
merge after MBB review.

1. PWA showFrame hook forwarding (fixes runtime crash on Frame tab click)
   - apps/pwa/src/hooks/useAppPanels.ts: the hook wrapped panelsStore but
     stripped showFrame and left 'frame' out of activeView typing. Clicking
     Frame tab threw "panels.showFrame is not a function".

2. WorkspaceView type gained 'frame' (unblocks Azure build)
   - packages/core/src/ui-types/index.ts (ViewState.activeView)
   - packages/stores/src/sessionStore.ts (WorkspaceView)
   - apps/azure/src/components/AppHeader.tsx (local WorkspaceView)
   - Pre-existing breakage from c4872d1 that tsc caught: Frame route in
     AppHeader/usePanelsPersistence/Editor typed against a view enum that
     still didn't list 'frame'. All three build paths now clean.

3. Investigation-showcase seeds processMap (ADR-070)
   - packages/data/src/types.ts: SampleConfig gains optional processMap.
   - packages/hooks/src/useDataIngestion.ts: loadSample now writes
     sample.config.processMap into projectStore.processContext (merging with
     whatever context already exists), and clears a prior processMap when
     loading a mapless sample.
   - apps/pwa/src/hooks/useDataIngestion.ts + apps/azure/src/hooks/...:
     thread setProcessContext/getProcessContext through to the base hook.
   - packages/data/src/samples/investigation-showcase.ts: seeds the Fill
     Weight showcase with a single "Fill" step, 4 tributaries (Line as the
     nominated subgroup axis), CTS=Fill_Weight_g with 495/500/505, and two
     hunches. The Frame workspace now opens ready-made for the pre-built
     Findings/Questions story — no rebuild required.

4. Gap detector microcopy polish
   - packages/core/src/frame/gapDetector.ts: unnamed steps produced
     "No CTQ at "". Add …" and Step "" has no tributaries.". Now reads
     "No CTQ at this step …" and "This step has no tributaries …" when
     step.name is empty/whitespace. Named steps still get quoted.
   - +2 tests in gapDetector.test.ts covering both branches.

Tests green: 44 frame (core), 21 ProcessMapBase (ui), 10 useDataIngestion
(hooks). pr-ready-check green (turbo tests + lint + docs:check).

Part of the FRAME umbrella (PRs #69/#70/#71/#72/#73/#74, ADR-070).

Co-Authored-By: ruflo <ruv@ruv.net>
@jukka-matti jukka-matti changed the base branch from feat/frame-azure-integration to main April 18, 2026 20:06
@jukka-matti jukka-matti force-pushed the feat/frame-capability-wiring branch from 6d9d338 to f499b21 Compare April 18, 2026 20:06
@jukka-matti jukka-matti merged commit bc51ac6 into main Apr 18, 2026
1 of 3 checks passed
@jukka-matti jukka-matti deleted the feat/frame-capability-wiring branch April 24, 2026 13:44
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.

1 participant