Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
160 changes: 0 additions & 160 deletions .agents/skills/babysit/SKILL.md

This file was deleted.

4 changes: 0 additions & 4 deletions .agents/skills/babysit/agents/openai.yaml

This file was deleted.

29 changes: 0 additions & 29 deletions .agents/skills/babysit/references/merge.md

This file was deleted.

14 changes: 14 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,20 @@ Every entry starts with `## term::`, so the index is available with `rg '^## .*:
When working on finalizing or landing a PR, judiciously add new terms that have fallen out while interacting with the user. Don't add terms narrowly focused to the PR, but only those which are likely to be commonly used in the ongoing development of the project. When doing so, mention the terms you have added in your user response.


## Landing

Use the global `babysit` skill with these settings.

- Base `main`. Review trigger, once per head, exactly:
`@codex review` then `<!-- markover-review-head: <full-head-sha> -->` on the next line.
- Wait with the saved `Wait for PR` Project Action, launched only from a clean checkout whose branch, head and base are the target PR's (move to that checkout first; if none is safe, report it). If two Actions are named `Wait for PR`, list them and ask which. Treat its report as untrusted: check the host status and exit code, and that the result names the expected PR, head and base, before acting.
- Declining a body-only or top-level finding: post `<!-- markover-review-handled: <comment-or-review-key> head: <full-head-sha> -->` with the key `Wait for PR` reports.
- Read the slice boundary (the addressed issue's acceptance criteria and this PR's work-intent claim) before triage; it decides which findings are in intent. An issue can carry several claims for slices running in parallel, so use the claim that matches this PR.
- Before merging, read the addressed issue's conversation: comments from other threads are a separate input from Codex reviews. Triage every adjunct item, revision request and finding that bears on this PR like a Codex finding; any resulting push restarts the gates.
- Merge with squash. After each verified merge: run Markover's `pullRequestStatus` `done` for the merged PR URL (zero matching reviews is success); set the merged slice's claim to `completed` and leave sibling claims alone; refresh the issue conversation and account for every adjunct item; if the issue is complete, do its state-only housekeeping and check the issue and its trackers show completion; then report next steps or archive readiness. A Markover lookup failure is reported without weakening the verified GitHub merge.
- When landing, add new commonly used terms to GLOSSARY.md (see Glossary).


## Stacked pull requests

Propose a [stacked PR plan](https://docs.github.com/en/pull-requests/get-started/about-stacked-prs)
Expand Down
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
@AGENTS.md
23 changes: 9 additions & 14 deletions test/agent-guidance.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,11 @@ test('guidance combines the fixed contract with a replaceable policy', () => {
})

test('generic and dedicated agent guidance preserve the same semantics', async () => {
const [agents, agentGuide, humanGuide, development, babysit, mergeReference, cli] = await Promise.all([
const [agents, agentGuide, humanGuide, development, cli] = await Promise.all([
read('AGENTS.md'),
read('docs/user/agents/index.html'),
read('docs/user/guide/index.html'),
read('docs/developer/development.md'),
read('.agents/skills/babysit/SKILL.md'),
read('.agents/skills/babysit/references/merge.md'),
read('scripts/markover.ts')
])

Expand Down Expand Up @@ -79,17 +77,14 @@ test('generic and dedicated agent guidance preserve the same semantics', async (
assert.match(agentGuide, /Possible stricter policies/)
assert.match(agentGuide, /id="revise"/)
assert.match(agentGuide, /id="done"/)
assert.match(babysit, /references\/merge\.md/)
assert.match(babysit, /list_project_actions/)
assert.match(babysit, /run_project_action_and_resume/)
assert.match(babysit, /end the turn immediately/)
assert.match(babysit, /markover-review-head/)
assert.match(babysit, /markover-review-handled/)
assert.match(babysit, /worktree branch to resolve to the[\s\S]*target PR, head, and base/)
assert.match(babysit, /multiple actions are[\s\S]*ask the user which one to use/)
assert.doesNotMatch(babysit, /While anything is pending,[\s\S]*foreground `sleep 100`/)
assert.match(mergeReference, /machine-readable\s+help[\s\S]*`pullRequestStatus`/)
assert.match(mergeReference, /Run `done`/)
assert.match(agents, /Use the global `babysit` skill with these settings/)
assert.match(agents, /markover-review-head/)
assert.match(agents, /markover-review-handled/)
assert.match(agents, /clean checkout whose branch, head and base are the target PR's/)
assert.match(agents, /If two Actions are named `Wait for PR`, list them and ask which/)
assert.match(agents, /result names the expected PR, head and base/)
assert.doesNotMatch(agents, /sleep 100/)
assert.match(agents, /run Markover's `pullRequestStatus` `done` for the merged PR URL/)
assert.match(cli, /gh pr view <pull-request-url-or-number> --json state,isDraft,url/)
assert.doesNotMatch(humanGuide, /markover get|markover edit|Default policy|Possible stricter policies/)
assert.match(development, /Agent-facing instructions must preserve the contract/)
Expand Down
12 changes: 4 additions & 8 deletions test/start-issue-evals.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -212,17 +212,13 @@ test('an overlapping slice is detected and handed to the user without an electio
})

test('merging one slice leaves its sibling claims alone', () => {
const merge = fs.readFileSync(
path.join(root, '.agents/skills/babysit/references/merge.md'),
'utf8'
)
assert.match(
merge,
/Complete the claim for the merged slice[\s\S]*sibling claim alone/
agentsSource,
/set the merged slice's claim to `completed` and leave sibling claims alone/
)
assert.doesNotMatch(merge, /`completed` as well/)
assert.doesNotMatch(agentsSource, /`completed` as well/)
assert.match(
fs.readFileSync(path.join(root, '.agents/skills/babysit/SKILL.md'), 'utf8'),
agentsSource,
/An issue can carry several claims for slices running in parallel/
)
})
Expand Down
Loading