[E01-S01-T01] ADR: Modular monolith #406

Merged
kpcto merged 1 commits from feature/188 into main 2026-08-31 00:20:51 +00:00
Member

What changed

Commits the modular monolith decision as ADR-001 for [E01-S01-T01] ADR: Modular monolith (#188):

  • docs/adr/ADR-001-modular-monolith.md (new) — the ADR, with the six required sections in order:
    • Context — greenfield platform, intentionally small v0.1, single small stream, single canonical PostgreSQL, versioned boundaries from day one, CI-enforced dependency boundaries (FIT-001/FIT-010/FIT-011)
    • Decision — EPPP is a modular monolith: one application image containing public server, admin API, rendering pipeline, extension runtime, core services, built admin assets and first-party extensions; optional worker uses the same image with a different command (eppp serve / eppp worker); runtime Node.js 24 LTS / Fastify 5 / PostgreSQL 18 / React 19 + Vite admin / Docker Compose; decision text matches the ADR index entry (§70)
    • Alternatives — microservices/distributed system (rejected), classic unstructured monolith (rejected), serverless/FaaS (rejected), modular monolith with future extraction (chosen)
    • Consequences — positive/negative/neutral trade-offs, including the discipline guard provided by the CI dependency-boundary tests
    • Operational impact — single image/container plus optional worker, one migration chain behind the advisory lock, readiness gated on migrations, deploy/rollback/scaling model
    • Revisit trigger — module divergence or multiple-product growth requiring extraction on evidence (ADR index §68 gates); v1.1 boundary contracts (ADR-027..032) pressure on the single-image model
  • Documentation-only: no source, manifest, lockfile, workflow or test changes. Rollback is a revert of this commit.

Criterion → test table

Acceptance criterion Test / evidence
A committed ADR records the modular monolith decision as ADR-001 docs/adr/ADR-001-modular-monolith.md committed on feature/188; the H1 heading reads # ADR-001: Modular monolith and the Decision section records the modular monolith choice. CI gate: the formatting-lint stage scans every git-tracked text file (including the new ADR) — verified locally with the committed policy suite: node --test tests/formatting-policy.test.mjs → 13/13 pass on the branch
The ADR contains Context, Decision, Alternatives, Consequences, Operational impact and Revisit trigger All six ## sections present, in the mandated order, in the committed file (document review per the issue test plan); locally verified against the committed file content
The decision text matches the ADR index entry in section 70 ADR index (§70) lists | ADR-001 | Modular monolith |; the ADR's decision text is Modular monolith and the Decision section states it matches the ADR index entry (ADR-001, section 70)

Risks / notes

  • Documentation-only change (one new markdown file); no runtime, schema, dependency, lockfile or CI-workflow impact. Rollback = revert the single commit.
  • CI on this PR runs the full seven-stage pipeline; the only stage touching this change is formatting-lint (tracked-file policy), which passes locally; all other stages are unaffected but will run as usual.
  • Out of scope per the brief: the other thirteen E01-S01 ADR subjects are separate task cards.

Closes #188

## What changed Commits the modular monolith decision as **ADR-001** for [E01-S01-T01] ADR: Modular monolith (#188): - **`docs/adr/ADR-001-modular-monolith.md`** (new) — the ADR, with the six required sections in order: - **Context** — greenfield platform, intentionally small v0.1, single small stream, single canonical PostgreSQL, versioned boundaries from day one, CI-enforced dependency boundaries (FIT-001/FIT-010/FIT-011) - **Decision** — EPPP is a **modular monolith**: one application image containing public server, admin API, rendering pipeline, extension runtime, core services, built admin assets and first-party extensions; optional worker uses the same image with a different command (`eppp serve` / `eppp worker`); runtime Node.js 24 LTS / Fastify 5 / PostgreSQL 18 / React 19 + Vite admin / Docker Compose; decision text matches the ADR index entry (§70) - **Alternatives** — microservices/distributed system (rejected), classic unstructured monolith (rejected), serverless/FaaS (rejected), modular monolith with future extraction (chosen) - **Consequences** — positive/negative/neutral trade-offs, including the discipline guard provided by the CI dependency-boundary tests - **Operational impact** — single image/container plus optional worker, one migration chain behind the advisory lock, readiness gated on migrations, deploy/rollback/scaling model - **Revisit trigger** — module divergence or multiple-product growth requiring extraction on evidence (ADR index §68 gates); v1.1 boundary contracts (ADR-027..032) pressure on the single-image model - Documentation-only: no source, manifest, lockfile, workflow or test changes. Rollback is a revert of this commit. ## Criterion → test table | Acceptance criterion | Test / evidence | | --- | --- | | A committed ADR records the modular monolith decision as ADR-001 | `docs/adr/ADR-001-modular-monolith.md` committed on `feature/188`; the H1 heading reads `# ADR-001: Modular monolith` and the Decision section records the modular monolith choice. CI gate: the `formatting-lint` stage scans every git-tracked text file (including the new ADR) — verified locally with the committed policy suite: `node --test tests/formatting-policy.test.mjs` → 13/13 pass on the branch | | The ADR contains Context, Decision, Alternatives, Consequences, Operational impact and Revisit trigger | All six `##` sections present, in the mandated order, in the committed file (document review per the issue test plan); locally verified against the committed file content | | The decision text matches the ADR index entry in section 70 | ADR index (§70) lists `\| ADR-001 \| Modular monolith \|`; the ADR's decision text is **Modular monolith** and the Decision section states it matches the ADR index entry (ADR-001, section 70) | ## Risks / notes - Documentation-only change (one new markdown file); no runtime, schema, dependency, lockfile or CI-workflow impact. Rollback = revert the single commit. - CI on this PR runs the full seven-stage pipeline; the only stage touching this change is `formatting-lint` (tracked-file policy), which passes locally; all other stages are unaffected but will run as usual. - Out of scope per the brief: the other thirteen E01-S01 ADR subjects are separate task cards. Closes #188
bot-implementer added 1 commit 2026-08-31 00:13:20 +00:00
docs(adr): record modular monolith decision as ADR-001
CI / Stage 5 — Architecture tests (E00-S05-T01) (pull_request) Successful in 3m7s
CI / Stage 7 — Build the admin and server applications (E00-S05-T01) (pull_request) Successful in 1m3s
CI / Stage 2 — Typecheck (E00-S05-T01) (pull_request) Successful in 1m12s
CI / Stage 3 — Formatting/lint policy (E00-S05-T01) (pull_request) Successful in 45s
CI / Stage 4 — Unit tests (E00-S05-T01) (pull_request) Successful in 1m41s
CI / Stage 6 — PostgreSQL integration tests (E00-S05-T01) (pull_request) Successful in 1m8s
CI / Stage 1 — Frozen lockfile install (E00-S05-T01) (pull_request) Successful in 1m41s
41bd4d78aa
Adds docs/adr/ADR-001-modular-monolith.md with the six required sections
(Context, Decision, Alternatives, Consequences, Operational impact, Revisit
trigger). The decision text ("Modular monolith") matches the ADR index entry
in section 70. Documentation-only; no runtime or schema impact.
kpcto merged commit 372bf1f648 into main 2026-08-31 00:20:51 +00:00
kpcto deleted branch feature/188 2026-08-31 00:20:52 +00:00
Sign in to join this conversation.