chore: fix prettier formatting, regenerate phase9 manifest, add missing config files (.env.example, .node-version, .nvmrc, CI workflow)
CI / test (push) Failing after 28s

This commit is contained in:
root
2026-06-25 20:12:15 -04:00
parent c43620a005
commit b7a640735c
36 changed files with 3402 additions and 1857 deletions
@@ -1,17 +1,14 @@
# Component Contracts
Every component below is implemented once for all locales, directions, and themes. Props are semantic; components do not fetch translations internally unless the architecture establishes a single typed content boundary.
## SiteHeader
**Purpose:** Primary navigation, brand, locale/theme controls, login, demo CTA
**States:** `default,scrolled`
**States:** `default,scrolled`
**Typed data:** `HeaderModel`
**Typed data:** `HeaderModel`
**Copy namespace:** `header.*`
@@ -23,14 +20,13 @@ Every component below is implemented once for all locales, directions, and theme
**Content rule:** Block size is content-driven. Unsupported evidence suppresses the component or uses the explicitly approved neutral variant.
## MobileDrawer
**Purpose:** Compact/medium navigation overlay
**States:** `closed,open`
**States:** `closed,open`
**Typed data:** `DrawerModel`
**Typed data:** `DrawerModel`
**Copy namespace:** `header.*`
@@ -42,14 +38,13 @@ Every component below is implemented once for all locales, directions, and theme
**Content rule:** Block size is content-driven. Unsupported evidence suppresses the component or uses the explicitly approved neutral variant.
## LocaleSelector
**Purpose:** Switch locale by stable route ID
**States:** `closed,open,disabled`
**States:** `closed,open,disabled`
**Typed data:** `LocaleSelectorProps`
**Typed data:** `LocaleSelectorProps`
**Copy namespace:** `language names`
@@ -61,14 +56,13 @@ Every component below is implemented once for all locales, directions, and theme
**Content rule:** Block size is content-driven. Unsupported evidence suppresses the component or uses the explicitly approved neutral variant.
## ThemeSelector
**Purpose:** Set Light/Dark/System preference
**States:** `light,dark,system`
**States:** `light,dark,system`
**Typed data:** `ThemeSelectorProps`
**Typed data:** `ThemeSelectorProps`
**Copy namespace:** `header.light/dark/system`
@@ -80,14 +74,13 @@ Every component below is implemented once for all locales, directions, and theme
**Content rule:** Block size is content-driven. Unsupported evidence suppresses the component or uses the explicitly approved neutral variant.
## HeroSection
**Purpose:** Communicate category, promise, primary and secondary actions
**States:** `default`
**States:** `default`
**Typed data:** `HeroModel`
**Typed data:** `HeroModel`
**Copy namespace:** `hero.*`
@@ -99,14 +92,13 @@ Every component below is implemented once for all locales, directions, and theme
**Content rule:** Block size is content-driven. Unsupported evidence suppresses the component or uses the explicitly approved neutral variant.
## ProductPreview
**Purpose:** Illustrative/evidence-governed product visual
**States:** `illustrative,approved-capture`
**States:** `illustrative,approved-capture`
**Typed data:** `ProductPreviewModel`
**Typed data:** `ProductPreviewModel`
**Copy namespace:** `preview.*`
@@ -118,14 +110,13 @@ Every component below is implemented once for all locales, directions, and theme
**Content rule:** Block size is content-driven. Unsupported evidence suppresses the component or uses the explicitly approved neutral variant.
## LifecycleProof
**Purpose:** Show operational coverage without customer logos
**States:** `default`
**States:** `default`
**Typed data:** `LifecycleItem[]`
**Typed data:** `LifecycleItem[]`
**Copy namespace:** `trust.*`
@@ -137,14 +128,13 @@ Every component below is implemented once for all locales, directions, and theme
**Content rule:** Block size is content-driven. Unsupported evidence suppresses the component or uses the explicitly approved neutral variant.
## ComparisonSection
**Purpose:** Fragmented versus connected workflow
**States:** `default`
**States:** `default`
**Typed data:** `ComparisonModel`
**Typed data:** `ComparisonModel`
**Copy namespace:** `comparison.*`
@@ -156,14 +146,13 @@ Every component below is implemented once for all locales, directions, and theme
**Content rule:** Block size is content-driven. Unsupported evidence suppresses the component or uses the explicitly approved neutral variant.
## WorkflowSteps
**Purpose:** Four-step rental flow and tour source
**States:** `default`
**States:** `default`
**Typed data:** `WorkflowStep[]`
**Typed data:** `WorkflowStep[]`
**Copy namespace:** `workflow.*`
@@ -175,14 +164,13 @@ Every component below is implemented once for all locales, directions, and theme
**Content rule:** Block size is content-driven. Unsupported evidence suppresses the component or uses the explicitly approved neutral variant.
## RoleCards
**Purpose:** Explain value by operating role
**States:** `default`
**States:** `default`
**Typed data:** `RoleCard[]`
**Typed data:** `RoleCard[]`
**Copy namespace:** `roles.*`
@@ -194,14 +182,13 @@ Every component below is implemented once for all locales, directions, and theme
**Content rule:** Block size is content-driven. Unsupported evidence suppresses the component or uses the explicitly approved neutral variant.
## ModuleGrid
**Purpose:** Describe approved product modules
**States:** `default`
**States:** `default`
**Typed data:** `ModuleCard[]`
**Typed data:** `ModuleCard[]`
**Copy namespace:** `modules.*`
@@ -213,14 +200,13 @@ Every component below is implemented once for all locales, directions, and theme
**Content rule:** Block size is content-driven. Unsupported evidence suppresses the component or uses the explicitly approved neutral variant.
## MeasurementPlan
**Purpose:** Show KPI definitions without invented outcomes
**States:** `default`
**States:** `default`
**Typed data:** `MetricDefinition[]`
**Typed data:** `MetricDefinition[]`
**Copy namespace:** `results.*`
@@ -232,14 +218,13 @@ Every component below is implemented once for all locales, directions, and theme
**Content rule:** Block size is content-driven. Unsupported evidence suppresses the component or uses the explicitly approved neutral variant.
## IntegrationCategories
**Purpose:** Neutral category list
**States:** `default`
**States:** `default`
**Typed data:** `IntegrationCategory[]`
**Typed data:** `IntegrationCategory[]`
**Copy namespace:** `integrations.*`
@@ -251,14 +236,13 @@ Every component below is implemented once for all locales, directions, and theme
**Content rule:** Block size is content-driven. Unsupported evidence suppresses the component or uses the explicitly approved neutral variant.
## SecurityChecklist
**Purpose:** Evidence-request checklist
**States:** `default`
**States:** `default`
**Typed data:** `SecurityCheck[]`
**Typed data:** `SecurityCheck[]`
**Copy namespace:** `security.*`
@@ -270,14 +254,13 @@ Every component below is implemented once for all locales, directions, and theme
**Content rule:** Block size is content-driven. Unsupported evidence suppresses the component or uses the explicitly approved neutral variant.
## PricingPreview
**Purpose:** Explain pricing factors and demo route
**States:** `quote-only,approved-pricing`
**States:** `quote-only,approved-pricing`
**Typed data:** `PricingModel`
**Typed data:** `PricingModel`
**Copy namespace:** `pricing.*`
@@ -289,14 +272,13 @@ Every component below is implemented once for all locales, directions, and theme
**Content rule:** Block size is content-driven. Unsupported evidence suppresses the component or uses the explicitly approved neutral variant.
## FAQAccordion
**Purpose:** Localized questions and answers
**States:** `closed,open`
**States:** `closed,open`
**Typed data:** `FaqItem[]`
**Typed data:** `FaqItem[]`
**Copy namespace:** `faq.*`
@@ -308,14 +290,13 @@ Every component below is implemented once for all locales, directions, and theme
**Content rule:** Block size is content-driven. Unsupported evidence suppresses the component or uses the explicitly approved neutral variant.
## FinalCTA
**Purpose:** Final conversion block and approved secondary contact
**States:** `default`
**States:** `default`
**Typed data:** `FinalCtaModel`
**Typed data:** `FinalCtaModel`
**Copy namespace:** `finalCta.*`
@@ -327,14 +308,13 @@ Every component below is implemented once for all locales, directions, and theme
**Content rule:** Block size is content-driven. Unsupported evidence suppresses the component or uses the explicitly approved neutral variant.
## SiteFooter
**Purpose:** Localized navigation, legal, evidence status internal only
**States:** `default`
**States:** `default`
**Typed data:** `FooterModel`
**Typed data:** `FooterModel`
**Copy namespace:** `footer.*`
@@ -346,14 +326,13 @@ Every component below is implemented once for all locales, directions, and theme
**Content rule:** Block size is content-driven. Unsupported evidence suppresses the component or uses the explicitly approved neutral variant.
## DemoDialog
**Purpose:** Qualification form and submission states
**States:** `idle,invalid,submitting,success,recoverable-error,terminal-error`
**States:** `idle,invalid,submitting,success,recoverable-error,terminal-error`
**Typed data:** `DemoFormProps`
**Typed data:** `DemoFormProps`
**Copy namespace:** `form.*`
@@ -365,14 +344,13 @@ Every component below is implemented once for all locales, directions, and theme
**Content rule:** Block size is content-driven. Unsupported evidence suppresses the component or uses the explicitly approved neutral variant.
## ProductTourDialog
**Purpose:** Four-step guided overview
**States:** `step-1,step-2,step-3,step-4,complete`
**States:** `step-1,step-2,step-3,step-4,complete`
**Typed data:** `TourProps`
**Typed data:** `TourProps`
**Copy namespace:** `tour.*`