dowel

Open questions

In priority order. The higher an item, the more it constrains later design.

Q1. The cfg namespace vocabulary

Status: not started. The next item to pin down.

The shared foundation referenced by when predicates in dowel.toml, match / when in dowel.build, toolchain selection, and ABI labels.

Working draft:

cfg.opt        configuration (debug / release / …)
cfg.target     target triple
host.os        build host OS
host.arch      build host architecture
feature.<name> feature flag
tc.c           the selected C toolchain

To decide:

The provisional vocabulary used by the implementation

To make progress, the implementation adopts the draft above verbatim as a closed vocabulary (crates/dowel-eval/src/config.rs). This is a placeholder until Q1 is decided, not the decision itself. The live version is available from dowel schema dump.

Namespace Implemented keys Domain
cfg opt debug / release
cfg target target triple (free-form string)
host os / arch build host values
feature <name> boolean (only names declared in [features] of dowel.toml)
tc c identifier of the selected C toolchain
tc cxx identifier of the selected C++ toolchain

Predicate composition is implicit AND only. Exhaustiveness checking of match applies to keys with finite domains (cfg.opt / host.os / host.arch); cfg.target has an unbounded domain and requires a _ arm. This asymmetry will be revisited when Q1 is decided.

Q2. ABI label composition

Status: deferred. Depends on the outcome of Q1.

The counterpart of Conan’s package_id. Granularity dominates the design.

Candidate components: toolchain ID, C++ standard version, standard library implementation, _GLIBCXX_USE_CXX11_ABI, MSVC runtime kind, sanitizers, LTO, exception model, floating-point model.

The Phase 0 verification (how many real mismatches are detected) will indicate the required granularity.

Q4. Store format details

Status: skeleton only (20-architecture.md section 5).

Q6. What to do when import output is rejected

Configurations extracted from an existing project may fail this system’s verification (ABI mismatch, error_on_conflict, and so on).

Options:

The third is favored. The current implementation carries the mark as an UNVERIFIED header comment on the generated files (human-facing, pointing at migrate verify); whether a machine-readable mark should gate verification per target — and what clears it — remains undecided.

Q7. C++20 modules

The plan is to make scan actions first-class in the graph, but parts of this depend on the state of clangd support. Re-survey when Phase 2 starts.

Q8. Verifying the current state of Meson

The statements about Meson in 00-overview.md are based on prior knowledge. The wrap and lock behavior in particular may have changed in recent releases; confirmation against the official documentation has not been done.

Q10. Prebuilt distribution for dowelup

Status: not started. ADR-0013 defined source builds only.

Building from source assumes a Rust toolchain. Widening the audience requires distributing prebuilt binaries. To decide:

Fetching itself can be delegated to curl, but verification has to be owned here.