Skip to content

docs(skills): file-collision check + goal-prompt size discipline for plan-pr-batch#3914

Merged
justin808 merged 29 commits into
mainfrom
jg-conductor/plan-pr-batch
Jun 14, 2026
Merged

docs(skills): file-collision check + goal-prompt size discipline for plan-pr-batch#3914
justin808 merged 29 commits into
mainfrom
jg-conductor/plan-pr-batch

Conversation

@justin808

@justin808 justin808 commented Jun 11, 2026

Copy link
Copy Markdown
Member

What

Two focused improvements to the plan-pr-batch skill, updated on current main after #3977's coordination workflow landed.

  1. Require a file-touch map before fanning out parallel work. PR targets use verified target-repo refs, session-unique temporary refs, rename-aware changed-file lists, and a paginated PR Files API fallback; issue targets record proposed paths from issue/design notes, mark unknown paths as UNKNOWN, and treat unknown/colliding paths as serial.
  2. Make the goal-prompt budget measurable as an approximate byte budget with wc -c, documented wc -m locale caveats, measured-overhead guidance, terse per-item guidance, and an explicit Batch Plan path-evidence slot.

Scope

Docs-only change to .agents/skills/plan-pr-batch/SKILL.md. No CHANGELOG entry because this is internal agent tooling. This does not touch #3963-reserved docs areas.

Agent Merge Confidence

