Files
mercadodevida/specs/F-001-scaffold/SPEC.md
rikrdo 1d4eebca54 feat(F-001): scaffold modular monolith skeleton with boundary checker
- 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
2026-08-14 21:46:54 +02:00

1.9 KiB

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.