feat(source-control): setup skill supports pr_body_required_sections (#1032) - #1059
Conversation
…1032) Completes #975's adoption path: /source-control:setup was the last mechanism-owning surface that didn't know about the new pr_body_required_sections key, so a team using the sanctioned guided setup flow couldn't configure the required-section scaffold or see which layer supplies it -- the only path was hand-editing .claude/source-control.md directly. - check reports a pr_body_required_sections row on the effective-configuration table, resolving to the plugin's portable default (Summary, Test plan) with "won by: plugin default" when no layer sets it, rather than a blank row -- the only key whose "unset" state is itself a reportable, named value. - apply's interview offers setting it, deliberately recommending only the plugin's own portable default and never proposing a Related/linked-issue section or any other org-specific list as a universal default -- it asks what the repo's actual convention requires instead of inventing one, per the Two-lane convention posture. - The written-config template gains the matching ## pr_body_required_sections section, at parity with every other per-key surface. New evals 13-14 cover the check-report default and the agnostic-interview behavior. Version bumped 0.18.0 -> 0.19.0 with a matching CHANGELOG entry. Closes #1032 Refs #975 Refs #1029 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYvF6bWGqemS9aYFfWJRiW
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4ed782aded
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
4ed782a to
abb9607
Compare
|
Claude finished @kyle-sexton's task in 2m 50s —— View job PR Review
Overall: This is a clean, well-scoped PR. It completes the No blocking issues. One pre-existing bug (from #1029, not introduced here) worth tracking. Findings**🟣 Pre-existing — AWK inline-comment stripping drops visible text before 🟡 Nit — raw.githubusercontent.com URL hardcodes to [`docs/conventions/pr-body-convention/README.md`](https://raw.githubusercontent.com/melodic-software/claude-code-plugins/main/docs/conventions/pr-body-convention/README.md)Hardcoding Changes reviewed
No secrets, no injection surfaces, no multi-tenancy concerns — all blocking checks from REVIEW.md pass. |
|
Claude finished @kyle-sexton's task in 1m 49s —— View job Security Review — PR #1059
Scope: Summary: No CRITICAL or IMPORTANT security issues found. One low-risk observation below. Bash snippets in SKILL.md — no injection surface introducedThe two bash blocks added/retained in the
SUGGESTION —
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: abb9607576
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
🔒 babysit-prs lane claiming this PR for on-branch fix work this cycle (amendment-round: 16, safe tier). Will fix clear branch-owned findings and push; will not resolve threads or merge (safe tier). |
…t in setup Two review findings on #1032's PR: - create.md: the required-section gate's comment-aware scan treated an entire line as comment text once it saw "<!--", dropping visible content that shares a line with a trailing/leading inline comment (e.g. "Ran smoke tests <!-- details omitted -->") before the non-empty check -- a false-fail, since GitHub still renders the text outside the comment. Rewrote the scan to strip only the comment SPAN (single- or multi-line, via a strip_comment_span helper), preserving visible text before/between/after spans on the same line; a genuinely comment-only line, or a fully-hidden middle line of a multi-line span, still contributes nothing. Defensive pass over the fence/comment interaction found and fixed two more latent bugs while at it: an already-open fence or comment now takes absolute priority over a NEW fence/comment marker inside it (each construct's content is parsed literally by GFM, never nested), and heading/exit-boundary detection now runs before comment-open detection so a heading line carrying a trailing inline comment is read as a real exit boundary instead of being misrouted into comment handling. Verified locally against 7 scenarios (inline leading/trailing text, comment-only line, multi-line span, heading-with-trailing-comment, fence-wins-over- comment-lookalike, comment-wins-over-fence-lookalike) before writing the change into the doc. New eval 18 covers the regression. - setup/SKILL.md: pr_body_required_sections falls through per key, so omitting the H2 in an overlay/team write does NOT reset to the portable default when an earlier layer already sets the key -- it keeps inheriting that layer's list. The interview guidance now states this explicitly: when the intent is to reset back to the portable default OVER a lower layer that sets something else, write the explicit default bullet list, not an omitted section: an omission only ever inherits, never overrides. New eval 15 covers the regression. Refs #975, #1032 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KYvF6bWGqemS9aYFfWJRiW
|
Claude encountered an error after 1s —— View job I'll analyze this and get back to you. |
|
Preserve visible text around inline comments — real bug, fixed (commit ada30f3). Rewrote the comment-aware scan to strip only the comment SPAN (single- or multi-line, via a |
|
Claude encountered an error after 0s —— View job I'll analyze this and get back to you. |
|
Write explicit default when overriding section lists — real bug, fixed (commit ada30f3). The interview guidance now states explicitly: because |
|
Warning Automated review did not complete — this is an infrastructure failure, not a review verdict. Treat any Claude comment on this PR (including a placeholder like "I'll analyze this and get back to you") as incomplete, not "no findings."
Re-running the job, or pushing a new commit, will retry the review. |
|
Warning Automated security review did not complete — this is an infrastructure failure, not a review verdict. Treat any Claude comment on this PR (including a placeholder like "I'll analyze this and get back to you") as incomplete, not "no findings."
Re-running the job, or pushing a new commit, will retry the review. |
Closes #1032
Summary
Completes #975's adoption path:
/source-control:setupwas the last mechanism-owning surface thatdidn't know about
pr_body_required_sections(added in #1029), so a team using the sanctionedguided setup flow couldn't configure the required-section scaffold or see which layer supplies it —
the only path was hand-editing
.claude/source-control.mddirectly.checkreports apr_body_required_sectionsrow on the effective-configuration table,resolving to the plugin's portable default (
Summary,Test plan) withwon by: plugin defaultwhen no layer sets it — a named, reportable value rather than a blank row, since "unset" is itself
a meaningful state for this key.
apply's interview offers setting it, deliberately recommending only the plugin's own portabledefault and never proposing a
Related/linked-issue section (or any other org-specific list) as auniversal default — it asks what the repo's actual convention requires (a PR template, a CI gate
like
pr-issue-linkage, team practice) rather than inventing one, per the plugin's Two-laneconvention posture.
## pr_body_required_sectionssection, atparity with every other per-key surface (
subject_pattern,pr_title_pattern,trailer_policy,pr_body_attribution).0.18.0→0.19.0with a matchingCHANGELOG.mdentry.This branch was rebased onto
feat/975-required-body-sections(then ontomainafter #1029 merged)so it includes #1029's
pr_body_required_sectionskey and #1055's setup-template preamble together —verified both coexist correctly in the write template (preamble header, then the per-key section
list ending with the new
## pr_body_required_sectionssection).Test plan
npx markdownlint-cli2over the changed skill doc and CHANGELOG: 0 errors.node -e "JSON.parse(...)"over the updatedevals/evals.json: valid JSON.bash scripts/check-changelog-parity.sh --check-bump origin/main: PASS.bash scripts/validate-plugins.sh: every plugin manifest and the marketplace catalog validate.pr_body_required_sectionssection both present, no duplication) after rebasing ontomain.Related
changes touch the same "Write the config" template step and coexist without conflict.
🤖 Generated with Claude Code