Mode: accelerated-rc (#3823)
Current head SHA: 4cc6285
Score: 9/10
Auto-merge recommendation: yes
Affected areas: plan-pr-batch skill/process docs
CI detector: script/ci-changes-detector origin/main -> documentation-only changes; recommended CI jobs none.
Validation run:

  • /Users/justin/.codex/worktrees/7e0e/react_on_rails/node_modules/.bin/prettier --check .agents/skills/plan-pr-batch/SKILL.md -> passed.
  • PATH=/tmp/lychee-v0.23.0:/Users/justin/.codex/worktrees/7e0e/react_on_rails/node_modules/.bin:$PATH lychee --config .lychee.toml .agents/skills/plan-pr-batch/SKILL.md -> passed.
  • git diff --check and git diff --check origin/main...HEAD -> passed.
  • script/ci-changes-detector origin/main -> documentation-only, no CI jobs recommended.
  • Pre-commit hooks passed through current head 4cc62859e39c42ef62381ba3d20ebaa252b5a74d.
  • Pre-push hooks passed for current head 4cc62859e39c42ef62381ba3d20ebaa252b5a74d with repo-compatible lychee on PATH.
    Review/check gate:
  • GitHub checks: complete for current head 4cc62859e39c42ef62381ba3d20ebaa252b5a74d; 12 pass / 2 skipped / 0 pending / 0 failed.
  • Skips: claude workflow rows skipped after the claude-review check completed successfully; docs-format-check skipped by the Lint JS and Ruby selector while detect-changes, build, markdown checks, and CodeQL all passed.
  • Review threads: GraphQL unresolved count is 0 for current head 4cc62859e39c42ef62381ba3d20ebaa252b5a74d.
  • Current-head reviewer verdicts: claude-review completed SUCCESS for current head; Cursor Bugbot and CodeRabbit are successful/advisory.
    Feedback triage:
  • Current-head review threads are resolved or triaged; no unresolved review debt remains.
  • Earlier review fixes added verified base/head fetch guidance, temporary-ref cleanup behavior, cross-fork ref safety, Files API fallback guards, discovery-wave sequencing, shell quoting guidance, and prompt-size measurement corrections.
    Labels: none. Documentation-only process update; path detector recommends no CI expansion.
    Known residual risk: Low; this is internal docs/process guidance, with no runtime or release artifact changes.
    Finalized by: GitHub claude-review / Claude Code Review check, completed SUCCESS for current head 4cc62859e39c42ef62381ba3d20ebaa252b5a74d in run 27513994273.

Current Readiness

Merge-ready for current head 4cc62859e39c42ef62381ba3d20ebaa252b5a74d after final live recheck: checks complete, merge state CLEAN, unresolved review-thread count 0, and no known blocker remains.


Note

Low Risk
Documentation-only internal agent skill update; no runtime, auth, or application code changes.

Overview
plan-pr-batch now requires a file-touch map before parallel fan-out, with PR paths from verified-repo git fetch + three-dot rename-aware diffs (session-unique refs/tmp/ refs, branch/OID validation, shallow deepen, cleanup) and a hardened paginated PR Files API fallback when git cannot run. Issues get paths from issue/design notes plus repo grep, with UNKNOWN forcing serial discovery lanes and collision-aware wave scheduling so only file-disjoint items run in parallel.

Output and handoff tighten: goal prompts use a ~4000-byte budget measured with wc -c, measured template overhead, terse per-item fields, path evidence in the Batch Plan with compressed but collision-safe summaries in the prompt, and new File-touch map sections in the Batch Plan format and pr-batch goal template (owned paths only, disjoint waves). Common mistakes add no path guessing, no same-path parallel worktrees, and no eyeballing prompt length.

Reviewed by Cursor Bugbot for commit 4cc6285. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitai Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

This PR tightens the plan-pr-batch skill: require a verified file-touch map to keep parallel batches file-disjoint, add the map to the Goal Prompt, mandate measuring goal-prompt character count (e.g., wc -m), and add execution rules to stop/report on file-ownership conflicts.

Changes

Stricter file-disjoint batching safety

Layer / File(s) Summary
Shape & Output: verified file-touch map and prompt-length measurement
.agents/skills/plan-pr-batch/SKILL.md
Shape mandates building a verified file-touch map (from PR diffs or issue bodies + repo grep) to ensure the first parallel batch is file-disjoint; Output requires measuring Goal Prompt length (e.g., wc -m), reserving ~2500 characters for preflight/execution rules boilerplate, and remeasuring after template edits.
Goal Prompt: include File-touch map line
.agents/skills/plan-pr-batch/SKILL.md
Adds a File-touch map section to the Goal Prompt template describing item → touched/created paths and any deferred/reserved paths with reasons.
Execution rule: stop/report on file-ownership conflicts
.agents/skills/plan-pr-batch/SKILL.md
Goal Prompt execution rules now require workers to treat parallel lanes as file-disjoint, not edit another lane’s reserved/deferred files, and to stop/report if they determine they need another lane’s file; only sequenced/dependency-ordered lanes may share declared files.
Common Mistakes: reiterate checks
.agents/skills/plan-pr-batch/SKILL.md
Reiterates avoiding parallel worktrees that touch the same file and measuring/splitting Goal Prompts that exceed 4000 characters.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related issues

Possibly related PRs

  • shakacode/react_on_rails#3792: Introduced the plan-pr-batch skill/goal-prompt template; this PR tightens that template's conflict and length rules.

Suggested labels

codex-queue

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the two main documentation changes: adding file-collision checks and enforcing goal-prompt size discipline for the plan-pr-batch skill.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jg-conductor/plan-pr-batch

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@claude

claude Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Code Review

Summary: Docs-only change to .agents/skills/plan-pr-batch/SKILL.md — adds a file-collision check to the Shape step and makes the 4000-char goal-prompt limit measurable. Both improvements are grounded in a real usage incident, tightly scoped, and consistently mirrored (Shape step → Execution rules template → Common Mistakes). No runtime code is affected.


Strengths

  • The file-touch map rule directly closes a real gap: parallel worktrees that touch the same file will conflict at merge, and the old skill had no guard against this.
  • Using wc -m instead of eyeballing is a concrete, reproducible improvement — the motivation (a 4,777-char prompt that needed several trim passes) makes the change self-documenting.
  • The three-location mirror pattern (step → template → common mistake) is consistent with the existing skill structure, so the guidance appears wherever an agent might encounter it.
  • The 5-line diff is proportionate: no scope creep, no unrelated cleanups.

Issues

1. Newly-created files are invisible to grep (line 35)

The step says "grep the repo to confirm", but if two issues both intend to create the same new file (e.g., both add docs/new-guide.md), grep returns nothing for either and they appear file-disjoint when they are not. The blind spot is small but plausible for doc-heavy batches like the one that prompted this PR.

Suggestion: add "also record files each item intends to create (from the issue body)" alongside the grep-to-confirm step.

2. The ~900-char boilerplate estimate will silently drift (line 42)

The estimate is tagged ~ so imprecision is acceptable, but there is no prompt to re-measure it when the template changes. As the Execution rules grow (the new file-disjoint guard just added ~130 chars itself), the number could mislead planners into a budget that is already too tight. A brief note such as "re-measure after template changes" or an explicit re-verification step would keep it honest.

3. Minor: "owns" is undefined in the Execution rules (line 83)

"a worker must not edit a file another item owns"

"Owns" is informal and not defined elsewhere. A planner reading this cold might not know whether ownership is established by the file-touch map, by the batch-item assignment, or by first-writer-wins. Replacing "owns" with something like "is assigned to" or "is listed in the file-touch map for" would make the constraint self-contained.


Non-issues

  • Using wc -m (characters) rather than wc -c (bytes) is correct for a character-count limit.
  • The "sequence vs. defer" choice for colliding items is left to planner judgment — that ambiguity is appropriate given the general-purpose nature of the skill.
  • No CHANGELOG entry is needed; internal agent tooling is correctly excluded.

Verdict: Ready to merge after addressing the newly-created-files blind spot (issue 1); issues 2 and 3 are minor polish. The core improvements are sound.

Comment thread .agents/skills/plan-pr-batch/SKILL.md Outdated

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.agents/skills/plan-pr-batch/SKILL.md:
- Line 42: Update the guidance text in .agents/skills/plan-pr-batch/SKILL.md
that currently says the preflight+execution-rules boilerplate costs “~900
characters”: change that estimate to ~1084 characters (round to ~1100 chars
reserved) and update the remaining budget statement so the fenced goal prompt
guidance reads that you should keep the goal under 4000 chars reserving ~1100
chars for preflight+execution-rules (leaving ~2916 chars for Worker
notes/items); keep the existing instruction to measure the actual length rather
than eyeballing it and ensure the phrasing still recommends using a
character-count check (e.g., wc -m).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: f01a5fe7-6ecc-41d7-b2c1-cfea99bef78e

📥 Commits

Reviewing files that changed from the base of the PR and between a1b7c2c and e69aac9.

📒 Files selected for processing (1)
  • .agents/skills/plan-pr-batch/SKILL.md

Comment thread .agents/skills/plan-pr-batch/SKILL.md Outdated
@greptile-apps

greptile-apps Bot commented Jun 11, 2026

Copy link
Copy Markdown

Greptile Summary

This is a focused docs-only update to .agents/skills/plan-pr-batch/SKILL.md that adds two improvements motivated by a real 9-issue batch run: a new "Build a file-touch map" step in the Shape phase to prevent parallel worktree merge conflicts, and a wc -m measurement requirement for the 4000-character goal-prompt limit.

  • File-collision guard: adds a Shape-step directive to enumerate which files each batch item touches, keep only file-disjoint items in the first parallel batch, and sequence or defer colliding items; mirrored as an Execution rules guardrail and a Common Mistake.
  • Prompt-size discipline: replaces the eye-ball-it instruction with a wc -m measurement mandate and notes that the fixed boilerplate already consumes ~900 characters — though the actual figure after this PR's new execution-rules bullet is closer to ~1050 characters.

Confidence Score: 4/5

Safe to merge — docs-only change with no runtime impact; the one finding is a minor inaccuracy in a character-count estimate.

The change is narrowly scoped to a single Markdown skill file and introduces no executable code. The only issue found is that the ~900-character boilerplate estimate is already out of date because this PR itself adds a new execution-rules bullet, pushing the real fixed cost to ~1050 characters. Agents following the guidance will still tend to overshoot the 4000-char limit, which undermines the measurement discipline the PR is trying to establish — but this is advisory documentation, so the practical impact is low.

.agents/skills/plan-pr-batch/SKILL.md — the boilerplate character estimate should be re-measured against the post-PR template before finalizing.

Important Files Changed

Filename Overview
.agents/skills/plan-pr-batch/SKILL.md Adds a file-collision check step and measurement discipline for the goal-prompt size limit; the stated boilerplate cost (~900 chars) is understated after the new execution rule is factored in (~1061 chars actual).

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Intake: collect batch members] --> B[Verify: gh pr/issue view each item]
    B --> C[Shape: filter excluded/deferred items]
    C --> D["Build file-touch map\n(new step)"]
    D --> E{Items share files?}
    E -->|No conflicts| F[Parallel first batch\nfile-disjoint items only]
    E -->|Collision / dependency| G[Sequenced sub-batch\nor defer to later batch]
    F --> H["Output: Batch Plan +\nGoal Prompt for pr-batch"]
    G --> H
    H --> I["Measure goal prompt\nwith wc -m"]
    I --> J{Under 4000 chars?}
    J -->|Yes| K[Hand fenced prompt to user\nrun $pr-batch on request]
    J -->|No| L[Split into smaller goals\noutput first ready goal only]
Loading

Reviews (1): Last reviewed commit: "docs(skills): add file-collision check a..." | Re-trigger Greptile

Comment thread .agents/skills/plan-pr-batch/SKILL.md
@claude

claude Bot commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

Code Review — PR #3914

docs(skills): file-collision check + goal-prompt size discipline for plan-pr-batch

Overview

