# bindcar Roadmap Index
This directory holds bindcar's roadmap documents. Each one describes a body
of work — *what* and *why*, with a task list and a definition of done.
[`../../ROADMAPS.md`](../../ROADMAPS.md) is the status board that indexes
them and carries the current completion state.
## Numbering
Numbers are **sequential** and **stable once assigned**: a new roadmap takes
the next free number, whatever its subject. Numbers are never reused and
never renumbered — a link to `04` stays valid for the life of the repo.
Filenames are `NN-lowercase-hyphenated-title.md`. No uppercase, no
underscores.
The headings below group the documents by theme for reading; the grouping
carries no meaning for the numbering.
## Index
### Reference and analysis
| 01 | [`01-dnssec-feature-summary.md`](01-dnssec-feature-summary.md) | Record of the shipped DNSSEC implementation and its API surface |
### Architecture and refactoring
| 02 | [`02-feature-gate-http-server.md`](02-feature-gate-http-server.md) | Put the HTTP server behind a cargo feature so type-only consumers shed ~30 deps |
### Features
| 03 | [`03-bind9-full-zone-config.md`](03-bind9-full-zone-config.md) | Parse and serialize the full BIND9 9.18+ zone statement option set |
| 04 | [`04-standalone-out-of-cluster.md`](04-standalone-out-of-cluster.md) | Run bindcar outside Kubernetes against pre-existing BIND9, still on SA-token identity |
| 07 | [`07-dnssec-lifecycle.md`](07-dnssec-lifecycle.md) | Enable, observe and delegate DNSSEC on a live zone without recreating it |
### Security and compliance
| 05 | [`05-api-transport-tls.md`](05-api-transport-tls.md) | TLS and mutual TLS for the REST API transport |
| 06 | [`06-tls-certificate-reload.md`](06-tls-certificate-reload.md) | Pick up a renewed certificate without restarting the process (shipped) |
## Previously reserved numbers
`05` was held outside this repository while it described an unremediated
transport-security weakness in shipped code — this repo is public. TLS shipped
on 2026-09-18 and the document was migrated in. Nothing is reserved now.
Keep the rule it came from: **never** add a document here describing an
unremediated security weakness in shipped code. Hold it externally and reserve
its number until the fix lands.
## Consumer upgrade guides live in bindy
The bindcar → bindy upgrade guides are **not** roadmaps and are not kept here.
They tell the *bindy operator* what to change to consume a bindcar release, so
they live in that repo's own index as
[`53`–`56`](https://github.com/firestoned/bindy/tree/main/.github/community).
When a bindcar release changes something a consumer must react to, write the
delta there, not in this directory.
## How these relate to the rest of the repo
- **Roadmaps say what and why.** An architecturally significant *how*
still goes through an ADR (`docs/adr/NNNN-title.md`) first — a roadmap
entry does not substitute for one.
- **Task lists are the source of truth.** Check items off in the file as
they land, in the same PR that lands them.
- **Status changes go in `ROADMAPS.md`** in that same PR. That file is a
board, not documentation of intent.
- Code style, testing and documentation rules live in
[`.claude/rules/`](../../.claude/rules/), not here.
## Reading a migrated doc
Everything here was migrated on 2026-09-12 from an external roadmap set, and
each carries a `> **Status:**` block under its title recording what was
verified against the tree at that point. **The body below that block is the
document as originally written** — file paths and line numbers in older docs
have drifted. Trust the status block; re-verify the body.
## Adding a roadmap
1. Take the next free number (`08` today).
2. Filename: `NN-lowercase-hyphenated-title.md`.
3. Open with a `> **Status:**` block so a reader knows where the work stands
before reading the analysis.
4. Add a row to the table above **and** to `ROADMAPS.md`.