ADR-016: Repository Task Runner
Geliştirme · 0.0.0-dev
Yayın
- Doküman
- 0.0.0-dev
- Uygulama
- 0.0.0
Bu sayfa
- Uygulama
- 0.0.0
- Status: Accepted
- Date: 2026-08-18
- Roadmap task: F1-006
- Decision owners: developer experience maintainers
Context
Bölüm başlığı “Context”Munderecat combines a Next.js workspace, Python data pipelines, local Supabase services, documentation and later release tooling. Contributors need a stable command vocabulary that does not require remembering each tool’s working directory and safety flags. That vocabulary must not duplicate package, dependency, migration or domain logic already owned by pnpm, uv and Supabase CLI.
The roadmap already specifies commands such as make bootstrap,
make db-reset, make verify, make docs-dev and domain pipeline targets.
F1-021 also explicitly requires make docs-dev and make docs-check.
Decision
Bölüm başlığı “Decision”GNU Make is the repository’s sole public task runner.
- The root
Makefileis the canonical command index. - Recipes support GNU Make 3.81 and POSIX
sh, which covers the baseline macOS environment and common Linux CI/contributor environments. - Recipes remain thin adapters. They invoke exact project tools and public package scripts rather than parsing lockfiles, implementing builds or reproducing migration logic.
- A second runner configuration is not added. Internal scripts may exist when real orchestration complexity warrants them, but Make remains their public entrypoint.
make helplists only real, working public targets. Future command names are added by their owning roadmap tasks, not as successful placeholders.
Initial Command Contract
Bölüm başlığı “Initial Command Contract”Environment And Verification
Bölüm başlığı “Environment And Verification”make bootstrapinstalls the pnpm graph with--frozen-lockfileand the uv environment with--locked. It may populate ignored local caches and environments but cannot update either lockfile.make web-devstarts the current Next.js application;make devis its present convenience alias. Future multi-service development may extenddevwithout changingweb-dev.make web-checkdelegates lint, strict typecheck and production build to the web package.make python-checkverifiesuv.lockoffline with Python downloads disabled.make verifyaggregates the current non-Docker checks. F1-012 will own CI and any broader verification matrix.
Local Database
Bölüm başlığı “Local Database”All database targets follow ADR-015:
- the project-pinned Supabase CLI is used through pnpm,
--workdir dbis always explicit,db-resetalways includes--local,- the dedicated network’s requested bridge binding is verified before start,
- startup failure calls normal Supabase stop and removes a network created by that attempt,
- normal
db-stoppreserves Supabase backup state, then removes the detached network, - wildcard host publication emits a warning and is never described as loopback isolation,
db-checkstops the stack even when its status probe fails.
F1-031 remains responsible for hard host-port isolation, per-agent project and port allocation, credentials and role separation. F1-006 does not weaken or claim completion of that gate.
Consequences
Bölüm başlığı “Consequences”Benefits
Bölüm başlığı “Benefits”- Contributor and CI commands share one discoverable vocabulary.
- Safety-critical flags such as Supabase workdir and
--localare centralized. - Pinned tools retain ownership of behavior, keeping Make recipes small and reviewable.
- Future docs and pipeline tasks can add stable commands incrementally without changing the runner.
- Windows contributors need an environment providing GNU Make and POSIX shell, such as WSL; native Windows Make compatibility is not claimed.
- Long-running development targets retain normal foreground process behavior.
- Make does not provide typed arguments or a rich plugin model; complex logic must move to a tested script while retaining a Make entrypoint.
Alternatives Considered
Bölüm başlığı “Alternatives Considered”Root package.json Scripts
Bölüm başlığı “Root package.json Scripts”This would avoid a separate executable for JavaScript contributors, but it
makes Python, Docker, documentation and release operations appear owned by the
Node package graph. The roadmap’s established make vocabulary and polyglot
boundary favored Make.
just offers cleaner recipe syntax, but adds a bootstrap binary that is not
otherwise needed. GNU Make is already present in the baseline environment and
matches roadmap commands.
Shell Scripts As The Public Interface
Bölüm başlığı “Shell Scripts As The Public Interface”Scripts are suitable implementation units but provide no single discoverable target index or dependency composition. They may support future complex tasks, but are not the top-level command vocabulary.
Multiple Native Tool Commands Only
Bölüm başlığı “Multiple Native Tool Commands Only”Requiring contributors to invoke pnpm, uv, Supabase and Docker commands directly avoids a wrapper, but repeats safety flags and working-directory knowledge in documentation and CI. It was rejected as error-prone.
Revisit Conditions
Bölüm başlığı “Revisit Conditions”- A supported contributor or CI platform cannot run GNU Make/POSIX recipes.
- Recipe complexity repeatedly exceeds thin orchestration and tested scripts do not restore clarity.
- The project adopts a cross-platform runner that materially reduces bootstrap requirements without duplicating tool ownership.