A focused, well-scoped docs-only update to .agents/skills/plan-pr-batch/SKILL.md. The two improvements are complementary and address real operational failure modes: worktree merge conflicts from same-file parallel fan-out, and goal prompts that silently exceed the 4000-char limit. Overall this is a solid improvement.

Correctness Issues

Boilerplate budget discrepancy (line 58)
The updated text instructs planners to "Reserve ~2300 characters for the preflight and execution-rules boilerplate," but the PR body's own measurement puts the same boilerplate at ~2440 characters — a 140-char gap. After the new file-disjoint execution rule added by this PR (~450 chars), actual fixed boilerplate is now closer to 2440 chars. Planners who follow the 2300-char guidance will believe they have ~1700 chars of content space but actually have only ~1560. Worth correcting to ~2440 (or "~2500 to be safe") so the reservation matches reality.

Issue-target new-file gap (line 51)
The file-touch map guidance for issue targets says "read the issue body and grep the repo to confirm existing paths." Grepping only finds files that already exist; it misses files the issue intends to create. The opening sentence already says to list "the files it intends to create," but the per-target method for issues doesn't surface those. Adding something like "record intended-create paths from the issue description or design notes" would close the gap.

File-touch map template ambiguous for multi-item batches (line 87)
The template line File-touch map: PR/Issue #N -> touched/created paths; deferred/reserved paths -> reason. reads as a single-item example. It is unclear whether multiple items each get their own line or are semicolon-separated. A brief two-item example (or an "one line per item" note) would prevent inconsistency across planners.

Style / Readability

The new bullets on lines 51 and 102 are notably long (~500 and ~450 chars respectively). The surrounding text wraps at 80–100 chars. This is not a correctness issue, but they are harder to scan in editors and diffs. Splitting each into two shorter bullets would match the document's existing style.

Summary

The core logic is correct and the additions close real gaps. The main actionable item before merge is the 2300 vs ~2440 boilerplate budget discrepancy — that is the one number planners will rely on when sizing goal prompts, and having it understated means prompts will routinely slip past the 4000-char cap.

Comment thread .agents/skills/plan-pr-batch/SKILL.md Outdated
Comment thread .agents/skills/plan-pr-batch/SKILL.md Outdated
Comment thread .agents/skills/plan-pr-batch/SKILL.md Outdated
@justin808 justin808 force-pushed the jg-conductor/plan-pr-batch branch from 0f16026 to b3fd6b7 Compare June 13, 2026 21:57
@claude

claude Bot commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

Code Review: docs(skills): file-collision check + goal-prompt size discipline for plan-pr-batch

Summary: Solid docs-only improvement. Both goals — preventing parallel worktree conflicts and enforcing a measurable prompt-size cap — are real operational problems. The approach is sound. A few issues worth addressing before merge.


Issues

1. Boilerplate budget number is inconsistent

Three different numbers appear across the PR:

  • PR body: "reserves about 2300 characters for the current preflight plus execution-rules boilerplate"
  • PR body: "fixed preflight plus execution-rules boilerplate is about 2440 characters"
  • SKILL.md (line 58): "Reserve ~2500 characters for the preflight and execution-rules boilerplate"

The authoritative number (2500) is in the skill itself, but the PR description's conflicting figures (2300 and 2440) undermine confidence in the estimate. This also reveals a tight arithmetic issue: if fixed boilerplate is ~2440 chars and the file-touch map is also inside the goal prompt template, the remaining budget for variable content across 8–10 items is roughly 1,500 chars — about 150–190 chars per item (URL + Goal + Worker notes + Done when). That's achievable with terse writing, but a per-item budget hint (e.g. "target ~150 chars per item") would make the constraint actionable.

2. "Selected owner lane" is undefined in the execution rule

Line 102 says: "the selected owner lane may edit its declared files even when a later deferred item will also need them." A worker agent reading this execution rule has no mechanism to determine which lane is the "selected owner" without referring back to the File-touch map. The rule should explicitly direct workers to consult the map: e.g. "the lane listed as owner in the File-touch map for that path".

3. File-touch map template format is ambiguous

Line 87 conflates two distinct concepts in a single-line format description:

  • Per-item rows: PR/Issue #N -> touched/created paths
  • A deferred block: deferred/reserved paths -> reason

It is unclear whether deferred paths are a separate footer line, interspersed with item lines, or part of each item's row. A concrete two-or-three-item example (including one deferred entry) would resolve the ambiguity without adding many characters.

4. Shape bullet (line 51) is a wall of text

The new file-touch-map bullet is a single 280-word sentence chain. Consider sub-bullets:

   - Build a file-touch map for the batch:
     - For PR targets: use `gh pr diff <PR> --name-only` or the Files API for each target PR's actual changed-file list.
     - For issue targets: read the issue body, record proposed new paths from design notes, and grep the repo to confirm existing paths. Do not guess.
     - Items that touch the same file (including creating the same new path) cannot run as parallel worktrees — they will conflict at merge.
     - Keep only file-disjoint items in the parallel first batch; group colliding or dependency-ordered items into one sequenced sub-batch, or defer them to a later batch.

Minor observations

  • Common Mistakes duplication: Lines 129–130 largely restate guidance already in the Shape and Output sections. They are appropriate as a checklist reminder, but each could be one sentence shorter by cutting the explanatory clause (which already appears above).
  • wc -m vs wc -c: wc -m counts Unicode code points (correct for a character budget); wc -c counts bytes. For ASCII-heavy prompts the difference is negligible, but a brief note that wc -m is preferred over wc -c would prevent the occasional mistake.

Verdict

The two functional additions (file-touch map requirement, measured prompt length) are the right calls. The main actionable issue is the undefined "owner" concept in the execution rule — a worker agent cannot reliably follow that rule as currently written. The budget inconsistency and template format ambiguity are lower priority but worth a quick pass before merge.

Comment thread .agents/skills/plan-pr-batch/SKILL.md Outdated
Comment thread .agents/skills/plan-pr-batch/SKILL.md Outdated
Comment thread .agents/skills/plan-pr-batch/SKILL.md Outdated
@justin808 justin808 force-pushed the jg-conductor/plan-pr-batch branch from b3fd6b7 to 0b07567 Compare June 13, 2026 22:10
@claude

claude Bot commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

Review: docs(skills): file-collision check + goal-prompt size discipline

Documentation-only update to .agents/skills/plan-pr-batch/SKILL.md. Both additions address real operational problems — parallel worktree merge conflicts and drift from the 4 000-character goal-prompt budget. The guidance is generally sound and actionable.

Strengths

  • File-touch map requirement directly prevents the parallel-worktree merge-conflict class of errors that pr-batch workers encounter in practice.
  • PR vs. issue split (gh pr diff --name-only vs. grep-based inference) is a useful concrete distinction.
  • "Do not guess" reinforced by mirroring the rule in Common Mistakes — good repetition for an instruction set that agents read under context pressure.
  • wc -m is machine-verifiable; better than the prior "keep it short" guidance.
  • Owner-exemption logic for deferred paths is well-reasoned and avoids over-blocking.

Issues

"Files API" is underspecified (line 51)
"the Files API" could refer to the GitHub REST API, the GraphQL API, or something else. A concrete reference such as gh api repos/{owner}/{repo}/pulls/{number}/files or simply gh pr view <PR> --json files would be unambiguous.

No fallback for issues with wholly unknown paths (line 51)
For exploratory or greenfield issues the body may not name any existing paths, and "Do not guess" leaves planners without a fallback. Recommend adding: "If paths cannot be determined from the issue body or design notes, record them as UNKNOWN in the file-touch map and treat the item as serial rather than parallel."

Boilerplate character-count estimate may already be stale (line 58)
Line 58 tells planners to reserve ~2 500 characters for the preflight and execution-rules boilerplate. But the additions in this very PR (the file-touch map section + the new ~440-character execution rule) increase the fixed template. The PR description cites ~2 440 chars before these changes; running wc -m on just the fenced template block now would give a more accurate anchor for planners to use when budgeting.

Long run-on bullets reduce readability (lines 51, 104)
Both the new file-touch map instruction (~390 chars) and the new file-disjoint execution rule (~440 chars) are single prose bullets significantly longer than anything else in the file. The rest of the file uses shorter, scannable bullets. Breaking each into 2–3 sub-bullets would align with the surrounding style and make the rules easier to parse under context pressure.

Comment thread .agents/skills/plan-pr-batch/SKILL.md Outdated
Comment thread .agents/skills/plan-pr-batch/SKILL.md Outdated
Comment thread .agents/skills/plan-pr-batch/SKILL.md Outdated

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.agents/skills/plan-pr-batch/SKILL.md:
- Around line 87-89: Summary: The file-touch map is too narrow by documenting
only "touched/created paths" and should instead document a generic "changed
paths" list so delete/rename-only items are included in collision checks. Fix:
update the SKILL documentation text that currently shows "touched/created paths"
to describe and show a generic "changed paths" (or "changed/affected paths")
list used by the Shape step and disjointness check; replace examples and any
bullet entries that reference "touched/created" with the new wording and include
deletes/renames as examples so the disjointness check logic (as described) will
not skip those cases.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 5a23c933-386d-4d93-9981-27cb509f56f5

📥 Commits

Reviewing files that changed from the base of the PR and between b3fd6b7 and 0b07567.

📒 Files selected for processing (1)
  • .agents/skills/plan-pr-batch/SKILL.md

Comment thread .agents/skills/plan-pr-batch/SKILL.md Outdated
@justin808 justin808 force-pushed the jg-conductor/plan-pr-batch branch from 0b07567 to c486b73 Compare June 13, 2026 22:44

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c486b732bd

ℹ️ 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".

Comment thread .agents/skills/plan-pr-batch/SKILL.md Outdated
@claude

claude Bot commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

Code Review - PR 3914: plan-pr-batch file-collision + prompt-size discipline

Overall: Well-scoped docs-only improvement. Two substantive findings below.

Finding 1: Character budget figure is misleading (line 68)

The text says Reserve ~2800 characters for preflight and execution-rules boilerplate. But the PR body itself states the actual fixed boilerplate is ~2440-2465 characters; the 2780/2800 figure is the full template skeleton (boilerplate + placeholder item fields combined). Using 2800 as the boilerplate reservation leaves planners thinking only ~1200 characters remain for item content, when the real headroom is ~1535 characters (4000 - 2465). This risks unnecessary prompt splitting.

Suggested fix: say reserve ~2500 chars for boilerplate (matching the actual measured value), or call it template skeleton to match the PR description.

Finding 2: gh pr view --json files requires a follow-up extraction (line 54)

The files JSON field returns an array of objects, not a flat path list. A planner copy-pasting this command will not get usable paths without a jq extraction step. The already-shown gh pr diff --name-only is simpler and more direct. Consider preferring it, or showing the complete pipeline: gh pr view PR --json files --jq [.files[].path]

Minor: File-touch map template line is verbose (lines 97-99)

The placeholder PR/Issue #N -> changed/affected paths, including create/delete/rename (owner: lane/name) is instructional prose rather than a compact example. A terse concrete example would serve better: #123 -> lib/foo.rb, app/bar.rb (owner: lane-a)

No blocking issues. Finding 1 is the most likely to cause real planner confusion.

Comment thread .agents/skills/plan-pr-batch/SKILL.md Outdated
Comment thread .agents/skills/plan-pr-batch/SKILL.md Outdated
@justin808 justin808 force-pushed the jg-conductor/plan-pr-batch branch from c486b73 to 23b256b Compare June 13, 2026 23:05
@claude

claude Bot commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

Code Review: docs(skills): file-collision check + goal-prompt size discipline for plan-pr-batch

Summary: Docs-only change to .agents/skills/plan-pr-batch/SKILL.md adding two focused improvements: a mandatory file-touch map before parallel fan-out, and measurable enforcement of the 4000-character goal-prompt cap. No runtime or application code is affected.


What Works Well

  • File-touch map requirement is a high-value safety addition. Mandating rename-aware changed-file lists (paginated PR Files API with .previous_filename, or git diff --name-status --find-renames) specifically addresses the failure mode where old-path-only lists produce false negatives for collision detection.
  • UNKNOWN + serial treatment for unverifiable issue paths is the right default — fail-safe over fail-open.
  • wc -m mandate turns an eyeball estimate into a verifiable gate. The dual enforcement (step 4 and Common Mistakes) reinforces it.
  • "Do not guess" is unambiguous and correctly placed adjacent to the UNKNOWN handling.
  • The new Common Mistakes bullets directly mirror the two new mechanisms, which is good documentation hygiene.

Issues

Minor

1. ~2800 character reserve is a point-in-time snapshot (line 71)
The guidance says "Reserve ~2800 characters for fixed template sections" and "remeasure after template changes" — but the figure itself will silently drift as the template evolves. Anyone who forgets to remeasure will use a stale reserve, undermining the measurability improvement. Consider pinning it to a commit or adding an inline note like # last measured at <sha> so staleness is detectable.

2. Double-arrow format for deferred paths is ambiguous (line 102)
- Deferred/reserved paths -> path(s) -> reason / later owner uses -> as two different separators in one entry (item → paths → reason), while PR/Issue entries use a single -> (item → paths). An agent following this pattern literally may produce inconsistent maps or misparse the meaning. A clearer separator (e.g. : for the reason) or a two-field entry would remove the ambiguity.

