Repository navigation
chore: version skills - #78
Open
github-actions[bot] wants to merge 1 commit into
Open
github-actions[bot] wants to merge 1 commit into
github-actions[bot] wants to merge 1 commit into
Conversation
github-actions
Bot
force-pushed
the
changeset-release/main
branch
13 times, most recently
from
November 10, 2026 01:07
2d75185 to
3f0cc0a
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
November 10, 2026 09:40
3f0cc0a to
263ddc2
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
github-agent-workflow@1.10.1
Patch Changes
diffWorlds(before, after)inscripts/scenario.mjsturns the change a run left behind into the effects the scenario checker takes, so a real run can be judged by the same scope, invariant and oracle checks as a golden scenario. A change that no effect can express (a title or body edit, an edited or removed comment, a reopened item) is reported as anunmodelledeffect, whichcheckScenariorejects unless the contract lists a newunmodelledwrite scope. Tests round-trip every golden scenario and 600 generated worlds.ghsimulator for tests (tests/sim/bin/gh) answersghcalls from a world file in the scenarios' format and logs every call. This part covers the read paths:issue list|view,pr list|view|checks,label list,repo view,auth statusandrun view, with--jsonfields checked against the onesghreally has. A command, flag or field it does not cover exits withunsupported: <what>, and a test fails when a skill calls aghcommand that is not in the manifest. The write paths,apiand fault injection follow.ghsimulator for tests now writes.issue edit|close|create|comment|reopen,pr edit|create|comment|mergeandlabel createchange the world file the wayghwould and refuse whatghrefuses (an unknown label, a merge pinned to the wrong head, a duplicate PR), leaving the file untouched when a call fails. A run's changes are read back bydiffWorlds. For that, acreate_issueorcreate_preffect can carry the new item's title, body, creation time, author and branch asdata, and acloseeffect itsreason.grill-via-github-commentshas a## Contract(kind: utility, pure,used_by: [unattended-triage]) and three scenarios: two independent decisions asked as one round, a dependent decision left for a later round, and an open question the code answers, stated as a finding. The contract says what the text already said, that the skill returns the round and posts nothing, and its description now says it drafts the questions for the caller to post. The scenario checker accepts a list as a document value and has an oracle that checks a round against the subject's decision tree: the whole frontier is asked, nothing whose prerequisite is open, nothing that can be looked up, and every question has a recommended answer. See ADR 0013.expect.dispatches, the group'sresultsand its one run-logentry, and fortriage-github-issuesthereconcilecall that comes first. The checker picks the batch from the real item skill's eligibility oracle, oldest first, so a dispatch of an ineligible item, one past the batch, or in the wrong order fails. It reads what a dispatch must carry from the real item contract,write_log=falseand the run's inputs that the item lists inparams, so a dispatch that dropstrusted_authors, or forwards something the item does not list, fails.explore-github-repois checked as its own kind of group: findings ranked best first, one call tofile-github-issueswithlimitand the shared inputs, only filed issues counting toward the cap, and the count line and deferred list in the log. The coverage gate wants three scenarios for a group skill, one that dispatches and one that does not. See ADR 0012.merge-safetyhas a## Contract(kind: utility, pure,used_by: [review-github-pr]) and five scenarios: a breaking change and a migration with no rollback plan (BLOCK), a clean small PR (PASS), and a moved head and a pending check (HOLD). The scenario checker has a mode for a skill that returns a document: the report must have the contract's lines and a verdict it allows, a pure skill must leave no effects, and the world settles what it can (a draft, a pending check or a head that is not the pinned one must give HOLD). The coverage gate counts a utility skill's verdicts. One behaviour is now written down: whenheadis given and is not the PR's current head,merge-safetyassesses nothing and reports HOLD. See ADR 0013.claimandrenewnow edit this account's own lease comment for the step in place instead of posting a new one each time, so an item taken through three claims of a step has one lease comment, not three. Each step keeps its own comment, a comment from another account is never edited, and if the edit fails the helper posts a new one. Because a comment's position in the thread no longer says which lease is newest,lease_liveandleaseStatenow take the lease written last (updated_at, elsecreated_at, else thread order); the expiry is still theexpires=in the marker. New helperownLeaseCommentand CLI commandown-leaseinhelpers.mjs, shared fixtures for the ordering, and shell tests for one comment per step, other accounts, the failed-edit fallback and the ordering (One lease comment per claim costs a comment on every item on every run #69).triage-github-issue,implement-github-issueandreview-github-prjoinshepherd-github-pr. Each mirrors its skill'srequires, models the lease aslease: live | stale | noneon the item, and honourslease_held. A test compares each skill's number ofrequiresentries with the oracle's, so a changed precondition prompts a look at the oracle. A skipped item no longer has to be free of lease labels, because the label may belong to the run that holds it. Test tooling only, with no change to any skill. Seedocs/adr/0012-scenarios.md.prs_for_issueandissue_for_prwork on a realgh. They askedgh pr listandgh pr viewforauthorAssociation, whichghrejects as a PR field (Unknown JSON field), so neither could find the PR that belongs to an issue. Both now read the REST pull request, which has the author's association, and apply the same trust rule as before.issue_for_prreads GitHub's own issue links withgh2.72 or newer, and without that it still reads the description. It now prints the issue numbers in numeric order.idempotentin a contract is checked.expect.rerunisineligible(a terminal outcome),eligible(a failed run, which leaves the item for a retry) or{skip: <reason>}, and the checker asks the skill's own eligibility oracle about the same item in the world the run leaves behind. A push puts the PR's checks back to pending, so a pushed fix is not eligible again until CI reports. A scenario withinterrupted: truereturns no result and must be eligible again, with a stale lease, and itsrerun_effectsmay not repeat what the interrupted pass already did. All 30 scenarios that complete a run now carry arerun, two scenarios cover an interrupted triage and an interrupted implementation, and the coverage report lists any scenario that has none, whichnpm testfails on. A test with a deliberately broken oracle shows a terminal state that is still eligible being rejected.retrospectivehas a## Contract(kind: utility, pure,used_by: []) and five scenarios over a world of run-log issues: an entry older thandaysis not used,stepandonly_runnerfilter, ranked suggestions never exceedmax_suggestions, and a log with only idle entries gives an empty report. The scenario world can now describe run-log entries (run,step,runner,at,outcome,problems) and a scenario carries anowdate. The skill now says what the report contains when no entry is left:Entries considered: 0, a summary that says nothing was found, and no suggestions. The validator acceptsused_by: []for a skill that is not user-invoked only when the skill's text says it is run by hand, whichretrospectivenow does. See ADR 0013.docs/RUNNERS.mdnow covers the sweeper and the newer inputs. It says when to schedulereconcile-github-issues(and that Triaging also runs it), what a runner that dispatches items itself must pass (the item's URL,write_log=falseand the group's inputs), and wherewrite_log,lease_heldandlimitare defined. The README's schedule table lists the sweeper.setup-github-agent-workflowhas a## Contract(kind: utility, user-invoked,used_by: []) and five scenarios: an empty repository gets every label, an existingagent:label is reset and an existing triage label is kept, a second run changes nothing, the settings go intoCLAUDE.mdwhen it exists, and only the## GitHub workflowsection is updated. Every skill now has a contract, andCONTRACT_PENDINGis empty. The skill lists its nine settings in an Inputs table, which the protocol's Defaults rows now name it as a user of, and the protocol says thatrepositorywrites include repository settings such as the label set. The scenario world can hold the repository's labels and files, withlabel_create,label_updateandwrite_fileeffects thatdiffWorldsalso produces. The label set a scenario expects is read fromreferences/labels.md. See ADR 0013.tests/lib.test.shnow checks forjq,gitandnodefirst and exits with one line naming the missing tool, instead of printing dozens ofjq: command not founderrors and ending with a long list of failures. The hooks check innpm testnow says how to install the hooks (npm ci) and how to skip the check (HUSKY=0).AGENTS.mdlists what the checks need.unattended-triagehas a## Contract(kind: utility, pure,used_by: [triage-github-issue]) and four scenarios: a complete bug (ready-for-agent), a feature with no use case and an issue with an open question (needs-info), and a wontfix recommendation (ready-for-human, never a close). The skill's description said it writes the outcome comment, while its body and its caller say the caller posts it. The description now says it drafts the comment and the caller posts it, as the body always did. The skill's text now says that an open question or a missing use case is needs-info and that wontfix is ready-for-human, whichtriage-github-issuealready applied after the fact. The scenario checker gains an oracle for the state, the comment structure and these rules. See ADR 0013.