General-purpose coding policy for Baruch's AI agents
74
93%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
Only proceed when:
.watch.result as ready; use that step's script-contract reference for its meaning, ANDreview_bodies[].body in the returned snapshot has been read in full, from every author, page and review state, and any blocking finding has been addressed per Step 6, ANDinline_comment_bodies[].body in Step 5's snapshot has been read in full and any blocking finding has been addressed per Step 6. Ordinary advisory acknowledgments and thread resolution are outside the merge predicate, ANDA COMMENTED review never gates the merge on its state alone — but its body must be read before merge, zero inline comments included. Every inline comment must also be read. Advisory findings (either reviewer's ## Advisory findings section) do not block the merge or require thread closure; use Step 6's standalone or team acknowledgment form during the existing review work. Only a blocking finding gates.
Once these conditions hold, merge automatically per rules/ship-on-green.md — the green gates are the approval, stakes raise care not permission, and the only blocks are its three objective exits (Red / No undo / Murky). Do not pause to ask a human whether to merge.
Clear superseded review gates first. This applies to coding-policy's OWN releases, where the policy reviewer posts as github-actions[bot], which cannot APPROVE (GitHub returns HTTP 422), so a clean re-review lands as a COMMENT that does NOT supersede the bot's earlier CHANGES_REQUESTED — the stale request keeps merge_state.status at BLOCKED. On consumer repos the reviewer is the central fleet App coding-policy-fleet-reviewer[bot] (coding-policy#202), which CAN APPROVE and supersedes its own earlier CHANGES_REQUESTED directly — no dismissal needed there. Dismiss every superseded github-actions[bot] review before merging:
KS=.tessl/plugins/jbaruch/coding-policy/skills/release/; [ -d "$KS" ] || KS="$HOME/$KS"; [ -d "$KS" ] || case "$(git config --get remote.origin.url)" in git@github.com:jbaruch/coding-policy|git@github.com:jbaruch/coding-policy.git|https://github.com/jbaruch/coding-policy|https://github.com/jbaruch/coding-policy.git|ssh://git@github.com/jbaruch/coding-policy|ssh://git@github.com/jbaruch/coding-policy.git) KS=skills/release/ ;; *) echo "coding-policy skill not found: run tessl install jbaruch/coding-policy" >&2; exit 1 ;; esac
bash "$KS/dismiss-stale-reviews.sh" <owner> <repo> <pr-number>Run it once Step 5's poll shows every bot's latest verdict clean, a RULED policy state included. It emits a JSON summary of what it dismissed and what it left active, exits non-zero on API failure, and is idempotent on re-run. Which reviews it dismisses and which it leaves is the script's decision contract — see skills/release/dismiss-stale-reviews.sh header, not restated here (rules/script-as-black-box.md).
Name this repo's publication channels before merging. The confirmation a release owes is keyed on the publication, never on the package — a package that publishes through more than one channel owes the duty once per publication, each confirmed against the channel that carried it. The release contract's Publication Confirmation section, in the reference block below, is a required read before this step's gates. Read the repo's publish workflow and its manifest, and name every channel it publishes on. How each channel is recognized, the command for every gate below, each helper's exit-code contract, and a walkthrough of the Tessl-only, tag/asset-only and mixed cases:
skills/release/references/PUBLICATION.md
skills/release/references/release-contract.mdTessl publication: before merging, run registry-baseline.sh and record the version it prints as <pre>. A publication on another channel skips this gate.
Pick the right cleanup path based on where you ran the skill from.
(A) From the base checkout (no additional worktree):
# Merge
gh pr merge <N> --merge --delete-branch
# Update local
git checkout main && git pull --ff-only
# Clean up local branch
git branch -d <branch>
# Prune stale remote refs
git remote prune origin(B) From an additional worktree (per rules/agent-worktree-isolation.md):
# Merge (running from inside the worktree is fine)
gh pr merge <N> --merge
# Return to the base checkout, fast-forward main
cd <path-to-base-checkout>
git checkout main && git pull --ff-only
# Tear down the worktree — directory + `.git/worktrees/` metadata
git worktree remove <path-to-worktree>
# Now safe: branch is no longer checked out anywhere and is fully merged
git branch -d <branch>
# Prune stale remote refs
git remote prune originOrder in (B) is mandatory: git branch -d refuses to delete a branch that is checked out in any worktree, so the git worktree remove step must come before git branch -d. Reversing the order produces a "checked out at <path>" error and leaves a stranded branch.
After merge, verify the merge landed on main and complete the issue checks:
Confirm every closing issue closed:
KS=.tessl/plugins/jbaruch/coding-policy/skills/release/; [ -d "$KS" ] || KS="$HOME/$KS"; [ -d "$KS" ] || case "$(git config --get remote.origin.url)" in git@github.com:jbaruch/coding-policy|git@github.com:jbaruch/coding-policy.git|https://github.com/jbaruch/coding-policy|https://github.com/jbaruch/coding-policy.git|ssh://git@github.com/jbaruch/coding-policy|ssh://git@github.com/jbaruch/coding-policy.git) KS=skills/release/ ;; *) echo "coding-policy skill not found: run tessl install jbaruch/coding-policy" >&2; exit 1 ;; esac
python3 "$KS/check-closing-issues.py" <owner> <repo> <pr-number> --mergedExit 1 (still_open) names each closing issue still open at the script's poll budget
Every issue comment below is an action on that issue's repository, governed by rules/external-repo-contributions.md:
partial_referencesComplete every selected channel's post-merge sequence in the publication reference named above. It owns publisher resolution, terminal watching, confirmation commands and failure recovery. Preserve each recorded baseline and its corresponding source-bound run id through those steps. A package on both channels owes both sequences.
Report the merged PR URL, published version and each channel's actual confirmation. Wrappers retain the scripting requirements:
skills/release/references/SCRIPTING.mdFinish here only after every selected channel is confirmed.
.tessl-plugin
rules
skills
migrate-to-plugin
onboard-repo
release
hooks
references