3. Nested sub-bullets inside the execution rule block (lines 117–125)
The new file-disjoint rule introduces nested - sub-bullets with 2-space indent inside a flat - list where all other rules are single-level. This is stylistically inconsistent. Not wrong in content, but an LLM reading the execution rules section might apply sub-bullets selectively. Folding the sub-bullet content into prose on the parent bullet (as the other multi-line rules do) would keep the list uniform.


Not an Issue (but worth noting)

The PR body notes --no-verify was required to bypass the pre-push hook due to local Lychee version incompatibility. The validated-by-compatible-binary approach (Lychee v0.23.0 in a sibling worktree) is reasonable for a docs-only change, but maintainers should be aware.


Verdict: The changes are correct, well-scoped, and address real coordination risks. The issues above are minor — issue #2 (double-arrow format) carries the most practical risk since an agent misreading the template format could silently misroute deferred paths.

Comment thread .agents/skills/plan-pr-batch/SKILL.md
@claude

claude Bot commented Jun 14, 2026

Copy link
Copy Markdown
Contributor

Code Review — plan-pr-batch skill docs

Overall: Solid, well-reasoned documentation update. The file-touch map requirement closes a real correctness gap (parallel worktrees silently conflicting on shared paths), and the wc -c byte-budget guidance is a practical improvement over eyeballing. The security chain (treat branch names as untrusted → validate → pass as argument arrays → never shell-interpolate) is the right instinct throughout.

Three issues flagged inline:

  1. Shell injection in validation examples (lines 68–70) — the git check-ref-format "refs/heads/$baseRefName" examples show untrusted data being interpolated into a shell string, which is the very injection vector they're meant to guard against. The surrounding text recommends argument arrays, but the examples should demonstrate that too.

  2. git fetch --deepen refspec gap (lines 95–98) — git fetch --deepen=200 <url> with no refspec is a no-op in a detached/non-tracking context. The base branch refspec should be specified so history for the relevant branch is actually deepened. Also worth spelling out that the retry diff uses the same --find-renames flag.

  3. --paginate + per_page=100 interaction note (line 115) — minor clarification comment only; the command is correct as written.

No security or correctness blockers for this docs-only change. The two substantive issues above are worth addressing before merge to avoid misleading future readers.

@claude

claude Bot commented Jun 14, 2026

Copy link
Copy Markdown
Contributor

Adversarial PR Review — #3914

Scope: Docs-only change to .agents/skills/plan-pr-batch/SKILL.md. No runtime, auth, or application code is affected.


DISCUSS

1. PR body Agent Merge Confidence block is stale
The block's "Current head SHA" field shows 69d1bdc7f0a94ca8ed80eb93d2882d2630a697fa, but the PR's actual headRefOid is fb37969c41721aec1b1561df95f75a6a68cd272c. The block was not refreshed after the latest push. The "Not merge-ready yet" statement and the confidence score (7/10, checks pending) describe a state that no longer reflects the PR head. The block should be refreshed — or its readiness statement explicitly superseded — before merging.

2. CodeRabbit review is paused and stale
CodeRabbit auto-paused due to active development. Its walkthrough describes wc -m as the new measurement tool, which contradicts the final diff (the PR correctly landed on wc -c). The summary does not reflect the current PR state. A @coderabbitai review trigger is needed before treating CodeRabbit output as a meaningful check for this head.


FOLLOWUP

3. git fetch <url> <sha>:ref portability (see inline comment)
Raw-SHA refspecs are supported by GitHub's v2 protocol for reachable commits, but are not universally portable across all git client versions. The API fallback chain already handles failure gracefully; a brief caveat in the docs would improve reliability for agents in minimal environments.

4. Redundant --method GET in gh api example (see inline comment)
gh api defaults to GET; the explicit flag is harmless but noisy in example code.


NON_BLOCKING_DECISION

  • No CHANGELOG entry: Consistent with the project's practice for internal skill/process updates. Reasonable.
  • wc -c over wc -m: The change from "4000 characters" to "~4000 bytes, measured with wc -c" is technically accurate. wc -c is locale-independent; wc -m is not. The explanation in the new text is correct.

Overall

No runtime, security, or compatibility risk. The two DISCUSS items (stale PR body SHA block; stale CodeRabbit summary) should be resolved before merging. The FOLLOWUP items are optional improvements.

Comment thread .agents/skills/plan-pr-batch/SKILL.md
API response is capped, incomplete, or unavailable. Use the API as the
scheduling source only when the local diff cannot run. Run the API
pipeline in one shell invocation with `pipefail` enabled, for example
`bash -o pipefail -c 'gh api --paginate --method GET "repos/OWNER/REPO/pulls/N/files?per_page=100" | jq -s "add // []"'`;

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.

FOLLOWUP — redundant --method GET

gh api defaults to GET; the explicit flag is harmless but adds noise to example commands that agents may copy verbatim.

