The plan goes on the issue
A plan that lived only in a session is lost with the session, and the issue
then has no trace of what was intended, what was approved, or what "done" was
supposed to mean. The proposal is one comment on the issue, written before any
code, that a reviewer can approve, whoever implements it can follow, and the
closure method can read the acceptance rule from without re-deriving it.
The repository's approval model decides what the comment is
Read the repository's CLAUDE.md and whatever issue process it carries under
.claude/skills/ before writing. Three postures exist and the repository
declares which:
- Approval before code. The comment is posted and the work waits for a
named authority's word; no approval, no implementation. Where the authority
gave the approval with refinements, the comment carries the refinements,
verbatim, and they supersede the original plan.
- The gate is at merge. The comment is the implementer's plan, posted without
claiming approval and saying so — "awaiting ratification at merge" in the
comment itself — and the human decision moves to the pull request.
- Delegated. Where the partnership delegates the work, the comment is the
record and you proceed; the standard of the plan does not drop with the
ceremony.
Never claim an approval that was not given, never soften a conditional one,
and never backfill a proposal after the code exists — that asserts a gate was
satisfied when it was not; say instead that the plan was written late and why.
Where the repository's process carries markers, templates or approval
records, use them as it specifies; this method is what goes inside them.
Read before writing
The issue number is the identifier; a finding id resolves to exactly one
issue first (mellions-issue-closure, Identity). Then: the issue body as the contract; every
earlier comment (a proposal already there, a claim, a reviewer's remedy); and
the code at HEAD now, because the item is a claim written at a commit. A premise
that moved is said on the issue, and the plan is made against the world rather
than the item.
Re-verifying the premise is these questions, and mellions-issue-remediation
answers them again in the pull request body against what was actually built:
- Do the citations resolve, and is what the item says about them still true?
Resolving is the cheap half — an item can cite perfectly and be wrong about
what the citations mean.
- Are several root causes conflated? Enumerate them. An item naming one and
proposing one diff can be satisfied while the others stand, and will close
looking complete.
- Do the remedies it proposes actually close the defect, or only the trace by
which it was noticed? An option is a claim, not an instruction, and can be
false while every citation in the item is true. Where it turns on what a
doctrine, specification or contract requires, read the provision itself and
name it; where none of them closes the defect, say so and state the remedy
that does, before any code.
- Would the change ship a declaration that is false? Contract text,
comments, schema declarations and messages are claims that ship; one wrong for
a subset of live rows is worse than the silence it replaces.
- Do the existing tests prove the intended semantics, or encode the current
behaviour? Establish which before treating a red test as a blocker or a
green one as coverage.
- Would it reintroduce a previously fixed defect? Read the history around
the code to be touched: a fix whose rationale nobody recorded is the one most
often undone.
What the comment carries
Titled for the issue — Resolution proposal — Issue #NN — and containing, only
where it applies:
- the target repository, the base branch and the pin the plan was verified at;
- the premise re-verification: what still holds, what drifted, what was
corrected;
- the root cause at
file:line, and every site sharing it — the class, not
the reported instance;
- the scope: files to touch, and files explicitly out of scope;
- hard rules the change must respect — banned patterns, what a careless fix
breaks, contracts and paths that must not move;
- schema, migrations, persisted data and historical records in scope, or the
reason none need remediation;
- observability: what will show the defect's return;
- the tests: which, where, and how each will be falsified — the fix
neutralised and the test watched failing;
- explicit non-goals and stop conditions; risks;
- the acceptance rule the issue will close under, in the vocabulary
mellions-issue-closure defines, so closure reads it rather than guesses it;
- the proof that will be returned: what the pull request body will carry;
- provenance: who authored the plan, and whether it is approved, awaiting
ratification at merge, or delegated; and the plain statement that
implementation has not started.
The comment reflects what was decided, not the first draft: refinements from
the authority or the reviewer are in it, quoted as written.
Discipline
- Invent nothing: no file, call site, test or signal the analysis does not
contain. A thin analysis makes a thin proposal, and the gap is said.
- The issue number, repository and base branch are verified against the
actual issue; a mismatch is a stop.
- Quote raw evidence where it settles something; describe nothing you have
not opened.
- The proposal is a plan, not a diff. Design that belongs in the code stays
out of the comment; what belongs here is what a reader needs to judge the
approach and later to check that the work matched it.
Filing
Draft to scratch; gh issue comment NN --repo <owner/repo> --body-file.
Report the comment URL. Then, in the posture the repository declares: wait for
the word, or proceed to mellions-issue-remediation. The proposal is what the
pull request body will be checked against, and what mellions-issue-closure
reads the acceptance rule from.
Stop points
- The premise no longer holds at HEAD and the item has not been corrected.
- The repository requires approval before code and none was given.
- A finding id resolves to zero issues or to several.
- The issue already carries a proposal that was approved: re-plan on top of
it, saying what changed, rather than replacing it silently.
- The base branch in the plan is not the repository's declared base.
- The repository's process requires something you cannot supply — a marker, a
template, an approval record. Say what is missing rather than approximating
the process.
1---2name: mellions-issue-resolution-proposal3description: Load this after the issue exists and before the first commit — to write the resolution plan on the issue itself, in the repository's approval model, so the plan survives the session, a reviewer can approve one comment, and closure can later read the acceptance rule it was made under; and again when the premise moved and the plan must be re-made. Triggers — "post the proposal", "write the plan on the issue", "record the plan", "document the proposal on issue NN", "before I start on NN". Not for producing the analysis (mellions-bug-audit), implementing (mellions-issue-remediation) or closing (mellions-issue-closure).4---5<!-- Mellions Engineer | LetA Tech Ltd. | leta@letatech.ca -->67# The plan goes on the issue89A plan that lived only in a session is lost with the session, and the issue10then has no trace of what was intended, what was approved, or what "done" was11supposed to mean. The proposal is one comment on the issue, written before any12code, that a reviewer can approve, whoever implements it can follow, and the13closure method can read the acceptance rule from without re-deriving it.1415## The repository's approval model decides what the comment is1617Read the repository's `CLAUDE.md` and whatever issue process it carries under18`.claude/skills/` before writing. Three postures exist and the repository19declares which:2021- **Approval before code.** The comment is posted and the work waits for a22 named authority's word; no approval, no implementation. Where the authority23 gave the approval with refinements, the comment carries the refinements,24 verbatim, and they supersede the original plan.25- **The gate is at merge.** The comment is the implementer's plan, posted without26 claiming approval and saying so — "awaiting ratification at merge" in the27 comment itself — and the human decision moves to the pull request.28- **Delegated.** Where the partnership delegates the work, the comment is the29 record and you proceed; the standard of the plan does not drop with the30 ceremony.3132Never claim an approval that was not given, never soften a conditional one,33and never backfill a proposal after the code exists — that asserts a gate was34satisfied when it was not; say instead that the plan was written late and why.35Where the repository's process carries markers, templates or approval36records, use them as it specifies; this method is what goes inside them.3738## Read before writing3940The issue number is the identifier; a finding id resolves to exactly one41issue first (`mellions-issue-closure`, Identity). Then: the issue body as the contract; every42earlier comment (a proposal already there, a claim, a reviewer's remedy); and43the code at HEAD now, because the item is a claim written at a commit. A premise44that moved is said on the issue, and the plan is made against the world rather45than the item.4647Re-verifying the premise is these questions, and `mellions-issue-remediation`48answers them again in the pull request body against what was actually built:4950- **Do the citations resolve, and is what the item says about them still true?**51 Resolving is the cheap half — an item can cite perfectly and be wrong about52 what the citations mean.53- **Are several root causes conflated?** Enumerate them. An item naming one and54 proposing one diff can be satisfied while the others stand, and will close55 looking complete.56- **Do the remedies it proposes actually close the defect, or only the trace by57 which it was noticed?** An option is a claim, not an instruction, and can be58 false while every citation in the item is true. Where it turns on what a59 doctrine, specification or contract requires, read the provision itself and60 name it; where none of them closes the defect, say so and state the remedy61 that does, before any code.62- **Would the change ship a declaration that is false?** Contract text,63 comments, schema declarations and messages are claims that ship; one wrong for64 a subset of live rows is worse than the silence it replaces.65- **Do the existing tests prove the intended semantics, or encode the current66 behaviour?** Establish which before treating a red test as a blocker or a67 green one as coverage.68- **Would it reintroduce a previously fixed defect?** Read the history around69 the code to be touched: a fix whose rationale nobody recorded is the one most70 often undone.7172## What the comment carries7374Titled for the issue — `Resolution proposal — Issue #NN` — and containing, only75where it applies:7677- the target repository, the base branch and the pin the plan was verified at;78- the premise re-verification: what still holds, what drifted, what was79 corrected;80- the root cause at `file:line`, and every site sharing it — the class, not81 the reported instance;82- the scope: files to touch, and files explicitly out of scope;83- hard rules the change must respect — banned patterns, what a careless fix84 breaks, contracts and paths that must not move;85- schema, migrations, persisted data and historical records in scope, or the86 reason none need remediation;87- observability: what will show the defect's return;88- the tests: which, where, and how each will be falsified — the fix89 neutralised and the test watched failing;90- explicit non-goals and stop conditions; risks;91- **the acceptance rule** the issue will close under, in the vocabulary92 `mellions-issue-closure` defines, so closure reads it rather than guesses it;93- the proof that will be returned: what the pull request body will carry;94- provenance: who authored the plan, and whether it is approved, awaiting95 ratification at merge, or delegated; and the plain statement that96 implementation has not started.9798The comment reflects what was decided, not the first draft: refinements from99the authority or the reviewer are in it, quoted as written.100101## Discipline102103- Invent nothing: no file, call site, test or signal the analysis does not104 contain. A thin analysis makes a thin proposal, and the gap is said.105- The issue number, repository and base branch are verified against the106 actual issue; a mismatch is a stop.107- Quote raw evidence where it settles something; describe nothing you have108 not opened.109- The proposal is a plan, not a diff. Design that belongs in the code stays110 out of the comment; what belongs here is what a reader needs to judge the111 approach and later to check that the work matched it.112113## Filing114115Draft to scratch; `gh issue comment NN --repo <owner/repo> --body-file`.116Report the comment URL. Then, in the posture the repository declares: wait for117the word, or proceed to `mellions-issue-remediation`. The proposal is what the118pull request body will be checked against, and what `mellions-issue-closure`119reads the acceptance rule from.120121## Stop points122123- The premise no longer holds at HEAD and the item has not been corrected.124- The repository requires approval before code and none was given.125- A finding id resolves to zero issues or to several.126- The issue already carries a proposal that was approved: re-plan on top of127 it, saying what changed, rather than replacing it silently.128- The base branch in the plan is not the repository's declared base.129- The repository's process requires something you cannot supply — a marker, a130 template, an approval record. Say what is missing rather than approximating131 the process.