Skip to content

feat(runner): hard claims, the runner assigns one card per session - #115

Merged
Robbertvermeulen merged 11 commits into
mainfrom
feat/hard-claims
Oct 15, 2026
Merged

Robbertvermeulen merged 11 commits into
mainfrom
feat/hard-claims

Conversation

@Robbertvermeulen

Copy link
Copy Markdown
Owner

Waarom

Meerdere sessies werkten aan dezelfde kaarten (task_94f4, task_5ae3). Claimen was alleen een regel in AGENT.md, en een claim controleerde de status maar niet of de sessie de laatste comments had gezien.

Wat

  • De runner kiest en claimt precies één kaart per sessie, in dezelfde transactie als de sessierij en de lock (card.claimed_by, session.card_id).
  • Schrijfacties op een kaart die een andere sessie vasthoudt worden geweigerd. Nieuw: card claim, card comment --request.
  • Versheidscheck: een claim of schrijfactie op basis van een verouderde lezing wordt geweigerd met een lijst van wat er veranderd is.
  • Een statuswijziging door de mens trekt de claim definitief in; de sessie krijgt een stopmelding.
  • Een kaart blijft bezet zolang zijn vorige sessie leeft.
  • Crash-lus: parkeren na AGENTBOARD_RESUME_LIMIT (2) met melding. Een nooit gelezen kaart gaat terug naar ready.
  • Tijdslimiet per sessie: AGENTBOARD_SESSION_TIMEOUT_MIN (45).
  • Workdir per kaart (cards/<id>), TMPDIR per sessie, opruimen behoudt niet-gepusht git-werk.
  • sessions recover bij de boot (niet fataal).
  • AGENT.md regels 6, 12, 15 en 17, docs/reference.md bijgewerkt.
  • verify-realtime en verify-agentlog: nep-lockfiles kregen session_id (waren sinds 0.22.1 rood).

Spec: docs/superpowers/specs/2026-10-15-hard-claims-design.md
Plan: docs/superpowers/plans/2026-10-15-hard-claims.md

Test

Alle acht verify-scripts (claims, trigger, sessions, realtime, agentlog, blockers, session-env, routines) slagen.

Vervolg (losse kaarten)

Volgorde van comments op id, controle binnen de schrijftransactie, atomaire lockfiles, procesgroep stoppen bij timeout, herstarts niet als hervatting tellen, terugclaimen van zelfgemaakte kaarten, backoff en melding bij langdurige storing.

🤖 Generated with Claude Code

Robbertvermeulen and others added 11 commits October 15, 2026 14:09
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ules

Also repairs older probes (trigger leg 6, fake lock session ids) and makes
sessions recover non-fatal at boot.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s, no parking on never-read sessions

- A human status move after a session's latest claim on a card revokes it
  for good: guardAgentWrite and claimCard refuse with "The human took card X
  back (moved to <status>); stop working on it."
- A card stays busy while any live session has it as session.card_id: the
  gate and the runner skip it, pruning keeps its cards/<id> workdir.
- A session that ends without ever reading its assigned card returns it to
  ready (or needs_input) instead of stranding it, and does not chain the
  next runner. A crash-loop park now fires AGENTBOARD_NOTIFY_CMD.
- sessions recover sweeps <data>/tmp left behind by a restart.
- next/gate help texts and AGENT.md describe the session-scoped next.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Robbertvermeulen
Robbertvermeulen merged commit c952e28 into main Oct 15, 2026
2 checks passed
@Robbertvermeulen
Robbertvermeulen deleted the feat/hard-claims branch October 15, 2026 18:43
github-actions Bot pushed a commit that referenced this pull request Oct 15, 2026
# [0.24.0](v0.23.0...v0.24.0) (2026-10-15)

### Features

* **runner:** hard claims, the runner assigns one card per session ([#115](#115)) ([c952e28](c952e28))
@github-actions

Copy link
Copy Markdown

🎉 This PR is included in version 0.24.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Robbertvermeulen pushed a commit that referenced this pull request Oct 18, 2026
main landed hard claims (#115) while this branch was open: claimed_by is
now a direct column on the card row instead of being derived from
status_changed events via doingClaimsIn. Adapted cardClaimSession to read
claimed_by off getCard() instead of the now-removed doingClaimsIn.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant