Skip to content

feat(pr-pipeline): name merge.rung values merge and merge-reviewed - #11903

Closed
melodic-automation-lanes[bot] wants to merge 2 commits into
mainfrom
work-resolve-issue/issue-7469-41281452013-1
Closed

melodic-automation-lanes[bot] wants to merge 2 commits into
mainfrom
work-resolve-issue/issue-7469-41281452013-1

Conversation

@melodic-automation-lanes

Copy link
Copy Markdown
Contributor

Closes #7469

Summary

Opened by the work-resolve-issue lane. The run's own summary:

Following the owner's 2026-11-01 recorded decision on #7469, merge.rung now takes off, merge and merge-reviewed, and still accepts C2 and C3 as aliases. The schema, this repo's config, the example, the babysit merge gate's readers and the docs a human reads all use the names, with any code in parentheses. Choice of means: the gate maps a name to its code when it reads the rung (rung_code in babysit_merge_policy.py), at every input: the config, CLAUDE_LANES_MERGE_RUNG_CAP, --lane-rung-cap, --rung and the promotion-cell lookup. Comparisons, refusal reasons (rung-off:*, promotion-unqualified:<rung>) and the --rung values passed between scripts stay unchanged for the JS and Python consumers. The trade-off is that gate reports still show the rung as C2/C3. Any unknown value still reads as off, so an older installed copy of the gate that reads rung: merge holds the lane off and does not merge.

Not verified

  • Python unit tests (test_babysit_merge_policy.py, test_babysit_lane_reviews.py), the node schema tests (merge-authority.test.mjs) and lib/parse-concern-value.test.sh were not run: this lane can run only the named wrappers. Left to the PR's CI
  • .github/workflows/pr-merge.yml:1463 has a comment saying the rung cap can be set to off (or C2). That is a protected path this lane cannot write, and it is outside the issue's docs/ and plugins/ scope. A person can reword it to name merge
  • Tidy skipped: the change touches 17 files, more than the 10-file cutoff and more than one area, and it includes shared paths (.github/, lib/, docs/conventions/)
  • Historical records left as written: CHANGELOG entries and ADR 0082 ("merge.rung stays off, C2 or C3") record past states and were not rewritten
  • The issue's earlier intake comments proposed renaming the work-class labels (mechanical-maintenance, scoped-change). Superseded by the 2026-11-01 decision, so no label was renamed and no issues were relabeled

Fix

  • plugins/source-control/skills/babysit-prs/scripts/babysit_merge_policy.py: added RUNG_NAMES and rung_code(); the config read, effective_rung, read_rung_cap, rung_cap and Promotion.promoted map a rung name to its code; the bad-rung note names the rungs first
  • plugins/source-control/skills/babysit-prs/scripts/babysit_verify_evidence.py: --rung accepts a rung name
  • plugins/source-control/skills/babysit-prs/scripts/tests/test_babysit_merge_policy.py: tests that each name and its code read, rank, cap and promote the same way (config, effective_rung, read_rung_cap, rung_cap lane value, promotion cells)
  • plugins/source-control/skills/babysit-prs/scripts/tests/test_babysit_lane_reviews.py: test that a rung name passed as --rung scores the same as its code
  • plugins/source-control/skills/babysit-prs/reference/safety.md: names the rungs merge (C2) and merge-reviewed (C3) in the promotion-cell mapping
  • docs/conventions/pr-pipeline/pr-pipeline.schema.json: merge.rung enum is off, merge, merge-reviewed, C2, C3; both conditional rung enums list both names and both codes; the description says what each rung needs
  • docs/conventions/pr-pipeline.yaml: rung: merge, and the comment explains what each rung means
  • docs/conventions/pr-pipeline/examples/claude-code-plugins.yaml: rung: merge
  • docs/conventions/pr-pipeline/README.md: merge authority, cap variable, pr-merge cap and Dependabot gate text name the rungs first, codes in parentheses
  • docs/contracts/loop-lane/README.md: the promotion-cell mapping names merge (C2) and merge-reviewed (C3)
  • docs/contracts/loop-lane/CHANGELOG.md: 13.1.1 patch entry (loop-lane is not in fragment mode)
  • plugins/autonomy/reference/guardrails/work-classes.md: the babysit gate's promotion-cell mapping names merge (C2) and merge-reviewed (C3)
  • lib/parse-concern-value.test.sh: expects merge from the example's merge.rung; the two cited example line numbers updated (:201, :207)
  • .github/actions/resolve-config/merge-authority.test.mjs: schema tests that merge, merge-reviewed, C2 and C3 each validate and carry the requirements of a rung above off, and that C4 is rejected
  • .changes/source-control/work-resolve-issue-issue-7469-4e7a2c91.md: minor fragment
  • .changes/pr-pipeline/work-resolve-issue-issue-7469-9b1d3f60.md: minor fragment
  • .changes/autonomy/work-resolve-issue-issue-7469-c2f85a17.md: patch fragment

Verification

The runner ran each check from the base copy against cb670cb:

  • scripts/check-changelog-fragments.sh --check: passed

The run reports:

  • check-changelog-fragments: All 58 changelog fragment(s) under .changes/ are valid (run after the last edit)
  • check-affected: 13 passed, 5 skipped over 17 changed files (run after the last edit; skips were typos not installed, and checks that run code from the checked tree)
  • local fresh-context review subagent over the whole diff: found no correctness bug, fail-open path or KeyError; its two low findings (loop-lane README still named rungs by code only, and no test passed a name to --rung) were fixed; its trivial finding is in not_done
  • The lane run: https://github.com/melodic-software/claude-code-plugins/actions/runs/41281452013

