Tooling & Automation
A track of P35 · Packaging, Tooling & Automation.
Automate the dev loop: build the task-graph engine behind a Makefile (topological order, cycle detection, per-target plan), then codify checks as pre-commit hooks and a CI gate over one source of truth.
Ask three people on a team to "run the checks before pushing" and you will get
three different subsets. The person whose subset happened to omit the type
checker is the person who breaks CI, and the fix everybody reaches for first is
a longer paragraph in CONTRIBUTING.md — which is a way of asking humans to be
a build system.
Packaging's last mile is making the dev loop automatic, so quality is a
property of the repo, not of whether anyone remembered the steps. Under a
Makefile — and under a CI job's needs: — is one idea: a task graph. This
track has you build the engine behind it.
You implement the scheduler a task runner hides: a topological sort over targets
(so make test runs install and build first, once each), cycle detection
(a cyclic graph can never run), and a per-target plan (run exactly what this
target needs). Then you step up a level: naming routines so one make quality
means the same thing on a laptop and in CI, pre-commit as a contract that runs
on every commit, and CI as the unskippable gate. Real make and pre-commit
execution stay prose; here you build the part that decides what runs — with this
repo's own Makefile and make quality as the worked example.