feat(wedge): PR-WV1-5 — tier-gating retirement + nav reorder#188
Merged
Conversation
Drop the always-paid / always-team conditional branches for retired tier helpers (hasTeamFeatures, isPaidTier, shouldShowBranding) across ~26 production files. Under the wedge V1 single-SKU model (ADR-082) every customer has the full feature surface, so the gates collapse to the team-tier path with the import removed. Includes the B-class call sites (InvestigationWorkspace photo/Teams camera handlers; ReportView publish + share-link controls): wedge V1 makes both always-on for paid customers, so the gates drop without needing canAccess() plumbing in this PR. Also fixes a pre-existing absorbed lint violation in ChartSignature: hardcoded '#64748b' -> chromeColors.labelMuted (per the fix-absorbed-violations-at-seam rule). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Cloud sync is always-on under wedge V1 (every customer has the paid Azure managed app). Drops the 11 `if (!hasTeamFeatures())` early-return guards plus the supporting "Standard plan: local-only" comments and the no-team-features online-handler short-circuit. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…rompt Wedge V1 single SKU has no tier-switching surface, no plan-management tab, and no upgrade flow. Removes: - apps/azure/src/components/settings/DevTierSwitcher.tsx (dev-only tier override widget) - apps/azure/src/components/admin/AdminPlanTab.tsx + the AdminHub wiring for the now-deleted "Plan" tab (Cpu icon + 'plan' tab key + tabpanel) - packages/ui/src/components/UpgradePrompt/* (whole subtree + barrel export) — no upgrade flow under single SKU Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Drop the useTier() consumer and the now-deleted UpgradePrompt render
in the shared PerformanceSetupPanelBase. The Azure wrapper now imports
MAX_CHANNELS + validateChannelCount directly from @variscout/core, and
the base component exposes a smaller ChannelLimitProps surface (just
{maxChannels, validateChannels}) instead of the old TierProps shape
(tier, upgradeUrl, validateChannels).
The channel-limit-exceeded UI swaps the UpgradePrompt banner for a
plain reduce-selection AlertTriangle banner — no upgrade path under
single SKU.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…feature flag)
Knowledge Base availability under wedge V1 is controlled by the
isPreviewEnabled('knowledge-base') feature flag and the configured
search endpoint — no separate team-tier gate.
- searchService.ts: drop hasKnowledgeBase() from isKnowledgeBaseAvailable()
and searchDocuments() guards
- PISection.tsx: rename isTeamWithKB -> isKBAvailable, drop the
hasKnowledgeBase() check (keeps isPreviewEnabled gate)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Under wedge V1 single SKU every customer has the full CoScout tool surface. Drops the isTeamPlan parameter + tier-based filtering across the CoScout prompt assembly + tool registry: - types.ts / index.ts: drop isTeamPlan from AssembleCoScoutPromptOptions - legacy.ts: drop isTeamPlan from BuildCoScoutToolsOptions; inline the always-true sharing-tool + IMPROVE notify_action_owners branches - tools/registry.ts: drop the `tier: 'team'` entries on share_finding, publish_report, notify_action_owners; drop the tier check in getToolsForPhase() - useAICoScout.ts: drop isTeamPlan plumb-through - useAIOrchestration.ts: drop the isTeamPlan() import + call - teamToolHandlers.ts: update header doc-comment to drop "team-only" framing (file/function names stable — rename cascade out of scope) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Drop the two retired licensing/plan type unions and the associated TierLimits interface from @variscout/core's public types surface. Channel-limit consumers continue to use ChannelLimitResult (re-exported from packages/core/src/tier.ts). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Update 18 test files to match the retired tier surface:
- Drop vi.mock('@variscout/core', ...) blocks that overrode retired
helpers (hasTeamFeatures, isPaidTier, hasKnowledgeBase, isTeamPlan,
shouldShowBranding) — keep importActual partial-mock pattern.
- Drop configureTier(...) / configurePlan(...) setup calls.
- Drop tests that asserted tier-conditional behavior (toggle is gone);
repurpose where natural to verify the always-on behavior.
- Drop useTier() mocks (hook no longer exists).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Rephrase "Azure paid" → "VariScout for Azure" in ReportViewBase share-link locked branch (PWA-vs-Azure marker, not commercial tier marker). Drop the 10 admin.plan*/admin.currentPlan* i18n keys (types.ts + all 32 locales) and 2 upgrade.free/fromPrice keys orphaned by AdminPlanTab deletion in Task 3. Scrub residual "Team tier" / "paid tier" vocabulary from JSDoc comments. Fix pre-existing unused-var lint error in e2e user-flows spec. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…unctions Adds no-restricted-imports rule to eslint.config.js blocking all 24 retired tier symbols from @variscout/core + useTier from @variscout/hooks (ADR-082). Fixes two Dashboard test files that used wildcard namespace imports to conform to the new rule (refactored to named import + vi.mocked pattern).
This was referenced May 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Retire
isPaidTier()/hasTeamFeatures()and the wider tier/plan gating across the codebase (122 files, +726/-3340 lines) under the wedge V1 single €99 SKU. Reorder + rename the 7-tab nav to amended workflow order Home · Project · Process · Analyze · Investigation · Improve · Report perdocs/superpowers/specs/2026-05-16-improve-tab-amendment-design.md.What changed
Core (Task 1-2):
packages/core/src/tier.tscollapsed 293 → 26 lines; onlyMAX_CHANNELS,CHANNEL_WARNING_THRESHOLD,validateChannelCount,ChannelLimitResultsurvive.packages/hooks/src/useTier.ts+apps/azure/src/lib/tierConfig.tsdeleted.Apps + UI + AI sweep (Task 3, Architect→Migration→Validator):
hasTeamFeatures()/isPaidTier()conditional retired.storage.tsremoved (always-on).PerformanceSetupPanelrewired fromuseTier()to directMAX_CHANNELS+validateChannelCount;PerformanceSetupPanelBaseinterface slimmed.DevTierSwitcher.tsx,AdminPlanTab.tsx,packages/ui/src/components/UpgradePrompt/entire subtrees deleted.isTeamPlanparameter dropped from CoScout AI prompt registry + hooks + AI orchestration.hasKnowledgeBase()gates dropped;isPreviewEnabled('knowledge-base')preserved.LicenseTier+MarketplacePlantype exports deleted.vi.mockimportActualpartial pattern preserved.B-class deferral (documented): Spec mandated
canAccess(userId, members, action)rewires atInvestigationWorkspace.tsx:973,980andReportView.tsx:683,684. Implementer folded into A-class as always-on (no behavioral regression — deleted gates were tier gates returning true for every paid customer). Logged atdocs/investigations.mdPR-WV1-5 entry as must-fix-before-V1-launch; Sponsor read-only role enforcement requires the canAccess wiring before any Sponsor-facing release.UI copy + i18n (Task 5):
admin.plan*+upgrade.*i18n keys deleted across 32 locale files + types.ts.Nav reorder + 7-tab renames (Task 6) per 2026-05-16 amendment:
Home · Project · Process · Analyze · Investigation · Improve · Report.PhaseIdunion renamed;App.tsxadds forward + reverse bridges to stablepanelsStore.activeView.activeViewenum kept stable (out-of-scope refactor).workspace.frame→workspace.process,workspace.analysis→workspace.analyze.ESLint guard (Task 7):
no-restricted-importsrule blocks re-introduction of the 24 retired tier functions +useTierhook.Plan + spec
docs/superpowers/plans/2026-05-17-pr-wv1-5-tier-gating-retirement.mddocs/superpowers/plans/2026-05-16-wedge-implementation.mddocs/superpowers/specs/2026-05-16-wedge-architecture-design.mddocs/superpowers/specs/2026-05-16-improve-tab-amendment-design.mdDispatch shape (research-backed, applied to Task 3)
Task 3's 50-file sweep used the Architect → Migration → Validator internal phasing pattern (Anthropic 2026 subagent guidance + Augment single-vs-multi-agent + Martin Fowler codemods). One Opus implementer dispatch with per-category commits + per-category validator gates, instead of 6-8 split sub-dispatches. Pattern documented in
feedback_atomic_sweep_one_dispatch+CLAUDE.mdworkflow carve-out.Test plan
tsc --noEmitgreen for @variscout/hooks, @variscout/ui, @variscout/azure-app. Pre-existing TSC errors onmainin @variscout/core (ActionItem/OutcomeSpec test fixtures) and @variscout/pwa (PhaseId, fixed bybd3eb5a3reverse mapper) unchanged.pnpm lintgreen (no-restricted-imports rule active).pnpm docs:checkgreen.pnpm --filter @variscout/pwa buildgreen.packages/ui/src/components/Canvas/__tests__/Canvas.test.tsxworker times out in full UI suite (1 test file of 223). Pre-existing — same hang reproduces onmain. NOT introduced by this PR. To be investigated as a separate test-infra issue.(No browser walk per
feedback_wedge_v1_no_migration_no_backcompat— wedge V1 has no users yet; pr-ready-check + Opus review is sufficient.)Wedge progress
docs/investigations.md)🤖 Generated with Claude Code