feat(queue): include_archived + queue_archive/queue_unarchive (M32) #113

Merged
janpeter merged 2 commits from feat/m32-archivering into main 2026-08-12 20:32:31 +02:00
Owner

M32 slice 1, Tasks 8–9 van docs/plans/M32-queue-archivering.md (DUBBEL-GO r7, a476639). Spec §4.4 (6d8ea8c).

Wat

  • Submodule-bump vendor/scrum4me-shared0cc70be + npm run sync-schema (schema geregenereerd, niet met de hand).
  • queue_list krijgt include_archived (default falsewhere.archived_at = null); tool-description vermeldt het.
  • messageView geeft archived_at mee; QueueMessageLike en AgentMessageRecord dragen het veld — zonder dat laatste is de ClaimedAgentMessage-shape van queue_next structureel niet meer toewijsbaar en faalt typecheck.
  • Nieuw: queue_archive / queue_unarchive (src/tools/queue-archive.ts), geregistreerd in registerQueueTools. Eén $transaction met WITH RECURSIVE … FOR UPDATE over de transitieve reply-subtree; archiveren weigert integraal met QUEUE_NOT_TERMINAL (inclusief het blokkerende id + status) zodra één rij niet terminaal is; onbekend id → QUEUE_NOT_FOUND. Per rij idempotent (archived_at IS NULL bij archive, IS NOT NULL bij unarchive), géén NOTIFY. Semantiek is 1:1 met de s4m-queue-CLI (PR s4m-queue#19) — anders lopen de oppervlakken uiteen.
  • Tooltabellen in README.md bijgewerkt; CLAUDE.md kreeg een rij in Key source files (die file heeft geen tool-tabel, anders dan het plan aannam).

Twee bestaande guards die meebewogen — beide bedoeld

  1. __tests__/queue-registration.test.ts pint de exacte kernset: nu 9 tools in plaats van 7. De nieuwe tools staan bewust in dezelfde lijst, zodat ook de stdio-only-asserties (niet via http/shared/worktree registreren) hen dekken.
  2. queue-list-tests die de exacte where asserten krijgen archived_at: null; queue-entity-transparency kreeg archived_at: null in de raw-row-fixture. Dat is de bedoelde gedragswijziging, geen regressie — de compiler wees beide aan.

Gate

npm run typecheck && npm test && npm run buildgroen; 182 bestanden, 1376 tests (+4 nieuwe in __tests__/queue-archive.test.ts, eerst rood gedraaid). Vier-weg docs-assertie (queue_archive/queue_unarchive × README/CLAUDE) → TOOLTABELLEN OK.

Rollout

Deze tools werken pas ná de Scrum4Me-migratie (PR Scrum4Me#154, archived_at bestaat dan in de DB). Uitrol naar de mcp-stable-checkout gebeurt in plan-Task 13.

🤖 Generated with Claude Code

M32 slice 1, Tasks 8–9 van `docs/plans/M32-queue-archivering.md` (DUBBEL-GO r7, `a476639`). Spec §4.4 (`6d8ea8c`). ## Wat - Submodule-bump `vendor/scrum4me-shared` → `0cc70be` + `npm run sync-schema` (schema geregenereerd, niet met de hand). - `queue_list` krijgt `include_archived` (default `false` → `where.archived_at = null`); tool-description vermeldt het. - `messageView` geeft `archived_at` mee; `QueueMessageLike` en `AgentMessageRecord` dragen het veld — zonder dat laatste is de `ClaimedAgentMessage`-shape van `queue_next` structureel niet meer toewijsbaar en faalt typecheck. - **Nieuw:** `queue_archive` / `queue_unarchive` (`src/tools/queue-archive.ts`), geregistreerd in `registerQueueTools`. Eén `$transaction` met `WITH RECURSIVE … FOR UPDATE` over de transitieve reply-subtree; archiveren weigert integraal met `QUEUE_NOT_TERMINAL` (inclusief het blokkerende id + status) zodra één rij niet terminaal is; onbekend id → `QUEUE_NOT_FOUND`. Per rij idempotent (`archived_at IS NULL` bij archive, `IS NOT NULL` bij unarchive), **géén NOTIFY**. Semantiek is 1:1 met de s4m-queue-CLI (PR s4m-queue#19) — anders lopen de oppervlakken uiteen. - Tooltabellen in `README.md` bijgewerkt; `CLAUDE.md` kreeg een rij in **Key source files** (die file heeft geen tool-tabel, anders dan het plan aannam). ## Twee bestaande guards die meebewogen — beide bedoeld 1. `__tests__/queue-registration.test.ts` pint de exacte kernset: nu **9** tools in plaats van 7. De nieuwe tools staan bewust in dezelfde lijst, zodat ook de stdio-only-asserties (niet via http/shared/worktree registreren) hen dekken. 2. `queue-list`-tests die de exacte `where` asserten krijgen `archived_at: null`; `queue-entity-transparency` kreeg `archived_at: null` in de raw-row-fixture. Dat is de bedoelde gedragswijziging, geen regressie — de compiler wees beide aan. ## Gate `npm run typecheck && npm test && npm run build` → **groen**; 182 bestanden, **1376 tests** (+4 nieuwe in `__tests__/queue-archive.test.ts`, eerst rood gedraaid). Vier-weg docs-assertie (`queue_archive`/`queue_unarchive` × README/CLAUDE) → `TOOLTABELLEN OK`. ## Rollout Deze tools werken pas ná de Scrum4Me-migratie (PR Scrum4Me#154, `archived_at` bestaat dan in de DB). Uitrol naar de `mcp-stable`-checkout gebeurt in plan-Task 13. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
janpeter/scrum4me-mcp!113
No description provided.