Suggested change
`bash -o pipefail -c 'gh api --paginate --method GET "repos/OWNER/REPO/pulls/N/files?per_page=100" | jq -s "add // []"'`;
`bash -o pipefail -c 'gh api --paginate "repos/OWNER/REPO/pulls/N/files?per_page=100" | jq -s "add // []"'`;
```"
<parameter name="confirmed">true

@claude

claude Bot commented Jun 14, 2026

Copy link
Copy Markdown
Contributor

Review: docs(skills) — file-collision check + goal-prompt size discipline

Overall this is a solid, security-conscious documentation update. The attention to shell-injection prevention (argument validation, refspec quoting, pipefail), fallback sequencing, and parallel-wave collision avoidance is thorough. A few technical accuracy and robustness notes below.

Summary of findings

  1. Minor — SHA OID validation: ^[0-9a-f]{40}$ is hard-coded SHA-1; would silently reject future SHA-256 (64-char) OIDs from GitHub. The caveat is noted but a forward-compatible pattern would be safer.
  2. Nit — check-ref-format + colon pre-check: The explicit : rejection before git check-ref-format --branch is redundant — check-ref-format --branch already rejects colons per the manpage. Keeping both is harmless but adds noise.
  3. Minor — changedFiles re-read timing: The single re-read for metadata lag has no delay guidance. A fresh push can leave GitHub metadata stale for several seconds, so an immediate re-read may still observe the old value. A 3–5 s sleep before re-reading would improve reliability.
  4. Minor — parallel discovery lanes: The spec prohibits concurrent discovery with active editor lanes but does not address whether multiple UNKNOWN discovery lanes may run concurrently with each other. If they can, the wave rules should say so; if not, call it out explicitly to avoid ambiguity.
  5. Nit — openssl rand -hex 4 entropy: 32 bits (8 hex chars) is fine in practice, but hex 6 (48 bits) costs nothing and removes any birthday-paradox concern for high-concurrency CI loops that plan the same PR repeatedly.

No blocking issues — the new collision-detection logic and byte-budget discipline are valuable additions. See inline comments for specifics.

`headRefName` with a fully qualified source ref
(`refs/heads/<headRefName>:refs/tmp/pr-N-<session-id>-head`). If
`headRefName` validation fails or the branch ref is unavailable, validate
`headRefOid` as the full 40-character lowercase hexadecimal SHA-1 object ID

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.

The OID validation pattern ^[0-9a-f]{40}$ is hard-coded for SHA-1 (40 hex chars). GitHub is actively researching SHA-256 object storage (64 hex chars); if the OID length ever changes, this check silently rejects valid OIDs without falling back correctly.

The mitigation caveat ("If GitHub changes the repository hash format, update this validation…") is present, but reactive. A slightly more forward-compatible pattern would be:

Suggested change
`headRefOid` as the full 40-character lowercase hexadecimal SHA-1 object ID
`headRefOid` as a lowercase hexadecimal SHA object ID GitHub returns
today (40 characters for SHA-1; validate with `^[0-9a-f]{40}$` or
`^[0-9a-f]{40,64}$` to tolerate a future SHA-256 transition), and try an OID fetch

Using ^[0-9a-f]{40,64}$ accepts both SHA-1 and SHA-256 without any additional maintenance burden, while still rejecting obviously malformed values.

Comment on lines +67 to +71
Treat `baseRefName` and `headRefName` as untrusted shell and refspec data.
Validate each branch name with Git's branch-name rules using an
argument-array API equivalent to
`["git", "check-ref-format", "--branch", baseRefName]` and
`["git", "check-ref-format", "--branch", headRefName]`, and reject any

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.

The explicit : rejection is redundant with git check-ref-format --branch. From the manpage:

Branch names must not contain : (colon)

So git check-ref-format --branch "$baseRefName" already returns non-zero for any name containing :. Having both checks is harmless but adds noise and could mislead a reader into thinking the colon check catches something check-ref-format would miss.

Suggest removing the : pre-check and keeping only the check-ref-format validation, or at minimum adding a note that the colon check is an early-exit optimisation, not an additional gate.

Comment on lines +141 to +143
is missing
`.previous_filename`, record the PR paths as `UNKNOWN` and treat the item
as serial. If the paginated count differs from `changedFiles` in either

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.

The re-read to handle "transient metadata lag" has no delay before it fires. GitHub's changedFiles count can lag the actual PR state by a few seconds after a fresh push, so an immediate re-read may still return the stale value.

Consider adding a short wait (e.g. 3–5 s) before the re-read:

If the paginated count differs from `changedFiles` in either direction,
wait 5 s and re-read `changedFiles` once (one retry only) before recording
`UNKNOWN`; the delay gives GitHub time to settle metadata for freshly pushed PRs.

Without any delay, the "one re-read" retry may be a no-op for pushes made within the last few seconds.

Comment on lines +155 to +163
parallel first batch and sequence or defer collisions. A directory rename
reserves descendants under both the old and new directory names, so any
create/delete/edit under either tree collides with that rename. An `UNKNOWN`
item runs as a serial "discovery lane" — a lane that first determines its
real paths instead of editing in parallel. Never run discovery lanes
concurrently with active editor lanes. For items already in the scheduling
set, complete discovery before the editor wave starts. If the coordinator
adds items after an editor wave has already started, wait for that wave to
finish before starting discovery for those new items. A collision

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.

The scheduling rule says "Never run discovery lanes concurrently with active editor lanes," which clearly prevents a discovery lane from racing an edit. However, it does not say whether multiple UNKNOWN discovery lanes may run concurrently with each other.

If concurrent discovery is allowed (since they haven't identified their paths yet and therefore can't be proven disjoint), the rule should say so explicitly. If it isn't (because discovery itself might write stub files or claim paths), it should say that too.

Suggested addition to clarify:

An `UNKNOWN` item runs as a serial "discovery lane" — a lane that first
determines its real paths instead of editing in parallel. Multiple discovery
lanes may run concurrently with each other (they do not edit files), but
never concurrently with active editor lanes.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4cc62859e3

ℹ️ 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".


- File-touch map, PR path discovery: get refs from the verified target repo
with
`gh pr view N --repo OWNER/REPO --json baseRefName,headRefName,headRepository,headRepositoryOwner`,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Request headRefOid before the OID fetch fallback

When the target repo pull ref is unavailable and the head branch cannot be fetched, the later OID fallback depends on headRefOid, but this metadata command does not request it. The gh pr view manual lists headRefOid as a separate --json field, so planners following this flow will not have the value needed for the documented OID fetch and can unnecessarily fall through to API/UNKNOWN handling for deleted or renamed fork branches; include headRefOid here or add an explicit second gh pr view before using it.

Useful? React with 👍 / 👎.


- File-touch map, PR path discovery: get refs from the verified target repo
with
`gh pr view N --repo OWNER/REPO --json baseRefName,headRefName,headRepository,headRepositoryOwner`,

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.

headRepositoryOwner is fetched here but never explicitly referenced in any subsequent step — headRepository.nameWithOwner already encodes the owner. Either use headRepositoryOwner in the fallback logic (e.g., to construct the fork clone URL as https://github.com/<headRepositoryOwner.login>/<headRepository.name>.git) or drop it from the JSON query to avoid confusing planners about its intended role.

Comment on lines +83 to +85
repository URL derived from `headRepository.nameWithOwner` and
`headRefName` with a fully qualified source ref
(`refs/heads/<headRefName>:refs/tmp/pr-N-<session-id>-head`). If

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.

Edge case not covered: if the source fork was deleted, GitHub sets headRepository to null, making headRepository.nameWithOwner a null-dereference. The doc should instruct planners to check headRepository != null before attempting this fallback, and fall through to the OID fetch or PR Files API if it is null.

Comment on lines +87 to +93
`headRefOid` as the full 40-character lowercase hexadecimal SHA-1 object ID
GitHub returns today, for example `^[0-9a-f]{40}$`, and try an OID fetch
from the verified head repository URL
(`<headRefOid>:refs/tmp/pr-N-<session-id>-head`) before using the PR Files
API fallback. Treat an OID fetch rejection as an expected portability
outcome on older Git clients or servers that do not advertise reachable SHA
fetch support, not as a planner setup failure. If GitHub changes the

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.

The forward-compatibility note ("If GitHub changes the repository hash format, update this validation") is good but leaves planners with no path forward when they actually encounter a different OID. Consider making this actionable:

If the OID from the API response is 64 lowercase hex characters, validate against ^[0-9a-f]{64}$ and proceed with the longer OID — Git's SHA-256 transition uses 64-char hex. Any other length is invalid; fall back to the PR Files API.

This avoids a hard stop the next time a host enables SHA-256 object storage.

Comment on lines +146 to +150
as serial. If the paginated count differs from `changedFiles` in either
direction, re-read `changedFiles` once before recording `UNKNOWN` so freshly
pushed PRs do not fail the sanity check on transient metadata lag. If counts
still diverge after the re-read, record paths as `UNKNOWN` and treat the
item as serial; note any known submodule or binary-file count mismatch in

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.

An immediate re-read of changedFiles can return the same stale value — GitHub's metadata replication lag is typically a few seconds, not sub-second. The guidance should say "wait a few seconds (e.g., sleep 3) before the single re-read" so the retry has a realistic chance of seeing the updated count. Without a delay, the one-shot retry offers little real protection against transient lag.

Comment on lines +161 to +169
item runs as a serial "discovery lane" — a lane that first determines its
real paths instead of editing in parallel. Never run discovery lanes
concurrently with active editor lanes. For items already in the scheduling
set, complete discovery before the editor wave starts. If the coordinator
adds items after an editor wave has already started, wait for that wave to
finish before starting discovery for those new items. A collision
discovered mid-flight cannot safely redirect an active editor lane; the
coordinator would have to abort the wave, release claims, and restart it,
which is worse than waiting.

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.

"Never run discovery lanes concurrently with active editor lanes" is the right safety rule, but "active" is ambiguous. An editor lane that has already pushed its branch and is waiting for CI/review is no longer touching the worktree, yet it still holds an agent-coord claim. Does it block discovery?

Suggest clarifying: "active" means the lane holds a live agent-coord claim (i.e., has not emitted a terminal heartbeat status like done, failed, or skipped). A lane that has pushed and is only waiting for CI review would typically still hold its claim and therefore still counts as active for serialization purposes.

@claude

claude Bot commented Jun 14, 2026

Copy link
Copy Markdown
Contributor

Code Review

Documentation-only change to .agents/skills/plan-pr-batch/SKILL.md.

What's strong here

  • The git-based path discovery approach (session-unique refs/tmp/ refs, three-dot merge-base diff, argument-array API to avoid shell injection) is the right design and handles the hard cases (shallow clones, cross-fork heads, OID fallback) in a principled order.
  • pipefail on the API pipeline invocation correctly catches mid-pipe failures that would otherwise silently produce an empty result.
  • The wc -c vs wc -m clarification is accurate and useful — locale-dependent character counting is a real footgun.
  • The wave-scheduling rules (file-disjoint first wave, UNKNOWN → serial discovery lane, directory-rename reservation) are logically sound.
  • The Common Mistakes additions are direct and non-redundant.

Issues flagged via inline comments

Five inline comments posted; brief summary:

  1. headRepositoryOwner fetched but unused (line 59) — either wire it into the fallback URL construction or drop it to avoid confusion.
  2. Deleted-fork null headRepository (lines 83–85) — headRepository.nameWithOwner will throw a null-dereference if the fork was deleted; needs an explicit guard.
  3. SHA-256 OID forward-compatibility (lines 87–93) — the "update before accepting a different OID length" note leaves planners stuck; suggest adding actionable guidance (64-char hex → SHA-256 path).
  4. changedFiles re-read without a delay (lines 146–150) — an immediate retry offers no protection against GitHub's metadata replication lag; sleep 3 before the one-shot re-read makes the intent real.
  5. "Active editor lane" definition (lines 161–169) — ambiguous whether a lane that has pushed and is awaiting CI still counts as active; tie the definition to agent-coord claim liveness (no terminal heartbeat status yet).

Minor observations (not blocking)

  • openssl rand -hex 4 gives 32 bits of entropy (8 hex chars). Collisions are negligible for typical batch sizes but if this skill is ever used in high-concurrency CI (100+ concurrent planners for the same PR number), rand -hex 8 would be a safer floor with zero cost.
  • The "periodic sweep" for stale refs/tmp/pr-* refs is described but not triggered anywhere — consider noting a simple trigger condition such as "at planner startup" or "when a new batch session begins".

Overall the design is solid and the security reasoning (untrusted branch names, argument arrays, verified repo URL) is exactly right. The five inline issues are the only things I'd want addressed before merge.

@justin808 justin808 merged commit 5abe360 into main Jun 14, 2026
25 checks passed
@justin808 justin808 deleted the jg-conductor/plan-pr-batch branch June 14, 2026 23:35
justin808 added a commit that referenced this pull request Jun 15, 2026
…c-streaming

* origin/main:
  Keep plan-pr-batch goal prompts under 4000 chars (#4025)
  docs(skills): file-collision check + goal-prompt size discipline for plan-pr-batch (#3914)
  Verify React 19.2 <Activity> with react_component (CSR + SSR-hydrate) + docs (#3938)
  Allow Pro RSC peer check for React 19.2 (#4026)
justin808 added a commit that referenced this pull request Jun 15, 2026
…e-demo-cost-docs

* origin/main:
  Add RSC FOUC acceptance coverage (#4033)
  Keep plan-pr-batch goal prompts under 4000 chars (#4025)
  docs(skills): file-collision check + goal-prompt size discipline for plan-pr-batch (#3914)
  Verify React 19.2 <Activity> with react_component (CSR + SSR-hydrate) + docs (#3938)
  Allow Pro RSC peer check for React 19.2 (#4026)
  Split llms-full.txt into OSS and Pro tiers to clear the 2048 KiB gate (#4021)
  Codify maintainer attention contract (#3987)
  Docs: correct vm.Script caching analysis caveats (#3997)
  CI: handle unavailable PR head repo for +ci-run-full (#3986)
  Fix Pro dummy lockfile drift and rich text demo (#3989)
  Add FOUC integration tests for generated CSS (#4005)
  Make per-PR benchmarks opt-in and trim per-route warm-up (#4012) (#4013)
  Treat docs-internal/ tree as documentation in CI change detection (#4016)
  Add issue triage prompt skill (#3983)
  Point coordination docs at agent-coord bootstrap (#4008)
  Docs: backfill async RSC manifest changelog entry (#3993)
  Migrate conductor.json to .conductor/settings.toml (#4007)
  Bump react-hooks lint to v6 and document RSC compiler boundary (#3963)
justin808 added a commit that referenced this pull request Jun 15, 2026
* origin/main:
  Expose React 19 root error callbacks (rootErrorHandlers) + hydration-mismatch debugging guide (#3933)
  Add post-merge audit scope resolver (#4029)
  Document continuous agent-run evaluation loop (#4028)
  Tools: add PR batch merge ledger (#3996)
  Add RSC FOUC acceptance coverage (#4033)
  Keep plan-pr-batch goal prompts under 4000 chars (#4025)
  docs(skills): file-collision check + goal-prompt size discipline for plan-pr-batch (#3914)
  Verify React 19.2 <Activity> with react_component (CSR + SSR-hydrate) + docs (#3938)

# Conflicts:
#	llms-full.txt
justin808 added a commit that referenced this pull request Jun 15, 2026
* origin/main:
  Expose React 19 root error callbacks (rootErrorHandlers) + hydration-mismatch debugging guide (#3933)
  Add post-merge audit scope resolver (#4029)
  Document continuous agent-run evaluation loop (#4028)
  Tools: add PR batch merge ledger (#3996)
  Add RSC FOUC acceptance coverage (#4033)
  Keep plan-pr-batch goal prompts under 4000 chars (#4025)
  docs(skills): file-collision check + goal-prompt size discipline for plan-pr-batch (#3914)
  Verify React 19.2 <Activity> with react_component (CSR + SSR-hydrate) + docs (#3938)

# Conflicts:
#	CHANGELOG.md
#	llms-full.txt
justin808 added a commit that referenced this pull request Jun 15, 2026
…ter-slice

* origin/main:
  Expose React 19 root error callbacks (rootErrorHandlers) + hydration-mismatch debugging guide (#3933)
  Add post-merge audit scope resolver (#4029)
  Document continuous agent-run evaluation loop (#4028)
  Tools: add PR batch merge ledger (#3996)
  Add RSC FOUC acceptance coverage (#4033)
  Keep plan-pr-batch goal prompts under 4000 chars (#4025)
  docs(skills): file-collision check + goal-prompt size discipline for plan-pr-batch (#3914)
  Verify React 19.2 <Activity> with react_component (CSR + SSR-hydrate) + docs (#3938)

# Conflicts:
#	llms-full.txt
justin808 added a commit that referenced this pull request Jun 15, 2026
…ce-maps

* origin/main:
  Expose React 19 root error callbacks (rootErrorHandlers) + hydration-mismatch debugging guide (#3933)
  Add post-merge audit scope resolver (#4029)
  Document continuous agent-run evaluation loop (#4028)
  Tools: add PR batch merge ledger (#3996)
  Add RSC FOUC acceptance coverage (#4033)
  Keep plan-pr-batch goal prompts under 4000 chars (#4025)
  docs(skills): file-collision check + goal-prompt size discipline for plan-pr-batch (#3914)
  Verify React 19.2 <Activity> with react_component (CSR + SSR-hydrate) + docs (#3938)

# Conflicts:
#	llms-full.txt
justin808 added a commit that referenced this pull request Jun 18, 2026
## Summary

- Add a lockfile content-diff handoff contract for
workflow/build/dependency/lockfile gate changes.
- Require sibling-lock comparison, rationale, and platform/source-build
or build-time dependency notes when committed lockfiles change.
- Add closing-evidence routing for investigation/benchmark conclusions
so `close` and `document/work around` outcomes require reproducible
artifacts or explicit caveats.
- Keep workflow mirrors aligned while pointing broad gates back to the
canonical skill text to avoid future drift.

## Issue Disposition

- #3908: implemented process gate for lockfile content-diff evidence in
`pr-batch`, `pr-processing`, `post-merge-audit`, and `address-review`
triage.
- #3910: implemented close-evidence gate in `evaluate-issue`,
`pr-processing`, and `post-merge-audit`; workflow entry points either
carry the gate at the correct decision point or point back to canonical
SKILL text.
- #3980/#3997: analysis overlap was removed during rebase. This PR no
longer changes `analysis/vm-script-caching-investigation-2026-06-07.md`.
- #3982/#3993: changelog backfill remains handled by merged PR #3993.
This PR does not touch `CHANGELOG.md`.

Refs #3908, #3910. Related #3980/#3997 and #3982/#3993.

## Release/Readiness Evidence

Release mode: accelerated-rc from release gate #3823.

Current head SHA: `3dc5b426078bd4c2230e8ce4d23a6a44a0934389`.

Checks:
- Current-head GitHub checks completed for
`3dc5b426078bd4c2230e8ce4d23a6a44a0934389`; no failures.
- `script/ci-changes-detector origin/main` -> documentation-only;
recommended CI jobs: none.

Review-thread status:
- GraphQL unresolved review threads: 1. Current unresolved thread:
#3985 (comment)
notes that the `step 4d` label in `.agents/workflows/pr-processing.md`
does not exist in the referenced SKILL.

Feedback triage:
- Rebased onto current `origin/main` after #3914, #3987, #3997, and
#3993 merged.
- Dropped duplicate vm.Script analysis and CHANGELOG content during
rebase; current diff is limited to eight `.agents` skill/workflow files.
- `codex review --base origin/main` initially found two P2 over-scope
issues in the closing-evidence workflow mirrors; both were fixed in
`c8fd3b87b` and `3dc5b4260`.
- Final `codex review --base origin/main` -> clean: no discrete
correctness, safety, or maintainability issues identified.

Validation:
-
`/Users/justin/.codex/worktrees/7e0e/react_on_rails/node_modules/.bin/prettier
--check .agents/skills/address-review/SKILL.md
.agents/skills/evaluate-issue/SKILL.md
.agents/skills/post-merge-audit/SKILL.md
.agents/skills/pr-batch/SKILL.md .agents/workflows/address-review.md
.agents/workflows/evaluate-issue.md
.agents/workflows/post-merge-audit.md
.agents/workflows/pr-processing.md` -> passed.
- `PATH="/tmp/lychee-v0.23.0:$PATH" lychee --config .lychee.toml
.agents/skills/address-review/SKILL.md
.agents/skills/evaluate-issue/SKILL.md
.agents/skills/post-merge-audit/SKILL.md
.agents/skills/pr-batch/SKILL.md .agents/workflows/address-review.md
.agents/workflows/evaluate-issue.md
.agents/workflows/post-merge-audit.md
.agents/workflows/pr-processing.md` -> 5 links / 5 OK / 0 errors.
- `git diff --check origin/main...HEAD` and `git diff --check` ->
passed.
- Pre-commit/pre-push hooks passed with local toolchain shim:
`PATH=/tmp/lychee-v0.23.0:$PATH` and ignored `node_modules/.bin` symlink
to the coordinator worktree.

Label/CI decision: Labels: none. Docs/process-only; full-ci/benchmark
not recommended.

Residual risk:
- Low-to-medium until the current unresolved review thread is addressed
and the resulting head is rechecked.
- The semantic risk is workflow wording drift; mitigated by using
canonical SKILL pointers and a clean local Codex review before the new
thread arrived.

Merge recommendation: keep draft until the current unresolved review
thread is addressed. Checks are green for the current head, but the PR
should not be undrafted or merged while that thread remains open.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant