spec: finalize 223 AstroDeck rebuild planning consistency (#262)
Some checks failed
Main Confidence / confidence (push) Failing after 44s
Some checks failed
Main Confidence / confidence (push) Failing after 44s
## Summary - finalize Spec 223 planning artifact set for AstroDeck website rebuild - align `spec.md`, `plan.md`, `tasks.md`, `research.md`, `data-model.md`, `quickstart.md`, and contract schema - add/complete inventory, mapping, exception, drift-follow-up, and supersession artifacts - mark legacy website-spec task references as superseded and wire follow-up ownership ## Key Outcomes - no remaining cross-artifact consistency findings in the Spec 223 bundle - explicit Spec 213 handling path added - material-drift follow-up rules normalized - exception register and documented exception model made explicit and schema-backed ## Validation - Integrated browser smoke check passed for main website routes (`/`, `/product`, `/trust`, `/changelog`, `/contact`, `/privacy`, `/imprint`, `/legal`, `/security-trust`) - no console errors/warnings observed during route smoke navigation - YAML contract parses successfully Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #262
This commit is contained in:
parent
e15d80cca5
commit
71f94c3afa
4
.github/agents/copilot-instructions.md
vendored
4
.github/agents/copilot-instructions.md
vendored
@ -230,6 +230,8 @@ ## Active Technologies
|
|||||||
- PostgreSQL via existing `findings`, `tenants`, `tenant_memberships`, and workspace context session state; no schema changes planned (221-findings-operator-inbox)
|
- PostgreSQL via existing `findings`, `tenants`, `tenant_memberships`, and workspace context session state; no schema changes planned (221-findings-operator-inbox)
|
||||||
- PHP 8.4.15, Laravel 12, Filament v5, Livewire v4, Blade + Filament admin pages/tables/actions/notifications, `Finding`, `FindingResource`, `FindingWorkflowService`, `FindingPolicy`, `CapabilityResolver`, `CanonicalAdminTenantFilterState`, `CanonicalNavigationContext`, `WorkspaceContext`, and `UiEnforcement` (222-findings-intake-team-queue)
|
- PHP 8.4.15, Laravel 12, Filament v5, Livewire v4, Blade + Filament admin pages/tables/actions/notifications, `Finding`, `FindingResource`, `FindingWorkflowService`, `FindingPolicy`, `CapabilityResolver`, `CanonicalAdminTenantFilterState`, `CanonicalNavigationContext`, `WorkspaceContext`, and `UiEnforcement` (222-findings-intake-team-queue)
|
||||||
- PostgreSQL via existing `findings`, `tenants`, `tenant_memberships`, `audit_logs`, and workspace session context; no schema changes planned (222-findings-intake-team-queue)
|
- PostgreSQL via existing `findings`, `tenants`, `tenant_memberships`, `audit_logs`, and workspace session context; no schema changes planned (222-findings-intake-team-queue)
|
||||||
|
- TypeScript 5.9, Astro 6, Node.js 20+ + Astro, astro-icon, Tailwind CSS v4, Playwright 1.59 (223-astrodeck-website-rebuild)
|
||||||
|
- File-based route files, Astro content collections under `src/content`, public assets, and planning documents under `specs/223-astrodeck-website-rebuild`; no database (223-astrodeck-website-rebuild)
|
||||||
- PHP 8.4.15, Laravel 12, Filament v5, Livewire v4, Blade + Laravel notifications (`database` channel), Filament database notifications, `Finding`, `FindingWorkflowService`, `FindingSlaPolicy`, `AlertRule`, `AlertDelivery`, `AlertDispatchService`, `EvaluateAlertsJob`, `CapabilityResolver`, `WorkspaceContext`, `TenantMembership`, `FindingResource` (224-findings-notifications-escalation)
|
- PHP 8.4.15, Laravel 12, Filament v5, Livewire v4, Blade + Laravel notifications (`database` channel), Filament database notifications, `Finding`, `FindingWorkflowService`, `FindingSlaPolicy`, `AlertRule`, `AlertDelivery`, `AlertDispatchService`, `EvaluateAlertsJob`, `CapabilityResolver`, `WorkspaceContext`, `TenantMembership`, `FindingResource` (224-findings-notifications-escalation)
|
||||||
- PostgreSQL via existing `findings`, `alert_rules`, `alert_deliveries`, `notifications`, `tenant_memberships`, and `audit_logs`; no schema changes planned (224-findings-notifications-escalation)
|
- PostgreSQL via existing `findings`, `alert_rules`, `alert_deliveries`, `notifications`, `tenant_memberships`, and `audit_logs`; no schema changes planned (224-findings-notifications-escalation)
|
||||||
|
|
||||||
@ -266,9 +268,11 @@ ## Code Style
|
|||||||
PHP 8.4.15: Follow standard conventions
|
PHP 8.4.15: Follow standard conventions
|
||||||
|
|
||||||
## Recent Changes
|
## Recent Changes
|
||||||
|
- 223-astrodeck-website-rebuild: Added TypeScript 5.9, Astro 6, Node.js 20+ + Astro, astro-icon, Tailwind CSS v4, Playwright 1.59
|
||||||
- 224-findings-notifications-escalation: Added PHP 8.4.15, Laravel 12, Filament v5, Livewire v4, Blade + Laravel notifications (`database` channel), Filament database notifications, `Finding`, `FindingWorkflowService`, `FindingSlaPolicy`, `AlertRule`, `AlertDelivery`, `AlertDispatchService`, `EvaluateAlertsJob`, `CapabilityResolver`, `WorkspaceContext`, `TenantMembership`, `FindingResource`
|
- 224-findings-notifications-escalation: Added PHP 8.4.15, Laravel 12, Filament v5, Livewire v4, Blade + Laravel notifications (`database` channel), Filament database notifications, `Finding`, `FindingWorkflowService`, `FindingSlaPolicy`, `AlertRule`, `AlertDelivery`, `AlertDispatchService`, `EvaluateAlertsJob`, `CapabilityResolver`, `WorkspaceContext`, `TenantMembership`, `FindingResource`
|
||||||
- 222-findings-intake-team-queue: Added PHP 8.4.15, Laravel 12, Filament v5, Livewire v4, Blade + Filament admin pages/tables/actions/notifications, `Finding`, `FindingResource`, `FindingWorkflowService`, `FindingPolicy`, `CapabilityResolver`, `CanonicalAdminTenantFilterState`, `CanonicalNavigationContext`, `WorkspaceContext`, and `UiEnforcement`
|
- 222-findings-intake-team-queue: Added PHP 8.4.15, Laravel 12, Filament v5, Livewire v4, Blade + Filament admin pages/tables/actions/notifications, `Finding`, `FindingResource`, `FindingWorkflowService`, `FindingPolicy`, `CapabilityResolver`, `CanonicalAdminTenantFilterState`, `CanonicalNavigationContext`, `WorkspaceContext`, and `UiEnforcement`
|
||||||
- 221-findings-operator-inbox: Added PHP 8.4.15, Laravel 12, Filament v5, Livewire v4, Blade + Filament admin panel pages, `Finding`, `FindingResource`, `WorkspaceOverviewBuilder`, `WorkspaceContext`, `WorkspaceCapabilityResolver`, `CapabilityResolver`, `CanonicalAdminTenantFilterState`, and `CanonicalNavigationContext`
|
- 221-findings-operator-inbox: Added PHP 8.4.15, Laravel 12, Filament v5, Livewire v4, Blade + Filament admin panel pages, `Finding`, `FindingResource`, `WorkspaceOverviewBuilder`, `WorkspaceContext`, `WorkspaceCapabilityResolver`, `CapabilityResolver`, `CanonicalAdminTenantFilterState`, and `CanonicalNavigationContext`
|
||||||
|
- 220-governance-run-summaries: Added PHP 8.4.15, Laravel 12, Filament v5, Livewire v4, Blade + Filament v5, Livewire v4, Pest v4, Laravel Sail, `TenantlessOperationRunViewer`, `OperationRunResource`, `ArtifactTruthPresenter`, `OperatorExplanationBuilder`, `ReasonPresenter`, `OperationUxPresenter`, `SummaryCountsNormalizer`, and the existing enterprise-detail builders
|
||||||
<!-- MANUAL ADDITIONS START -->
|
<!-- MANUAL ADDITIONS START -->
|
||||||
|
|
||||||
### Pre-production compatibility check
|
### Pre-production compatibility check
|
||||||
|
|||||||
@ -159,3 +159,10 @@ ### Measurable Outcomes
|
|||||||
- **SC-004**: Every core page includes a visible next-step CTA and at least one deeper path into the product, trust, or contact story.
|
- **SC-004**: Every core page includes a visible next-step CTA and at least one deeper path into the product, trust, or contact story.
|
||||||
- **SC-005**: No released page contains placeholder copy, unsubstantiated trust or compliance claims, or speculative integration promises.
|
- **SC-005**: No released page contains placeholder copy, unsubstantiated trust or compliance claims, or speculative integration promises.
|
||||||
- **SC-006**: Core pages remain readable and navigable on both desktop and mobile widths without horizontal scrolling or hidden primary navigation.
|
- **SC-006**: Core pages remain readable and navigable on both desktop and mobile widths without horizontal scrolling or hidden primary navigation.
|
||||||
|
|
||||||
|
## Spec 223 Rebuild Status
|
||||||
|
|
||||||
|
- **Classification**: partially valid
|
||||||
|
- **Forward owner**: `../223-astrodeck-website-rebuild/mappings/spec-213-website-foundation-v0.md`
|
||||||
|
- **Material drift now recorded**: canonical trust routing now lives on `/trust`, `/security-trust` is redirect-only, `/changelog` and `/imprint` are canonical public surfaces, and `/legal`, `/terms`, `/solutions`, and `/integrations` are retained secondary routes under the smaller IA.
|
||||||
|
- **Forward-work rule**: new implementation work must start from the AstroDeck intake aliases and the Spec 223 mapping sheet instead of from the current `apps/website` implementation.
|
||||||
|
|||||||
@ -5,6 +5,12 @@ # Tasks: Initial Website Foundation & v0 Product Site
|
|||||||
|
|
||||||
**Tests**: Browser smoke coverage is required for this runtime-changing website feature, together with the root website build proof.
|
**Tests**: Browser smoke coverage is required for this runtime-changing website feature, together with the root website build proof.
|
||||||
|
|
||||||
|
## Historical Status
|
||||||
|
|
||||||
|
This implementation record is retained for traceability and is superseded by AstroDeck rebuild.
|
||||||
|
|
||||||
|
Forward planning now lives in `../223-astrodeck-website-rebuild/mappings/spec-213-website-foundation-v0.md`. Do not reset or reopen the checkbox state below; new work belongs to the Spec 223 mapping and follow-up slices.
|
||||||
|
|
||||||
## Test Governance Checklist
|
## Test Governance Checklist
|
||||||
|
|
||||||
- [X] Lane assignment is named and is the narrowest sufficient proof for the changed behavior.
|
- [X] Lane assignment is named and is the narrowest sufficient proof for the changed behavior.
|
||||||
|
|||||||
@ -174,3 +174,10 @@ ### Measurable Outcomes
|
|||||||
- **SC-003**: 100% of library-derived website components proposed for the initial implementation phase can be justified as adaptations of the defined token and primitive model rather than uncontrolled default styles.
|
- **SC-003**: 100% of library-derived website components proposed for the initial implementation phase can be justified as adaptations of the defined token and primitive model rather than uncontrolled default styles.
|
||||||
- **SC-004**: The specification contains zero requirements that obligate visual changes to `apps/platform`, Filament, or a shared cross-surface design system.
|
- **SC-004**: The specification contains zero requirements that obligate visual changes to `apps/platform`, Filament, or a shared cross-surface design system.
|
||||||
- **SC-005**: At least one primary CTA hierarchy and one low-emphasis CTA pattern are defined clearly enough that reviewers can classify CTA weight consistently across representative website pages.
|
- **SC-005**: At least one primary CTA hierarchy and one low-emphasis CTA pattern are defined clearly enough that reviewers can classify CTA weight consistently across representative website pages.
|
||||||
|
|
||||||
|
## Spec 223 Rebuild Status
|
||||||
|
|
||||||
|
- **Classification**: continuing
|
||||||
|
- **Forward owner**: `../223-astrodeck-website-rebuild/mappings/spec-214-website-visual-foundation.md`
|
||||||
|
- **Material drift**: none logged. AstroDeck changes the implementation substrate only; this website-local visual contract remains authoritative.
|
||||||
|
- **Forward-work rule**: all AstroDeck primitives must be adapted to the Spec 214 foundation before they are allowed into `apps/website`.
|
||||||
|
|||||||
@ -5,6 +5,12 @@ # Tasks: Website Visual Foundation
|
|||||||
|
|
||||||
**Tests**: Browser smoke coverage and the root website build proof are required for this runtime-changing website feature.
|
**Tests**: Browser smoke coverage and the root website build proof are required for this runtime-changing website feature.
|
||||||
|
|
||||||
|
## Historical Status
|
||||||
|
|
||||||
|
This implementation record is retained for traceability and is superseded by AstroDeck rebuild.
|
||||||
|
|
||||||
|
Forward planning now lives in `../223-astrodeck-website-rebuild/mappings/spec-214-website-visual-foundation.md`. Do not reset or reopen the checkbox state below; new work belongs to the Spec 223 mapping and follow-up slices.
|
||||||
|
|
||||||
## Test Governance Checklist
|
## Test Governance Checklist
|
||||||
|
|
||||||
- [X] Lane assignment is named and is the narrowest sufficient proof for the changed behavior.
|
- [X] Lane assignment is named and is the narrowest sufficient proof for the changed behavior.
|
||||||
|
|||||||
@ -202,3 +202,10 @@ ## Planned Follow-on Specs
|
|||||||
- Spec 223 - Blog / Resources Surface, if activated
|
- Spec 223 - Blog / Resources Surface, if activated
|
||||||
- Spec 224 - Solutions / Use-Case Surfaces, if activated later
|
- Spec 224 - Solutions / Use-Case Surfaces, if activated later
|
||||||
- Spec 225 - Pricing Surface, if activated later
|
- Spec 225 - Pricing Surface, if activated later
|
||||||
|
|
||||||
|
## Spec 223 Rebuild Status
|
||||||
|
|
||||||
|
- **Classification**: continuing
|
||||||
|
- **Forward owner**: `../223-astrodeck-website-rebuild/mappings/spec-215-website-core-pages.md`
|
||||||
|
- **Material drift**: none logged. This spec remains the canonical IA source of truth that constrains AstroDeck adoption.
|
||||||
|
- **Forward-work rule**: no AstroDeck route or navigation item may become public unless it matches the required, retained-secondary, or approved-optional surfaces defined here.
|
||||||
|
|||||||
@ -5,6 +5,12 @@ # Tasks: Website Information Architecture / Core Pages
|
|||||||
|
|
||||||
**Tests**: Browser smoke coverage and the root website build proof are required for this runtime-changing website feature.
|
**Tests**: Browser smoke coverage and the root website build proof are required for this runtime-changing website feature.
|
||||||
|
|
||||||
|
## Historical Status
|
||||||
|
|
||||||
|
This implementation record is retained for traceability and is superseded by AstroDeck rebuild.
|
||||||
|
|
||||||
|
Forward planning now lives in `../223-astrodeck-website-rebuild/mappings/spec-215-website-core-pages.md`. Do not reset or reopen the checkbox state below; new work belongs to the Spec 223 mapping and follow-up slices.
|
||||||
|
|
||||||
## Test Governance Checklist
|
## Test Governance Checklist
|
||||||
|
|
||||||
- [X] Lane assignment is named and is the narrowest sufficient proof for the changed behavior.
|
- [X] Lane assignment is named and is the narrowest sufficient proof for the changed behavior.
|
||||||
|
|||||||
@ -213,3 +213,10 @@ ### Measurable Outcomes
|
|||||||
- **SC-009**: Reviewers can identify at least one typographic or compositional cue and one product-truth cue that distinguish the hero from a generic shadcn or Tailwind marketing layout.
|
- **SC-009**: Reviewers can identify at least one typographic or compositional cue and one product-truth cue that distinguish the hero from a generic shadcn or Tailwind marketing layout.
|
||||||
- **SC-010**: On desktop and mobile, the hero retains clear contrast between the dominant element, supporting copy, product visual, and CTA instead of flattening into visually equal neutral surfaces.
|
- **SC-010**: On desktop and mobile, the hero retains clear contrast between the dominant element, supporting copy, product visual, and CTA instead of flattening into visually equal neutral surfaces.
|
||||||
- **SC-011**: The released homepage hero avoids the anti-patterns of neutral mush and correct-but-forgettable minimalism while remaining calm and trust-oriented.
|
- **SC-011**: The released homepage hero avoids the anti-patterns of neutral mush and correct-but-forgettable minimalism while remaining calm and trust-oriented.
|
||||||
|
|
||||||
|
## Spec 223 Rebuild Status
|
||||||
|
|
||||||
|
- **Classification**: continuing
|
||||||
|
- **Forward owner**: `../223-astrodeck-website-rebuild/mappings/spec-217-homepage-structure.md`
|
||||||
|
- **Material drift**: none logged. Optional AstroDeck proof sections are handled as remove/adapt decisions inside the mapping sheet, not as structural homepage truth changes.
|
||||||
|
- **Forward-work rule**: AstroDeck homepage work must preserve the required block order of hero, outcome, product model, trust, progress, CTA, and footer.
|
||||||
|
|||||||
@ -5,6 +5,12 @@ # Tasks: Website Homepage Structure & Section Model
|
|||||||
|
|
||||||
**Tests**: Browser smoke coverage and the root website build proof are required for this runtime-changing website feature.
|
**Tests**: Browser smoke coverage and the root website build proof are required for this runtime-changing website feature.
|
||||||
|
|
||||||
|
## Historical Status
|
||||||
|
|
||||||
|
This implementation record is retained for traceability and is superseded by AstroDeck rebuild.
|
||||||
|
|
||||||
|
Forward planning now lives in `../223-astrodeck-website-rebuild/mappings/spec-217-homepage-structure.md`. Do not reset or reopen the checkbox state below; new work belongs to the Spec 223 mapping and follow-up slices.
|
||||||
|
|
||||||
## Test Governance Checklist
|
## Test Governance Checklist
|
||||||
|
|
||||||
- [X] Lane assignment stays `Browser` in `fast-feedback`, which is the narrowest sufficient proof for this homepage-only change.
|
- [X] Lane assignment stays `Browser` in `fast-feedback`, which is the narrowest sufficient proof for this homepage-only change.
|
||||||
|
|||||||
@ -187,3 +187,10 @@ ## Planned Follow-on Work
|
|||||||
- Final hero copy exploration
|
- Final hero copy exploration
|
||||||
- Stitch-based hero design exploration
|
- Stitch-based hero design exploration
|
||||||
- Downstream homepage-section detail work that assumes this hero contract rather than redefining it
|
- Downstream homepage-section detail work that assumes this hero contract rather than redefining it
|
||||||
|
|
||||||
|
## Spec 223 Rebuild Status
|
||||||
|
|
||||||
|
- **Classification**: continuing
|
||||||
|
- **Forward owner**: `../223-astrodeck-website-rebuild/mappings/spec-218-homepage-hero.md`
|
||||||
|
- **Material drift**: none logged. AstroDeck can provide the hero shell, but it does not change the allowed semantic structure or anti-pattern rules.
|
||||||
|
- **Forward-work rule**: mapped AstroDeck hero primitives must keep one clear anchor, one CTA pair, product-near visual truth, and bounded trust cues on desktop and mobile.
|
||||||
|
|||||||
@ -5,6 +5,12 @@ # Tasks: Website Homepage Hero
|
|||||||
|
|
||||||
**Tests**: Browser smoke coverage and the root website build proof are required for this runtime-changing website feature.
|
**Tests**: Browser smoke coverage and the root website build proof are required for this runtime-changing website feature.
|
||||||
|
|
||||||
|
## Historical Status
|
||||||
|
|
||||||
|
This implementation record is retained for traceability and is superseded by AstroDeck rebuild.
|
||||||
|
|
||||||
|
Forward planning now lives in `../223-astrodeck-website-rebuild/mappings/spec-218-homepage-hero.md`. Do not reset or reopen the checkbox state below; new work belongs to the Spec 223 mapping and follow-up slices.
|
||||||
|
|
||||||
## Test Governance Checklist
|
## Test Governance Checklist
|
||||||
|
|
||||||
- [X] Lane assignment stays `Browser` in `fast-feedback`, which is the narrowest sufficient proof for this homepage-hero-only change.
|
- [X] Lane assignment stays `Browser` in `fast-feedback`, which is the narrowest sufficient proof for this homepage-hero-only change.
|
||||||
|
|||||||
@ -0,0 +1,69 @@
|
|||||||
|
# AstroDeck Primitive Inventory
|
||||||
|
|
||||||
|
The IDs below are stable intake aliases for the AstroDeck snapshot described in `astrodeck-source-intake.md`. They are the only allowed primitive vocabulary for follow-up rebuild planning until the real snapshot is mounted and bound to these aliases.
|
||||||
|
|
||||||
|
## Inventory Columns
|
||||||
|
|
||||||
|
| Column | Meaning |
|
||||||
|
| --- | --- |
|
||||||
|
| `primitiveId` | Stable intake alias used by the mapping sheets |
|
||||||
|
| `primitiveType` | `page`, `section`, or `component` |
|
||||||
|
| `sourceReference` | Expected AstroDeck source family or later binding target |
|
||||||
|
| `candidateSurfaces` | Current routes or spec slices the primitive can support |
|
||||||
|
| `demoContentFlags` | Demo artifacts that must be removed, adapted, or explicitly approved |
|
||||||
|
| `notes` | Review guidance before the primitive is kept or adapted |
|
||||||
|
|
||||||
|
## Page Candidates
|
||||||
|
|
||||||
|
| primitiveId | primitiveType | sourceReference | candidateSurfaces | demoContentFlags | notes |
|
||||||
|
| --- | --- | --- | --- | --- | --- |
|
||||||
|
| `adk-page-home-marketing` | page | `snapshot/page/home` | `/`, Specs 213, 215, 217, 218 | demo stats, generic customer proof, newsletter CTA | Primary landing substrate for the rebuild. |
|
||||||
|
| `adk-page-product-overview` | page | `snapshot/page/product-or-features` | `/product`, Specs 213, 215 | feature-silo copy, pricing teaser | Use for the product-model page, not a feature-wall clone. |
|
||||||
|
| `adk-page-trust-proof` | page | `snapshot/page/security-or-proof` | `/trust`, Specs 213, 215, 217, 218 | compliance theater, absolute claims, badge walls | Preferred starting point for the canonical trust route. |
|
||||||
|
| `adk-page-contact-conversion` | page | `snapshot/page/contact` | `/contact`, Specs 213, 215 | generic sales language, oversized lead form | Must be adapted to the working-session framing. |
|
||||||
|
| `adk-page-content-index` | page | `snapshot/page/blog-or-news-index` | `/changelog`, optional `/resources` | blog taxonomy chrome, author bios, editorial promos | Repurpose for dated changelog proof; keep resources unpublished unless substantive. |
|
||||||
|
| `adk-page-legal-utility` | page | `snapshot/page/legal-or-company-utility` | `/privacy`, `/imprint`, `/terms`, `/legal` | placeholder legal copy, company boilerplate | Use as the base for legal surfaces; do not ship template legal text. |
|
||||||
|
| `adk-page-supporting-showcase` | page | `snapshot/page/about-solutions-or-integrations` | `/solutions`, `/integrations` | fake logos, partner walls, over-broad ecosystem claims | Secondary-only surface for audience-fit and integration-fit pages. |
|
||||||
|
|
||||||
|
## Section Candidates
|
||||||
|
|
||||||
|
| primitiveId | primitiveType | sourceReference | candidateSurfaces | demoContentFlags | notes |
|
||||||
|
| --- | --- | --- | --- | --- | --- |
|
||||||
|
| `adk-section-hero-split-media` | section | `snapshot/section/hero-split-media` | homepage, product, trust, contact | startup buzzwords, fake metrics, decorative dashboard wallpaper | Preferred hero family for Specs 217 and 218. |
|
||||||
|
| `adk-section-outcome-band` | section | `snapshot/section/outcomes-or-value-band` | homepage, product | vague benefit copy, investor-style slogans | Use to translate product capability into buyer outcomes. |
|
||||||
|
| `adk-section-feature-cluster-grid` | section | `snapshot/section/feature-grid-or-capability-clusters` | homepage, product, solutions, integrations | equal-weight feature cards, pricing hooks | Must be grouped by product model, not by generic marketing categories. |
|
||||||
|
| `adk-section-trust-principles` | section | `snapshot/section/trust-or-proof-grid` | trust page, homepage | compliance badges, guarantee claims | Use only with bounded, supportable trust language. |
|
||||||
|
| `adk-section-proof-stats` | section | `snapshot/section/stats-or-proof-strip` | homepage, product, trust | invented KPIs, vanity counters | Remove unless real approved proof exists. |
|
||||||
|
| `adk-section-logo-strip` | section | `snapshot/section/logo-cloud` | homepage, solutions | fake customers, unapproved brands | Remove by default. |
|
||||||
|
| `adk-section-testimonial-stack` | section | `snapshot/section/testimonials` | homepage, solutions | fabricated quotes, polished social proof | Remove by default. |
|
||||||
|
| `adk-section-changelog-teaser` | section | `snapshot/section/news-or-update-teaser` | homepage, changelog | editorial filler, blog cards without dated product value | Keep only if it points to real dated changelog entries. |
|
||||||
|
| `adk-section-contact-form` | section | `snapshot/section/contact-form` | contact, footer CTA follow-through | unnecessary intake fields, aggressive SDR language | Adapt to minimal useful working-session context. |
|
||||||
|
| `adk-section-cta-band` | section | `snapshot/section/final-cta` | homepage, product, trust, changelog, legal | duplicated loud CTAs, demo pressure | Keep exactly one dominant action. |
|
||||||
|
| `adk-section-footer-utility` | section | `snapshot/section/footer-utility` | all public routes | docs/pricing overload, empty content links | Must match the canonical 215 IA. |
|
||||||
|
|
||||||
|
## Component Candidates
|
||||||
|
|
||||||
|
| primitiveId | primitiveType | sourceReference | candidateSurfaces | demoContentFlags | notes |
|
||||||
|
| --- | --- | --- | --- | --- | --- |
|
||||||
|
| `adk-component-header-nav` | component | `snapshot/component/header-nav` | all public routes | pricing/docs/blog clutter | Must shrink to Product, Trust, Changelog, Contact, plus one CTA. |
|
||||||
|
| `adk-component-footer-nav` | component | `snapshot/component/footer-nav` | all public routes | template link dumps | Must preserve trust/legal/contact grouping. |
|
||||||
|
| `adk-component-primary-button` | component | `snapshot/component/button-primary` | homepage, product, trust, contact | multi-primary CTA styling | Dominant CTA only. |
|
||||||
|
| `adk-component-secondary-button` | component | `snapshot/component/button-secondary` | homepage, product, trust, contact, changelog | outline fallback styling with no hierarchy | Use only as a lower-emphasis deepening action. |
|
||||||
|
| `adk-component-badge-chip` | component | `snapshot/component/badge-chip` | hero trust cues, callouts | badge walls, pseudo-certification labels | Use sparingly and only with factual claims. |
|
||||||
|
| `adk-component-card-surface` | component | `snapshot/component/card` | product clusters, legal summaries, changelog cards | over-elevated surfaces | Keep border-first clarity and restrained shadows. |
|
||||||
|
| `adk-component-section-shell` | component | `snapshot/component/section-shell` | all page families | inconsistent width/spacing defaults | Main adaptation point for Spec 214 spacing and surface rules. |
|
||||||
|
| `adk-component-input-field` | component | `snapshot/component/input` | contact | marketing-form defaults | Must align to the website foundation and minimal intake scope. |
|
||||||
|
| `adk-component-textarea-field` | component | `snapshot/component/textarea` | contact | marketing-form defaults | Same constraint as the input field. |
|
||||||
|
| `adk-component-callout-panel` | component | `snapshot/component/callout-or-alert-panel` | product, trust, legal, changelog | alarmist styling, decorative status colors | Use for bounded explanation, not urgency theater. |
|
||||||
|
|
||||||
|
## Demo-Content Flag Vocabulary
|
||||||
|
|
||||||
|
- `demo stats`: invented counters, fake KPIs, or unsourced numerical proof.
|
||||||
|
- `generic customer proof`: logo clouds, testimonials, and case-study language without approved source material.
|
||||||
|
- `newsletter CTA`: sign-up or nurture patterns that are not part of the current IA.
|
||||||
|
- `pricing teaser`: navigation or CTA pressure toward pricing or packaging pages that are not live.
|
||||||
|
- `compliance theater`: seals, badges, or guarantee language that overstates trust posture.
|
||||||
|
|
||||||
|
## Inventory Conclusion
|
||||||
|
|
||||||
|
The alias set above is sufficient to drive the per-spec mapping sheets without creating net-new primitive families up front. Where the imported snapshot later disproves one of these families, the mismatch must reopen the intake review and the exception workflow before implementation continues.
|
||||||
@ -0,0 +1,48 @@
|
|||||||
|
# AstroDeck Source Intake
|
||||||
|
|
||||||
|
Spec 223 assumes AstroDeck is an external template source, not an already-imported repository subtree. This intake record fixes the review assumptions that must hold before primitive mapping starts.
|
||||||
|
|
||||||
|
## Intake Record
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| sourceSnapshotReference | Pending external AstroDeck distribution archive to be mounted into the local implementation workspace before the first rebuild slice starts |
|
||||||
|
| planningAliasPrefix | `adk-` |
|
||||||
|
| reviewStatus | planning assumptions only; no committed AstroDeck source is present in this repository as of 2026-04-22 |
|
||||||
|
| notes | All primitive IDs in this feature are stable intake aliases. Once the snapshot is mounted, the implementation owner must bind each alias to the real AstroDeck file or component name before copying code. |
|
||||||
|
|
||||||
|
## Intake Constraints
|
||||||
|
|
||||||
|
- Treat AstroDeck as the only forward substrate for `apps/website`; the current custom Astro site remains historical comparison material only.
|
||||||
|
- Do not let AstroDeck demo routes, placeholder sections, generic testimonials, pricing promos, or newsletter capture define the public IA by default.
|
||||||
|
- Do not copy vendor demo copy, customer logos, invented metrics, or compliance theater into TenantAtlas surfaces.
|
||||||
|
- Keep the repo-level website working contract intact: `@tenantatlas/website`, `WEBSITE_PORT`, `corepack pnpm dev:website`, and `corepack pnpm build:website` remain unchanged.
|
||||||
|
- Keep all rebuild governance local to `apps/website`; no platform, Filament, or cross-app obligations may leak out of the template intake.
|
||||||
|
- If the imported snapshot lacks an adequate page, section, or component family, route the gap through `exception-register.md` before inventing a custom primitive.
|
||||||
|
|
||||||
|
## Review Assumptions
|
||||||
|
|
||||||
|
- The chosen AstroDeck distribution will provide at least one marketing home page, one product/features page, one contact/conversion page, one blog/news/content index, one generic legal/company utility page, and shared header/footer shells.
|
||||||
|
- The distribution will also provide hero, feature-grid, CTA, proof, and form sections plus button, badge, card, input, textarea, and navigation primitives.
|
||||||
|
- Trust, changelog, and imprint will likely require adaptation of generic proof, blog/news, and legal/company primitives instead of direct one-to-one template pages.
|
||||||
|
- Any AstroDeck page family that tries to push pricing, docs, resources, or social proof into primary navigation remains non-authoritative until an active website spec explicitly promotes it.
|
||||||
|
- The mapping sheets may use intake aliases even before the real snapshot is committed, but the first implementation slice must resolve each alias against the mounted source before code transfer starts.
|
||||||
|
- No compatibility shim is needed for the retired custom site. LEAN-001 applies: replace the old substrate rather than hybridizing it.
|
||||||
|
|
||||||
|
## Review Boundaries
|
||||||
|
|
||||||
|
- Current-site route truth comes from `current-website-inventory.md`, not from the AstroDeck template.
|
||||||
|
- Governing spec truth comes from Specs 213, 214, 215, 217, and 218 plus their Spec 223 rebuild notes, not from template defaults.
|
||||||
|
- Material route, navigation, CTA, or trust drift introduced by AstroDeck must be recorded in `material-drift-follow-up.md`.
|
||||||
|
- The exception path remains closed unless the adequacy rubric in `exception-register.md` explicitly says the available AstroDeck primitives cannot satisfy the active requirement through bounded adaptation.
|
||||||
|
|
||||||
|
## Forward Substrate Decision
|
||||||
|
|
||||||
|
The forward substrate for new website work is therefore:
|
||||||
|
|
||||||
|
1. Mounted AstroDeck snapshot
|
||||||
|
2. Spec 223 intake aliases and primitive inventory
|
||||||
|
3. Per-spec mapping sheets
|
||||||
|
4. Exception review only if mapping fails
|
||||||
|
|
||||||
|
The current `apps/website` codebase is still required for comparison, smoke-baseline review, and copy extraction, but it is not a valid starting point for new implementation work.
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
# Specification Quality Checklist: Website Reset and AstroDeck Rebuild
|
||||||
|
|
||||||
|
**Purpose**: Validate specification completeness and quality before proceeding to planning
|
||||||
|
**Created**: 2026-04-22
|
||||||
|
**Feature**: [spec.md](../spec.md)
|
||||||
|
|
||||||
|
## Content Quality
|
||||||
|
|
||||||
|
- [x] No implementation details (languages, frameworks, APIs)
|
||||||
|
- [x] Focused on user value and business needs
|
||||||
|
- [x] Written for non-technical stakeholders
|
||||||
|
- [x] All mandatory sections completed
|
||||||
|
|
||||||
|
## Requirement Completeness
|
||||||
|
|
||||||
|
- [x] No [NEEDS CLARIFICATION] markers remain
|
||||||
|
- [x] Requirements are testable and unambiguous
|
||||||
|
- [x] Success criteria are measurable
|
||||||
|
- [x] Success criteria are technology-agnostic (no implementation details)
|
||||||
|
- [x] All acceptance scenarios are defined
|
||||||
|
- [x] Edge cases are identified
|
||||||
|
- [x] Scope is clearly bounded
|
||||||
|
- [x] Dependencies and assumptions identified
|
||||||
|
|
||||||
|
## Feature Readiness
|
||||||
|
|
||||||
|
- [x] All functional requirements have clear acceptance criteria
|
||||||
|
- [x] User scenarios cover primary flows
|
||||||
|
- [x] Feature meets measurable outcomes defined in Success Criteria
|
||||||
|
- [x] No implementation details leak into specification
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- Validation round 1 passed.
|
||||||
|
- The spec stays local to `apps/website` and defines no runtime or platform obligations.
|
||||||
|
- Existing website spec references were aligned to the current repository set: Specs 213, 214, 215, 217, and 218.
|
||||||
@ -0,0 +1,345 @@
|
|||||||
|
version: 1
|
||||||
|
feature: 223-astrodeck-website-rebuild
|
||||||
|
description: File-based contract for the planning artifacts required by the AstroDeck rebuild workflow.
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
astroDeckSourceIntake:
|
||||||
|
description: Reviewable source-intake record for the AstroDeck snapshot being evaluated before primitive mapping begins.
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- sourceSnapshotReference
|
||||||
|
- intakeConstraints
|
||||||
|
- reviewAssumptions
|
||||||
|
properties:
|
||||||
|
sourceSnapshotReference:
|
||||||
|
type: string
|
||||||
|
intakeConstraints:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
reviewAssumptions:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
|
||||||
|
currentWebsiteInventory:
|
||||||
|
description: Current `apps/website` surface inventory captured before any AstroDeck replacement work starts.
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- surfaces
|
||||||
|
properties:
|
||||||
|
surfaces:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- route
|
||||||
|
- sourceFile
|
||||||
|
- surfaceRole
|
||||||
|
- governingSpecs
|
||||||
|
- plannedDisposition
|
||||||
|
properties:
|
||||||
|
route:
|
||||||
|
type: string
|
||||||
|
sourceFile:
|
||||||
|
type: string
|
||||||
|
surfaceRole:
|
||||||
|
type: string
|
||||||
|
governingSpecs:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: integer
|
||||||
|
currentDependencies:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
plannedDisposition:
|
||||||
|
type: string
|
||||||
|
enum: [keep, adapt, remove, redirect]
|
||||||
|
|
||||||
|
astroDeckPrimitiveInventory:
|
||||||
|
description: Inventory of candidate AstroDeck pages, sections, and components.
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- primitives
|
||||||
|
properties:
|
||||||
|
primitives:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- primitiveId
|
||||||
|
- primitiveType
|
||||||
|
- sourceReference
|
||||||
|
properties:
|
||||||
|
primitiveId:
|
||||||
|
type: string
|
||||||
|
primitiveType:
|
||||||
|
type: string
|
||||||
|
enum: [page, section, component]
|
||||||
|
sourceReference:
|
||||||
|
type: string
|
||||||
|
candidateSurfaces:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
demoContentFlags:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
notes:
|
||||||
|
type: string
|
||||||
|
|
||||||
|
governingSpecClassification:
|
||||||
|
description: Classification of the active website spec set before rebuild implementation starts.
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- specs
|
||||||
|
properties:
|
||||||
|
specs:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- specId
|
||||||
|
- title
|
||||||
|
- classification
|
||||||
|
- scopeSummary
|
||||||
|
- rationale
|
||||||
|
- followUpPlan
|
||||||
|
properties:
|
||||||
|
specId:
|
||||||
|
type: integer
|
||||||
|
title:
|
||||||
|
type: string
|
||||||
|
classification:
|
||||||
|
type: string
|
||||||
|
enum: [continuing, "partially valid", superseded]
|
||||||
|
scopeSummary:
|
||||||
|
type: string
|
||||||
|
rationale:
|
||||||
|
type: string
|
||||||
|
followUpPlan:
|
||||||
|
description: Path to the per-spec mapping artifact or explicit supersession-closure artifact that owns current-slice delivery for this spec.
|
||||||
|
type: string
|
||||||
|
|
||||||
|
primitiveMapping:
|
||||||
|
description: Mapping of one governing website spec requirement to one AstroDeck primitive, including the replacement task ownership embedded in the same per-spec artifact.
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- mappings
|
||||||
|
properties:
|
||||||
|
mappings:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- specId
|
||||||
|
- requirementReference
|
||||||
|
- disposition
|
||||||
|
- acceptanceMapping
|
||||||
|
- replacementTasks
|
||||||
|
properties:
|
||||||
|
specId:
|
||||||
|
type: integer
|
||||||
|
requirementReference:
|
||||||
|
type: string
|
||||||
|
primitiveId:
|
||||||
|
description: Required when disposition is keep, adapt, or remove; omitted when disposition is exception.
|
||||||
|
type: string
|
||||||
|
disposition:
|
||||||
|
type: string
|
||||||
|
enum: [keep, adapt, remove, exception]
|
||||||
|
adaptationSummary:
|
||||||
|
type: string
|
||||||
|
acceptanceMapping:
|
||||||
|
type: string
|
||||||
|
replacementTasks:
|
||||||
|
description: Ordered replacement task list owned by the same per-spec mapping or disposition artifact.
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
taskPrimitiveReferences:
|
||||||
|
description: Named AstroDeck pages, sections, components, or explicit mapping activities referenced by the replacement task list.
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
materialDriftReferences:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
exceptionReference:
|
||||||
|
type: string
|
||||||
|
oneOf:
|
||||||
|
- properties:
|
||||||
|
disposition:
|
||||||
|
enum: [keep, adapt, remove]
|
||||||
|
required:
|
||||||
|
- primitiveId
|
||||||
|
- properties:
|
||||||
|
disposition:
|
||||||
|
enum: [exception]
|
||||||
|
required:
|
||||||
|
- exceptionReference
|
||||||
|
|
||||||
|
supersessionClosure:
|
||||||
|
description: Explicit closure artifact for an in-scope website spec that ends the rebuild review as superseded instead of continuing into a mapping-based plan.
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- specId
|
||||||
|
- classification
|
||||||
|
- closureRationale
|
||||||
|
- legacyTaskDispositionReference
|
||||||
|
- replacementReference
|
||||||
|
properties:
|
||||||
|
specId:
|
||||||
|
type: integer
|
||||||
|
classification:
|
||||||
|
type: string
|
||||||
|
enum: [superseded]
|
||||||
|
closureRationale:
|
||||||
|
type: string
|
||||||
|
legacyTaskDispositionReference:
|
||||||
|
type: string
|
||||||
|
replacementReference:
|
||||||
|
description: Replacement plan reference or an explicit `no replacement work required` statement.
|
||||||
|
type: string
|
||||||
|
notes:
|
||||||
|
type: string
|
||||||
|
|
||||||
|
legacyTaskDisposition:
|
||||||
|
description: Historical task record preserved while being superseded by the rebuild.
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- dispositions
|
||||||
|
properties:
|
||||||
|
dispositions:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- originalSpecId
|
||||||
|
- originalTaskReference
|
||||||
|
- disposition
|
||||||
|
- replacementReference
|
||||||
|
properties:
|
||||||
|
originalSpecId:
|
||||||
|
type: integer
|
||||||
|
originalTaskReference:
|
||||||
|
type: string
|
||||||
|
disposition:
|
||||||
|
type: string
|
||||||
|
enum: ["superseded by AstroDeck rebuild"]
|
||||||
|
replacementReference:
|
||||||
|
description: New plan, task set, or an explicit `no replacement work required` statement.
|
||||||
|
type: string
|
||||||
|
notes:
|
||||||
|
type: string
|
||||||
|
|
||||||
|
materialDriftFollowUp:
|
||||||
|
description: Explicit spec-update follow-up record for material page inventory, CTA logic, navigation, or trust messaging drift discovered during mapping.
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- driftRecords
|
||||||
|
properties:
|
||||||
|
driftRecords:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- affectedSpecId
|
||||||
|
- driftClass
|
||||||
|
- driftSummary
|
||||||
|
- requiredSpecAction
|
||||||
|
- targetSpecReference
|
||||||
|
properties:
|
||||||
|
affectedSpecId:
|
||||||
|
type: integer
|
||||||
|
driftClass:
|
||||||
|
type: string
|
||||||
|
enum: ["page inventory", "CTA logic", navigation, "trust messaging"]
|
||||||
|
driftSummary:
|
||||||
|
type: string
|
||||||
|
requiredSpecAction:
|
||||||
|
type: string
|
||||||
|
enum: ["update existing spec", "create follow-up spec"]
|
||||||
|
targetSpecReference:
|
||||||
|
type: string
|
||||||
|
notes:
|
||||||
|
type: string
|
||||||
|
|
||||||
|
exceptionRegister:
|
||||||
|
description: Standing review register for missing-candidate checks, including approved exceptions and explicit no-exception outcomes.
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- entries
|
||||||
|
properties:
|
||||||
|
entries:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- specId
|
||||||
|
- scope
|
||||||
|
- reviewOutcome
|
||||||
|
- reviewRationale
|
||||||
|
properties:
|
||||||
|
specId:
|
||||||
|
type: integer
|
||||||
|
scope:
|
||||||
|
type: string
|
||||||
|
reviewOutcome:
|
||||||
|
type: string
|
||||||
|
enum: ["approved exception", "no exception required"]
|
||||||
|
reviewRationale:
|
||||||
|
type: string
|
||||||
|
exceptionReference:
|
||||||
|
type: string
|
||||||
|
notes:
|
||||||
|
type: string
|
||||||
|
oneOf:
|
||||||
|
- properties:
|
||||||
|
reviewOutcome:
|
||||||
|
enum: ["approved exception"]
|
||||||
|
required:
|
||||||
|
- exceptionReference
|
||||||
|
- properties:
|
||||||
|
reviewOutcome:
|
||||||
|
enum: ["no exception required"]
|
||||||
|
|
||||||
|
documentedException:
|
||||||
|
description: Approved exception record for custom work when no adequate AstroDeck primitive exists, stored inside the exception register when reviewOutcome is `approved exception`.
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- exceptions
|
||||||
|
properties:
|
||||||
|
exceptions:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- scope
|
||||||
|
- missingCandidate
|
||||||
|
- unmetRequirement
|
||||||
|
- adequacyFailureReason
|
||||||
|
- boundedDeviation
|
||||||
|
- approvedBy
|
||||||
|
- approvalReference
|
||||||
|
- spreadControl
|
||||||
|
properties:
|
||||||
|
scope:
|
||||||
|
type: string
|
||||||
|
missingCandidate:
|
||||||
|
type: string
|
||||||
|
unmetRequirement:
|
||||||
|
type: string
|
||||||
|
adequacyFailureReason:
|
||||||
|
type: string
|
||||||
|
boundedDeviation:
|
||||||
|
type: string
|
||||||
|
approvedBy:
|
||||||
|
type: string
|
||||||
|
approvalReference:
|
||||||
|
type: string
|
||||||
|
spreadControl:
|
||||||
|
type: string
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
# Current Website Inventory
|
||||||
|
|
||||||
|
This document captures the current `apps/website` implementation as retired implementation history. It remains reviewable context for Spec 223, but it is not the forward substrate for new website work.
|
||||||
|
|
||||||
|
## Legacy Substrate Record
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| scopePath | `apps/website` |
|
||||||
|
| status | discarded implementation history |
|
||||||
|
| replacedBySpec | `223-astrodeck-website-rebuild` |
|
||||||
|
| notes | The current Astro 6 site remains useful for route, copy, and smoke-test baseline review, but future delivery must start from the AstroDeck intake aliases documented in this feature. |
|
||||||
|
|
||||||
|
## Current Route Baseline
|
||||||
|
|
||||||
|
| Route | Source file | Surface role | Governing specs | Current dependencies | Planned disposition | Notes |
|
||||||
|
| --- | --- | --- | --- | --- | --- | --- |
|
||||||
|
| `/` | `apps/website/src/pages/index.astro` | entry and homepage routing hub | 213, 214, 215, 217, 218 | `src/content/pages/home.ts`; `PageHero`; `OutcomeSection`; `CapabilityGrid`; `TrustGrid`; `ProgressTeaser`; `home-product.spec.ts`; `visual-foundation-guardrails.spec.ts` | adapt | Keep the route, but replace the custom section assembly with an AstroDeck home page shell plus mapped sections. |
|
||||||
|
| `/product` | `apps/website/src/pages/product.astro` | core product model surface | 213, 214, 215 | `src/content/pages/product.ts`; `PageHero`; `FeatureGrid`; `Callout`; `home-product.spec.ts` | adapt | Product explanation remains required, but the current page composition is historical. |
|
||||||
|
| `/trust` | `apps/website/src/pages/trust.astro` | canonical trust surface | 214, 215 | `src/content/pages/trust.ts`; `PageHero`; `TrustGrid`; `Callout`; `solutions-trust-integrations.spec.ts`; `visual-foundation-guardrails.spec.ts` | adapt | Retain the canonical route and re-map it onto AstroDeck proof/trust primitives. |
|
||||||
|
| `/changelog` | `apps/website/src/pages/changelog.astro` | dated public progress surface | 215 | `src/content/pages/changelog.ts`; `src/content/changelog`; `PageHero`; `Card`; `changelog-core-ia.spec.ts` | adapt | Preserve the route and dated update behavior by adapting an AstroDeck content/news index. |
|
||||||
|
| `/contact` | `apps/website/src/pages/contact.astro` | primary conversion route | 213, 215 | `src/content/pages/contact.ts`; `ContactPanel`; `DemoPrompt`; `Input`; `Textarea`; `contact-legal.spec.ts` | adapt | Keep the route and working-session framing, but move the shell to AstroDeck contact primitives. |
|
||||||
|
| `/privacy` | `apps/website/src/pages/privacy.astro` | required legal surface | 213, 215 | `src/content/pages/privacy.ts`; `RichText`; `PageHero`; `contact-legal.spec.ts` | adapt | Preserve the route and legal intent; repurpose a generic AstroDeck legal shell. |
|
||||||
|
| `/imprint` | `apps/website/src/pages/imprint.astro` | canonical legal notice surface | 215 | `src/content/pages/imprint.ts`; `RichText`; `PageHero`; `contact-legal.spec.ts` | adapt | Keep the canonical route even if the AstroDeck snapshot only ships a generic legal/company page. |
|
||||||
|
| `/legal` | `apps/website/src/pages/legal.astro` | retained secondary legal hub | 213, 215 | `src/content/pages/legal.ts`; `RichText`; `Card`; `contact-legal.spec.ts` | adapt | Remains published as a secondary surface, not a primary-nav destination. |
|
||||||
|
| `/terms` | `apps/website/src/pages/terms.astro` | retained secondary legal surface | 213, 215 | `src/content/pages/terms.ts`; `RichText`; `PageHero`; `contact-legal.spec.ts` | adapt | Keep the route, but align it with the AstroDeck legal utility shell. |
|
||||||
|
| `/solutions` | `apps/website/src/pages/solutions.astro` | retained secondary audience-fit surface | 213, 215 | `src/content/pages/solutions.ts`; `AudienceRow`; `FeatureGrid`; `solutions-trust-integrations.spec.ts` | adapt | Keep available as a secondary surface if the mapped AstroDeck page remains substantive. |
|
||||||
|
| `/integrations` | `apps/website/src/pages/integrations.astro` | retained secondary ecosystem-fit surface | 213, 215 | `src/content/pages/integrations.ts`; `IntegrationBadge`; `FeatureGrid`; `solutions-trust-integrations.spec.ts` | adapt | Keep available as a secondary surface if the mapped AstroDeck content stays grounded in real integrations. |
|
||||||
|
| `/security-trust` | `apps/website/src/pages/security-trust.astro` | compatibility alias | 213, 215 | redirect only; `solutions-trust-integrations.spec.ts` | redirect | Preserve only as a compatibility redirect to `/trust`; do not rebuild as an independent AstroDeck page. |
|
||||||
|
|
||||||
|
## Component-Family Baseline
|
||||||
|
|
||||||
|
| Family | Current files | Current role | Forward candidate |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| layout | `Navbar`, `Footer`, `PageShell` | current shell, navigation, footer grouping | adapt via AstroDeck header/footer/page-shell primitives |
|
||||||
|
| primitives | `Badge`, `Button`, `Card`, `Cluster`, `Container`, `Grid`, `Input`, `Section`, `SectionHeader`, `Stack`, `Textarea` | local semantic building blocks | adapt or replace with AstroDeck component families re-skinned to Spec 214 |
|
||||||
|
| sections | `PageHero`, `CTASection`, `CapabilityGrid`, `FeatureGrid`, `OutcomeSection`, `ProgressTeaser`, `TrustGrid` | primary public-page assembly surfaces | adapt from AstroDeck hero, feature-grid, trust, changelog-teaser, and CTA-band sections |
|
||||||
|
| optional sections | `LogoStrip`, `HeroDashboard` | proof and product-near visual helpers in the current site | remove generic proof/demo variants unless the imported AstroDeck assets carry real, approved proof material |
|
||||||
|
| content primitives | `AudienceRow`, `Callout`, `ContactPanel`, `DemoPrompt`, `Eyebrow`, `FeatureItem`, `Headline`, `IntegrationBadge`, `Lead`, `Metric`, `PrimaryCTA`, `RichText`, `SecondaryCTA`, `TrustPrincipleCard` | current page-level copy and CTA helpers | selectively adapt only where the AstroDeck intake does not already provide the same semantic role |
|
||||||
|
|
||||||
|
## Content and Support Baseline
|
||||||
|
|
||||||
|
- Route-local content modules live under `apps/website/src/content/pages` and currently define the published copy contract for all 12 public routes.
|
||||||
|
- Astro content collections currently expose one published `changelog` entry, keep `resources` unpublished by gating, and keep `articles` unpublished entirely.
|
||||||
|
- `apps/website/src/pages/sitemap.xml.ts` is a support artifact for discoverability proof, not a public planning surface to rebuild directly.
|
||||||
|
|
||||||
|
## Smoke-Suite Baseline
|
||||||
|
|
||||||
|
| Smoke file | Current proof focus |
|
||||||
|
| --- | --- |
|
||||||
|
| `apps/website/tests/smoke/home-product.spec.ts` | homepage clarity, hero semantics, grouped capability model, trust/progress ordering, route reachability, and product-page narrative integrity |
|
||||||
|
| `apps/website/tests/smoke/solutions-trust-integrations.spec.ts` | secondary audience-fit surface, canonical trust posture, legacy trust redirect, and integrations-page credibility |
|
||||||
|
| `apps/website/tests/smoke/changelog-core-ia.spec.ts` | dated changelog proof plus optional/deferred-surface suppression |
|
||||||
|
| `apps/website/tests/smoke/contact-legal.spec.ts` | contact-path qualification, legal discoverability, footer links, and mobile navigation |
|
||||||
|
| `apps/website/tests/smoke/visual-foundation-guardrails.spec.ts` | shared CTA, badge, surface, and input semantics across representative pages |
|
||||||
|
|
||||||
|
## Baseline Conclusion
|
||||||
|
|
||||||
|
The current site already encodes the canonical route family that Specs 214, 215, 217, and 218 expect. Spec 223 keeps that truth visible, but treats the underlying page assembly, component family, and section composition as retired implementation that must be reintroduced through AstroDeck mapping instead of copied forward.
|
||||||
178
specs/223-astrodeck-website-rebuild/data-model.md
Normal file
178
specs/223-astrodeck-website-rebuild/data-model.md
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
# Data Model: Website Reset and AstroDeck Rebuild
|
||||||
|
|
||||||
|
This feature does not introduce runtime persistence. The entities below define the planning artifacts that must exist for the rebuild workflow to remain reviewable and deterministic.
|
||||||
|
|
||||||
|
## Entity: LegacyWebsiteImplementation
|
||||||
|
|
||||||
|
- **Purpose**: Represents the current `apps/website` codebase as the retired implementation substrate.
|
||||||
|
- **Fields**:
|
||||||
|
- `scopePath`: repository path being retired, currently `apps/website`
|
||||||
|
- `status`: discarded implementation history
|
||||||
|
- `replacedBySpec`: spec reference that formally retires it, `223-astrodeck-website-rebuild`
|
||||||
|
- `notes`: short rationale for why it is no longer the active base
|
||||||
|
- **Relationships**:
|
||||||
|
- One `LegacyWebsiteImplementation` has many `LegacyTaskDisposition` records.
|
||||||
|
|
||||||
|
## Entity: CurrentWebsiteSurface
|
||||||
|
|
||||||
|
- **Purpose**: Captures the existing public routes and current website surfaces that must be reconciled during rebuild planning.
|
||||||
|
- **Fields**:
|
||||||
|
- `route`: public route, such as `/`, `/product`, `/trust`, `/contact`, `/legal`
|
||||||
|
- `sourceFile`: current Astro page file
|
||||||
|
- `surfaceRole`: current role in the website IA, such as core, secondary, legal, redirect, or optional
|
||||||
|
- `governingSpecs`: list of active website specs that currently constrain the surface
|
||||||
|
- `currentDependencies`: content collections, layout primitives, tests, or redirects tied to the surface
|
||||||
|
- `plannedDisposition`: keep, adapt, remove, or redirect
|
||||||
|
- **Relationships**:
|
||||||
|
- A `CurrentWebsiteSurface` may map to one or more `AstroDeckPrimitive` candidates through `PrimitiveMapping`.
|
||||||
|
|
||||||
|
## Entity: AstroDeckSourceIntake
|
||||||
|
|
||||||
|
- **Purpose**: Captures the reviewable AstroDeck source snapshot, intake constraints, and working assumptions before primitive mapping begins.
|
||||||
|
- **Fields**:
|
||||||
|
- `sourceSnapshotReference`: path, tag, archive name, or other stable reference for the imported AstroDeck source
|
||||||
|
- `intakeConstraints`: list of intake limitations, licensing boundaries, or review constraints
|
||||||
|
- `reviewAssumptions`: explicit assumptions used while building the primitive inventory and mappings
|
||||||
|
- `notes`: traceability details for reviewers
|
||||||
|
- **Relationships**:
|
||||||
|
- One `AstroDeckSourceIntake` may inform many `AstroDeckPrimitive` records.
|
||||||
|
|
||||||
|
## Entity: GoverningWebsiteSpec
|
||||||
|
|
||||||
|
- **Purpose**: Tracks each existing website spec that must be classified before rebuild work continues.
|
||||||
|
- **Fields**:
|
||||||
|
- `specId`: current spec number, initially one of 213, 214, 215, 217, 218
|
||||||
|
- `title`: short spec title
|
||||||
|
- `classification`: continuing, partially valid, or superseded
|
||||||
|
- `scopeSummary`: what part of the website the spec governs
|
||||||
|
- `followUpPlan`: reference to the per-spec mapping artifact or explicit supersession-closure artifact that owns current-slice delivery for this spec
|
||||||
|
- `rationale`: why the classification was chosen
|
||||||
|
- **Relationships**:
|
||||||
|
- One `GoverningWebsiteSpec` has many `PrimitiveMapping` records.
|
||||||
|
- One `GoverningWebsiteSpec` has many `LegacyTaskDisposition` records.
|
||||||
|
- One `GoverningWebsiteSpec` may have one `SupersessionClosure` when rebuild planning ends with an explicit closure instead of a mapping plan.
|
||||||
|
|
||||||
|
## Entity: SupersessionClosure
|
||||||
|
|
||||||
|
- **Purpose**: Captures the explicit closure artifact used when an in-scope website spec is classified as superseded and therefore does not continue into a mapping-based rebuild plan.
|
||||||
|
- **Fields**:
|
||||||
|
- `specId`: governing website spec being closed out
|
||||||
|
- `classification`: superseded
|
||||||
|
- `closureRationale`: why the spec no longer needs a rebuild mapping artifact
|
||||||
|
- `legacyTaskDispositionReference`: where the superseded legacy tasks were recorded
|
||||||
|
- `replacementReference`: replacement plan reference or explicit `no replacement work required` statement
|
||||||
|
- `notes`: traceability details for reviewers
|
||||||
|
- **Relationships**:
|
||||||
|
- One `SupersessionClosure` belongs to one `GoverningWebsiteSpec`.
|
||||||
|
|
||||||
|
## Entity: AstroDeckPrimitive
|
||||||
|
|
||||||
|
- **Purpose**: Represents a candidate AstroDeck page, section, or component available for rebuild mapping.
|
||||||
|
- **Fields**:
|
||||||
|
- `primitiveId`: stable identifier inside the imported AstroDeck inventory
|
||||||
|
- `primitiveType`: page, section, or component
|
||||||
|
- `sourceReference`: where the primitive came from inside the AstroDeck source snapshot
|
||||||
|
- `candidateSurfaces`: current routes or spec requirements it may satisfy
|
||||||
|
- `demoContentFlags`: whether it carries demo copy, demo media, or demo CTA behavior that may require removal
|
||||||
|
- `notes`: freeform adaptation concerns
|
||||||
|
- **Relationships**:
|
||||||
|
- One `AstroDeckPrimitive` may be referenced by many `PrimitiveMapping` records.
|
||||||
|
|
||||||
|
## Entity: PrimitiveMapping
|
||||||
|
|
||||||
|
- **Purpose**: Records how a governing website spec requirement maps to one AstroDeck primitive or falls through to a documented missing-candidate exception path, including the replacement task ownership captured inside the same per-spec artifact.
|
||||||
|
- **Fields**:
|
||||||
|
- `specId`: owning website spec
|
||||||
|
- `requirementReference`: spec requirement, acceptance point, or surface requirement being mapped
|
||||||
|
- `primitiveId`: referenced AstroDeck primitive when a concrete candidate exists; omitted when the disposition is `exception`
|
||||||
|
- `disposition`: keep, adapt, remove, or exception
|
||||||
|
- `adaptationSummary`: required changes to route, structure, styling, copy slots, or CTA behavior
|
||||||
|
- `acceptanceMapping`: how the mapped primitive satisfies the spec once adapted
|
||||||
|
- `replacementTasks`: ordered replacement task list owned by the same per-spec mapping or disposition artifact
|
||||||
|
- `taskPrimitiveReferences`: named AstroDeck pages, sections, components, or explicit mapping activities referenced by the replacement task list
|
||||||
|
- `materialDriftReferences`: references to updated or follow-up website specs required when AstroDeck adoption changes page inventory, CTA logic, navigation, or trust messaging
|
||||||
|
- `exceptionReference`: linked `DocumentedException` record when the disposition is `exception`
|
||||||
|
- **Relationships**:
|
||||||
|
- Many `PrimitiveMapping` records belong to one `GoverningWebsiteSpec`.
|
||||||
|
- Many `PrimitiveMapping` records may target one `AstroDeckPrimitive`.
|
||||||
|
- One `PrimitiveMapping` may have zero or one `DocumentedException`.
|
||||||
|
|
||||||
|
## Entity: ExceptionRegisterEntry
|
||||||
|
|
||||||
|
- **Purpose**: Captures the review outcome for each missing-candidate check so the rebuild keeps a standing register of approved exceptions and explicit no-exception outcomes.
|
||||||
|
- **Fields**:
|
||||||
|
- `specId`: governing website spec under review
|
||||||
|
- `scope`: page, section, component, or route slice being checked
|
||||||
|
- `reviewOutcome`: approved exception or no exception required
|
||||||
|
- `reviewRationale`: why the review produced that outcome
|
||||||
|
- `exceptionReference`: linked `DocumentedException` when the outcome is approved exception
|
||||||
|
- `notes`: traceability details for reviewers
|
||||||
|
- **Relationships**:
|
||||||
|
- Many `ExceptionRegisterEntry` records belong to one `GoverningWebsiteSpec`.
|
||||||
|
- One `ExceptionRegisterEntry` may reference zero or one `DocumentedException`.
|
||||||
|
|
||||||
|
## Entity: MaterialDriftFollowUp
|
||||||
|
|
||||||
|
- **Purpose**: Captures any material page inventory, CTA logic, navigation, or trust messaging change discovered during mapping so it becomes an explicit spec update instead of silent template drift.
|
||||||
|
- **Fields**:
|
||||||
|
- `affectedSpecId`: governing website spec whose truth must be updated or followed up
|
||||||
|
- `driftClass`: page inventory, CTA logic, navigation, or trust messaging
|
||||||
|
- `driftSummary`: concise description of what changed materially
|
||||||
|
- `requiredSpecAction`: update existing spec or create follow-up spec
|
||||||
|
- `targetSpecReference`: path to the existing spec or named follow-up spec that owns the change
|
||||||
|
- `notes`: rationale and traceability details
|
||||||
|
- **Relationships**:
|
||||||
|
- Many `MaterialDriftFollowUp` records may belong to one `GoverningWebsiteSpec`.
|
||||||
|
|
||||||
|
## Entity: LegacyTaskDisposition
|
||||||
|
|
||||||
|
- **Purpose**: Preserves old website implementation task history while marking it as no longer authoritative.
|
||||||
|
- **Fields**:
|
||||||
|
- `originalSpecId`: spec that owned the original task
|
||||||
|
- `originalTaskReference`: stable task identifier or short description
|
||||||
|
- `disposition`: `superseded by AstroDeck rebuild`
|
||||||
|
- `replacementReference`: new plan, spec, or task set that replaces the old task
|
||||||
|
- `notes`: why the original task cannot simply be reopened
|
||||||
|
- **Relationships**:
|
||||||
|
- Many `LegacyTaskDisposition` records belong to one `LegacyWebsiteImplementation`.
|
||||||
|
- Many `LegacyTaskDisposition` records may be associated with one `GoverningWebsiteSpec`.
|
||||||
|
|
||||||
|
## Entity: DocumentedException
|
||||||
|
|
||||||
|
- **Purpose**: Captures the narrow approved cases where no adequate AstroDeck primitive exists and custom work is justified, stored as the approved-exception detail inside the exception register.
|
||||||
|
- **Fields**:
|
||||||
|
- `scope`: page, section, component, or route slice that needs an exception
|
||||||
|
- `missingCandidate`: statement of which AstroDeck search failed
|
||||||
|
- `unmetRequirement`: the active website-spec requirement that could not be satisfied
|
||||||
|
- `adequacyFailureReason`: why keep or bounded adaptation could not satisfy the requirement
|
||||||
|
- `boundedDeviation`: precise custom work being allowed
|
||||||
|
- `approvedBy`: named website reviewer, owner, or equivalent feature approver
|
||||||
|
- `approvalReference`: spec, review note, or task entry that owns the exception
|
||||||
|
- `spreadControl`: explicit statement of why the exception stays local
|
||||||
|
- **Relationships**:
|
||||||
|
- One `DocumentedException` belongs to one `PrimitiveMapping`.
|
||||||
|
- One `DocumentedException` is represented by one approved `ExceptionRegisterEntry`.
|
||||||
|
|
||||||
|
## Validation Rules
|
||||||
|
|
||||||
|
- Every continuing or partially valid `GoverningWebsiteSpec` must have at least one `PrimitiveMapping` before implementation starts.
|
||||||
|
- Every `CurrentWebsiteSurface` must end the planning phase with an explicit disposition.
|
||||||
|
- Every `LegacyTaskDisposition` must point to a replacement reference or explicitly state that no replacement work is required.
|
||||||
|
- Every `DocumentedException` must name the failed AstroDeck candidate search, the unmet requirement, the adequacy failure reason, the bounded deviation, and the named approver.
|
||||||
|
- Every material page inventory, CTA logic, navigation, or trust messaging change discovered during mapping must create a `MaterialDriftFollowUp` record that points to an updated or follow-up website spec.
|
||||||
|
- Every missing-candidate review must create an `ExceptionRegisterEntry` with outcome `approved exception` or `no exception required`.
|
||||||
|
- Every replacement task list must name the relevant AstroDeck page, section, component, or mapping activity instead of using generic build wording.
|
||||||
|
- No `PrimitiveMapping` may use `exception` as its disposition without a linked `ExceptionRegisterEntry` and `DocumentedException`.
|
||||||
|
|
||||||
|
## State Transitions
|
||||||
|
|
||||||
|
- `GoverningWebsiteSpec.classification`: `unreviewed -> continuing | partially valid | superseded`
|
||||||
|
- `CurrentWebsiteSurface.plannedDisposition`: `discovered -> keep | adapt | remove | redirect`
|
||||||
|
- `PrimitiveMapping.disposition`: `candidate -> keep | adapt | remove | exception`
|
||||||
|
- `ExceptionRegisterEntry.reviewOutcome`: `reviewed -> approved exception | no exception required`
|
||||||
|
- `DocumentedException`: `gap identified -> approved exception record`
|
||||||
|
- `LegacyTaskDisposition.disposition`: `historical -> superseded by AstroDeck rebuild`
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- These entities are planning artifacts only. They do not imply new database tables, application models, or runtime services.
|
||||||
56
specs/223-astrodeck-website-rebuild/exception-register.md
Normal file
56
specs/223-astrodeck-website-rebuild/exception-register.md
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
# Exception Register
|
||||||
|
|
||||||
|
This register defines the only allowed path for non-AstroDeck primitives. Until an entry is approved here, custom rebuild work is out of bounds.
|
||||||
|
|
||||||
|
## Workflow
|
||||||
|
|
||||||
|
1. Search the AstroDeck alias inventory before proposing any custom page, section, or component.
|
||||||
|
2. Record the candidate aliases reviewed and explain why keep or bounded adaptation is or is not sufficient.
|
||||||
|
3. If one or more aliases can satisfy the need without inventing a new IA contract or unsupported interaction model, record `no exception required`.
|
||||||
|
4. If all viable aliases fail, record the unmet requirement, the failed candidate search, the bounded deviation, the named approver, and the owning follow-up task.
|
||||||
|
5. Keep every approved exception local to one page, section, or component slice. Do not generalize it into a new default primitive family.
|
||||||
|
|
||||||
|
## Adequacy Rubric
|
||||||
|
|
||||||
|
Use `no exception required` when the AstroDeck candidate family can satisfy the active requirement through bounded adaptation across all of the checks below:
|
||||||
|
|
||||||
|
- It preserves the active route and IA contract from Specs 213, 215, 217, or 218.
|
||||||
|
- It preserves CTA hierarchy, trust-boundary rules, and mobile meaning order without adding a new interaction model.
|
||||||
|
- It avoids shipping demo-only proof, fake logos, invented metrics, or placeholder legal/trust content.
|
||||||
|
- It can be re-skinned to the Spec 214 foundation without introducing a second visual system.
|
||||||
|
|
||||||
|
Use `approved exception` only when every candidate fails one or more of those checks and the failure cannot be resolved by bounded adaptation.
|
||||||
|
|
||||||
|
## Required Evidence for Approved Exceptions
|
||||||
|
|
||||||
|
- failed AstroDeck candidate search
|
||||||
|
- unmet active-spec requirement
|
||||||
|
- adequacy failure reason for each reviewed candidate
|
||||||
|
- bounded deviation being approved
|
||||||
|
- named website reviewer, owner, or equivalent feature approver
|
||||||
|
- replacement task or mapping entry that owns the deviation
|
||||||
|
- spread-control note explaining why the deviation does not create a new default
|
||||||
|
|
||||||
|
## Approval Boundary
|
||||||
|
|
||||||
|
- Minimum approver: named website reviewer or feature owner
|
||||||
|
- Preferred approver for IA or trust changes: spec author or feature owner responsible for Specs 215, 217, or 218
|
||||||
|
- Re-review trigger: if the mounted AstroDeck snapshot disproves the intake aliases currently recorded in `astrodeck-primitive-inventory.md`
|
||||||
|
|
||||||
|
## Register Entries
|
||||||
|
|
||||||
|
| specId | scope | reviewOutcome | reviewRationale | exceptionReference | notes |
|
||||||
|
| --- | --- | --- | --- | --- | --- |
|
||||||
|
| 213 | site-foundation shell, core routes, contact/legal baseline | no exception required | The alias set already covers landing, product, trust, contact, legal utility, header/footer, and CTA primitives. The main drift is route emphasis, not missing primitive families. | none | Spread control: route drift is handled by the Spec 213 mapping sheet and the drift ledger, not by inventing new primitives. |
|
||||||
|
| 214 | visual foundation tokens, surfaces, CTA/input semantics | no exception required | AstroDeck page, section, and component families can be re-skinned to the website-local foundation without inventing a second design system. | none | Acceptance trace: all work must route through `mappings/spec-214-website-visual-foundation.md`. |
|
||||||
|
| 215 | core IA, trust/changelog/contact/legal surfaces, retained secondary routes | no exception required | Generic home, product, proof, content-index, contact, and legal utility aliases are sufficient when demo routes are suppressed. | none | Spread control: any later missing route family must re-open this register before a custom page is approved. |
|
||||||
|
| 217 | homepage section order, trust/progress placement, CTA transition | no exception required | Hero, outcome, feature-cluster, trust, changelog-teaser, and CTA-band aliases cover the homepage contract. | none | Acceptance trace: remove optional proof sections instead of replacing the homepage with a custom greenfield assembly. |
|
||||||
|
| 218 | hero CTA pair, product-near media, bounded trust cues, mobile order | no exception required | The split hero family plus button and badge primitives are adequate once demo media and fake proof are stripped. | none | Spread control: a later hero exception would need to show why the split-media family cannot preserve the existing hero contract. |
|
||||||
|
|
||||||
|
## Approved Exception Records
|
||||||
|
|
||||||
|
None as of 2026-04-22.
|
||||||
|
|
||||||
|
## Standing Rule
|
||||||
|
|
||||||
|
No follow-up implementation slice may introduce a net-new page, section, or component by default. If the mounted AstroDeck snapshot later proves one of the alias families wrong, that mismatch must reopen this register before implementation continues.
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
# Governing Website Spec Classification
|
||||||
|
|
||||||
|
This crosswalk classifies the in-scope website specs before AstroDeck implementation begins and records the follow-up owner for each one.
|
||||||
|
|
||||||
|
## Classification Summary
|
||||||
|
|
||||||
|
| specId | Title | Classification | scopeSummary | rationale | followUpPlan |
|
||||||
|
| --- | --- | --- | --- | --- | --- |
|
||||||
|
| 213 | Initial Website Foundation & v0 Product Site | partially valid | broad v0 public-site truth, shared shell expectations, contact/legal baseline, trust-first positioning | The broad public-site intent remains useful, but the original route inventory and trust-route naming no longer match the canonical IA recorded in later specs. | `specs/223-astrodeck-website-rebuild/mappings/spec-213-website-foundation-v0.md` |
|
||||||
|
| 214 | Website Visual Foundation | continuing | website-only visual direction, tokens, typography, surfaces, CTA/input semantics | AstroDeck changes the implementation substrate, not the website-local visual contract. | `specs/223-astrodeck-website-rebuild/mappings/spec-214-website-visual-foundation.md` |
|
||||||
|
| 215 | Website Information Architecture / Core Pages | continuing | canonical public IA, route priorities, trust/changelog/contact/legal reachability | The current route truth already reflects this spec and must constrain AstroDeck adoption. | `specs/223-astrodeck-website-rebuild/mappings/spec-215-website-core-pages.md` |
|
||||||
|
| 217 | Website Homepage Structure & Section Model | continuing | homepage block order, trust/progress placement, CTA sequencing, onward routing | AstroDeck must adapt to the homepage contract instead of redefining it. | `specs/223-astrodeck-website-rebuild/mappings/spec-217-homepage-structure.md` |
|
||||||
|
| 218 | Website Homepage Hero | continuing | homepage hero semantics, CTA pair, product-near visual truth, bounded trust cues | AstroDeck hero primitives are acceptable only when they preserve the existing hero contract. | `specs/223-astrodeck-website-rebuild/mappings/spec-218-homepage-hero.md` |
|
||||||
|
|
||||||
|
## Current-Surface Crosswalk
|
||||||
|
|
||||||
|
| Surface or concern | 213 | 214 | 215 | 217 | 218 | Forward owner |
|
||||||
|
| --- | --- | --- | --- | --- | --- | --- |
|
||||||
|
| `/` homepage route | X | X | X | X | X | `mappings/spec-217-homepage-structure.md` and `mappings/spec-218-homepage-hero.md`, with 214 and 215 as constraints |
|
||||||
|
| `/product` | X | X | X | | | `mappings/spec-213-website-foundation-v0.md` and `mappings/spec-215-website-core-pages.md` |
|
||||||
|
| `/trust` plus `/security-trust` compatibility | X | X | X | X | X | `mappings/spec-215-website-core-pages.md` and `mappings/spec-213-website-foundation-v0.md` |
|
||||||
|
| `/changelog` | | | X | X | | `mappings/spec-215-website-core-pages.md` |
|
||||||
|
| `/contact` | X | X | X | X | X | `mappings/spec-213-website-foundation-v0.md` and `mappings/spec-215-website-core-pages.md` |
|
||||||
|
| `/privacy`, `/imprint`, `/terms`, `/legal` | X | X | X | | | `mappings/spec-213-website-foundation-v0.md` and `mappings/spec-215-website-core-pages.md` |
|
||||||
|
| `/solutions` and `/integrations` as retained secondary surfaces | X | X | X | | | `mappings/spec-215-website-core-pages.md` |
|
||||||
|
| shared visual system, shells, CTA/input semantics | X | X | X | X | X | `mappings/spec-214-website-visual-foundation.md` |
|
||||||
|
|
||||||
|
## Final Follow-up Execution Order
|
||||||
|
|
||||||
|
1. AstroDeck intake binding and primitive verification using `astrodeck-source-intake.md` and `astrodeck-primitive-inventory.md`.
|
||||||
|
2. Conditional foundation slice owned by `mappings/spec-213-website-foundation-v0.md`, because Spec 213 remains partially valid and still governs broad public-site truth.
|
||||||
|
3. Shared visual-adaptation slice owned by `mappings/spec-214-website-visual-foundation.md`.
|
||||||
|
4. Canonical IA and route-mapping slice owned by `mappings/spec-215-website-core-pages.md`.
|
||||||
|
5. Homepage section-composition slice owned by `mappings/spec-217-homepage-structure.md`.
|
||||||
|
6. Homepage hero-refinement slice owned by `mappings/spec-218-homepage-hero.md`.
|
||||||
|
|
||||||
|
## Execution Notes
|
||||||
|
|
||||||
|
- Steps 3 and 4 can overlap once the AstroDeck aliases are bound, but route ownership from Spec 215 must settle before any homepage-only AstroDeck assembly lands.
|
||||||
|
- Steps 5 and 6 share homepage files and therefore stay sequential after the IA slice has fixed the canonical route shell.
|
||||||
|
- Any imported AstroDeck demo page that tries to introduce new top-level IA must be handled as removal or suppression work in the owning mapping sheet, not as silent scope growth.
|
||||||
@ -0,0 +1,27 @@
|
|||||||
|
# Legacy Task Disposition
|
||||||
|
|
||||||
|
The task files below remain visible as historical execution records, but they are no longer the forward implementation source for `apps/website`.
|
||||||
|
|
||||||
|
## Historical Marker
|
||||||
|
|
||||||
|
Every affected legacy task file now carries the canonical marker:
|
||||||
|
|
||||||
|
`superseded by AstroDeck rebuild`
|
||||||
|
|
||||||
|
That marker preserves the completed checkbox history while making it clear that new delivery belongs to the Spec 223 mapping artifacts instead of the old implementation plans.
|
||||||
|
|
||||||
|
## Replacement References
|
||||||
|
|
||||||
|
| originalSpecId | originalTaskReference | disposition | replacementReference | notes |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| 213 | `specs/213-website-foundation-v0/tasks.md` (`T001-T033`) | superseded by AstroDeck rebuild | `specs/223-astrodeck-website-rebuild/mappings/spec-213-website-foundation-v0.md` | The original v0-site build shipped on the custom Astro substrate. Future work must restart from AstroDeck while preserving the public-site truth. |
|
||||||
|
| 214 | `specs/214-website-visual-foundation/tasks.md` (`T001-T021`) | superseded by AstroDeck rebuild | `specs/223-astrodeck-website-rebuild/mappings/spec-214-website-visual-foundation.md` | The current website foundation remains valid as a design rule set, but its implementation record is historical. |
|
||||||
|
| 215 | `specs/215-website-core-pages/tasks.md` (`T001-T022`) | superseded by AstroDeck rebuild | `specs/223-astrodeck-website-rebuild/mappings/spec-215-website-core-pages.md` | Route truth remains authoritative; the old implementation task list does not. |
|
||||||
|
| 217 | `specs/217-homepage-structure/tasks.md` (`T001-T023`) | superseded by AstroDeck rebuild | `specs/223-astrodeck-website-rebuild/mappings/spec-217-homepage-structure.md` | Homepage structure truth stays active, but the existing section assembly is not the forward substrate. |
|
||||||
|
| 218 | `specs/218-homepage-hero/tasks.md` (`T001-T016`) | superseded by AstroDeck rebuild | `specs/223-astrodeck-website-rebuild/mappings/spec-218-homepage-hero.md` | Hero semantics remain active; the existing hero implementation record is historical only. |
|
||||||
|
|
||||||
|
## Interpretation Rule
|
||||||
|
|
||||||
|
- Do not reset or reopen checkbox state in the legacy task files.
|
||||||
|
- Do not continue delivery from the custom `apps/website` implementation plan.
|
||||||
|
- Use the replacement mapping sheet for all forward task planning, acceptance tracing, and exception review.
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
# Mapping: Spec 213 - Initial Website Foundation & v0 Product Site
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| classification | partially valid |
|
||||||
|
| follow-up owner | `specs/223-astrodeck-website-rebuild/mappings/spec-213-website-foundation-v0.md` |
|
||||||
|
| legacy task file | `specs/213-website-foundation-v0/tasks.md` |
|
||||||
|
| exception outcome | no exception required |
|
||||||
|
| material drift references | `223-DRIFT-213-ia`, `223-DRIFT-213-nav`, `223-DRIFT-213-trust` |
|
||||||
|
|
||||||
|
Spec 213 remains useful as the broad v0 public-site contract, but its original route emphasis predates the later canonical IA. This mapping sheet keeps the surviving truth while moving all implementation ownership onto AstroDeck.
|
||||||
|
|
||||||
|
## Mapping Records
|
||||||
|
|
||||||
|
| Requirement reference | Candidate primitive(s) | Disposition | Adaptation summary | Acceptance mapping | materialDriftReferences | exceptionReference |
|
||||||
|
| --- | --- | --- | --- | --- | --- | --- |
|
||||||
|
| Core public-site shell, header/footer reachability, and one coherent page family | `adk-component-header-nav`, `adk-component-footer-nav`, `adk-component-section-shell` | adapt | Collapse AstroDeck navigation to Product, Trust, Changelog, and Contact plus one primary CTA; preserve footer legal grouping; keep repo-level website contracts intact. | 213 FR-002, FR-003, FR-010, FR-011, FR-017 | `223-DRIFT-213-nav` | none |
|
||||||
|
| First-pass product explanation across Home and Product | `adk-page-home-marketing`, `adk-page-product-overview`, `adk-section-outcome-band`, `adk-section-feature-cluster-grid` | adapt | Keep the trust-first governance story, but replace the current custom page assembly with AstroDeck landing and product shells. | 213 FR-001, FR-004, FR-005, FR-012, FR-016 | none | none |
|
||||||
|
| Trust, contact, and legal baseline | `adk-page-trust-proof`, `adk-page-contact-conversion`, `adk-page-legal-utility`, `adk-section-trust-principles`, `adk-section-contact-form` | adapt | Route trust to `/trust`, preserve `/contact` as the primary next step, and repurpose legal/company utility pages for privacy, imprint, terms, and the retained legal hub. | 213 FR-007, FR-008, FR-009, FR-010 | `223-DRIFT-213-trust` | none |
|
||||||
|
| Secondary pages and compatibility behavior | `adk-page-supporting-showcase`, `adk-page-content-index`, `adk-page-trust-proof` | adapt | Keep `/solutions`, `/integrations`, `/legal`, and `/terms` published as secondary surfaces; preserve `/security-trust` as a redirect only; add `/changelog` and `/imprint` through adapted content/legal shells. | 213 SC-002, SC-004, plus the Spec 223 rebuild rule for preserved history | `223-DRIFT-213-ia` | none |
|
||||||
|
|
||||||
|
## Replacement Tasks
|
||||||
|
|
||||||
|
1. Bind the AstroDeck aliases for the landing shell, product shell, trust proof page, contact page, and legal utility page before any code is copied out of the current `apps/website` implementation.
|
||||||
|
2. Adapt `adk-component-header-nav` and `adk-component-footer-nav` to the canonical Product/Trust/Changelog/Contact navigation model with retained legal footer grouping.
|
||||||
|
3. Map `adk-page-home-marketing` and `adk-page-product-overview` to the v0 product-story surfaces without carrying over AstroDeck demo proof, pricing, or newsletter behavior.
|
||||||
|
4. Repurpose `adk-page-trust-proof`, `adk-page-contact-conversion`, and `adk-page-legal-utility` for `/trust`, `/contact`, `/privacy`, `/imprint`, `/terms`, and `/legal`.
|
||||||
|
5. Add a route-suppression pass that removes AstroDeck demo pages from top-level discoverability and keeps `/security-trust` as a compatibility redirect only.
|
||||||
|
6. Re-run the Spec 213 acceptance trace against the later canonical IA so the broad v0 truth remains visible without overriding Specs 214, 215, 217, and 218.
|
||||||
|
|
||||||
|
## Spread Control and Acceptance Trace
|
||||||
|
|
||||||
|
- Spread control: this mapping sheet does not authorize any new public IA beyond the canonical route family already documented in the current-site inventory and Spec 215.
|
||||||
|
- Acceptance trace: broad v0-site requirements remain owned here, but route inventory, navigation, and trust-route naming defer to the later specs and the drift ledger.
|
||||||
|
- Exception note: no exception is approved. If the mounted AstroDeck snapshot lacks a usable legal utility page or trust-proof page, the missing family must reopen `exception-register.md`.
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
# Mapping: Spec 214 - Website Visual Foundation
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| classification | continuing |
|
||||||
|
| follow-up owner | `specs/223-astrodeck-website-rebuild/mappings/spec-214-website-visual-foundation.md` |
|
||||||
|
| legacy task file | `specs/214-website-visual-foundation/tasks.md` |
|
||||||
|
| exception outcome | no exception required |
|
||||||
|
| material drift references | none |
|
||||||
|
|
||||||
|
Spec 214 remains the controlling visual contract. AstroDeck may accelerate the rebuild, but it may not impose a second visual system or a generic startup aesthetic.
|
||||||
|
|
||||||
|
## Mapping Records
|
||||||
|
|
||||||
|
| Requirement reference | Candidate primitive(s) | Disposition | Adaptation summary | Acceptance mapping | materialDriftReferences | exceptionReference |
|
||||||
|
| --- | --- | --- | --- | --- | --- | --- |
|
||||||
|
| Color roles, surfaces, border-first clarity, and restrained elevation | `adk-component-section-shell`, `adk-component-card-surface`, `adk-component-badge-chip` | adapt | Map AstroDeck colors, borders, and surface layers to the website-local token model; strip decorative gradients, glass, and vanity shadows. | 214 FR-003, FR-004, FR-008, FR-009, FR-015 | none | none |
|
||||||
|
| Typography hierarchy, page rhythm, and progressive disclosure | `adk-section-hero-split-media`, `adk-section-outcome-band`, `adk-section-feature-cluster-grid` | adapt | Rebuild heading scale, section spacing, and copy rhythm around the Spec 214 hierarchy instead of vendor defaults. | 214 FR-005, FR-006, FR-007, FR-013, FR-016 | none | none |
|
||||||
|
| CTA, link, and form semantics | `adk-component-primary-button`, `adk-component-secondary-button`, `adk-component-input-field`, `adk-component-textarea-field` | adapt | Preserve one dominant CTA, lower-emphasis secondary actions, shared focus logic, and calm form styling. | 214 FR-010, FR-012, FR-015, FR-017 | none | none |
|
||||||
|
| Shared shell and page-family consistency across landing, trust, and content routes | `adk-component-header-nav`, `adk-component-footer-nav`, `adk-section-footer-utility`, `adk-page-home-marketing`, `adk-page-trust-proof`, `adk-page-legal-utility` | adapt | Keep one website-only visual language across landing, trust/legal, and content-heavy surfaces; no platform coupling and no raw library styling. | 214 FR-001, FR-002, FR-011, FR-018, FR-019, FR-020 | none | none |
|
||||||
|
|
||||||
|
## Replacement Tasks
|
||||||
|
|
||||||
|
1. Inventory AstroDeck design tokens, utility classes, and section-shell defaults, then bind them to the Spec 214 role model before any page-level restyling starts.
|
||||||
|
2. Adapt `adk-component-section-shell`, `adk-component-card-surface`, and `adk-component-badge-chip` to the website-local surface, border, radius, and contrast rules.
|
||||||
|
3. Re-skin `adk-component-primary-button`, `adk-component-secondary-button`, `adk-component-input-field`, and `adk-component-textarea-field` to match the CTA and form semantics already defined by Spec 214.
|
||||||
|
4. Rebuild AstroDeck header/footer typography, spacing, and nav emphasis so landing, trust, and content page families read as one website.
|
||||||
|
5. Remove or neutralize AstroDeck visual defaults that drift into glass, loud gradients, decorative shadows, or badge-heavy proof theater.
|
||||||
|
6. Re-verify the mapped primitives against representative landing, trust/legal, and content-heavy surfaces before homepage-specific work lands.
|
||||||
|
|
||||||
|
## Spread Control and Acceptance Trace
|
||||||
|
|
||||||
|
- Spread control: all styling work must route through the website-local token and primitive model; no raw AstroDeck styling is allowed to remain as a second standard.
|
||||||
|
- Acceptance trace: the mapped primitives cover the required design token set, typography hierarchy, surface model, interaction semantics, and page-family review rules from Spec 214.
|
||||||
|
- Exception note: no exception is approved. A later exception would need to prove that the mounted AstroDeck snapshot lacks a usable button, form, card, or shell family entirely.
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
# Mapping: Spec 215 - Website Information Architecture / Core Pages
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| classification | continuing |
|
||||||
|
| follow-up owner | `specs/223-astrodeck-website-rebuild/mappings/spec-215-website-core-pages.md` |
|
||||||
|
| legacy task file | `specs/215-website-core-pages/tasks.md` |
|
||||||
|
| exception outcome | no exception required |
|
||||||
|
| material drift references | none |
|
||||||
|
|
||||||
|
Spec 215 is the canonical IA source of truth. AstroDeck may only be adopted in ways that preserve this route model, page priority, and navigation discipline.
|
||||||
|
|
||||||
|
## Mapping Records
|
||||||
|
|
||||||
|
| Requirement reference | Candidate primitive(s) | Disposition | Adaptation summary | Acceptance mapping | materialDriftReferences | exceptionReference |
|
||||||
|
| --- | --- | --- | --- | --- | --- | --- |
|
||||||
|
| Required core routes: `/`, `/product`, `/trust`, `/changelog`, `/contact`, `/privacy`, `/imprint` | `adk-page-home-marketing`, `adk-page-product-overview`, `adk-page-trust-proof`, `adk-page-content-index`, `adk-page-contact-conversion`, `adk-page-legal-utility` | adapt | Bind each canonical route to an AstroDeck page family without inheriting template route names or page priorities. | 215 FR-002, FR-003, FR-006, FR-008, FR-010, FR-012, FR-013 | none | none |
|
||||||
|
| Small primary navigation plus trust/legal footer discoverability | `adk-component-header-nav`, `adk-component-footer-nav`, `adk-section-footer-utility` | adapt | Keep top-level navigation intentionally small and group footer trust/legal/contact links according to Spec 215. | 215 FR-014, FR-015, FR-017, FR-018, FR-019, FR-025 | none | none |
|
||||||
|
| Optional and deferred surfaces | `adk-page-content-index`, `adk-page-supporting-showcase`, `adk-section-logo-strip`, `adk-section-testimonial-stack` | remove | Suppress template pricing, docs, case-study, resource-hub, logo-cloud, and testimonial promotion until an active spec turns them on. | 215 FR-004, FR-005, FR-016, FR-021, FR-022, FR-024 | none | none |
|
||||||
|
| Retained secondary routes and compatibility behavior | `adk-page-supporting-showcase`, `adk-page-legal-utility`, `adk-page-trust-proof` | adapt | Keep `/legal`, `/terms`, `/solutions`, and `/integrations` published as secondary surfaces; preserve `/security-trust` as a redirect to `/trust`. | 215 FR-011, FR-020, FR-023, FR-027 | none | none |
|
||||||
|
|
||||||
|
## Replacement Tasks
|
||||||
|
|
||||||
|
1. Bind AstroDeck page aliases for home, product, trust/proof, content index, contact, and legal utility before route-level implementation starts.
|
||||||
|
2. Adapt `adk-component-header-nav` so primary discoverability remains Product, Trust, Changelog, and Contact with one CTA only.
|
||||||
|
3. Repurpose `adk-page-content-index` into `/changelog` and keep optional `Resources` or editorial surfaces unpublished unless substantive content exists.
|
||||||
|
4. Adapt `adk-page-legal-utility` for `/privacy`, `/imprint`, `/terms`, and the retained `/legal` hub without shipping template legal copy.
|
||||||
|
5. Keep `adk-page-supporting-showcase` available only for `/solutions` and `/integrations`, and do not let those routes displace the required core IA.
|
||||||
|
6. Add an AstroDeck route-suppression pass for pricing, docs, case-study, resource, team, and newsletter surfaces that are not yet active.
|
||||||
|
7. Preserve `/security-trust` as redirect-only behavior once `/trust` is mapped to the canonical proof page.
|
||||||
|
|
||||||
|
## Spread Control and Acceptance Trace
|
||||||
|
|
||||||
|
- Spread control: no AstroDeck route becomes publicly discoverable unless Spec 215 already classifies it as required, retained secondary, or approved optional.
|
||||||
|
- Acceptance trace: the mapping above preserves the required core routes, the small top-level navigation, trust visibility, changelog visibility, and contact primacy.
|
||||||
|
- Exception note: no exception is approved. A future exception would need to show that the mounted snapshot lacks a usable content-index or legal-utility family entirely.
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
# Mapping: Spec 217 - Website Homepage Structure & Section Model
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| classification | continuing |
|
||||||
|
| follow-up owner | `specs/223-astrodeck-website-rebuild/mappings/spec-217-homepage-structure.md` |
|
||||||
|
| legacy task file | `specs/217-homepage-structure/tasks.md` |
|
||||||
|
| exception outcome | no exception required |
|
||||||
|
| material drift references | none |
|
||||||
|
|
||||||
|
Spec 217 remains the homepage structure contract. AstroDeck can supply section families, but it may not reorder the homepage into a generic feature wall or proof-heavy template.
|
||||||
|
|
||||||
|
## Mapping Records
|
||||||
|
|
||||||
|
| Requirement reference | Candidate primitive(s) | Disposition | Adaptation summary | Acceptance mapping | materialDriftReferences | exceptionReference |
|
||||||
|
| --- | --- | --- | --- | --- | --- | --- |
|
||||||
|
| Hero to outcome flow | `adk-section-hero-split-media`, `adk-section-outcome-band` | adapt | Keep the homepage order of hero first, outcome framing second, and route visitors into a product-near reading path immediately. | 217 FR-001, FR-002, FR-003, FR-004, FR-008 | none | none |
|
||||||
|
| Grouped capability model instead of route-job cards | `adk-section-feature-cluster-grid` | adapt | Use grouped capability clusters that route deeper explanation to `/product` instead of equal-weight marketing cards. | 217 FR-009, FR-010 | none | none |
|
||||||
|
| Trust and progress before the final CTA | `adk-section-trust-principles`, `adk-section-changelog-teaser`, `adk-section-cta-band` | adapt | Keep trust and visible product movement ahead of the closing CTA and route them to `/trust` and `/changelog`. | 217 FR-011, FR-012, FR-013, FR-014, FR-018 | none | none |
|
||||||
|
| Optional proof sections that risk fake maturity | `adk-section-proof-stats`, `adk-section-logo-strip`, `adk-section-testimonial-stack` | remove | Remove by default unless the team has approved, real, public-safe proof material. | 217 FR-017, FR-020 | none | none |
|
||||||
|
| Header/footer discoverability and mobile continuity | `adk-component-header-nav`, `adk-component-footer-nav`, `adk-section-footer-utility` | adapt | Preserve the published route set and keep the same meaning order on narrow screens. | 217 FR-005, FR-006, FR-015, FR-016, FR-019, FR-021 | none | none |
|
||||||
|
|
||||||
|
## Replacement Tasks
|
||||||
|
|
||||||
|
1. Adapt `adk-section-hero-split-media` into the homepage entry point without letting AstroDeck proof strips or testimonial blocks appear above the product explanation.
|
||||||
|
2. Adapt `adk-section-outcome-band` so buyer-oriented outcomes appear before any capability cluster or proof section.
|
||||||
|
3. Rebuild `adk-section-feature-cluster-grid` into grouped capability coverage that routes to `/product` instead of acting like a route list.
|
||||||
|
4. Place `adk-section-trust-principles` and `adk-section-changelog-teaser` ahead of the closing `adk-section-cta-band`.
|
||||||
|
5. Remove `adk-section-proof-stats`, `adk-section-logo-strip`, and `adk-section-testimonial-stack` unless real proof assets are explicitly approved later.
|
||||||
|
6. Re-check the homepage route transitions, footer legal reachability, and mobile section order after the mapped sections are in place.
|
||||||
|
|
||||||
|
## Spread Control and Acceptance Trace
|
||||||
|
|
||||||
|
- Spread control: homepage-only structure work may not pull in extra AstroDeck sections simply because they are visually available.
|
||||||
|
- Acceptance trace: the mapping preserves the required homepage block set, section order, trust/progress placement, and onward routing from Spec 217.
|
||||||
|
- Exception note: no exception is approved. If the mounted snapshot lacks a usable outcome or changelog-teaser family, reopen the exception workflow before composing a net-new homepage section.
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
# Mapping: Spec 218 - Website Homepage Hero
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| classification | continuing |
|
||||||
|
| follow-up owner | `specs/223-astrodeck-website-rebuild/mappings/spec-218-homepage-hero.md` |
|
||||||
|
| legacy task file | `specs/218-homepage-hero/tasks.md` |
|
||||||
|
| exception outcome | no exception required |
|
||||||
|
| material drift references | none |
|
||||||
|
|
||||||
|
Spec 218 keeps the hero contract narrow and semantic. AstroDeck may only be used as a hero substrate when it preserves one clear anchor, one CTA pair, product-near truth, and bounded trust cues.
|
||||||
|
|
||||||
|
## Mapping Records
|
||||||
|
|
||||||
|
| Requirement reference | Candidate primitive(s) | Disposition | Adaptation summary | Acceptance mapping | materialDriftReferences | exceptionReference |
|
||||||
|
| --- | --- | --- | --- | --- | --- | --- |
|
||||||
|
| Hero text core: category context, headline, supporting copy | `adk-section-hero-split-media` | adapt | Keep one clear product category cue, one headline, and one supporting-copy block; remove stacked marketing slogans and filler text. | 218 FR-001, FR-002, FR-005, FR-006, FR-007, FR-013, FR-014 | none | none |
|
||||||
|
| One dominant primary CTA plus one lower-emphasis secondary CTA | `adk-component-primary-button`, `adk-component-secondary-button` | adapt | Preserve the Contact-first action with one deepening CTA and remove any additional equal-weight buttons. | 218 FR-008, FR-009, FR-016 | none | none |
|
||||||
|
| Product-near visual truth | `adk-section-hero-split-media`, `adk-component-card-surface` | adapt | Replace generic analytics wallpaper with a governance-specific product visual or truthful placeholder tied to change history, review, restore, or drift. | 218 FR-010, FR-011, FR-015, FR-020 | none | none |
|
||||||
|
| Optional bounded trust chips | `adk-component-badge-chip` | adapt | Reduce AstroDeck hero chips to a small set of factual, supportable trust cues. | 218 FR-012, FR-013 | none | none |
|
||||||
|
| Anti-pattern removal and mobile meaning order | `adk-section-proof-stats`, `adk-section-logo-strip`, `adk-section-testimonial-stack`, `adk-section-hero-split-media` | remove | Remove badge walls, fake proof, and extra CTA pressure; preserve headline, copy, CTA, visual, and optional trust chips on mobile. | 218 FR-017, FR-018, FR-019, FR-022 | none | none |
|
||||||
|
|
||||||
|
## Replacement Tasks
|
||||||
|
|
||||||
|
1. Bind `adk-section-hero-split-media` to the homepage hero and reduce it to the allowed semantic structure before any art-direction pass starts.
|
||||||
|
2. Adapt `adk-component-primary-button` and `adk-component-secondary-button` into the Contact-first CTA pair with no competing primary actions.
|
||||||
|
3. Replace AstroDeck demo hero imagery with a governance-specific product visual or a truthful approximation derived from real product structure.
|
||||||
|
4. Reduce `adk-component-badge-chip` usage to a small bounded trust-subclaim set that routes deeper context to `/trust`.
|
||||||
|
5. Remove hero-adjacent proof stats, logo strips, testimonials, and extra CTA blocks that dilute the primary anchor.
|
||||||
|
6. Verify the mapped hero preserves headline-first reading order, CTA visibility, and product-near proof on narrow screens before the homepage section pass is considered complete.
|
||||||
|
|
||||||
|
## Spread Control and Acceptance Trace
|
||||||
|
|
||||||
|
- Spread control: this sheet does not authorize a bespoke hero framework or a custom visual language separate from the Spec 214 foundation.
|
||||||
|
- Acceptance trace: the mapping covers the required hero text core, CTA pair, product-near visual, bounded trust cues, mobile meaning order, and anti-pattern rejection from Spec 218.
|
||||||
|
- Exception note: no exception is approved. A future exception would need to prove that the mounted AstroDeck hero family cannot preserve the current hero contract even after bounded adaptation.
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
# Material Drift Follow-up
|
||||||
|
|
||||||
|
Only material drift that changes page inventory, CTA logic, navigation, or trust messaging belongs here. As of 2026-04-22, drift is concentrated in Spec 213.
|
||||||
|
|
||||||
|
## Drift Records
|
||||||
|
|
||||||
|
| driftId | affectedSpecId | driftClass | driftSummary | requiredSpecAction | targetSpecReference | notes |
|
||||||
|
| --- | --- | --- | --- | --- | --- | --- |
|
||||||
|
| `223-DRIFT-213-ia` | 213 | page inventory | The canonical public IA now treats `/trust`, `/changelog`, and `/imprint` as required surfaces and demotes `/legal`, `/terms`, `/solutions`, and `/integrations` to retained secondary status. | update existing spec | `specs/213-website-foundation-v0/spec.md` | Spec 215 already carries the newer route truth; Spec 213 needs an explicit rebuild note so the mismatch is visible. |
|
||||||
|
| `223-DRIFT-213-nav` | 213 | navigation | Top-level discoverability now centers on Product, Trust, Changelog, and Contact with one primary CTA instead of the broader route emphasis implied by the original v0 foundation. | update existing spec | `specs/213-website-foundation-v0/spec.md` | This keeps the public journey aligned with Spec 215 and the current website baseline. |
|
||||||
|
| `223-DRIFT-213-trust` | 213 | trust messaging | The canonical trust surface is `/trust`, while `/security-trust` is now only a compatibility redirect and must not be rebuilt as a first-class page. | update existing spec | `specs/213-website-foundation-v0/spec.md` | The rebuild note in Spec 213 points future work to the canonical Trust route and the Spec 223 mapping sheet. |
|
||||||
|
|
||||||
|
## No Additional Drift Logged
|
||||||
|
|
||||||
|
- Spec 214: no material drift logged. AstroDeck changes the substrate, but the website-only visual contract stays authoritative.
|
||||||
|
- Spec 215: no material drift logged. The current IA is already the source of truth that constrains AstroDeck adoption.
|
||||||
|
- Spec 217: no material drift logged. Optional AstroDeck proof sections are handled as remove/adapt mapping decisions, not as homepage-structure truth changes.
|
||||||
|
- Spec 218: no material drift logged. Hero anti-pattern control and CTA semantics remain authoritative without new spec changes.
|
||||||
|
|
||||||
|
## Action Summary
|
||||||
|
|
||||||
|
The drift set above requires one direct spec update: Spec 213 must now carry an explicit Spec 223 rebuild note so reviewers can see that its broad truth survives while its older route and navigation assumptions do not.
|
||||||
191
specs/223-astrodeck-website-rebuild/plan.md
Normal file
191
specs/223-astrodeck-website-rebuild/plan.md
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
# Implementation Plan: Website Reset and AstroDeck Rebuild
|
||||||
|
|
||||||
|
**Branch**: `223-astrodeck-website-rebuild` | **Date**: 2026-04-22 | **Spec**: [spec.md](spec.md)
|
||||||
|
**Input**: Feature specification from `/specs/223-astrodeck-website-rebuild/spec.md`
|
||||||
|
|
||||||
|
**Note**: This template is filled in by the `/speckit.plan` command. See `.specify/scripts/` for helper scripts.
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
This plan turns Spec 223 into a documentation-first rebuild workflow for `apps/website`. The primary requirement is to discard the current website implementation as the forward substrate while preserving the validity of continuing website specs and the history of legacy implementation tasks.
|
||||||
|
|
||||||
|
The technical approach is:
|
||||||
|
1. Confirm the current website is a standalone Astro 6 static app with file-based routes, content collections, and Playwright smoke coverage.
|
||||||
|
2. Treat AstroDeck as an external template source that must be inventoried before any rebuild mapping or custom work starts.
|
||||||
|
3. Model the rebuild with file-based planning artifacts only: current-site inventory, AstroDeck source intake, AstroDeck primitive inventory, website-spec classification, per-spec mapping or supersession-closure records, superseded legacy-task treatment, material-drift follow-up, and an exception register with review outcomes plus embedded approved exception records.
|
||||||
|
4. Hand off follow-up task planning as an inventory-first slice, a conditional Spec 213 disposition-or-mapping slice, and per-spec mapping slices for the continuing website specs, with each per-spec mapping artifact owning its embedded replacement task list and explicit spec-update follow-up when mapping reveals material page inventory, CTA logic, navigation, or trust messaging drift.
|
||||||
|
|
||||||
|
## Phases & Checkpoints
|
||||||
|
|
||||||
|
### Phase 0 - Research & Scope Lock
|
||||||
|
|
||||||
|
- Done when the current `apps/website` substrate, AstroDeck availability, route drift, and planning-artifact contract are documented in [research.md](research.md).
|
||||||
|
- Done when no Technical Context field remains unresolved.
|
||||||
|
|
||||||
|
### Phase 1 - Design Artifacts
|
||||||
|
|
||||||
|
- Done when [data-model.md](data-model.md), [contracts/rebuild-planning-artifacts.yaml](contracts/rebuild-planning-artifacts.yaml), and [quickstart.md](quickstart.md) define the inventory, classification, mapping, superseded-task, and exception workflow.
|
||||||
|
- Done when the Constitution Check is re-run post-design and still passes without introducing runtime or platform obligations.
|
||||||
|
|
||||||
|
### Phase 2 - Task Planning Handoff
|
||||||
|
|
||||||
|
- Done when `/speckit.tasks` can generate a task set that starts with AstroDeck inventory, keeps a conditional dedicated path for Spec 213, and then splits into per-spec mapping slices for Specs 214, 215, 217, and 218.
|
||||||
|
- Done when legacy-task superseded handling and exception boundaries are explicit enough that task generation cannot silently fall back to greenfield rebuild work.
|
||||||
|
|
||||||
|
## Final Follow-up Execution Order
|
||||||
|
|
||||||
|
1. Bind the mounted AstroDeck snapshot to the aliases in `astrodeck-source-intake.md` and `astrodeck-primitive-inventory.md`.
|
||||||
|
2. Execute the conditional foundation slice in `mappings/spec-213-website-foundation-v0.md`.
|
||||||
|
3. Execute the shared visual-adaptation slice in `mappings/spec-214-website-visual-foundation.md`.
|
||||||
|
4. Execute the canonical IA and route-mapping slice in `mappings/spec-215-website-core-pages.md`.
|
||||||
|
5. Execute the homepage section-composition slice in `mappings/spec-217-homepage-structure.md`.
|
||||||
|
6. Execute the homepage hero-refinement slice in `mappings/spec-218-homepage-hero.md`.
|
||||||
|
|
||||||
|
## Technical Context
|
||||||
|
|
||||||
|
**Language/Version**: TypeScript 5.9, Astro 6, Node.js 20+
|
||||||
|
**Primary Dependencies**: Astro, astro-icon, Tailwind CSS v4, Playwright 1.59
|
||||||
|
**Storage**: File-based route files, Astro content collections under `src/content`, public assets, and planning documents under `specs/223-astrodeck-website-rebuild`; no database
|
||||||
|
**Testing**: Static build plus Playwright smoke tests in `apps/website/tests/smoke` for follow-up implementation slices; this planning slice itself is documentation-only
|
||||||
|
**Validation Lanes**: N/A for this planning slice; fast-feedback for follow-up website implementation (`corepack pnpm build:website`, `cd apps/website && corepack pnpm exec playwright test`)
|
||||||
|
**Target Platform**: Static public website served from the Astro app in `apps/website`
|
||||||
|
**Project Type**: Monorepo web application with a standalone Astro website app
|
||||||
|
**Performance Goals**: No new runtime goal in this planning-only slice; follow-up rebuild work must preserve static-site buildability and smoke-testable route rendering across the current public route family
|
||||||
|
**Constraints**: Strictly local to `apps/website`; AstroDeck-first inventory and mapping; legacy tasks remain visible as superseded history; no default greenfield work; no platform or Filament coupling
|
||||||
|
**Scale/Scope**: Current website scope covers 12 public route files, 5 governing website specs (213, 214, 215, 217, 218), component families under `src/components/{primitives,sections,content,layout}`, and file-based content collections for articles, changelog, and resources
|
||||||
|
|
||||||
|
## UI / Surface Guardrail Plan
|
||||||
|
|
||||||
|
- **Guardrail scope**: no operator-facing surface change
|
||||||
|
- **Native vs custom classification summary**: N/A
|
||||||
|
- **Shared-family relevance**: none
|
||||||
|
- **State layers in scope**: none
|
||||||
|
- **Handling modes by drift class or surface**: report-only
|
||||||
|
- **Repository-signal treatment**: review-mandatory for follow-up inventory and mapping artifacts; no runtime hard-stop in this slice
|
||||||
|
- **Special surface test profiles**: N/A
|
||||||
|
- **Required tests or manual smoke**: N/A for this planning slice; follow-up implementation slices must use browser smoke plus static build proof
|
||||||
|
- **Exception path and spread control**: one named exception boundary only, for non-AstroDeck primitives that fail the mapping search and meet the documented exception rule
|
||||||
|
- **Active feature PR close-out entry**: N/A
|
||||||
|
|
||||||
|
## Constitution Check
|
||||||
|
|
||||||
|
*GATE: Must pass before Phase 0 research. Re-check after Phase 1 design.*
|
||||||
|
|
||||||
|
- [X] **Inventory-first / snapshots / Graph contract / deterministic capabilities / run observability / automation**: N/A. This slice introduces no runtime inventory model, no Graph calls, no queued work, and no `OperationRun`.
|
||||||
|
- [X] **Scope / ownership / workspace and tenant isolation / RBAC / operator-surface rules**: N/A. The work is repository-local to `apps/website` and does not touch `/admin`, `/system`, tenant scope, or platform permissions.
|
||||||
|
- [X] **Proportionality / no premature abstraction / few layers**: Pass. All outputs remain file-based design artifacts; no runtime registries, DTO layers, or persisted models are introduced.
|
||||||
|
- [X] **LEAN-001**: Pass. The discarded website implementation is replaced rather than preserved through compatibility shims or legacy aliases.
|
||||||
|
- [X] **TEST-GOV-001**: Pass. This slice is explicitly docs-only, states `N/A` for runtime proof, and pushes build/browser proof to follow-up implementation specs.
|
||||||
|
- [X] **UI-FIL / BADGE / UX-001 / action-surface / naming / opsurface rules**: N/A. No Filament or operator-facing UI changes are planned in this slice.
|
||||||
|
|
||||||
|
## Test Governance Check
|
||||||
|
|
||||||
|
- **Test purpose / classification by changed surface**: N/A
|
||||||
|
- **Affected validation lanes**: N/A
|
||||||
|
- **Why this lane mix is the narrowest sufficient proof**: This slice only produces planning artifacts and does not change runtime behavior.
|
||||||
|
- **Narrowest proving command(s)**: N/A
|
||||||
|
- **Fixture / helper / factory / seed / context cost risks**: none
|
||||||
|
- **Expensive defaults or shared helper growth introduced?**: no
|
||||||
|
- **Heavy-family additions, promotions, or visibility changes**: none
|
||||||
|
- **Surface-class relief / special coverage rule**: N/A
|
||||||
|
- **Closing validation and reviewer handoff**: Reviewers should inspect the generated planning artifacts for completeness, continuity with Spec 223, and explicit follow-up validation ownership.
|
||||||
|
- **Budget / baseline / trend follow-up**: none
|
||||||
|
- **Review-stop questions**: lane fit, hidden runtime claims, accidental platform coupling
|
||||||
|
- **Escalation path**: none
|
||||||
|
- **Active feature PR close-out entry**: N/A
|
||||||
|
- **Why no dedicated follow-up spec is needed**: This slice already exists to define the reset and planning contract; follow-up implementation proof belongs in the subsequent mapping specs and task plans.
|
||||||
|
|
||||||
|
## Project Structure
|
||||||
|
|
||||||
|
### Documentation & Planning Artifacts (this feature)
|
||||||
|
|
||||||
|
```text
|
||||||
|
specs/223-astrodeck-website-rebuild/
|
||||||
|
├── current-website-inventory.md
|
||||||
|
├── astrodeck-source-intake.md
|
||||||
|
├── astrodeck-primitive-inventory.md
|
||||||
|
├── governing-website-spec-classification.md
|
||||||
|
├── legacy-task-disposition.md
|
||||||
|
├── exception-register.md
|
||||||
|
├── material-drift-follow-up.md
|
||||||
|
├── mappings/
|
||||||
|
│ ├── spec-213-website-foundation-v0.md
|
||||||
|
│ ├── spec-214-website-visual-foundation.md
|
||||||
|
│ ├── spec-215-website-core-pages.md
|
||||||
|
│ ├── spec-217-homepage-structure.md
|
||||||
|
│ └── spec-218-homepage-hero.md
|
||||||
|
├── plan.md
|
||||||
|
├── research.md
|
||||||
|
├── data-model.md
|
||||||
|
├── quickstart.md
|
||||||
|
├── contracts/
|
||||||
|
│ └── rebuild-planning-artifacts.yaml
|
||||||
|
└── tasks.md
|
||||||
|
```
|
||||||
|
|
||||||
|
### Source Code (repository root)
|
||||||
|
|
||||||
|
```text
|
||||||
|
apps/website/
|
||||||
|
├── astro.config.mjs
|
||||||
|
├── package.json
|
||||||
|
├── playwright.config.ts
|
||||||
|
├── src/
|
||||||
|
│ ├── content.config.ts
|
||||||
|
│ ├── components/
|
||||||
|
│ │ ├── content/
|
||||||
|
│ │ ├── layout/
|
||||||
|
│ │ ├── primitives/
|
||||||
|
│ │ └── sections/
|
||||||
|
│ ├── content/
|
||||||
|
│ │ ├── articles/
|
||||||
|
│ │ ├── changelog/
|
||||||
|
│ │ ├── pages/
|
||||||
|
│ │ └── resources/
|
||||||
|
│ ├── layouts/
|
||||||
|
│ ├── lib/
|
||||||
|
│ ├── pages/
|
||||||
|
│ │ ├── index.astro
|
||||||
|
│ │ ├── product.astro
|
||||||
|
│ │ ├── trust.astro
|
||||||
|
│ │ ├── changelog.astro
|
||||||
|
│ │ ├── contact.astro
|
||||||
|
│ │ ├── privacy.astro
|
||||||
|
│ │ ├── imprint.astro
|
||||||
|
│ │ ├── terms.astro
|
||||||
|
│ │ ├── solutions.astro
|
||||||
|
│ │ ├── integrations.astro
|
||||||
|
│ │ ├── legal.astro
|
||||||
|
│ │ └── security-trust.astro
|
||||||
|
│ └── styles/
|
||||||
|
└── tests/
|
||||||
|
└── smoke/
|
||||||
|
├── home-product.spec.ts
|
||||||
|
├── solutions-trust-integrations.spec.ts
|
||||||
|
├── changelog-core-ia.spec.ts
|
||||||
|
├── contact-legal.spec.ts
|
||||||
|
└── visual-foundation-guardrails.spec.ts
|
||||||
|
```
|
||||||
|
|
||||||
|
**Structure Decision**: Use the existing monorepo structure as-is. This plan is centered on `apps/website` and the planning artifacts under `specs/223-astrodeck-website-rebuild`, with only bounded traceability updates to the referenced 213/214/215/217/218 spec or task files when legacy-task supersession or material-drift follow-up requires them. No new runtime packages, shared libraries, or platform directories are introduced. The per-spec mapping or disposition files are also the forward-looking rebuild-plan artifacts: they embed the replacement task list or explicit supersession closure instead of spawning separate per-spec `tasks.md` files in this slice.
|
||||||
|
|
||||||
|
## Complexity Tracking
|
||||||
|
|
||||||
|
| Violation | Why Needed | Simpler Alternative Rejected Because |
|
||||||
|
|-----------|------------|-------------------------------------|
|
||||||
|
| none | N/A | N/A |
|
||||||
|
|
||||||
|
## Proportionality Review
|
||||||
|
|
||||||
|
- **Current operator problem**: Website contributors and reviewers need one explicit rebuild contract so they can discard the current implementation without losing continuing website truth or legacy task history.
|
||||||
|
- **Existing structure is insufficient because**: The current website specs define public-surface intent, but they do not specify how a full substrate change should preserve those decisions, reconcile current routes, and prevent silent greenfield rebuilding.
|
||||||
|
- **Narrowest correct implementation**: File-based artifacts only: research, data model, contracts, quickstart, inventories, classifications, mapping sheets, superseded-task handling, material-drift follow-up, and exception boundaries.
|
||||||
|
- **Ownership cost created**: Ongoing maintenance of a planning vocabulary for current-site inventory, AstroDeck primitive inventory, spec classification, mapping records, legacy-task disposition, and bounded exceptions.
|
||||||
|
- **Alternative intentionally rejected**: A code-first template import or a single monolithic rebuild task list was rejected because both would hide the strategy shift and collapse inventory, classification, and mapping into one opaque step.
|
||||||
|
- **Release truth**: Current-release truth for the public website rebuild; not future platform preparation.
|
||||||
|
|
||||||
|
## Post-Design Constitution Check
|
||||||
|
|
||||||
|
- [X] Post-design gate still passes: artifacts remain file-based and local to `apps/website`.
|
||||||
|
- [X] No runtime, platform, RBAC, Filament, or operator-surface obligations were introduced during design.
|
||||||
|
- [X] Follow-up implementation responsibility is explicit: inventory first, mapping second, tasks third, build/browser proof in later slices.
|
||||||
118
specs/223-astrodeck-website-rebuild/quickstart.md
Normal file
118
specs/223-astrodeck-website-rebuild/quickstart.md
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
# Quickstart: Website Reset and AstroDeck Rebuild
|
||||||
|
|
||||||
|
This quickstart describes how to execute Spec 223 after planning is approved.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- Work on branch `223-astrodeck-website-rebuild` or a follow-up branch derived from it.
|
||||||
|
- Keep the existing `apps/website` codebase available for comparison until legacy-task disposition and current-site inventory are complete.
|
||||||
|
- Obtain the AstroDeck source snapshot that will act as the new substrate. It does not need to be committed yet, but it must be available for inventory and mapping.
|
||||||
|
|
||||||
|
## Step 1: Capture the current website inventory
|
||||||
|
|
||||||
|
Inspect the current website surface before replacing anything.
|
||||||
|
|
||||||
|
- Record every current route under `apps/website/src/pages`.
|
||||||
|
- Record current component families under `apps/website/src/components`.
|
||||||
|
- Record content-backed sources from `apps/website/src/content` and `apps/website/src/content.config.ts`.
|
||||||
|
- Record current smoke coverage under `apps/website/tests/smoke` so follow-up rebuild work preserves intentional route and guardrail coverage.
|
||||||
|
|
||||||
|
## Step 2: Capture the AstroDeck inventory
|
||||||
|
|
||||||
|
Create a reviewable inventory of the imported AstroDeck source.
|
||||||
|
|
||||||
|
- List AstroDeck pages.
|
||||||
|
- List AstroDeck sections.
|
||||||
|
- List AstroDeck components.
|
||||||
|
- Flag demo-only copy, media, and CTA behavior that will require adaptation or removal.
|
||||||
|
|
||||||
|
## Step 3: Classify the governing website specs
|
||||||
|
|
||||||
|
Classify the current website spec set before touching implementation tasks.
|
||||||
|
|
||||||
|
- Evaluate Specs 213, 214, 215, 217, and 218.
|
||||||
|
- Mark each as continuing, partially valid, or superseded.
|
||||||
|
- Record why the classification was chosen.
|
||||||
|
- Record the `scopeSummary` for each classified spec.
|
||||||
|
- Record the `followUpPlan` path for each classified spec so the owning per-spec mapping artifact or explicit supersession-closure artifact is visible immediately.
|
||||||
|
- If Spec 213 remains continuing or partially valid, assign it its own dedicated rebuild-plan artifact instead of folding it into the 214-218 slices.
|
||||||
|
|
||||||
|
## Step 4: Mark legacy implementation tasks as superseded
|
||||||
|
|
||||||
|
Do not reopen or reset legacy tasks.
|
||||||
|
|
||||||
|
- Preserve the old task history.
|
||||||
|
- Mark implementation tasks tied to the discarded website with the canonical historical marker `superseded by AstroDeck rebuild`.
|
||||||
|
- Point each superseded task to the new follow-up plan or task list, or record the explicit statement `no replacement work required`.
|
||||||
|
|
||||||
|
## Step 5: Build per-spec AstroDeck mappings
|
||||||
|
|
||||||
|
For each continuing or partially valid website spec:
|
||||||
|
|
||||||
|
- Identify candidate AstroDeck pages, sections, and components.
|
||||||
|
- Decide keep, adapt, remove, or exception for each relevant primitive.
|
||||||
|
- Capture required adaptation to routes, content slots, styling, CTA logic, and trust/legal behavior.
|
||||||
|
- Record acceptance mapping back to the governing spec.
|
||||||
|
- Author the replacement task list inside the same per-spec mapping or disposition artifact so forward delivery ownership is explicit before implementation begins.
|
||||||
|
- Name each replacement task by the relevant AstroDeck page, section, component, or mapping activity rather than using generic build verbs.
|
||||||
|
- Give Spec 213 its own mapping or explicit supersession-closure artifact depending on the classification outcome.
|
||||||
|
|
||||||
|
## Step 6: Record exceptions only when the primitive search fails
|
||||||
|
|
||||||
|
Custom work is the exception path.
|
||||||
|
|
||||||
|
- Search AstroDeck first.
|
||||||
|
- Treat a primitive as adequate only when keep or bounded adaptation can satisfy the requirement without introducing a net-new IA contract or unsupported interaction model.
|
||||||
|
- Record every missing-candidate review in the exception register as either `approved exception` or `no exception required`.
|
||||||
|
- If no adequate primitive exists, capture the documented exception record in `exception-register.md` with the failed adequacy rationale and named approver.
|
||||||
|
- Bound the exception to one page, section, or component slice.
|
||||||
|
|
||||||
|
## Step 7: Record material drift as explicit spec work
|
||||||
|
|
||||||
|
AstroDeck adoption must not silently change website truth.
|
||||||
|
|
||||||
|
- Log any material page inventory, CTA logic, navigation, or trust messaging drift.
|
||||||
|
- Update the affected existing website spec or create a named follow-up website spec.
|
||||||
|
- Link the drift record to the mapping artifact that exposed it.
|
||||||
|
|
||||||
|
## Step 8: Record cross-spec execution order for the follow-up tasks
|
||||||
|
|
||||||
|
After the per-spec artifacts already contain their embedded replacement task lists or supersession closures, record the cross-spec execution order in this sequence:
|
||||||
|
|
||||||
|
1. AstroDeck intake binding and primitive verification using `astrodeck-source-intake.md` and `astrodeck-primitive-inventory.md`
|
||||||
|
2. Conditional Spec 213 disposition-or-mapping slice in `mappings/spec-213-website-foundation-v0.md`
|
||||||
|
3. Spec 214 visual-adaptation slice in `mappings/spec-214-website-visual-foundation.md`
|
||||||
|
4. Spec 215 IA and route-mapping slice in `mappings/spec-215-website-core-pages.md`
|
||||||
|
5. Spec 217 homepage section-composition slice in `mappings/spec-217-homepage-structure.md`
|
||||||
|
6. Spec 218 homepage hero-refinement slice in `mappings/spec-218-homepage-hero.md`
|
||||||
|
|
||||||
|
Each per-spec mapping or disposition artifact should already contain its replacement task list or explicit supersession closure before this cross-spec execution order is recorded.
|
||||||
|
|
||||||
|
## Step 9: Begin implementation only after the planning artifacts are complete
|
||||||
|
|
||||||
|
Implementation should start only when:
|
||||||
|
|
||||||
|
- every current website surface has a disposition
|
||||||
|
- every continuing or partially valid website spec has a mapping artifact
|
||||||
|
- legacy tasks are marked superseded
|
||||||
|
- every material drift item points to an updated or follow-up website spec
|
||||||
|
- any custom primitive has an approved exception record
|
||||||
|
|
||||||
|
## Validation
|
||||||
|
|
||||||
|
This planning slice does not require runtime validation. Follow-up implementation slices should use:
|
||||||
|
|
||||||
|
- `corepack pnpm build:website`
|
||||||
|
- `cd apps/website && corepack pnpm exec playwright test`
|
||||||
|
|
||||||
|
## Expected Outputs
|
||||||
|
|
||||||
|
- A current-site inventory for `apps/website`
|
||||||
|
- An AstroDeck source-intake record
|
||||||
|
- An AstroDeck primitive inventory
|
||||||
|
- A classification of Specs 213, 214, 215, 217, and 218
|
||||||
|
- Superseded legacy-task records
|
||||||
|
- Per-spec AstroDeck mappings and embedded replacement task lists or explicit supersession closures, including the conditional Spec 213 artifact
|
||||||
|
- Material-drift follow-up records tied to updated or follow-up website specs
|
||||||
|
- An exception register with approved-exception and no-exception outcomes
|
||||||
|
- Exception records only where AstroDeck cannot satisfy an active requirement
|
||||||
49
specs/223-astrodeck-website-rebuild/research.md
Normal file
49
specs/223-astrodeck-website-rebuild/research.md
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
# Research: Website Reset and AstroDeck Rebuild
|
||||||
|
|
||||||
|
## Decision 1: Treat the current website as a custom Astro substrate that is being retired, not as a hybrid AstroDeck base
|
||||||
|
|
||||||
|
- **Decision**: The existing `apps/website` codebase is a custom Astro 6 static site and must be treated as the legacy implementation being replaced.
|
||||||
|
- **Rationale**: The app uses hand-authored route files under `src/pages`, custom component families under `src/components/{primitives,sections,content,layout}`, Astro content collections in `src/content.config.ts`, and a focused Playwright smoke suite. No AstroDeck runtime artifacts or imports exist in the current app.
|
||||||
|
- **Alternatives considered**:
|
||||||
|
- Assume the current site is already close enough to AstroDeck and continue incrementally. Rejected because the repository shows a custom build, not a template-derived primitive inventory.
|
||||||
|
- Rebuild directly from the current component families. Rejected because Spec 223 makes AstroDeck the required substrate for forward work.
|
||||||
|
|
||||||
|
## Decision 2: Treat AstroDeck as an external source intake that must be imported and inventoried before mapping begins
|
||||||
|
|
||||||
|
- **Decision**: Planning must assume AstroDeck is not yet materialized in the repository and therefore must first be brought into a reviewable workspace before mapping decisions can start.
|
||||||
|
- **Rationale**: Repository-wide search found AstroDeck references only in the spec text, not in `apps/website` source code or supporting docs. That makes AstroDeck an external input to the rebuild, not an already-present code surface.
|
||||||
|
- **Alternatives considered**:
|
||||||
|
- Start mapping directly against the current website files. Rejected because that would bypass the mandatory AstroDeck-first workflow.
|
||||||
|
- Begin greenfield implementation and retrofit AstroDeck naming later. Rejected because Spec 223 forbids making AstroDeck invisible in planning and tasks.
|
||||||
|
|
||||||
|
## Decision 3: Use file-based planning artifacts, not runtime models or APIs
|
||||||
|
|
||||||
|
- **Decision**: The rebuild workflow will be modeled through documentation artifacts only: inventory, classification, mapping, legacy-task disposition, and exception records.
|
||||||
|
- **Rationale**: Spec 223 is planning-only, introduces no runtime behavior, and explicitly avoids platform or application changes. File-based artifacts satisfy the need without importing new persistence, runtime contracts, or code abstractions.
|
||||||
|
- **Alternatives considered**:
|
||||||
|
- Add database tables or a runtime registry for website planning state. Rejected as disproportionate and unnecessary for a docs-only slice.
|
||||||
|
- Encode the workflow only in freeform notes. Rejected because the rebuild needs consistent, reviewable structures for later task generation.
|
||||||
|
|
||||||
|
## Decision 4: The current website source of truth spans routes, content collections, and smoke tests
|
||||||
|
|
||||||
|
- **Decision**: The current-site inventory phase must inspect `src/pages`, `src/content`, `src/content.config.ts`, and `tests/smoke`, not route files alone.
|
||||||
|
- **Rationale**: Routes define the surface area, content collections define editorial sources that survive page swaps, and smoke tests encode which public paths and guardrails the current website already treats as important.
|
||||||
|
- **Alternatives considered**:
|
||||||
|
- Inventory route files only. Rejected because it would miss content-backed and test-backed obligations already present in the app.
|
||||||
|
- Inventory components only. Rejected because route and content drift is central to the rebuild scope.
|
||||||
|
|
||||||
|
## Decision 5: The current route family is mostly aligned with the active website specs, but two classification edge cases must be handled explicitly
|
||||||
|
|
||||||
|
- **Decision**: The rebuild plan should treat the current route family as mostly aligned with the active website specs while explicitly classifying `/legal` and `/security-trust` during the inventory and mapping phases.
|
||||||
|
- **Rationale**: Current route files cover the core and secondary IA surfaces from Specs 213, 214, 215, 217, and 218. The comparison found one trust alias (`/security-trust` redirecting to `/trust`) and one legal hub/question (`/legal`) that require an explicit keep/adapt/remove decision.
|
||||||
|
- **Alternatives considered**:
|
||||||
|
- Assume all current routes are canonical and carry them forward untouched. Rejected because Spec 223 requires visible mapping and removal decisions for non-conforming or extra surfaces.
|
||||||
|
- Assume any extra route is legacy and delete it immediately. Rejected because redirect and legal-hub behavior may still be valid and must be classified first.
|
||||||
|
|
||||||
|
## Decision 6: Follow-up planning should split into one inventory slice, one conditional Spec 213 slice, and multiple mapping slices
|
||||||
|
|
||||||
|
- **Decision**: After this plan, task generation should split into one AstroDeck inventory slice, one conditional Spec 213 disposition-or-mapping slice, and then separate mapping-and-replanning slices for Specs 214, 215, 217, and 218, with explicit spec updates or follow-up specs when material page inventory, CTA logic, navigation, or trust messaging drift is discovered.
|
||||||
|
- **Rationale**: Spec 223 requires inventory before mapping, Spec 213 cannot disappear implicitly if it remains active after classification, and the continuing website specs each own different acceptance logic. Separating them keeps the rebuild reviewable and prevents one opaque website mega-task from hiding route, section, component, and spec-update decisions.
|
||||||
|
- **Alternatives considered**:
|
||||||
|
- One monolithic rebuild task list for the entire website. Rejected because it would blur spec ownership and make superseded legacy-task treatment hard to audit.
|
||||||
|
- One tiny task per route or component. Rejected because it would over-fragment the work and obscure the governing spec boundaries.
|
||||||
187
specs/223-astrodeck-website-rebuild/spec.md
Normal file
187
specs/223-astrodeck-website-rebuild/spec.md
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
# Feature Specification: Website Reset and AstroDeck Rebuild
|
||||||
|
|
||||||
|
**Feature Branch**: `223-astrodeck-website-rebuild`
|
||||||
|
**Created**: 2026-04-22
|
||||||
|
**Status**: Approved
|
||||||
|
**Input**: User description: "Reset and rebuild `apps/website` on AstroDeck with strict AstroDeck primitive mapping, preserved website spec truth, superseded legacy implementation tasks, and documented exceptions for any non-AstroDeck rebuild work."
|
||||||
|
|
||||||
|
## Spec Candidate Check *(mandatory — SPEC-GATE-001)*
|
||||||
|
|
||||||
|
- **Problem**: `apps/website` has an existing implementation and task history that no longer match the desired implementation substrate, so future work can drift between legacy code, template import, and undocumented greenfield rebuilding.
|
||||||
|
- **Today's failure**: Contributors could delete the old website, import AstroDeck, and reopen legacy tasks as if nothing materially changed, which would erase the strategy shift and make planning history misleading.
|
||||||
|
- **User-visible improvement**: Website contributors and reviewers can rebuild on a clearly defined base, preserve existing public-surface spec truth, and distinguish legacy work from the new forward plan without guesswork.
|
||||||
|
- **Smallest enterprise-capable version**: One `apps/website`-local reset-and-rebuild governance spec that declares the prior implementation superseded, makes AstroDeck the required substrate, classifies existing website specs, preserves legacy task history, and requires fresh AstroDeck-specific replanning.
|
||||||
|
- **Explicit non-goals**: No final page visuals, no final copy, no file-by-file migration guide, no platform or Filament changes, no automatic reapproval of every website spec, and no unrestricted greenfield redesign.
|
||||||
|
- **Permanent complexity imported**: A website-local rebuild contract, AstroDeck primitive inventory and mapping vocabulary, a superseded-task policy, and a narrow exception workflow for cases where the chosen base primitives are insufficient.
|
||||||
|
- **Why now**: More website work is already blocked by uncertainty about whether the old implementation still matters and whether new work should inherit template defaults or existing website specs.
|
||||||
|
- **Why not local**: A one-off migration note or template import would not preserve task history, would not classify which website specs still govern the site, and would not force future work onto one visible substrate.
|
||||||
|
- **Approval class**: Cleanup
|
||||||
|
- **Red flags triggered**: #1 introduces a new planning classification layer; #4 uses foundation/substrate language; #6 naturally leads to follow-up planning specs. The scope remains justified because it replaces ambiguity with one local contract and prevents silent drift during a full implementation reset.
|
||||||
|
- **Score**: Nutzen: 2 | Dringlichkeit: 2 | Scope: 2 | Komplexitaet: 2 | Produktnaehe: 1 | Wiederverwendung: 2 | **Gesamt: 11/12**
|
||||||
|
- **Decision**: approve
|
||||||
|
|
||||||
|
## Spec Scope Fields *(mandatory)*
|
||||||
|
|
||||||
|
- **Scope**: workspace
|
||||||
|
- **Primary Routes**: All public routes in `apps/website`, starting with the current website route family governed by Specs 213, 214, 215, 217, and 218, including `/`, `/product`, `/trust`, `/changelog`, `/contact`, `/privacy`, and `/imprint`.
|
||||||
|
- **Data Ownership**: Website-owned planning truth only: implementation-basis selection, AstroDeck primitive inventory and mapping, continuing-spec classification, superseded legacy task treatment, and documented exception records. No tenant-owned records, platform runtime data, or shared persistence are introduced.
|
||||||
|
- **RBAC**: None. This feature governs repository planning and public-website implementation rules only.
|
||||||
|
|
||||||
|
## UI / Surface Guardrail Impact *(mandatory when operator-facing surfaces are changed; otherwise write `N/A`)*
|
||||||
|
|
||||||
|
N/A - no operator-facing surface change. This feature governs website implementation basis, planning artifacts, and legacy task treatment inside `apps/website`.
|
||||||
|
|
||||||
|
## Proportionality Review *(mandatory when structural complexity is introduced)*
|
||||||
|
|
||||||
|
- **New source of truth?**: yes
|
||||||
|
- **New persisted entity/table/artifact?**: no
|
||||||
|
- **New abstraction?**: yes
|
||||||
|
- **New enum/state/reason family?**: no
|
||||||
|
- **New cross-domain UI framework/taxonomy?**: yes, but only within `apps/website` planning and implementation governance
|
||||||
|
- **Current operator problem**: Website contributors and reviewers cannot currently tell which website specs survive the reset, which tasks are obsolete, and whether new work must start from AstroDeck or from custom rebuilding.
|
||||||
|
- **Existing structure is insufficient because**: The current website specs describe public-surface truth, but they do not define how a full implementation reset should preserve that truth, retire legacy tasks, or make AstroDeck mandatory for forward work.
|
||||||
|
- **Narrowest correct implementation**: One website-local reset spec that fixes the implementation basis, legacy-task treatment, replanning workflow, and bounded exception policy without redefining page design or expanding into platform governance.
|
||||||
|
- **Ownership cost**: Future website planning must keep continuing specs classified, legacy tasks visibly superseded, AstroDeck mappings explicit, and exceptions tightly bounded instead of allowing ad hoc drift.
|
||||||
|
- **Alternative intentionally rejected**: Deleting the old website, importing AstroDeck, and reopening old tasks was rejected because it would erase the strategy shift, hide replanning work, and make implementation history unreliable.
|
||||||
|
- **Release truth**: Current-release truth for the public website only; this is not a platform-wide workflow contract.
|
||||||
|
|
||||||
|
### Compatibility posture
|
||||||
|
|
||||||
|
This feature assumes a pre-production environment.
|
||||||
|
|
||||||
|
Backward compatibility for the discarded website implementation, migration shims for legacy pages, and preservation of obsolete implementation structure are out of scope unless a later spec explicitly requires them.
|
||||||
|
|
||||||
|
Canonical replacement through the new substrate is preferred over preservation.
|
||||||
|
|
||||||
|
## Testing / Lane / Runtime Impact *(mandatory for runtime behavior changes)*
|
||||||
|
|
||||||
|
- **Test purpose / classification**: N/A
|
||||||
|
- **Validation lane(s)**: N/A
|
||||||
|
- **Why this classification and these lanes are sufficient**: This feature changes specification and planning truth only. It does not by itself change runtime behavior, browser surfaces, or automated test obligations.
|
||||||
|
- **New or expanded test families**: none
|
||||||
|
- **Fixture / helper cost impact**: none
|
||||||
|
- **Heavy-family visibility / justification**: none
|
||||||
|
- **Special surface test profile**: N/A
|
||||||
|
- **Standard-native relief or required special coverage**: none; follow-up implementation specs must define their own build and browser proof.
|
||||||
|
- **Reviewer handoff**: Reviewers must confirm that the spec clearly separates discarded implementation from continuing spec truth, preserves task history, makes the implementation substrate explicit, and bounds exceptions instead of allowing greenfield bypass.
|
||||||
|
- **Budget / baseline / trend impact**: none
|
||||||
|
- **Escalation needed**: none
|
||||||
|
- **Active feature PR close-out entry**: N/A
|
||||||
|
- **Planned validation commands**: N/A - specification quality review only
|
||||||
|
|
||||||
|
## User Scenarios & Testing *(mandatory)*
|
||||||
|
|
||||||
|
### User Story 1 - Start rebuild work from one visible substrate (Priority: P1)
|
||||||
|
|
||||||
|
A website contributor begins a new `apps/website` implementation slice and can tell immediately that the old website implementation no longer governs forward work and that the rebuild must start from AstroDeck primitives.
|
||||||
|
|
||||||
|
**Why this priority**: If the implementation basis remains ambiguous, every follow-up website task risks mixing discarded code, template defaults, and unreviewed custom work.
|
||||||
|
|
||||||
|
**Independent Test**: Review the reset spec and one follow-up planning artifact and confirm that the implementation starts from identified base pages, sections, and components rather than from the discarded website or a generic "build" task.
|
||||||
|
|
||||||
|
**Acceptance Scenarios**:
|
||||||
|
|
||||||
|
1. **Given** the previous website implementation still exists in repository history, **When** a contributor starts new website planning, **Then** they treat that implementation as superseded history rather than as the active build base.
|
||||||
|
2. **Given** a contributor needs to plan a new website slice, **When** they begin the work, **Then** they first identify base pages, sections, or components from the chosen substrate before proposing custom construction.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### User Story 2 - Preserve old task history while creating a new forward plan (Priority: P1)
|
||||||
|
|
||||||
|
A reviewer can see which older website implementation tasks no longer govern current work and which new task list now owns delivery for each continuing website spec.
|
||||||
|
|
||||||
|
**Why this priority**: The reset is only trustworthy if it preserves why previous work no longer applies instead of pretending the same tasks can simply be started again.
|
||||||
|
|
||||||
|
**Independent Test**: Review a continuing website spec and confirm that legacy implementation tasks are visibly superseded and that a separate forward-looking task list exists for the rebuild.
|
||||||
|
|
||||||
|
**Acceptance Scenarios**:
|
||||||
|
|
||||||
|
1. **Given** a website spec remains valid after the reset, **When** forward planning is created, **Then** its legacy implementation tasks stay visible as superseded history rather than being reset to unchecked.
|
||||||
|
2. **Given** a reviewer inspects a continuing website spec, **When** they compare old and new planning, **Then** they can distinguish the legacy task record from the rebuild task list without relying on tribal knowledge.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### User Story 3 - Allow bounded exceptions only when the base primitives are insufficient (Priority: P2)
|
||||||
|
|
||||||
|
A website planner can introduce a non-standard page, section, or component only after documenting why the existing base primitives cannot satisfy a continuing website spec.
|
||||||
|
|
||||||
|
**Why this priority**: The rebuild only stays disciplined if custom work is a bounded exception rather than the silent default.
|
||||||
|
|
||||||
|
**Independent Test**: Inspect any proposed custom primitive during replanning and confirm that it points to a missing candidate, a specific unmet requirement, and a dedicated exception record.
|
||||||
|
|
||||||
|
**Acceptance Scenarios**:
|
||||||
|
|
||||||
|
1. **Given** no adequate base primitive satisfies a continuing website spec, **When** a planner proposes custom work, **Then** they create a documented exception tied to that unmet requirement.
|
||||||
|
2. **Given** an adequate base primitive exists, **When** a planner proposes custom rebuilding anyway, **Then** the proposal is rejected as a default path and must return to mapping or adaptation.
|
||||||
|
|
||||||
|
### Edge Cases
|
||||||
|
|
||||||
|
- What happens when an existing website spec contains both enduring public-surface truth and outdated implementation assumptions? It must be classified as partially valid, updated or supplemented as needed, and then replanned on the new base rather than treated as fully current or fully discarded.
|
||||||
|
- What happens when Spec 213 remains continuing or partially valid after classification? It must receive its own dedicated rebuild-plan artifact instead of being absorbed implicitly into Specs 214, 215, 217, or 218.
|
||||||
|
- What happens when multiple base primitives could satisfy the same spec requirement? The mapping must state the chosen candidate and rationale before task creation so later work stays traceable.
|
||||||
|
- How does the rebuild handle imported demo pages, demo sections, or demo copy that do not conform to active website specs? They must generate explicit removal or adaptation tasks instead of surviving by default.
|
||||||
|
- How does the rebuild handle a missing base primitive for a required capability? The gap must become a documented exception with a bounded replacement task rather than a silent greenfield detour.
|
||||||
|
|
||||||
|
## Requirements *(mandatory)*
|
||||||
|
|
||||||
|
**Constitution alignment (required):** This feature introduces no Microsoft Graph calls, no queueing, no long-running operations, no authorization changes, and no Filament operator surfaces. Its contract is strictly local to `apps/website` and the planning artifacts that govern website implementation.
|
||||||
|
|
||||||
|
**Constitution alignment (PROP-001 / ABSTR-001 / PERSIST-001 / STATE-001 / BLOAT-001):** This feature adds a narrow website-local rebuild contract and exception workflow, not new runtime persistence or a shared platform abstraction. The rule set is justified only because a full implementation reset would otherwise blur continuing website truth, legacy task history, and forward planning.
|
||||||
|
|
||||||
|
**Constitution alignment (TEST-GOV-001):** This feature changes no runtime behavior and adds no automated runtime tests. Follow-up implementation specs remain responsible for build and browser validation. This spec is validated through repository review and the specification quality checklist only.
|
||||||
|
|
||||||
|
### Functional Requirements
|
||||||
|
|
||||||
|
- **FR-001**: The existing `apps/website` implementation MUST be treated as discarded implementation history and MUST NOT remain the primary starting point for forward website work.
|
||||||
|
- **FR-002**: AstroDeck MUST become the required technical and structural substrate for new `apps/website` implementation work.
|
||||||
|
- **FR-003**: This reset-and-rebuild contract MUST remain strictly local to `apps/website` and MUST NOT impose platform, Filament, or cross-app obligations.
|
||||||
|
- **FR-004**: Existing website specs that still define valid public-surface truth MUST remain authoritative unless a later spec explicitly replaces or narrows them.
|
||||||
|
- **FR-005**: Each existing website spec in scope MUST be classified as continuing, partially valid, or superseded before new implementation planning begins.
|
||||||
|
- **FR-006**: Legacy implementation tasks tied to the discarded website MUST remain visible as historical context and MUST NOT be reset to unchecked or reopened as if the underlying implementation basis were unchanged.
|
||||||
|
- **FR-007**: Legacy implementation tasks affected by the rebuild MUST use the canonical historical marker `superseded by AstroDeck rebuild` so their non-authoritative status stays consistent across all affected website specs.
|
||||||
|
- **FR-008**: Each continuing or partially valid website spec MUST receive a separate new implementation plan for the rebuild; if Spec 213 remains continuing or partially valid after classification, it MUST receive its own dedicated rebuild-plan artifact rather than being folded implicitly into Specs 214, 215, 217, or 218.
|
||||||
|
- **FR-009**: Each new implementation plan MUST identify candidate AstroDeck pages, sections, and components that act as the starting point for that spec's rebuild work.
|
||||||
|
- **FR-010**: Each identified AstroDeck candidate in a new plan MUST be classified as keep, adapt, remove, or exception.
|
||||||
|
- **FR-011**: New implementation tasks MUST explicitly name the relevant AstroDeck page, section, component, or mapping activity rather than describing custom rebuilding in generic terms.
|
||||||
|
- **FR-012**: New implementation tasks MUST cover removal of demo pages, demo sections, demo components, and demo copy that do not conform to active website specs.
|
||||||
|
- **FR-013**: New implementation tasks MUST cover any required adaptation to structure, routing, content slots, styling, or composition needed to satisfy active website specs.
|
||||||
|
- **FR-014**: New implementation work MUST begin with AstroDeck primitive identification and mapping before any freeform new page, section, or component is proposed.
|
||||||
|
- **FR-015**: A freeform new page, section, or component MUST NOT be created when an adequate AstroDeck-derived candidate already exists; a candidate counts as adequate only when keep or bounded adaptation can satisfy the active requirement without inventing a net-new IA contract or unsupported interaction model.
|
||||||
|
- **FR-016**: A non-AstroDeck page, section, or component MAY be introduced only through a documented exception approved in the mapping review by a named website reviewer, owner, or equivalent feature approver and tied to a specific unmet requirement in an active website spec.
|
||||||
|
- **FR-017**: Each documented exception MUST record the missing AstroDeck candidate, the unmet requirement, why the available AstroDeck candidates failed the adequacy test, the bounded deviation, the named approver, and the dedicated task or planning entry that owns the exception.
|
||||||
|
- **FR-018**: The rebuild workflow MUST occur in this order: discard prior implementation basis, establish AstroDeck as base, inventory AstroDeck primitives, classify existing website specs, mark legacy tasks superseded, create mappings, create new tasks, document exceptions, then begin implementation.
|
||||||
|
- **FR-019**: The planning output for each continuing or partially valid website spec MUST include AstroDeck primitive mapping, keep/adapt/remove/exception decisions, a new task list embedded in the same per-spec mapping or disposition artifact or linked from it explicitly, and explicit acceptance mapping back to the active spec.
|
||||||
|
- **FR-020**: Any material change to page inventory, CTA logic, navigation, or trust messaging introduced through AstroDeck adoption MUST appear in updated existing website specs or explicitly created follow-up website specs referenced from the rebuild planning artifacts rather than entering silently through template import.
|
||||||
|
- **FR-021**: The rebuild deliverables MUST include an AstroDeck inventory for `apps/website`, a classification of in-scope website specs, preserved historical task treatment using the canonical superseded marker, a new task list or explicit supersession closure for each in-scope website spec, a material-drift follow-up record for any required spec updates, and an exception register that records approved exceptions and explicit no-exception outcomes.
|
||||||
|
- **FR-022**: Follow-up classification MUST explicitly evaluate the current known website spec set that already governs `apps/website`, including Specs 213, 214, 215, 217, and 218.
|
||||||
|
- **FR-023**: Task wording and planning artifacts MUST keep AstroDeck visible as the implementation substrate and MUST NOT hide it behind generic build verbs that make the mapping step invisible.
|
||||||
|
|
||||||
|
### Assumptions
|
||||||
|
|
||||||
|
- This reset occurs in a pre-production website track, so preserving the discarded implementation for backward compatibility is not required.
|
||||||
|
- Existing website specs remain the current normative baseline until they are explicitly classified or superseded through follow-up planning.
|
||||||
|
- The chosen AstroDeck distribution provides reusable pages, sections, and components sufficient to support an inventory and mapping pass.
|
||||||
|
|
||||||
|
### Dependencies
|
||||||
|
|
||||||
|
- AstroDeck assets and primitives must be available to the repository or local implementation workspace so that inventory and mapping can be performed.
|
||||||
|
- Follow-up planning work must create separate task lists or replanning artifacts for the continuing website specs after this reset spec is accepted.
|
||||||
|
- The planning workflow must support a visible superseded marker or equivalent notation for legacy implementation tasks.
|
||||||
|
|
||||||
|
### Key Entities
|
||||||
|
|
||||||
|
- **Legacy Website Implementation**: The previous `apps/website` codebase and assembly approach that remains part of repository history but no longer serves as the forward-looking implementation base.
|
||||||
|
- **Continuing Website Spec**: An existing website spec whose public-surface truth remains active after classification, even though its prior implementation tasks may no longer govern delivery.
|
||||||
|
- **AstroDeck Primitive Mapping**: The per-spec record of which AstroDeck pages, sections, and components serve as the rebuild starting point and whether each is kept, adapted, removed, or treated as an exception.
|
||||||
|
- **Superseded Legacy Task**: A historical implementation task preserved for traceability but no longer authoritative for current website delivery.
|
||||||
|
- **Documented Exception**: A bounded approval record for introducing a non-AstroDeck page, section, or component when no adequate AstroDeck candidate satisfies an active website requirement.
|
||||||
|
|
||||||
|
## Success Criteria *(mandatory)*
|
||||||
|
|
||||||
|
### Measurable Outcomes
|
||||||
|
|
||||||
|
- **SC-001**: A reviewer can inspect the reset artifacts and determine in one pass that the previous `apps/website` implementation no longer governs forward work.
|
||||||
|
- **SC-002**: 100% of continuing or partially valid website specs in scope, including Spec 213 whenever it remains active after classification, have a forward-looking rebuild task list that is clearly separated from legacy implementation tasks.
|
||||||
|
- **SC-003**: 100% of forward-looking website plans identify starting pages, sections, and components and assign keep, adapt, remove, or exception outcomes before implementation begins.
|
||||||
|
- **SC-004**: 100% of freeform non-AstroDeck primitives introduced during follow-up planning carry an explicit exception record tied to an unmet active-spec requirement.
|
||||||
|
- **SC-005**: 100% of the currently known website spec set in scope is classified as continuing, partially valid, or superseded before rebuild implementation starts.
|
||||||
187
specs/223-astrodeck-website-rebuild/tasks.md
Normal file
187
specs/223-astrodeck-website-rebuild/tasks.md
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
# Tasks: Website Reset and AstroDeck Rebuild
|
||||||
|
|
||||||
|
**Input**: Design documents from `/specs/223-astrodeck-website-rebuild/`
|
||||||
|
**Prerequisites**: `plan.md`, `spec.md`, `research.md`, `data-model.md`, `quickstart.md`, `contracts/rebuild-planning-artifacts.yaml`
|
||||||
|
|
||||||
|
**Tests**: N/A - docs-only planning feature. This slice adds no runtime behavior, so no automated test tasks are required here. Follow-up implementation slices own `corepack pnpm build:website` and `cd apps/website && corepack pnpm exec playwright test`.
|
||||||
|
|
||||||
|
## Test Governance Checklist
|
||||||
|
|
||||||
|
- [X] Lane assignment is `N/A` because this feature changes planning artifacts only.
|
||||||
|
- [X] No runtime or browser test family is added in this slice.
|
||||||
|
- [X] No new helpers, fixtures, seeds, or shared defaults are introduced.
|
||||||
|
- [X] Runtime proof remains explicitly deferred to follow-up website implementation slices.
|
||||||
|
- [X] The governance outcome stays documented in-feature rather than becoming a separate cleanup item.
|
||||||
|
|
||||||
|
## Phase 1: Setup (Shared Infrastructure)
|
||||||
|
|
||||||
|
**Purpose**: Create the planning workspace files that the inventory, classification, mapping, and exception workflow will use.
|
||||||
|
|
||||||
|
- [X] T001 Create the current-site and AstroDeck inventory stubs in `specs/223-astrodeck-website-rebuild/current-website-inventory.md`, `specs/223-astrodeck-website-rebuild/astrodeck-source-intake.md`, and `specs/223-astrodeck-website-rebuild/astrodeck-primitive-inventory.md`
|
||||||
|
- [X] T002 [P] Create the governing-spec, legacy-task disposition, and material-drift follow-up stubs in `specs/223-astrodeck-website-rebuild/governing-website-spec-classification.md`, `specs/223-astrodeck-website-rebuild/legacy-task-disposition.md`, and `specs/223-astrodeck-website-rebuild/material-drift-follow-up.md`
|
||||||
|
- [X] T003 [P] Create the per-spec mapping workspace and exception stub in `specs/223-astrodeck-website-rebuild/exception-register.md`, `specs/223-astrodeck-website-rebuild/mappings/spec-213-website-foundation-v0.md`, `specs/223-astrodeck-website-rebuild/mappings/spec-214-website-visual-foundation.md`, `specs/223-astrodeck-website-rebuild/mappings/spec-215-website-core-pages.md`, `specs/223-astrodeck-website-rebuild/mappings/spec-217-homepage-structure.md`, and `specs/223-astrodeck-website-rebuild/mappings/spec-218-homepage-hero.md`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 2: Foundational (Blocking Prerequisites)
|
||||||
|
|
||||||
|
**Purpose**: Establish the shared baseline, intake rules, and crosswalk logic that every user story depends on.
|
||||||
|
|
||||||
|
**⚠️ CRITICAL**: No user story work should begin until this phase is complete.
|
||||||
|
|
||||||
|
- [X] T004 Capture the current route, content, component-family, and smoke-suite baseline in `specs/223-astrodeck-website-rebuild/current-website-inventory.md`
|
||||||
|
- [X] T005 [P] Record AstroDeck source provenance, intake constraints, and review assumptions in `specs/223-astrodeck-website-rebuild/astrodeck-source-intake.md`
|
||||||
|
- [X] T006 [P] Define the page, section, and component inventory columns plus demo-content flags in `specs/223-astrodeck-website-rebuild/astrodeck-primitive-inventory.md`
|
||||||
|
- [X] T007 Build the shared crosswalk from current website surfaces to Specs 213, 214, 215, 217, and 218 in `specs/223-astrodeck-website-rebuild/governing-website-spec-classification.md`
|
||||||
|
|
||||||
|
**Checkpoint**: The planning workspace, current-site baseline, AstroDeck intake rules, and governing-spec crosswalk are in place. Story work can now proceed.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 3: User Story 1 - Start Rebuild Work From One Visible Substrate (Priority: P1) 🎯 MVP
|
||||||
|
|
||||||
|
**Goal**: Make the retired current website and the new AstroDeck substrate visible side by side so future work starts from the right base.
|
||||||
|
|
||||||
|
**Independent Test**: A reviewer can open the current-site inventory and AstroDeck inventory documents and see that the old `apps/website` implementation is historical context while forward work starts from identified AstroDeck pages, sections, and components.
|
||||||
|
|
||||||
|
### Implementation for User Story 1
|
||||||
|
|
||||||
|
- [X] T008 [P] [US1] Complete the current website surface inventory with route roles, source files, dependencies, and initial keep/adapt/remove/redirect candidates in `specs/223-astrodeck-website-rebuild/current-website-inventory.md`
|
||||||
|
- [X] T009 [P] [US1] Complete the AstroDeck primitive inventory with page, section, and component candidates plus demo-content flags in `specs/223-astrodeck-website-rebuild/astrodeck-primitive-inventory.md`
|
||||||
|
- [X] T010 [US1] Reconcile the current-site baseline with the AstroDeck intake summary so the forward substrate is explicit in `specs/223-astrodeck-website-rebuild/astrodeck-source-intake.md`, `specs/223-astrodeck-website-rebuild/current-website-inventory.md`, and `specs/223-astrodeck-website-rebuild/astrodeck-primitive-inventory.md`
|
||||||
|
|
||||||
|
**Checkpoint**: The rebuild now has one visible implementation substrate and a clear retired baseline.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 4: User Story 2 - Preserve Old Task History While Creating a New Forward Plan (Priority: P1)
|
||||||
|
|
||||||
|
**Goal**: Keep legacy website task history readable while producing AstroDeck-specific replacement planning for the continuing website specs.
|
||||||
|
|
||||||
|
**Independent Test**: A reviewer can inspect the classification and legacy-task artifacts and then open the per-spec mapping sheets to see which old tasks were superseded and which new AstroDeck-specific task lists now own delivery.
|
||||||
|
|
||||||
|
### Implementation for User Story 2
|
||||||
|
|
||||||
|
- [X] T011 [US2] Classify Specs 213, 214, 215, 217, and 218 as continuing, partially valid, or superseded and record the classification `rationale`, `scopeSummary`, and `followUpPlan` reference for each spec in `specs/223-astrodeck-website-rebuild/governing-website-spec-classification.md`, including whether Spec 213 points to a dedicated rebuild plan in `specs/223-astrodeck-website-rebuild/mappings/spec-213-website-foundation-v0.md`
|
||||||
|
- [X] T012 [US2] Mark legacy implementation tasks as `superseded by AstroDeck rebuild` in `specs/213-website-foundation-v0/tasks.md`, `specs/214-website-visual-foundation/tasks.md`, `specs/215-website-core-pages/tasks.md`, `specs/217-homepage-structure/tasks.md`, and `specs/218-homepage-hero/tasks.md`, and summarize the replacement references in `specs/223-astrodeck-website-rebuild/legacy-task-disposition.md`
|
||||||
|
- [X] T013 [P] [US2] Create the Spec 213 disposition-or-rebuild mapping sheet, recording either a full AstroDeck plan with its embedded replacement task list naming the relevant AstroDeck page, section, component, or mapping activity or an explicit supersession closure, in `specs/223-astrodeck-website-rebuild/mappings/spec-213-website-foundation-v0.md`
|
||||||
|
- [X] T014 [P] [US2] Create the Spec 214 and Spec 215 disposition-or-rebuild mapping sheets, recording either full AstroDeck plans with embedded replacement task lists naming the relevant AstroDeck pages, sections, components, or mapping activities or explicit supersession closures, in `specs/223-astrodeck-website-rebuild/mappings/spec-214-website-visual-foundation.md` and `specs/223-astrodeck-website-rebuild/mappings/spec-215-website-core-pages.md`
|
||||||
|
- [X] T015 [P] [US2] Create the Spec 217 and Spec 218 disposition-or-rebuild mapping sheets, recording either full AstroDeck plans with embedded replacement task lists naming the relevant AstroDeck pages, sections, components, or mapping activities or explicit supersession closures, in `specs/223-astrodeck-website-rebuild/mappings/spec-217-homepage-structure.md` and `specs/223-astrodeck-website-rebuild/mappings/spec-218-homepage-hero.md`
|
||||||
|
- [X] T016 [US2] Cross-check the per-spec mapping sheets against the spec classifications, `followUpPlan` references, legacy-task replacements, and material-drift follow-up ledger in `specs/223-astrodeck-website-rebuild/governing-website-spec-classification.md`, `specs/223-astrodeck-website-rebuild/legacy-task-disposition.md`, `specs/223-astrodeck-website-rebuild/material-drift-follow-up.md`, `specs/223-astrodeck-website-rebuild/mappings/spec-213-website-foundation-v0.md`, `specs/223-astrodeck-website-rebuild/mappings/spec-214-website-visual-foundation.md`, `specs/223-astrodeck-website-rebuild/mappings/spec-215-website-core-pages.md`, `specs/223-astrodeck-website-rebuild/mappings/spec-217-homepage-structure.md`, and `specs/223-astrodeck-website-rebuild/mappings/spec-218-homepage-hero.md`
|
||||||
|
|
||||||
|
**Checkpoint**: Legacy work remains readable, and the forward-looking AstroDeck task ownership exists for every continuing website spec.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 5: User Story 3 - Allow Bounded Exceptions Only When the Base Primitives Are Insufficient (Priority: P2)
|
||||||
|
|
||||||
|
**Goal**: Make custom non-AstroDeck work possible only through an explicit, scoped exception path.
|
||||||
|
|
||||||
|
**Independent Test**: A reviewer can inspect any custom-primitive proposal and see the failed AstroDeck search, the unmet spec requirement, the bounded deviation, and the approval reference without ambiguity.
|
||||||
|
|
||||||
|
### Implementation for User Story 3
|
||||||
|
|
||||||
|
- [X] T017 [US3] Define the exception workflow, adequacy rubric, required evidence, approval boundary, and embedded documented-exception record shape for non-AstroDeck primitives in `specs/223-astrodeck-website-rebuild/exception-register.md`
|
||||||
|
- [X] T018 [P] [US3] Review the Spec 213, Spec 214, and Spec 215 mapping sheets for unmet requirements and record either approved exceptions or explicit no-exception outcomes in `specs/223-astrodeck-website-rebuild/exception-register.md`, `specs/223-astrodeck-website-rebuild/mappings/spec-213-website-foundation-v0.md`, `specs/223-astrodeck-website-rebuild/mappings/spec-214-website-visual-foundation.md`, and `specs/223-astrodeck-website-rebuild/mappings/spec-215-website-core-pages.md`
|
||||||
|
- [X] T019 [P] [US3] Review the Spec 217 and Spec 218 mapping sheets for unmet requirements and record either approved exceptions or explicit no-exception outcomes in `specs/223-astrodeck-website-rebuild/exception-register.md`, `specs/223-astrodeck-website-rebuild/mappings/spec-217-homepage-structure.md`, and `specs/223-astrodeck-website-rebuild/mappings/spec-218-homepage-hero.md`
|
||||||
|
- [X] T020 [US3] Add spread-control and acceptance-trace notes for every exception-backed or no-exception mapping in `specs/223-astrodeck-website-rebuild/exception-register.md`, `specs/223-astrodeck-website-rebuild/mappings/spec-213-website-foundation-v0.md`, `specs/223-astrodeck-website-rebuild/mappings/spec-214-website-visual-foundation.md`, `specs/223-astrodeck-website-rebuild/mappings/spec-215-website-core-pages.md`, `specs/223-astrodeck-website-rebuild/mappings/spec-217-homepage-structure.md`, and `specs/223-astrodeck-website-rebuild/mappings/spec-218-homepage-hero.md`
|
||||||
|
|
||||||
|
**Checkpoint**: The rebuild has a controlled exception path instead of a silent greenfield bypass.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 6: Polish & Cross-Cutting Concerns
|
||||||
|
|
||||||
|
**Purpose**: Reconcile the finished planning artifacts with the contract, force explicit spec-update follow-up for material drift, and lock the handoff order for implementation slices.
|
||||||
|
|
||||||
|
- [X] T021 [P] Reconcile the completed inventory, classification, mapping, exception, and material-drift artifacts against `specs/223-astrodeck-website-rebuild/contracts/rebuild-planning-artifacts.yaml` and `specs/223-astrodeck-website-rebuild/quickstart.md`
|
||||||
|
- [X] T022 [P] Update the affected continuing website specs or create named follow-up website specs when material page inventory, CTA logic, navigation, or trust messaging drift is logged in `specs/213-website-foundation-v0/spec.md`, `specs/214-website-visual-foundation/spec.md`, `specs/215-website-core-pages/spec.md`, `specs/217-homepage-structure/spec.md`, `specs/218-homepage-hero/spec.md`, and `specs/223-astrodeck-website-rebuild/material-drift-follow-up.md`
|
||||||
|
- [X] T023 [P] Verify that superseded legacy-task markers and replacement references are visible from `specs/213-website-foundation-v0/tasks.md`, `specs/214-website-visual-foundation/tasks.md`, `specs/215-website-core-pages/tasks.md`, `specs/217-homepage-structure/tasks.md`, `specs/218-homepage-hero/tasks.md`, and `specs/223-astrodeck-website-rebuild/legacy-task-disposition.md`
|
||||||
|
- [X] T024 Record the final follow-up execution order for the AstroDeck inventory slice, the conditional Spec 213 slice, and the Spec 214/215/217/218 mapping slices, each already carrying its embedded replacement task list or supersession closure, in `specs/223-astrodeck-website-rebuild/plan.md`, `specs/223-astrodeck-website-rebuild/quickstart.md`, and `specs/223-astrodeck-website-rebuild/governing-website-spec-classification.md`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dependencies & Execution Order
|
||||||
|
|
||||||
|
### Phase Dependencies
|
||||||
|
|
||||||
|
- **Setup (Phase 1)**: Starts immediately.
|
||||||
|
- **Foundational (Phase 2)**: Depends on Setup and blocks all user stories.
|
||||||
|
- **User Story 1 (Phase 3)**: Depends on Foundational only.
|
||||||
|
- **User Story 2 (Phase 4)**: Depends on User Story 1 because the completed inventories from US1 are required before classification and mapping can start.
|
||||||
|
- **User Story 3 (Phase 5)**: Depends on the mapping sheets from US2.
|
||||||
|
- **Polish (Phase 6)**: Depends on all targeted user stories being complete.
|
||||||
|
|
||||||
|
### User Story Dependencies
|
||||||
|
|
||||||
|
- **US1**: MVP slice. No dependency on US2 or US3.
|
||||||
|
- **US2**: Depends on US1 because the current-site and AstroDeck inventories must be complete before classification and mapping.
|
||||||
|
- **US3**: Depends on the per-spec mapping sheets, including the conditional Spec 213 artifact, so exceptions can be evaluated against real candidate searches.
|
||||||
|
|
||||||
|
### Within Each User Story
|
||||||
|
|
||||||
|
- Establish or complete the relevant artifact first.
|
||||||
|
- Record explicit dispositions before writing replacement task lists.
|
||||||
|
- Link exceptions only after the mapping decision shows a real gap.
|
||||||
|
- Finish each story’s cross-check task before moving to the next story.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Parallel Opportunities
|
||||||
|
|
||||||
|
- `T002` and `T003` can run in parallel after `T001`.
|
||||||
|
- `T005` and `T006` can run in parallel after `T004` starts.
|
||||||
|
- In US1, `T008` and `T009` can run in parallel before `T010`.
|
||||||
|
- In US2, `T013`, `T014`, and `T015` can run in parallel after `T012`.
|
||||||
|
- In US3, `T018` and `T019` can run in parallel after `T017`.
|
||||||
|
- In Phase 6, `T021`, `T022`, and `T023` can run in parallel before `T024`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Parallel Example: User Story 2
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# First record legacy-task supersession after classification:
|
||||||
|
Task: "T012 [US2] Mark legacy implementation tasks as superseded"
|
||||||
|
|
||||||
|
# After legacy-task supersession is recorded, launch the per-spec planning artifacts in parallel:
|
||||||
|
Task: "T013 [US2] Create the Spec 213 disposition-or-rebuild mapping sheet"
|
||||||
|
Task: "T014 [US2] Create the Spec 214 and Spec 215 disposition-or-rebuild mapping sheets"
|
||||||
|
Task: "T015 [US2] Create the Spec 217 and Spec 218 disposition-or-rebuild mapping sheets"
|
||||||
|
|
||||||
|
# Then run the consistency pass:
|
||||||
|
Task: "T016 [US2] Cross-check the mapping sheets against the classification, legacy-task, and material-drift records"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Implementation Strategy
|
||||||
|
|
||||||
|
### MVP First (User Story 1 Only)
|
||||||
|
|
||||||
|
1. Complete Phase 1: Setup.
|
||||||
|
2. Complete Phase 2: Foundational.
|
||||||
|
3. Complete Phase 3: User Story 1.
|
||||||
|
4. **STOP and VALIDATE**: Review the current-site and AstroDeck inventories together.
|
||||||
|
5. Use that MVP substrate view as the basis for the follow-up mapping work.
|
||||||
|
|
||||||
|
### Incremental Delivery
|
||||||
|
|
||||||
|
1. Complete Setup + Foundational to establish the planning workspace.
|
||||||
|
2. Add US1 to make the rebuild substrate explicit.
|
||||||
|
3. Add US2 to preserve legacy history and produce forward AstroDeck task ownership.
|
||||||
|
4. Add US3 to harden the exception path.
|
||||||
|
5. Finish with Phase 6 to reconcile the artifacts and publish the handoff order.
|
||||||
|
|
||||||
|
### Suggested MVP Scope
|
||||||
|
|
||||||
|
- Deliver through **User Story 1** if the smallest first slice is needed.
|
||||||
|
- Add **User Story 2** next to preserve task history and create per-spec forward plans.
|
||||||
|
- Finish with **User Story 3** to ensure custom work remains exception-bound.
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- `[P]` tasks touch different files or independent artifacts and can run in parallel once dependencies are satisfied.
|
||||||
|
- `[US1]`, `[US2]`, and `[US3]` map directly to the user stories in `spec.md`.
|
||||||
|
- This is a docs-only planning feature, so no runtime test tasks are included here.
|
||||||
|
- The intended follow-up split after this feature is one AstroDeck inventory slice, a conditional Spec 213 slice, and per-spec mapping slices for Specs 214, 215, 217, and 218, with each per-spec artifact carrying its replacement task list or explicit supersession closure and with spec updates or follow-up specs when material drift is discovered.
|
||||||
Loading…
Reference in New Issue
Block a user