Bump projects/dotnet-commons from e106670 to 3f4c94c#96
Merged
github-actions[bot] merged 1 commit intoJun 3, 2024
Merged
Conversation
Contributor
|
@dependabot recreate |
Bumps [projects/dotnet-commons](https://github.com/devantler/dotnet-commons) from `e106670` to `3f4c94c`. - [Release notes](https://github.com/devantler/dotnet-commons/releases) - [Commits](https://github.com/devantler/dotnet-commons/compare/e106670f1dfefebc1c1b52a776fb97031db59377...3f4c94c926cd68d0007d10530e0b0d502c7d07af) --- updated-dependencies: - dependency-name: projects/dotnet-commons dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
dependabot
Bot
force-pushed
the
dependabot/submodules/projects/dotnet-commons-3f4c94c
branch
from
June 3, 2024 14:25
95e025f to
f4f8247
Compare
github-actions
Bot
deleted the
dependabot/submodules/projects/dotnet-commons-3f4c94c
branch
June 3, 2024 14:26
4 tasks
devantler
added a commit
that referenced
this pull request
Jul 18, 2026
Two were guardrail-adjacent and are the important ones: - The section said 'on every repo' and then told the agent to self-assign and push a branch. Claiming is a WRITE action, so that could read as authorising a first touch of a repo the professional-work boundary has not cleared — which forbids even read-only probing. Scoped to in-scope devantler-tech repos, with the boundary named as winning outright. - The lost-race step said to post only findings 'executed against their code'. If the winner is an external-contributor PR, executing their branch breaks the trust gate. Split by author: execute against a trusted/routine-owned winner, static review ONLY against an external one, and say in the finding which it was. The same wording was repeated in product-engineering and is fixed there too. Three mechanism gaps: - A pre-PR claim branch named claude/<area>-<desc> carries no issue number, and there is no PR body to grep yet, so a rival was left with exactly the stem matching #96 proved fragile. Branch names now carry the issue number. - The ~2h expiry had no clock. A claim branch usually points at the base commit, so its date would read as long expired. Timed from the issue's assigned timeline event instead, with assignment-without-branch and branch-without-assignment both defined as no claim. - The closing line said the skip test was unchanged, but a live claim was not in it — leaving a freshly claimed oldest issue both un-takeable and un-skippable. Added as skip reason (e) in Drain oldest-first, the only one that expires on its own. Part of devantler-tech/world-at-ruin#102
devantler
added a commit
that referenced
this pull request
Jul 18, 2026
The sharpest one first: two instances picking the same issue derive the SAME deterministic branch name, so a bare pre-push re-check settles nothing — both see no branch and both conclude they claimed it. That is precisely how #88 (52s) and #96 (135s) were lost. The push now decides it: put a real commit on the claim branch so a losing push cannot be a trivial fast-forward, push without force, then verify the remote tip is your sha. Rejected push or someone else's tip means you lost — stand down rather than force over them. - Takeover reused the deterministic branch name even when the dead claim had pushed commits, so the push would be rejected or would silently build on abandoned work. Take a fresh -2 branch and leave theirs for the cleanup sweep; never force-push over another instance's work. - The surveyor only matched claim branches ending in -<issue>, so legacy claims made before this template — including any in flight during rollout — were invisible. Falls back to a normalised-stem match. - portfolio-maintenance still taught the plain self-assign (no-op for an existing assignee) and still required an issue number with no path for the issue-less hotfix flow the contract permits. Both synced. Part of devantler-tech/world-at-ruin#102
devantler
added a commit
that referenced
this pull request
Jul 18, 2026
…ontract (#2234) * docs(agents): add the parallel-session claim protocol to the shared contract Several instances run against one backlog executing the same oldest-actionable selection rule, so converging on the same issue is the expected behaviour, not bad luck — and an open PR, the only recognised claim, exists only at the END of a build, which is too late to prevent the collision. World at Ruin discarded six end-to-end builds in ~24h; two were lost by 52 and 135 seconds. Moves the claim to the start of the build: check open PRs, remote claude/* branches AND assignees (by issue number, never the literal branch name — two sessions collided on armour/armor spelling), self-assign and push the branch on selection, then harden. Claims expire after ~2h with no PR, which is what keeps this compatible with the existing 'a bare assignee does not reserve an issue' rule — the claim is time-boxed, not a lock. On a lost race, abandon and mine the loss as a differential-testing oracle. Syncs the same rule in the portfolio-maintenance and product-engineering skills, which both restated the old wording. Fixes devantler-tech/world-at-ruin#102 * docs(agents): an assignee is an instance claim, never a hands-off signal Self-review catch: every instance commits and assigns as devantler, so an agent seeing that login on an issue could read it as the human maintainer having taken it and skip the work — which would park the issue rather than claim it, the opposite of what the protocol intends. Part of devantler-tech/world-at-ruin#102 * docs(agents): close five review findings in the claim protocol Two were guardrail-adjacent and are the important ones: - The section said 'on every repo' and then told the agent to self-assign and push a branch. Claiming is a WRITE action, so that could read as authorising a first touch of a repo the professional-work boundary has not cleared — which forbids even read-only probing. Scoped to in-scope devantler-tech repos, with the boundary named as winning outright. - The lost-race step said to post only findings 'executed against their code'. If the winner is an external-contributor PR, executing their branch breaks the trust gate. Split by author: execute against a trusted/routine-owned winner, static review ONLY against an external one, and say in the finding which it was. The same wording was repeated in product-engineering and is fixed there too. Three mechanism gaps: - A pre-PR claim branch named claude/<area>-<desc> carries no issue number, and there is no PR body to grep yet, so a rival was left with exactly the stem matching #96 proved fragile. Branch names now carry the issue number. - The ~2h expiry had no clock. A claim branch usually points at the base commit, so its date would read as long expired. Timed from the issue's assigned timeline event instead, with assignment-without-branch and branch-without-assignment both defined as no claim. - The closing line said the skip test was unchanged, but a live claim was not in it — leaving a freshly claimed oldest issue both un-takeable and un-skippable. Added as skip reason (e) in Drain oldest-first, the only one that expires on its own. Part of devantler-tech/world-at-ruin#102 * docs(agents): make the claim protocol actually work in the scheduled flow Six more review findings, all correct. Two showed the protocol would not have functioned as written: - The surveyor never fetched issue assignees and never reported claim branches, so in the scheduled flow — where issue selection runs off its digest — a live claim was invisible and the duplicate-build race stayed open. It now returns assignees, reports claude/*-<issue> branches on PR-less issues, and carries a CLAIMED line in the digest. - Taking over a stale claim did not start a new lease. Every instance assigns the same devantler login and GitHub's add-assignees endpoint is a no-op for an already-assigned user, so no fresh assigned event was created, the next run read the old timestamp, and the race reopened. Takeover now unassigns before re-assigning. Four consistency gaps: - The concrete branch templates agents copy still said claude/<area>-<desc>, so runs following them produced claim branches with no issue number. Aligned in the execution model, portfolio-maintenance and the monorepo card; the HANDS-OFF identification rule now describes the new shape too. - product-engineering kept its own (a)-(d) skip list, so a run invoking it directly could neither take nor skip a claimed issue. Added (e) there. - The assignment-time query lacked --paginate and took no particular event, so a long-lived issue would hand back a stale assignment from page 1. Now paginated and takes the newest. Part of devantler-tech/world-at-ruin#102 * docs(agents): fix three defects introduced by the previous review round All three are consequences of the round-2 fixes, verified against the tools rather than accepted as written: - The paginated newest-assignment query was still wrong. Under --paginate each page is a separate JSON array, so '[...]|last' runs per page and returns the last match of the final page rather than the newest overall. The suggested --slurp remedy is rejected alongside --jq ('the --slurp option is not supported with --jq'), so the query now emits one timestamp per line and takes the max in the shell. Confirmed against a real issue timeline. - The stale-claim takeover commands were unqualified. Runs work from the monorepo checkout or a submodule worktree, so a bare gh issue edit resolves against that repo and would silently edit whatever issue shares the number. Both commands now pass -R <owner>/<repo>. - The surveyor digest emitted CLAIMED with claim-branch=none, which would have made a bare assignee park an issue as skip reason (e) — precisely what 'a bare assignee does not reserve an issue' forbids. CLAIMED now requires both an assignee and a matching claim branch. Part of devantler-tech/world-at-ruin#102 * docs(agents): close the round-4 claim-protocol edge cases - A bare-number PR-body search matched any body containing the digits (a benchmark count, a date, another repo's issue number), which could hide the oldest actionable issue behind an unrelated PR. Anchored on the #<issue> reference with a concrete gh pr list --search form. - The no-op assignee problem was only handled for stale-claim takeover. It applies equally when an abandoned run left a bare assignment: the next run's self-assign is also a no-op, so its fresh claim inherits the old timestamp and reads as already expired. Remove-then-add now covers both. - The CLAIMED-only-with-a-branch rule sat inside the surveyor's fenced 'exact shape' block, so the surveyor could emit the instruction itself as a digest row. Moved into Digest rules where the other guidance lives. - The worktree template now required an issue number, but the contract still permits hotfixes and trivial obvious fixes with no tracking issue, leaving <issue> undefined. Those keep plain claude/<area>-<desc> — they go straight to a PR, so the PR body is the discoverable signal and no claim window applies. Part of devantler-tech/world-at-ruin#102 * docs(agents): close the residual claim race and three rollout gaps The sharpest one first: two instances picking the same issue derive the SAME deterministic branch name, so a bare pre-push re-check settles nothing — both see no branch and both conclude they claimed it. That is precisely how #88 (52s) and #96 (135s) were lost. The push now decides it: put a real commit on the claim branch so a losing push cannot be a trivial fast-forward, push without force, then verify the remote tip is your sha. Rejected push or someone else's tip means you lost — stand down rather than force over them. - Takeover reused the deterministic branch name even when the dead claim had pushed commits, so the push would be rejected or would silently build on abandoned work. Take a fresh -2 branch and leave theirs for the cleanup sweep; never force-push over another instance's work. - The surveyor only matched claim branches ending in -<issue>, so legacy claims made before this template — including any in flight during rollout — were invisible. Falls back to a normalised-stem match. - portfolio-maintenance still taught the plain self-assign (no-op for an existing assignee) and still required an issue number with no path for the issue-less hotfix flow the contract permits. Both synced. Part of devantler-tech/world-at-ruin#102 * docs(agents): claims are the agent account's only; sync race rule to the copies The substantive one: the surveyor reported an assignee COUNT, so an issue assigned to a human collaborator or Copilot with a leftover claude/*-<issue> branch satisfied the live-claim test. That parks genuinely actionable work behind an unrelated person's assignment and times the lease off the wrong assignment event. It now reports assignee logins and only a devantler assignment can be a claim — which also keeps the original 'respect assignees, do not take work others are assigned to' direction intact rather than repurposing a human's assignment as an agent lease. Three syncs of the previous round's fixes: - the surveyor now also matches takeover branches (-<issue>-2, -3, …), which the last round introduced but left unmatchable; - portfolio-maintenance carries the race-deciding push (real commit, no force, confirm ls-remote shows your sha); - the monorepo card carries the issue-less hotfix branch path. Part of devantler-tech/world-at-ruin#102 * docs(agents): only the agent account's assignment is a claim Completes in the contract the fix already made in the surveyor — leaving them disagreeing would have left the authoritative file wrong: - The live-claim test treated ANY assignee plus a claim branch as an agent lease, so an issue assigned to a human collaborator or Copilot could be parked and then taken over after the window. Only a devantler assignment is a claim now, and someone else's assignment is explicitly protected by the standing 'do not do work others are assigned to' rule. - The lease query took the newest assigned event for anyone, so a later assignment of a different person would restart a window the agent never renewed. Filtered to .assignee.login == devantler, verified against a real timeline. Also finishes the previous round's takeover-branch fix in the surveyor's branch scan, which had only been applied to its digest rules. Part of devantler-tech/world-at-ruin#102 * docs(agents): a human's assignment is never an agent lease Third recurrence of the same class, and the one that actually matters: the run-loop copy still said to pick an issue up 'regardless of who's assigned' once a claim lapsed. The contract now says only a devantler assignment is a claim, so the skill contradicted it and would have had an agent take a human collaborator's assigned work after the 2h window — against the standing 'do not do work others are assigned to' direction. Also fixes the digest row it created: the shape said assignees=<n> (a count) while the survey step above requires logins, because only devantler is a claim signal. Now assignee=devantler. Deferred to #2250 (already captured there): resolving the claim ref from the issue number so two sessions choosing different <area>-<desc> stems still collide on one ref. Part of devantler-tech/world-at-ruin#102 * docs(agents): sync the human-assignee rule to product-engineering too A fourth copy carried the same unqualified 'regardless of who's assigned'. Found by grepping every echo site after fixing the other three rather than waiting for another review round to surface it — the same drift class this PR has now hit four times. Part of devantler-tech/world-at-ruin#102
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.
Bumps projects/dotnet-commons from
e106670to3f4c94c.Commits
3f4c94cUpdate global workflows (#297)09f1e3aUpdate global workflows (#296)a1aabcdUpdate global workflows (#295)07b1820Update global workflows (#294)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot mergewill merge this PR after your CI passes on it@dependabot squash and mergewill squash and merge this PR after your CI passes on it@dependabot cancel mergewill cancel a previously requested merge and block automerging@dependabot reopenwill reopen this PR if it is closed@dependabot closewill close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)