Turn each lint finding into its own documentation: a stable
linter.<name> rule id plus a one-line semantics string, present in
the JSON envelope and the human-readable output, so agents and humans
can act on a finding without repository access.
the capability advances through its declared lifecycle states under the repo's change process — each stage transition fires only when its stage gate holds
[[lint.findings]]
self_describing
invariant
every finding carries rule_id linter.<name> and a non-empty one-line rule_semantics sourced from the rule table, in JSON and human output
Every lint finding SHALL carry a rule_id (the stable
linter.<name> identifier) and a one-line rule_semantics string
stating what the rule requires, in both the JSON envelope and the
human-readable output, so the finding is documentation for itself.
Skipped-file notices (e.g. non-spec markdown without frontmatter) are
emitted on the envelope’s warnings channel and are out of scope for
this requirement.