Skip to content

Bump projects/dotnet-commons from e106670 to 3f4c94c#96

Merged
github-actions[bot] merged 1 commit into
mainfrom
dependabot/submodules/projects/dotnet-commons-3f4c94c
Jun 3, 2024
Merged

Bump projects/dotnet-commons from e106670 to 3f4c94c#96
github-actions[bot] merged 1 commit into
mainfrom
dependabot/submodules/projects/dotnet-commons-3f4c94c

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github May 29, 2024

Copy link
Copy Markdown
Contributor

Bumps projects/dotnet-commons from e106670 to 3f4c94c.

Commits

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 rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will 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 version will 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 dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

@github-actions
github-actions Bot enabled auto-merge (squash) May 29, 2024 20:38
@devantler

Copy link
Copy Markdown
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
dependabot Bot force-pushed the dependabot/submodules/projects/dotnet-commons-3f4c94c branch from 95e025f to f4f8247 Compare June 3, 2024 14:25
@github-actions
github-actions Bot merged commit ef83823 into main Jun 3, 2024
@github-actions
github-actions Bot deleted the dependabot/submodules/projects/dotnet-commons-3f4c94c branch June 3, 2024 14:26
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
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