Seven tracks
Each track is a question the plan already answers and almost nobody reads the answer to. Prose on one side, a configuration, a state file and a planner on the other, and every claim a plan you can run.
The plan as a document
3 lessonsCan you find the one line that matters in four hundred?
The symbols and what each one costs.
+,~,-,-/+and+/-, and why the last two are the only ones worth slowing down for.known after applyand what it hides. Reading a long plan in thirty seconds without reading all of it.The graph
1 lessonWhy did it do them in that order?
References make edges, and the edges make the order. Building the DAG, walking it, and where the parallelism comes from. Cycles and how to break one.
depends_onas a confession that a reference you should have made is missing.Replacement
2 lessonsWhich attribute is about to destroy your database?
ForceNewand what carries it, read off the provider schema rather than guessed.create_before_destroyand the trap it sets with unique names.prevent_destroyas a seatbelt and as an obstruction.ignore_changesand the drift it silently accumulates.State
1 lessonWhat does it think it already has?
The state file as the truth, and what happens when reality disagrees. Drift and refresh.
importandmoved. Locking, and the two-people-applying disaster. Secrets in state, in the clear, because that is where they are.Modules and iteration
1 lessonWhy did removing one instance destroy three?
countagainstfor_each, and the index shift that turns a one-line deletion into three replacements. Variable validation as a guard rather than a comment. Outputs as an interface other configurations depend on.When apply fails
1 lessonWhat is in reality, and what is in the file?
Half a state: some resources created, one failed, the rest never attempted. Converging on the target without destroying what already works. The taint-and-reapply reflex, and the cases where it is exactly wrong.
/recover/the-half-replaced-databaseReading a generated plan
/auditAn agent wrote this. What does it actually do?
The track the rest exists for. A diff, the plan it produces, and the question of what it really does — the credential rotation that replaces the database, the subnet edit that cascades, the
/auditfor_eachkey rename, the tag that was not just a tag, and the plan whose destroy is only visible because acountwent from three to two.