Phases are cut so that each is valuable on its own and permits the decision not to proceed. Phase 0 in particular exists to make a “don’t build it” decision possible early.
All of these can be done without writing a build system, and they ground the design decisions that follow.
| Item | Method | What it informs |
|---|---|---|
| Breakdown of cold configure | strace -c on real projects; process launches, stat counts, wall time |
expected payoff of the probe-fact DB |
| Reconfiguration latency | time taken when one manifest file changes | expected payoff of incremental evaluation |
| Frequency of generator expressions / string manipulation | static counting | expected payoff of types and diagnostics |
| Whether ABI mismatches occur in the wild | bolt an ABI label check onto existing projects; count detections | whether investing in an execution layer is justified |
The last item is the important one. If the detection count is not significant, the premise of centering ABI verification collapses — in which case the focus narrows to incremental evaluation and diagnostics (which stands even as a layer over existing systems).
The phase that pins down the constraints that cannot be retrofitted.
flock, atomic swap)dowel whydowel check (runs through planning without executing; scope per
ADR-0010)Deliverable: dowel check and dowel why, verifiable side by side with
an existing project.
compile_commands.json outputdowel build / dowel testDeliverable: actually able to build — though dependency supply is pkg-config delegation only.
dowel migrate verify (compile_commands comparison)dowel migrate import (CMake File API)find_package config files (the reverse direction)Deliverable: incremental adoption in existing projects becomes possible.
dowel debug (auto-consistent substitute-path, DAP config generation)Runners and debugger integration have the largest felt impact per investment and can be validated independently of the rest; this phase may run in parallel with Phase 3.
dowel.lock generation and verificationStarted only if the Phase 0 validation comes back positive.
must_equal verificationdowel abi check (diff against the previous version)Isolated execution with a CAS action cache would replace the Phase 2 ninja generation. The persistent store’s machinery is reusable as-is, so the door to introducing it later stays open. Decide based on operational experience through Phase 5.
| Part | Can it finish? |
|---|---|
| query core + language + types | yes |
| generation / migration / runners | yes |
| language server | no (permanent maintenance cost) |
| ABI / FFI export | grows with every target language |
The language server is planned on the premise that it is permanently unfinished; its initial feature set is kept narrow.