12 KiB
12 KiB
id, title, type, status, author, elicitation-session, created, updated, shipped
| id | title | type | status | author | elicitation-session | created | updated | shipped |
|---|---|---|---|---|---|---|---|---|
| platform-retrofit | Platform retrofit — repurpose template-vertical as the Veect monorepo | prd | shipped | Danijel Martinek | session_016j8z4VHjedXDTjEDNg7qHK | 2026-07-12T09:05:00Z | 2026-07-12T19:17:36.388Z | 2026-07-12 |
Problem
This repo is the template-vertical starter: five demo content features (auth, blog, media, marketing-pages, navigation), three frontend apps, and a work tree full of shipped template epics. We are building Veect in it — a hosted design-to-code SaaS (ADR-027) — and almost none of the demo content is Veect, while almost all of the machinery (conformance, coverage, generators, work pipeline, DI/testing conventions, compliance and instrumentation cores) is exactly what Veect needs.
Three concrete pains today:
- Dispatch agents cannot read the product spec. The entire Veect specification bundle sits untracked in
.proto/(plus a strayveect-product-docs.zipat root). Sandcastle implementers run in git worktrees, which contain only committed files — every PRD referencing the spec would be unreadable to the agents implementing it. - The repo actively misleads.
pnpm work statussurfaces eight shipped template epics; CLAUDE.md/AGENTS.md describe a blog/CMS starter; release-please tracks five demo features that are about to be deleted. Agent context assembled from this repo points at the wrong product. - Demo content blocks the package map. The Veect features (workspaces, projects, design-doc, discovery, ai — per the 2026-07-12 grill decisions) can't land cleanly while blog/media/navigation/marketing-pages occupy the workspace, the router/CMS composition, and the versioning config.
Goal
The repo is a clean, truthful Veect monorepo: only Veect-relevant packages, the product docs committed and authoritative, the work pipeline showing only Veect work — with every conformance gate still green.
In scope
- Delete demo features
blog,media,navigation,marketing-pagesand appweb-tanstack, including all composition wiring (core-api router, core-cms collections, web-next pages/imports, bindAll dispatcher, seeds, e2e specs, Storybook references). - Reduce
apps/web-nextto a compiling shell: auth (sign-in/out) + a placeholder home.apps/cmsstays (Payload admin over the remaining collections).apps/storybookstays. - Keep and leave wired:
authfeature,core-audit,core-analytics,core-consent,core-dsr, OTel/Sentry instrumentation (ADR-027 §6 flips the spec's "no telemetry" stance). - Scaffold
core-eventsandcore-realtimeviapnpm turbo gen core-package(needed by the walking skeleton for runner status events/pushes). - Migrate
.proto/veect-product-docs/→docs/product/(committed); migrate the design references (Veect.dc.html,Veect Landing.dc.html,Weave backup,veect-codebase/prototype, upload PNGs) →docs/product/reference/(committed, read-only reference — the prototype codebase is never vendored intopackages/, per ADR-029). Deleteveect-product-docs.zipand the emptied.proto/. - Amend the committed product README's authority table with the ADR-027/028/029 supersessions and the
Veect.dc.htmlground-truth row (ADR-029 §5). - Archive the eight shipped template epics and their nine PRDs to
docs/work/archive/; rebuild_state.jsonsopnpm work statusshows only Veect work. - Rewrite
release-please-config.json+ manifest to track the root only (single product version; hosted SaaS deploys continuously — per-feature versions return only if an npm distribution ships). - Rewrite CLAUDE.md and AGENTS.md project-overview sections for Veect (control-plane/runner vocabulary, new package map, ADR-027/028/029 references); fix the "15 conformance rules" → sixteen miscount.
- Library-trace batch (
/evaluate-library, ADR-022) for the feature-tier runtime deps the next PRD needs:@xyflow/react,zustand(v5). (Runner-side deps like execa/vite/react-docgen-typescript live in the app-tierapps/runnerand are exempt from ADR-022; traces for them are optional hardening.) - Verify the ESLint/turbo boundary configs and generators survive the deletions (generators are template-driven, not dependent on the deleted features).
Out of scope
- Any new Veect feature code (walking-skeleton PRD and successors).
- The landing page (arrives with the
polish-playground-landingPRD; this PRD deletesmarketing-pagesand leaves no marketing surface). - Generator retargeting beyond what deletions force — the feature generator's Payload+tRPC shape is correct for Veect's control plane (ADR-027 §5) and stays as-is.
- Runner infrastructure, Docker images, fixtures (walking-skeleton PRD).
- Billing, GitHub App, self-host distribution (all deferred per ADR-027).
Constraints
- ADR-027 (hosted SaaS + runner split), ADR-028 (iframe canvas), ADR-029 (DesignDoc v1 + editor rebuild) are the decision baseline; this PRD implements their repo-level consequences only.
- ADR-021 (release-please) — the versioning rewrite must keep Conventional-Commit → release automation working; ADR-022 (library traces) — pre-commit hook must pass on every slice.
- Conformance rules stay enforced throughout: every deletion slice leaves
pnpm typecheck && pnpm lint && pnpm test && pnpm conformance && pnpm fallow:auditgreen — no "big bang broken middle". - The
authfeature's manifest, tests, and coverage bands must remain intact (it is load-bearing for Veect accounts, ADR-027 §4). - Deletions must not orphan
docs/glossary.mdterms — the template terms describing deleted features get pruned in the same slice that deletes the feature.
Success criteria
pnpm typecheck && pnpm lint && pnpm test && pnpm conformance && pnpm fallow && pnpm coverage:diffall green on the final commit.pnpm devboots web-next (dev-seed mode, no Payload required) with sign-in working and no imports from deleted features anywhere (pnpm turbo boundariesclean).git ls-files docs/product/shows the full committed spec bundle;.proto/andveect-product-docs.zipare gone.pnpm work statuslists zero template epics; archived work remains greppable underdocs/work/archive/.release-please-config.jsonvalidates and tracks only the root package.docs/library-decisions/contains approved traces for@xyflow/reactandzustand.- CLAUDE.md/AGENTS.md describe Veect (spot check: no mention of blog/media/marketing-pages as live features).
User stories
- As an AI implementer dispatched into a worktree, I want the product spec committed under
docs/product/, so that I can read the authoritative requirements without host-machine access. - As the founder, I want
pnpm work statusto show only Veect work, so that dispatch context and prioritization aren't polluted by shipped template epics. - As an AI decomposer, I want CLAUDE.md/AGENTS.md/glossary to describe the Veect architecture, so that generated epics use the right vocabulary and package map.
- As a developer, I want the repo to typecheck/test green with only auth + core packages, so that Veect features land on a stable floor.
- As a release engineer, I want release-please to track a single product version, so that merges to main produce one meaningful release PR instead of five demo-feature bumps.
- As an AI implementer, I want library traces for the editor's runtime deps pre-approved, so that walking-skeleton tasks don't stall on the library-policy pre-commit hook.
- As a future contributor, I want the prototype codebase and HTML prototypes committed as reference material with a stated authority order, so that design questions have a canonical source (ADR-029 §5).
Implementation decisions
- Deletion order is dependency-order: apps first (
web-tanstack), then features (blog,media,marketing-pages,navigation), pruning each feature's wiring (core-api router anchor, core-cms collection anchor, bindAll entry, web-next UI imports, seeds, e2e) in the same slice as the package deletion. Each deletion is one slice/commit. web-nextshell: keep the auth UI surfaces and app bootstrap (bindAll(), instrumentation); replace the home page with a minimal authenticated placeholder (the workspaces UI arrives in the next PRD).docs/product/layout: spec docs at top level (filenames preserved from the bundle);reference/subfolder for HTML prototypes + prototype codebase + PNGs. The prototype codebase'spackage.jsonstays outside pnpm workspace globs (packages/*,apps/*) by construction; add it to fallow/lint ignore lists so whole-codebase auditors skip reference material.- Authority amendment: a short "Repo supersessions" section prepended to
docs/product/README.mdlinking ADR-027/028/029 and adding theVeect.dc.htmlrow to the authority table. - Work archive:
docs/work/archive/{epics,prds}/with a one-line README;pnpm work rebuild-stateregenerates_state.json. Verify the work CLI ignores the archive path (adjust its glob if not). - release-please: root-only config;
include-component-in-tagdropped (singlev*tags); pre-1.0 bump policy retained. - Optional cores:
core-events+core-realtimescaffolded by generator with their pre-shipped traces (ADR-022 "pre-shipped trace" mechanism); no consumers wired yet beyond compile-green. - Glossary: Veect domain section already exists (added 2026-07-12); prune
blog/media/marketing-pages/navigationmentions from the Packages section as those features are deleted;authstays. - No Payload schema changes; no new collections (those come with
workspacesin the next PRD).
Testing decisions
- This PRD is mostly subtractive: the test suite itself is the safety net — every slice must keep the full gate set green, and deleting a feature deletes its tests in the same slice.
authkeeps its full test suite + coverage bands untouched (regression canary for the surviving floor).- Add one boot smoke assertion (dev-seed):
bindAll()resolves with only auth bound — proves no dangling DI symbols from deleted features (mirror the existing boot-assertion pattern in web-next's server bootstrap tests). - Scaffolded
core-events/core-realtimeship with their generator-emitted test suites; no additional coverage required until consumers exist. - e2e: prune deleted-feature Playwright specs; keep an auth sign-in spec green as the surviving e2e baseline.
Open questions
- Q1: Do the HTML prototypes (~640 KB total) go into git as-is or via LFS? — As-is; they're text, they diff, and the repo has no LFS setup to maintain.
- Q2: Should
navigationsurvive temporarily as a generator reference? — No; the generators are template-driven (turbo/generators/templates/), not derived from live features. Delete all four content features. - Q3: Keep
sentry-pii-guard.ymlCI? — Yes; ADR-027 keeps the Sentry/OTel stack, so the PII guard remains meaningful.
Out of scope (deferred)
- Retargeting generator templates toward runner-side patterns (revisit after the first runner feature ships — rule-of-three).
- Security FAQ / trust documentation for design partners (needed before outreach, not before code — founder-owned, tracked in
docs/product/founder-os-audit.md). - npm
veectname registration and related legal items (founder-owned).
Further notes
- Builds on: ADR-027, ADR-028, ADR-029; the 2026-07-12 grill session decision log (13 decisions).
- Blocks:
walking-skeleton(next PRD) — that PRD assumes the clean floor this one produces. - The
.protobundle's own README §3 lists what the prototype seeds; ADR-029 supersedes its "codebase seeds packages/editor" instruction — reference-only now.