Skip to content

Phase 4 verifies backward 'Closes #N' references but not forward 'a follow-up issue has been filed' promises #133

Description

@dmccoystephenson

Template gap

Phase 4 verifies backward references but not forward ones:

Before pushing, verify each Closes #N. For every issue number you plan to reference, run gh issue view <N> and confirm the title and body match what this PR does.

That guard fires only on Closes #N, and only on issues that already exist — it targets the failure of closing the wrong issue. The mirror-image failure is unguarded: a PR body that promises an issue the cycle intends to create. Closes #N is verifiable because the issue precedes the PR; "a follow-up issue has been filed" is not, because the issue is supposed to follow it.

Phase 1's "Record skip reasons" instruction actively produces these forward references, since it asks for deferred work to be recorded either in the PR body or as an issue comment, but it never ties the promise to an artifact.

Observed instance

Dans-Plugins/Medieval-Factions PR #2019 shipped with a "What was deliberately left out" section asserting that a follow-up issue had been filed for an unaddressed finding. No such issue existed — the dispatch was interrupted between writing the body and filing it. The finding was real and was eventually filed as Dans-Plugins/Medieval-Factions#2020, but only because a later cycle happened to check; the PR read as though the work were tracked, so nothing would otherwise have gone looking for it.

Suggested action

Add to the Phase 4 verification block, immediately after the existing Closes #N guard:

Verify forward references too. File any follow-up issue the PR body promises before writing the body, and cite it by number (filed as #N) rather than by an unverifiable phrase such as "a follow-up issue has been filed". Before pushing, check every #N the body mentions with gh issue view <N> — not only the ones under Closes. A body that describes deferred work without a number to point at is the one form of skip reason that cannot be audited later, which defeats the purpose of recording it.

The ordering matters more than the check: filing first and pasting the real number back makes the failure impossible rather than merely detectable.

Provenance

Routed upstream from dmccoystephenson/medieval-factions-dev-loop#49, where it was filed as template-rule — the guard it extends is inherited from create-dev-loop.md, so every generated skill has the same asymmetry.

This issue was filed during a Gardener session (https://github.com/Stephenson-Software/gardener).


drafted by Claude on behalf of Daniel Stephenson

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions