Skip to content

Composite revenue carrier (ADR 0014) + dashboard panel relocation - #15

Merged
piotrlangowski merged 3 commits into
mainfrom
feat/composite-carrier-panel-relocation
Jul 8, 2026
Merged

Composite revenue carrier (ADR 0014) + dashboard panel relocation#15
piotrlangowski merged 3 commits into
mainfrom
feat/composite-carrier-panel-relocation

Conversation

@piotrlangowski

Copy link
Copy Markdown
Owner

Summary

Two related but separable changes, kept as one PR with two commits since they touch overlapping dashboard files:

1. Composite revenue carrier (ADR 0014) + wizard multi-select (edc0b0b)

  • New composite carrier sums Cohort ARPU, Plan seats, Service monetization, and Credit pools in one scenario, with automatic double-counting prevention via PerspectiveRelation folding rules (cohort↔plan upsell, copilot↔ARPU folding, pool↔service exclusive billing) and incommensurable-population detection (>1.2x population mismatch).
  • TriangulationPanel gets a Composite Component Breakdown table (additive/folded/pool-billed/blocked roles) and relation comparability warnings.
  • The scenario wizard's "How does this initiative earn revenue?" step is now a multi-select instead of a single choice: Cohort / Plan / Monetization tiles can be combined freely, selecting 2+ auto-activates composite, and a dedicated composite bar (visually separated below a divider) selects all three at once. A guard prevents deselecting the last active dimension.
  • Pricing Plans and Feature Packs sections in the wizard are now always editable (previously hidden under non-matching carriers) with a diagnostic badge instead, so seat/pack data is never silently dropped when switching carriers.

2. Scenario Configuration Panel relocation (568fecf)

  • Extracts the scenario configuration controls out of the scenario dashboard page into a dedicated ScenarioConfigurationPanel component, freeing vertical space for the central chart.
  • DiagnosticsBanner becomes collapsible (grouped warning/note counts) instead of one card per diagnostic item.

Test plan

  • npm run check — 0 errors (75 pre-existing warnings, unrelated)
  • npm test — 235/235 passing across 11 suites
  • Manually verified in-browser (dev server + preview tools) on /scenarios/new:
    • single-dimension selection (cohort / plan / monetization) each resolve to the correct modelingType/revenueCarrier hidden fields
    • selecting 2 dimensions auto-activates composite; clicking the composite bar directly selects all three
    • attempting to deselect the last active dimension is blocked
    • monetization sub-carrier radio (Atomic Service / Feature Pack / Unified Credit Pool) only shows when Monetization is the sole selection, and switching it correctly re-derives revenueCarrier and the pool-tier required attribute
    • edit-mode hydration verified against an existing GTM/plan-carrier scenario — correct tile reflected on load
  • Manual smoke test of the relocated ScenarioConfigurationPanel dashboard layout (not re-verified in this session — carried over from an earlier session's work)

🤖 Generated with Claude Code

piotrlangowski and others added 3 commits July 6, 2026 23:12
Introduces the composite carrier so a scenario can sum Cohort ARPU,
Plan seats, Service monetization, and Credit pools simultaneously,
with automatic double-counting prevention via PerspectiveRelation
folding (cohort-plan upsell, copilot-ARPU folding, pool-service
exclusive billing) and incommensurable-population detection.

The wizard's "How does this initiative earn revenue?" step becomes a
multi-select: choosing 2+ mechanisms auto-activates composite, and a
dedicated composite toggle selects all three at once, replacing the
old single-choice routing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Extracts the scenario configuration controls out of the scenario
dashboard page into a dedicated ScenarioConfigurationPanel component
and makes the diagnostics banner collapsible (grouped warning/note
counts instead of one card per item), freeing vertical space for the
central chart.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@piotrlangowski
piotrlangowski merged commit 161a162 into main Jul 8, 2026
2 checks passed
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