LearnNewsExamplesServices
Frontmatter
id14467
titlepull-request-workflow §9: align `## Deltas` prose with the unconditional PR-body lint anchor
stateClosed
labels
documentationenhancementaimodel-experience
assigneesneo-fable
createdAtJul 2, 2026, 12:42 PM
updatedAtJul 2, 2026, 1:53 PM
githubUrlhttps://github.com/neomjs/neo/issues/14467
authorneo-fable
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJul 2, 2026, 1:53 PM

pull-request-workflow §9: align ## Deltas prose with the unconditional PR-body lint anchor

Closed v13.1.0/archive-v13-1-0-chunk-8 documentationenhancementaimodel-experience
neo-fable
neo-fable commented on Jul 2, 2026, 12:42 PM

Context

Two template-anchor CI/validator rejections hit the same agent (@neo-fable) on 2026-07-02 within 30 minutes. The second one is substrate drift, not author error: PR #14465 (docs-only, otherwise green) failed lint-pr-body at 10:32Z because its body omitted a ## Deltas section — omitted because the authoring substrate says it is conditional while the validator requires it unconditionally.

The Problem

.agents/skills/pull-request/references/pull-request-workflow.md §9's minimum-viable PR body structure lists the section as:

<h2 class="neo-h2" data-record-id="4">Deltas from ticket (if any)</h2>

But .github/workflows/agent-pr-body-lint.yml (lines ~61–64) declares INVISIBLE_PR_BODY_ANCHORS = ["Authored by ", "## Deltas"] — a substring-presence check with no conditionality. An agent that reads the workflow literally and has no deltas correctly-per-the-doc omits the section, opens the PR, and fails CI post-open — costing a body-edit round-trip and a red check on an otherwise-green PR. The lint bot's follow-up comment says "the validator checks more structural anchors than this comment names," which is honest, but the fix belongs at the authoring source: the doc should never mark a mandatory anchor as conditional.

Empirical anchor: PR #14465, run 28583491232 (fail) → body edited to add the section → run 28583620814 (pass). Same-day sibling event (for pattern context, NOT in scope): the manage_pr_review validator rejected a follow-up review that collapsed unchanged metric anchors — that one was author error (the template correctly lists all seven bullets); this ticket covers only the genuine doc-drift case.

The Architectural Reality

  • Authoring source: .agents/skills/pull-request/references/pull-request-workflow.md §9 ("Minimum-viable PR body structure" fenced block).
  • Enforcement source: .github/workflows/agent-pr-body-lint.ymlVISIBLE_PR_BODY_ANCHORS (Evidence:, ## Test Evidence, ## Post-Merge Validation) + INVISIBLE_PR_BODY_ANCHORS (Authored by , ## Deltas). The yml's own header comment records that shared-module extraction was reverted in PR #11502 and sync-by-convention with comment-pointers is the accepted cross-surface coordination shape — so the doc side must carry its half of the convention explicitly.
  • The workflow file loads only on pull-request skill invocation (not always-loaded substrate); byte-impact of the fix is ~2 lines.

The Fix

In §9's fenced template block, change:

## Deltas from ticket (if any)## Deltas from ticket with the placeholder guidance updated to: <scope additions, better solutions, discovered edge cases — state "None substantive" when empty; this heading is a CI lint anchor and MUST be present>

And add one sentence directly under the block: "The agent-pr-body-lint workflow enforces these headings as unconditional substring anchors — visible: Evidence:, ## Test Evidence, ## Post-Merge Validation; invisible: ## Deltas, Authored by . Prose conditionality never applies to heading presence (sync-by-convention with agent-pr-body-lint.yml)."

Decision Record impact: none (docs prose alignment; no authority change).

Acceptance Criteria

  • §9 template block shows ## Deltas from ticket with the state-"None"-when-empty guidance; "(if any)" removed from the heading line.
  • One explicit sync-by-convention sentence under the block names all five lint anchors and points at agent-pr-body-lint.yml.
  • No change to the validator itself, to anchor sets, or to any other section of the workflow doc.

Out of Scope

  • Changing agent-pr-body-lint.yml (the anchor set is correct; the doc drifted).
  • The pr-review template/validator surfaces (the same-day sibling event was author error, not drift).
  • Any slot/disposition change to the skill router.

Related

  • PR #14465 (the empirical failure + fix), #11501/#11502 (the lint's origin + the sync-by-convention decision), #12367 (Resolves-keyword operator rule enforced by the same workflow).

Live latest-open sweep: checked latest 20 open issues at 2026-07-02T10:38Z + re-checked latest 8 at 10:42Z; no equivalent found. A2A in-flight claim sweep: no overlapping [lane-claim] in the last 60 min (nearest: #14466 lifecycle-state writer — disjoint scope).

Origin Session ID: 1d4262a2-a001-4387-9372-3923f024be8e Retrieval Hint: "PR body lint Deltas anchor if any prose drift"

tobiu referenced in commit 0a15706 - "docs(skills): mark PR-body Deltas heading as unconditional lint anchor (#14467) (#14468) on Jul 2, 2026, 1:53 PM
tobiu closed this issue on Jul 2, 2026, 1:53 PM