Trace linter in CI from day one; grep-based v1
Decision. trace-lint.mjs runs in CI from the first commit and fails
the build on graph rot. The v1 is a grep-based script; a possible v2 is
SHACL over a generated RDF graph.
Why. A convention without a linter is a suggestion, and link rot kills traceability systems — 80% accurate is worse than none because people stop trusting and then stop maintaining it. The ontology is small enough that grep is sound; formality can come later if the graph grows teeth.