← ClaudeAtlas

explaining-changeslisted

Use when a change to a watched project needs the one thing its diff cannot contain — why it was made. Triggers - the Observatory asks for a `why` at the end of a turn, "record why" / "запиши почему", "explain this change" / "объясни это изменение", "log what we did" / "залогируй что сделали", "why did we do it this way" / "почему мы сделали так", or reviewing a project's recorded history and finding an entry with an empty reason. The facts — files, lines, branch, unpushed commits — are already measured from git and need no help; this skill supplies only the reasoning, and writes it through the observatory's MCP server as a proposal that nobody self-approves. NOT for writing a commit message, a PR description or a changelog, and NOT for changing the typed registry — a registry change is `observatory_propose`, which is a different decision with different evidence.
ssheleg/project-observatory-dashboard · ★ 2 · Code & Development · score 74
Install: claude install-skill ssheleg/project-observatory-dashboard
# Explaining changes A diff says what moved. It cannot say which constraint forced the shape, which alternative was rejected, or which trap was avoided — and that is the half a reader needs in six months. The Observatory measures the first half without anyone's help. This skill writes the second. ## The one rule **Write only what the diff cannot show.** Restating the diff in prose is worse than an empty `why`: it fills the field, so nobody looks again, and it carries no information. If nothing non-obvious happened, say so and leave the field empty. A `why` worth storing answers at least one of: - **the constraint** — what made this shape necessary rather than the obvious one - **the rejected alternative** — what was tried or considered, and why it lost - **the trap** — what would have broken, and how it was found - **the evidence** — the measurement that settled it, with its command or file:line Never invent one. A fabricated reason is read as true by everything downstream, and nothing in the ledger can tell it from a measured one. ## Recording it The Observatory's Stop hook has already stored the facts as a `proposed` record and printed its id. Correct that record rather than creating a second one: ``` observatory_record( owner="agent:claude-code", memory_id="<the id the hook printed>", expected_revision=<the revision it printed>, statement="<the same claim, unchanged>", why="<one or two sentences>" ) ``` `owner` has no default — a write that could claim