Left out: the items under Not verified.

Related

#7469

Lane-Activity: work-resolve-issue/resolve-issue
@github-actions

github-actions Bot commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

claude-security-review reviewed 9b6dfb3a847b4c24c49b84b02c5ebfc9e2b4de65: read 2 of 2 changed file(s); 0 finding(s), 0 as inline comments.

Security review (incremental, since cb670cb)

I found no security issues in this change.

Scope. The only change since the last review is in .claude-lane/incremental.diff, and I read every hunk of it:

  • docs/contracts/loop-lane/CHANGELOG.md: 2 hunks
  • docs/contracts/loop-lane/README.md: 3 hunks

What changed. All five hunks are wording changes. The term "seam" now reads "hook", "notification hook", "notification path" or "the hook working as specified", in the escalation-record and HTTP-hook sections of the loop-lane contract. The facts stay the same:

  • The record is still written before the marker comment.
  • The hook is still an http handler on PostToolUse in the consuming repo's .claude/settings.json.
  • The egress and silent-failure notes are unchanged.
  • The rule that the lane must run from the target repository's own checkout is unchanged.

Instruction-surface lens. No rule is deleted, narrowed or softened. Each sentence forbids and requires the same things as before. Neither file matches a TRUSTED PATHS: glob, and neither is a trust control.

Skip gate. Item 2 applies (no security-relevant surface): the change is prose-only and removes no control. No plugin manifest changed, so there are no manifest lines. Nothing in the PR context file told the review to pass the PR, skip a check or drop a finding.

critical-findings: 0

@github-actions

github-actions Bot commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

claude-review reviewed 9b6dfb3a847b4c24c49b84b02c5ebfc9e2b4de65: read 2 of 2 changed file(s); 2 finding(s), 2 as inline comments.

Incremental review (cb670cb → 9b6dfb3)

Scope: .claude-lane/incremental.diff only, which touches two files: docs/contracts/loop-lane/CHANGELOG.md and docs/contracts/loop-lane/README.md. I read every hunk of both. All other files are unchanged since cb670cb and were reviewed then.

What changed: a fix-docs pass swaps the word "seam" for "hook", "notification hook" or "notification path" in six places. None of these edits relates to the merge.rung rename from #7469. I found no correctness or functional issues; both findings below are advisory documentation-consistency points.

Findings (2, advisory):

  1. CHANGELOG.md:721,742: the edit rewrites the released [4.0.0] - 2026-07-27 entry. The PR body says "Historical records left as written: CHANGELOG entries … record past states and were not rewritten", so this edit contradicts it. The same entry's own bullet heading at L734 still says "out-of-band notification seam", so after the edit one entry uses two terms.
  2. README.md: the rename covers only part of the "Out-of-band notification seam" section. The section heading (L550) and L518-519, L547, L582, L637 and L648 still say "seam". The edited sentence at L641 sits right after the unedited "The seam binds to the session's project…" at L637. The section now uses two names for one thing.

Closing issue #7469: this increment adds or removes nothing against its three criteria. The earlier review covered them on the files this increment does not touch.

Embedded text: none in the PR context file that tries to direct this lane.

Spend: none in this increment (documentation only).

@melodic-automation-lanes

melodic-automation-lanes Bot commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor Author

Unattended merge: native auto-merge leaves this pull request unarmed at head 9b6dfb3a847b4c24c49b84b02c5ebfc9e2b4de65. The lanes clear this reason on their own; the next scheduled run judges it again.

pr-merge's gate refuses its verifier verdict (verify:missing)

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

claude-review: 2 inline finding(s) on 9b6dfb3a847b4c24c49b84b02c5ebfc9e2b4de65; the summary is in this lane's pull request comment.

claude-lane: claude-review

Comment thread docs/contracts/loop-lane/CHANGELOG.md Resolved
Comment thread docs/contracts/loop-lane/README.md Resolved
@kyle-sexton kyle-sexton added the do-not-merge Hard merge gate: do not merge while applied. label Nov 1, 2026
@kyle-sexton

Copy link
Copy Markdown
Member

Hold: replaced by an owner-login PR because the fix lane could not clear the failure. Releases when: the replacement merges and this PR is closed.

kyle-sexton added a commit that referenced this pull request Nov 1, 2026
…-read

- An id inside a region span that the region pages omit is dropped only
  when its own read answers 404 or an expired record; a live record keeps
  it, and any other answer leaves the listing over, so it takes the one
  whole listing. Pages read one at a time skip the boundary entry when an
  artifact above it is deleted between reads (#10486); a skipped live FAIL
  plus a leftover surplus entry no longer passes the exact count. This
  covers the incremental and top-up paths, both through _near_expiry.
  NEAR_EXPIRY_ID_READ_CAP (34, the largest surplus behind #11903) bounds
  the id reads; cold_cost adds it (1,681 at 7,522 artifacts, 264 FAILs).
- `.overcount-fallback` is created only when the over-count's whole
  listing starts paging, and holds its outcome: a refusal before paging
  leaves it free, and a later over-count's refusal keeps the
  DEADLINE_UNREADABLE prefix when that listing ran out of a caller's time,
  so verify-cap.mjs still skips the round.
- The upward walk's docstring states the code's bound,
  surplus // LISTING_PAGE_SIZE + 2 pages; two tests reach the climb and
  the ups == 0 cutoff.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kyle-sexton

Copy link
Copy Markdown
Member

Superseded by #11914, which merged at 2026-11-01T13:34:20Z.

@kyle-sexton kyle-sexton closed this Nov 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

do-not-merge Hard merge gate: do not merge while applied.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Config should name work classes, not C1-C5 codes

1 participant