15 KiB
Implementation Plan: Product Knowledge & Contextual Help
Branch: 244-product-knowledge-contextual-help | Date: 2026-04-26 | Spec: /Users/ahmeddarrazi/Documents/projects/wt-plattform/specs/244-product-knowledge-contextual-help/spec.md
Input: Feature specification from /Users/ahmeddarrazi/Documents/projects/wt-plattform/specs/244-product-knowledge-contextual-help/spec.md
Note: This template is filled in by the /speckit.plan command. See .specify/scripts/ for helper scripts.
Summary
- Add a bounded
ProductKnowledgesupport namespace with one code-owned contextual-help catalog and one resolver that derive help payloads from existing glossary, reason-translation, operator-explanation, and docs-link helpers. - Adopt that resolver on two existing high-value surfaces only:
ManagedTenantOnboardingWizardand the support-diagnostic bundle used by tenant and operation-context previews. - Expose the same catalog as a safe machine-readable knowledge source for later internal AI/support use, while keeping the slice read-only, non-persistent, Livewire v4-compatible, and free of panel/provider/global-search/asset changes.
Technical Context
Language/Version: PHP 8.4 (Laravel 12)
Primary Dependencies: Laravel 12 + Filament v5 + Livewire v4 + Pest; existing PlatformVocabularyGlossary, ReasonPresenter, OperatorExplanationBuilder, SupportDiagnosticBundleBuilder, RequiredPermissionsLinks, ProviderReasonTranslator, and ManagedTenantOnboardingWizard
Storage: N/A - no new database or persisted product-knowledge truth
Testing: Pest unit + feature tests only
Validation Lanes: fast-feedback, confidence
Target Platform: Sail-backed Laravel admin panel under /admin and existing support-diagnostic previews in tenant and operation contexts
Project Type: web
Performance Goals: in-memory topic lookup only, no new remote calls during render, and no extra persistence or background work for the first slice
Constraints: no new database table, no public docs site, no chatbot, no localization overhaul, no new global-search resource, no panel provider changes, no new Filament assets, and no direct feature-level AI execution
Scale/Scope: 8 canonical first-slice help topics across onboarding and support diagnostics, 1 code-owned catalog, 1 resolver, 1 machine-readable knowledge source, and focused adoption on 2 existing operator surface families
First-Slice Topic Inventory
The implementation is locked to these eight canonical topic keys for the first slice:
admin-consent-requiredrequired-permissions-missingconnection-unhealthyverification-staleverification-faileddiagnostic-evidence-incompleteretryable-provider-failuremanual-handoff-required
Any change to this topic inventory requires an explicit spec update before implementation expands or swaps the slice.
UI / Surface Guardrail Plan
- Guardrail scope: changed surfaces
- Native vs custom classification summary: native Filament + shared diagnostics data
- Shared-family relevance: status messaging, docs links, troubleshooting guidance, support-diagnostic summaries
- State layers in scope: page, workflow step, detail reveal, action preview, diagnostic section detail
- Handling modes by drift class or surface: review-mandatory
- Repository-signal treatment: review-mandatory
- Special surface test profiles: standard-native-filament, monitoring-state-page
- Required tests or manual smoke: functional-core, state-contract
- Exception path and spread control: none
- Active feature PR close-out entry: Guardrail
Shared Pattern & System Fit
- Cross-cutting feature marker: yes
- Systems touched:
App\Filament\Pages\Workspaces\ManagedTenantOnboardingWizard,App\Support\SupportDiagnostics\SupportDiagnosticBundleBuilder,App\Support\Governance\PlatformVocabularyGlossary,App\Support\ReasonTranslation\ReasonPresenter,App\Support\Ui\OperatorExplanation\OperatorExplanationBuilder,App\Support\Providers\ProviderReasonTranslator, andApp\Support\Links\RequiredPermissionsLinks - Shared abstractions reused: glossary classification, reason envelopes, operator-explanation patterns, support-diagnostic section assembly, and existing provider docs-link helpers
- New abstraction introduced? why?: one bounded contextual-help catalog plus one resolver are justified because the repo has truthful status and glossary primitives already, but it has no shared product-knowledge layer with stable topic keys, troubleshooting guidance, or machine-readable knowledge source
- Why the existing abstraction was sufficient or insufficient: existing abstractions explain current state, but not reusable contextual help. They are sufficient as inputs and insufficient as the final cross-surface help contract.
- Bounded deviation / spread control: no page-local help registries, no second glossary, and no product-knowledge persistence. Provider-specific remediation remains bounded to provider-owned topic entries and existing link helpers only.
OperationRun UX Impact
- Touches OperationRun start/completion/link UX?: no
- Central contract reused: N/A
- Delegated UX behaviors: N/A
- Surface-owned behavior kept local: N/A
- Queued DB-notification policy: N/A
- Terminal notification path: N/A
- Exception path: none
Provider Boundary & Portability Fit
- Shared provider/platform boundary touched?: yes
- Provider-owned seams:
RequiredPermissionsLinks, provider-specific consent/permission guidance, andProviderReasonTranslator-backed help topics - Platform-core seams: contextual-help topic IDs, glossary mapping, onboarding help rendering, support-diagnostic help rendering, and the machine-readable catalog export
- Neutral platform terms / contracts preserved: contextual help, help topic, troubleshooting guidance, next action, support diagnostics, readiness guidance
- Retained provider-specific semantics and why: Microsoft admin consent and required-permissions steps remain provider-specific because those remediation paths are concrete current-release truth rather than speculative portability work
- Bounded extraction or follow-up path:
document-in-featurefor future localization compatibility; no broader follow-up is required for the first slice
Constitution Check
GATE: Must pass before implementation begins. Re-check after design changes.
- Inventory-first / snapshots-second: PASS - contextual help is derived from existing truth only and does not become a new system-of-record
- Read/write separation: PASS - the slice is read-only guidance only and introduces no new mutation flow
- Graph contract path: PASS - the feature adds no new Microsoft Graph calls
- RBAC-UX / workspace isolation / tenant isolation: PASS - existing onboarding, tenant, and operation-view entitlements stay authoritative and contextual help resolves only after host-surface authorization succeeds
- Shared pattern reuse /
XCUT-001: PASS - the design explicitly extends glossary, reason, operator-explanation, support-diagnostic, and existing link helpers instead of adding local help prose paths - Proportionality /
PROP-001andABSTR-001: PASS - one bounded catalog and one resolver are the narrowest reusable shape that avoids page-local drift - Persisted truth /
PERSIST-001: PASS - no new persistence is introduced - UI semantics /
UI-SEM-001: PASS - the feature adds progressive disclosure help only and does not replace the host surface's truth model - Filament-native UI /
UI-FIL-001: PASS - onboarding and preview hosts remain native Filament/shared surfaces; no bespoke status cards or asset changes are planned - Livewire v4 / Filament v5: PASS - the feature remains fully within the existing Filament v5 + Livewire v4 stack and requires no provider registration changes beyond the current
bootstrap/providers.phplocation - Global search rule: N/A - no new resource or global-search configuration is introduced
- Destructive actions: PASS - no new destructive action is introduced; existing confirmations remain unchanged
- Asset strategy: PASS - no new global or on-demand assets are planned, so
filament:assetsdeployment behavior is unchanged - Test governance /
TEST-GOV-001: PASS - proof remains in focused unit + feature tests only
Test Governance Check
- Test purpose / classification by changed surface: Unit for catalog shape, resolver behavior, and fallback/export safety; Feature for onboarding help rendering, support-diagnostic help rendering, and authorization-safe degradation
- Affected validation lanes: fast-feedback, confidence
- Why this lane mix is the narrowest sufficient proof: the feature is server-driven and view-model oriented; browser automation would duplicate what focused unit and feature tests can already prove
- Narrowest proving command(s):
export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Unit/Support/ProductKnowledge/ContextualHelpCatalogTest.php tests/Unit/Support/ProductKnowledge/ContextualHelpResolverTest.php tests/Unit/Support/ProductKnowledge/ContextualHelpFallbackTest.phpexport PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Onboarding/ProductKnowledgeOnboardingHelpTest.php tests/Feature/SupportDiagnostics/ProductKnowledgeSupportDiagnosticHelpTest.php tests/Feature/SupportDiagnostics/ProductKnowledgeAuthorizationTest.php
- Fixture / helper / factory / seed / context cost risks: reuse existing workspace, onboarding draft, tenant, provider connection, operation run, and support-diagnostic fixtures; avoid new browser or provider-emulator defaults
- Expensive defaults or shared helper growth introduced?: no
- Heavy-family additions, promotions, or visibility changes: none
- Surface-class relief / special coverage rule: standard-native-filament relief for onboarding plus one monitoring-state-page regression for the operation-context support-diagnostic host
- Closing validation and reviewer handoff: reviewers should verify registry-backed help only, progressive disclosure, glossary alignment, authorization-safe link resolution, graceful fallback on missing topics, and zero panel/provider/asset/global-search drift
- Budget / baseline / trend follow-up: none expected beyond ordinary feature-local upkeep
- Review-stop questions: did the implementation add page-local help prose, new persistence, or new AI execution; do missing topics fail gracefully; do help links stay entitlement-safe?
- Escalation path:
reject-or-splitif the implementation grows into a public docs platform, localization rewrite, or AI execution feature; otherwise changes stay inside this feature - Active feature PR close-out entry: Guardrail
- Why no dedicated follow-up spec is needed: the first slice is intentionally narrow and can land independently before broader localization, support, or AI work
Project Structure
Documentation (this feature)
specs/244-product-knowledge-contextual-help/
├── checklists/
│ └── requirements.md
├── spec.md
├── plan.md
└── tasks.md
Source Code (repository root)
apps/platform/
├── app/
│ ├── Filament/
│ │ ├── Pages/
│ │ │ ├── Operations/TenantlessOperationRunViewer.php
│ │ │ ├── TenantDashboard.php
│ │ │ └── Workspaces/ManagedTenantOnboardingWizard.php
│ │ └── Support/
│ ├── Support/
│ │ ├── Governance/PlatformVocabularyGlossary.php
│ │ ├── Links/RequiredPermissionsLinks.php
│ │ ├── ProductKnowledge/
│ │ │ ├── ContextualHelpCatalog.php
│ │ │ └── ContextualHelpResolver.php
│ │ ├── ReasonTranslation/ReasonPresenter.php
│ │ ├── SupportDiagnostics/SupportDiagnosticBundleBuilder.php
│ │ └── Ui/OperatorExplanation/OperatorExplanationBuilder.php
│ └── Services/
└── tests/
├── Unit/Support/ProductKnowledge/
│ ├── ContextualHelpCatalogTest.php
│ ├── ContextualHelpResolverTest.php
│ └── ContextualHelpFallbackTest.php
└── Feature/
├── Onboarding/ProductKnowledgeOnboardingHelpTest.php
└── SupportDiagnostics/
├── ProductKnowledgeAuthorizationTest.php
└── ProductKnowledgeSupportDiagnosticHelpTest.php
Structure Decision: Single Laravel web application. The implementation adds one small support namespace and adopts it on existing onboarding and support-diagnostic surfaces only.
Complexity Tracking
No constitution violations are required. The only new structure is the explicitly justified code-owned contextual-help catalog plus resolver.
Proportionality Review
- Current operator problem: operators still need founder explanation or scattered docs to interpret onboarding blockers and support-diagnostic dominant issues safely
- Existing structure is insufficient because: the repo has truthful glossary, reason, and diagnostic primitives but no versioned, reusable product-knowledge layer
- Narrowest correct implementation: one code-owned catalog plus one resolver reused by onboarding and support diagnostics only
- Ownership cost created: topic keys, docs-link mappings, fallback behavior, and focused tests
- Alternative intentionally rejected: page-local prose, public docs platform, CMS/editor, or AI execution layer
- Release truth: current-release truth
Rollout & Risk Controls
- Start with onboarding guidance and support diagnostics only. Any third adoption surface requires explicit scope review.
- Keep help blocks progressive and subordinate to the host surface's existing status or diagnostic truth.
- Use only approved docs-link helpers or stable URLs for the first slice. No free-text or user-authored help content is allowed.
- Keep the machine-readable knowledge source internal and code-owned. No runtime AI invocation or customer-facing knowledge export is part of this slice.
Implementation Outline
- Add
App\Support\ProductKnowledge\ContextualHelpCatalogandContextualHelpResolveras the single shared path for first-slice help topics. - Integrate onboarding help topic selection inside
ManagedTenantOnboardingWizardusing the existing readiness, permission, and verification signals already present on the page. - Integrate contextual help into
SupportDiagnosticBundleBuilderso tenant and operation-context previews render the same help payload from the same topic keys. - Expose a safe machine-readable knowledge-source method from the catalog or resolver and add focused unit + feature coverage for rendering, authorization, and fallback.
Constitution Check (Post-Design)
Re-check result: PASS. The plan stays bounded to one code-owned catalog and one resolver, reuses existing glossary/reason/support primitives, adds no new persistence, keeps Filament v5 / Livewire v4 unchanged, leaves provider registration in bootstrap/providers.php untouched, introduces no global-search or asset changes, and keeps proof in narrow unit + feature coverage only.