feat(queue): derivePresenceStatus + gedeelde berichtpresets (IDEA-212) #59

Merged
janpeter merged 3 commits from feat/idea-212-presence-presets into main 2026-09-13 09:41:03 +02:00
Owner

Wat

Twee zuivere modules voor IDEA-212 (presetknoppen, multiselect-filters en watcher-overzicht op /queue/messages):

  • derivePresenceStatus in lib/queue-identity.ts, met PRESENCE_STATUSES, PresenceStatus en PresenceStatusInput. Dit is dezelfde bindende regel als de twins in s4m-queue (src/presence-db.ts) en scrum4me-mcp (src/queue/presence.ts), spec IDEA-194 §6.1. Hij wordt hier gedeeld zodat scrum4me-workers (watcher-matrix) en Scrum4Me hem kunnen importeren.
  • lib/queue-message-presets.ts: de presets for-me, active, done en all, met expandPreset() (statuses / toModels / notToModels) en matchesPreset().
    • Aan mij = open en naar-model jp.
    • Active = open en naar-model niet jp, dus inclusief berichten aan het job-namespace. Dat is uitgedrukt als uitsluitlijst (beslissing B8), niet als include-lijst.
    • Done = done, failed of cancelled.
  • fixtures/queue-message-presets.json: de uitgeklapte presets voor niet-TS-clients (latere iOS/Swift-kopie). Een test houdt de fixture gelijk aan expandPreset.

lib/queue-message-presets.ts importeert alleen types uit ./queue-identity, zodat verify-no-deps groen blijft.

Waarom

Workers (snelfilters) en Scrum4Me (Watch-snapshot, nu nog letterlijke SQL) moeten dezelfde emmers gebruiken. Straks geldt dat ook voor de iOS-app. Spec en plan (dubbel GO) staan in scrum4me-workers docs/superpowers/ op branch claude/idea-212-presets-watchers.

Tests

  • __tests__/queue-presence-status.test.ts: 11 tests (de negen twin-gevallen, de statusvolgorde en de drempel). Rood gezien vóór de implementatie.
  • __tests__/queue-message-presets.test.ts: 8 tests. Dat omvat alle presets, een job-id in Active, "elke status×model valt in precies één emmer" en de fixture-pariteit. Rood gezien vóór de implementatie.
  • npm run verify: exit 0, 28 files en 293 tests.

Na merge

scrum4me-workers en Scrum4Me pinnen hun submodule op de merge-commit. Die PR's volgen.

🤖 Generated with Claude Code

## Wat Twee zuivere modules voor IDEA-212 (presetknoppen, multiselect-filters en watcher-overzicht op `/queue/messages`): - **`derivePresenceStatus`** in `lib/queue-identity.ts`, met `PRESENCE_STATUSES`, `PresenceStatus` en `PresenceStatusInput`. Dit is dezelfde bindende regel als de twins in s4m-queue (`src/presence-db.ts`) en scrum4me-mcp (`src/queue/presence.ts`), spec IDEA-194 §6.1. Hij wordt hier gedeeld zodat scrum4me-workers (watcher-matrix) en Scrum4Me hem kunnen importeren. - **`lib/queue-message-presets.ts`**: de presets `for-me`, `active`, `done` en `all`, met `expandPreset()` (statuses / toModels / notToModels) en `matchesPreset()`. - Aan mij = open en naar-model jp. - **Active = open en naar-model niet jp**, dus inclusief berichten aan het job-namespace. Dat is uitgedrukt als uitsluitlijst (beslissing B8), niet als include-lijst. - Done = done, failed of cancelled. - **`fixtures/queue-message-presets.json`**: de uitgeklapte presets voor niet-TS-clients (latere iOS/Swift-kopie). Een test houdt de fixture gelijk aan `expandPreset`. `lib/queue-message-presets.ts` importeert alleen types uit `./queue-identity`, zodat `verify-no-deps` groen blijft. ## Waarom Workers (snelfilters) en Scrum4Me (Watch-snapshot, nu nog letterlijke SQL) moeten dezelfde emmers gebruiken. Straks geldt dat ook voor de iOS-app. Spec en plan (dubbel GO) staan in scrum4me-workers `docs/superpowers/` op branch `claude/idea-212-presets-watchers`. ## Tests - `__tests__/queue-presence-status.test.ts`: 11 tests (de negen twin-gevallen, de statusvolgorde en de drempel). Rood gezien vóór de implementatie. - `__tests__/queue-message-presets.test.ts`: 8 tests. Dat omvat alle presets, een job-id in Active, "elke status×model valt in precies één emmer" en de fixture-pariteit. Rood gezien vóór de implementatie. - `npm run verify`: exit 0, 28 files en 293 tests. ## Na merge scrum4me-workers en Scrum4Me pinnen hun submodule op de merge-commit. Die PR's volgen. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
feat(queue): gedeelde berichtpresets + fixture voor niet-TS-clients (IDEA-212)
All checks were successful
CI / Verify (pull_request) Successful in 41s
d17c08462d
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
s4m-codex-reviewer left a comment

Verdict: REQUEST_CHANGES

geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.

Findings

  • error — lib/queue-message-presets.ts:17 — De nieuwe shared lib-module importeert relatief met ./queue-identity zonder .js-extensie. De productdoc Product-doc write closure in @shared (dep-clean, ESM) legt vast dat @shared ESM TS source gebruikt met .js-extensioned relative imports, omdat directe Node/tsx consumers afhankelijk zijn van correcte ESM-resolutie. Pas dit aan naar een .js-extensioned import zodat de module dezelfde runtime-conventie volgt als de rest van shared.

Opmerkingen

De toegevoegde pure functies en tests zijn verder inhoudelijk coherent met de gedeelde-library rol van scrum4me-shared: geen framework-/Prisma-imports, duidelijke fixtures voor niet-TS consumers, en dekking voor de presence-status volgorde en presetsemantiek.

# Verdict: REQUEST_CHANGES geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden. ## Findings - **error** — `lib/queue-message-presets.ts:17` — De nieuwe shared `lib`-module importeert relatief met `./queue-identity` zonder `.js`-extensie. De productdoc `Product-doc write closure in @shared (dep-clean, ESM)` legt vast dat `@shared` ESM TS source gebruikt met `.js`-extensioned relative imports, omdat directe Node/tsx consumers afhankelijk zijn van correcte ESM-resolutie. Pas dit aan naar een `.js`-extensioned import zodat de module dezelfde runtime-conventie volgt als de rest van shared. ## Opmerkingen De toegevoegde pure functies en tests zijn verder inhoudelijk coherent met de gedeelde-library rol van `scrum4me-shared`: geen framework-/Prisma-imports, duidelijke fixtures voor niet-TS consumers, en dekking voor de presence-status volgorde en presetsemantiek.
fix(queue): .js-extensie op relatieve import in queue-message-presets (IDEA-212)
All checks were successful
CI / Verify (pull_request) Successful in 41s
ea12e8b990
Volgt de ESM-conventie van shared lib/ voor directe Node/tsx-consumers.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign in to join this conversation.
No reviewers
No labels
severity/s4
No milestone
No project
No assignees
2 participants
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-shared!59
No description provided.