- TypeScript + Fastify skeleton under project/ (src/modules, shared, infrastructure, app) - scripts/check-module-boundaries.mjs enforcing module public-API rules (tested with fixtures) - GET /health endpoint, error envelope without stack leakage - specs/F-001-scaffold (SPEC/DESIGN/TASKS/TESTS), spec/tech.md dependency justification - 30-ticket MercadoDeVida roadmap in backlog/features.json, spec/roadmap.md - All gates approved: reviewer, security, qa; verify.sh green
56 lines
1.9 KiB
Markdown
56 lines
1.9 KiB
Markdown
# SPEC — F-001 Scaffold modular monolith skeleton
|
|
|
|
## Problem
|
|
No codebase exists. MercadoDeVida vNext needs a boring, typed, modular home before any business feature.
|
|
|
|
## Goal
|
|
TypeScript modular monolith skeleton with strict module boundaries and a green toolchain.
|
|
|
|
## Non-goals
|
|
- No business logic
|
|
- No database access
|
|
- No frontend
|
|
|
|
## User story
|
|
As a developer (human or AI), I can run install/build/lint/typecheck/test from `project/` and get a running HTTP app with a health endpoint, so every later feature starts from a known green base.
|
|
|
|
## Functional requirements
|
|
1. `project/` contains a Node + TypeScript app with Fastify.
|
|
2. Layout: `src/modules/`, `src/shared/`, `src/infrastructure/`, `src/app/`.
|
|
3. Every module folder exposes its public API through `index.ts`.
|
|
4. A boundary checker fails when a module imports another module's internal files.
|
|
5. `GET /health` returns 200 `{"status":"ok"}`.
|
|
|
|
## Business rules
|
|
- Modules communicate only through public interfaces (`index.ts`).
|
|
- Composition happens only in `src/app` (composition root).
|
|
|
|
## Inputs
|
|
- `GET /health`: none.
|
|
|
|
## Outputs
|
|
- `GET /health`: `200 application/json {"status":"ok"}`.
|
|
|
|
## Edge cases
|
|
- Invalid route → 404 JSON envelope.
|
|
- Server start failure (port busy) → non-zero exit with clear error.
|
|
|
|
## Acceptance criteria
|
|
1. `npm install`, `npm run build`, `npm run lint`, `npm run typecheck`, `npm test` all green in `project/`.
|
|
2. `GET /health` returns HTTP 200 with `{"status":"ok"}`.
|
|
3. `src/modules`, `src/shared`, `src/infrastructure`, `src/app` exist.
|
|
4. A module importing another module's internal file fails the boundary check (demonstrated by test).
|
|
5. `./scripts/verify.sh` green at repo root.
|
|
|
|
## Dependencies
|
|
- None (first ticket).
|
|
|
|
## Security implications
|
|
- No secrets, no auth surface. Error responses must not leak stack traces.
|
|
|
|
## SEO implications
|
|
- None.
|
|
|
|
## Performance implications
|
|
- None measurable yet; baseline latency observable via test only.
|