Veect retrofit (ADR-027): fifth and final slice of the demo-content removal. Deletes packages/navigation whole and prunes every composition edge in one commit: core-api router mount + dep + router test, core-cms header-global composition + dep + regenerated Payload types (globals now empty), web-next bindAll (prod + dev-seed) + tests + Tailwind source + transpilePackages + dep, cms/core-cms payload config test assertions, home e2e nav assertion, tsconfig paths, fallow ignoreDependencies entry, anchor-guard FEATURES list, generator e2e strip lists + reference-feature comments (navigation -> auth, incl. feature templates + scaffolding guide), lockfile prune, and feature-list doc trims (CLAUDE.md, AGENTS.md, glossary, app/feature AGENTS.md). Compliance YAML regeneration produced no churn (navigation declared no PII). Cycle break: navigation's UI hooks were the last edge closing the committed core-trpc -> core-api -> navigation -> core-trpc package cycle. With it gone, the lint turbo task graph builds for the first time and every package's ESLint executes; the epic's lint waiver expires here. Latent findings: 3 errors, all mechanical, fixed in-slice - require() import in turbo/generators/config.ts (no-require-imports), literal type assertion in auth's authentication.service.ts (prefer-as-const), and next-env.d.ts triple-slash in apps/cms (rule scoped off for that generated file, mirroring web-next's existing override). 99 warn-severity findings remain across 5 packages (pii-declaration-must-be-complete on test fixtures, turbo/no-undeclared-env-vars on test env keys) - all warn-by-design, non-gating. core-trpc keeps a consumer (apps/web-next providers) and stays per ADR-027. Its unused @trpc/react-query dependency, surfaced by the post-deletion fallow audit, is removed rather than ignore-listed - core-trpc's hooks use @trpc/tanstack-react-query. Remaining fallow warn (auth validateSession "unused member") is a false positive: the method implements IAuthenticationService and is exercised in container.test.ts; auth stays untouched as the regression canary. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016j8z4VHjedXDTjEDNg7qHK
4.2 KiB
AGENTS.md — apps/web-next
Next.js 15 reference application using App Router. Demonstrates consuming feature packages via tRPC and importing UI components from @repo/core-ui. Both @repo/core-trpc and @repo/core-ui are optional packages — scaffold them with pnpm turbo gen core-package trpc / ui if needed.
Purpose
Thin app showcasing how features work end-to-end. Business logic lives in feature packages (@repo/auth, etc.); UI primitives live in @repo/core-ui; this app is mostly routes, layouts, and component composition.
Port: 3000
pnpm dev --filter @repo/web-next # http://localhost:3000
Requires @repo/cms and PostgreSQL running to fetch live data:
docker compose up -d postgres # PostgreSQL on port 5432
pnpm dev --filter @repo/cms # Payload admin on port 3001
pnpm dev --filter @repo/web-next # Next.js on port 3000
Key Files
| File | Purpose |
|---|---|
src/app/layout.tsx |
Root layout — wraps app with <Providers> |
src/app/providers.tsx |
Client component wrapper (add tRPC/React Query here after scaffolding @repo/core-trpc) |
src/app/page.tsx |
Home page |
e2e/ |
Playwright end-to-end tests |
tRPC Setup (optional)
@repo/core-trpc is not installed by default. After scaffolding with pnpm turbo gen core-package trpc:
- Create
src/app/api/trpc/[trpc]/route.ts:
import { fetchRequestHandler } from "@trpc/server/adapters/fetch";
import { appRouter } from "@repo/core-api";
import { bindAll } from "../../../../server/bind-production";
const handler = async (req: Request) => {
await bindAll();
return fetchRequestHandler({
endpoint: "/api/trpc",
req,
router: appRouter,
createContext: () => ({}),
});
};
export { handler as GET, handler as POST };
- Update
src/app/providers.tsx:
"use client";
import { NextTrpcProvider } from "@repo/core-trpc/next";
export function Providers({ children }: { children: React.ReactNode }) {
return <NextTrpcProvider trpcUrl="/api/trpc">{children}</NextTrpcProvider>;
}
Dependencies
| Dependency | Purpose |
|---|---|
@repo/core-api |
appRouter for tRPC endpoint |
@repo/core-trpc/next |
Next.js tRPC client + provider (optional — scaffold first) |
@repo/core-ui |
Design system components (optional — scaffold first) |
@repo/auth, etc. |
Feature packages (indirectly via core-api) |
next |
Next.js 15 framework |
@trpc/server |
tRPC server (fetch adapter) |
Test conventions
- Unit tests colocated:
src/app/providers.test.tsx - Vitest environment:
jsdom - e2e tests in
e2e/folder:*.spec.ts - Run:
pnpm test --filter @repo/web-next(units) orpnpm test:e2e(Playwright)
E2E Test Setup
Playwright config in e2e/playwright.config.ts:
import { defineConfig, devices } from "@playwright/test";
export default defineConfig({
testDir: "./e2e",
webServer: {
command: "pnpm dev",
port: 3000,
reuseExistingServer: !process.env.CI,
},
use: { ...devices["Desktop Chrome"].use },
});
Run: pnpm test:e2e starts the dev server and runs all .spec.ts files.
Cross-References
- Feature packages:
packages/auth/ - tRPC composition:
packages/core-api/AGENTS.md - tRPC client + provider (optional): scaffold
@repo/core-trpcfirst, then seeturbo/generators/templates/core-package/trpc/AGENTS.md.hbs - UI components (optional): scaffold with
pnpm turbo gen core-package ui, then seeturbo/generators/templates/core-package/ui/AGENTS.md.hbs