Repository navigation
QA run · integration-system.notification-preference-suppression (1/1) · 55a806a7 · 2026-10-17 · 0 PASS / 1 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #24102
Description
Run record for the re-run #24036 (half B) asks for after revising this item. Runner: an os-dev subagent dispatched by the domain:devx seat 2 PM (session session_016PVjjuVPte5XEJvaQx1E4t). Protocol: .claude/skills/checklist-test/SKILL.md + docs/qa/platform-checklist/RUNNER.md. Executed sequentially (no subagent tool in this runner).
Environment fingerprint
- framework:
55a806a78c0442243a8ac22e7dbc6f7b2c4b3bb0on branchclaude/issue-24036-ledger-b, the commit the app was built from. Its product tree isorigin/main8a83cebc1; the branch addsdocs/qa/platform-checklist/areas/*.jsononly, and its later commits touch those files alone. Built withpnpm install --frozen-lockfileandturbo run build(75/75 tasks). .objectui-sha:f8267df93aba8fb09cc1cc0692eadc0c8c5a5e56(no browser leg in this item).- boot:
OS_PORT=41921 objectstack dev --ui --seed-admin -p 41921 -d file:(run dir)/api2/data.dbfromexamples/app-showcase, its own port and file DB (the CLI also provisioned the siblingdata.telemetry.db), stopped by its own process-group id afterwards. - persona(s): the seeded admin; an assignee member and a control member, each minted through invite + sign-up with their own session
- timestamps: 2026-10-17, 00:27Z to 00:29Z
Scope
Selector integration-system.notification-preference-suppression resolves to 1 runnable item: integration-system.notification-preference-suppression at revision 3, P2, surface mixed. No planned or blocked-hidden item.
Per-clause verdicts
| # | clause (short) | verdict | evidence |
|---|---|---|---|
| 0 | a suppression row mutes the channel | pass | happy fire (task "Build homepage" reassigned) → assignee task.assigned count 1. POST /api/v1/data/sys_notification_preference {user_id: assignee, topic: task.assigned, channel: inbox, enabled: false} 201; the next fire (task "Content backlog") → count stays 1 |
| 1 | no dead-letter fake | pass | no new sys_notification_delivery row for the muted fire, and no failed or dead row for the assignee; no new inbox row |
| 2 | flip back resumes | pass | PATCH the row enabled:true 200; the next fire (task "App wireframes") → count 2 |
| 3 | most-specific-wins; mandatory topic bypass | blocked(fixture) | user row ON over user_id: '*' global OFF → the fire delivered (count 3) — pass; control: a member with no user row under the same global OFF got 0. The mandatoryTopics half is not configurable on showcase (knownGaps[1]); its mechanism rests on preference-resolver.test.ts (25 passed) |
| 4 | a sys_notification_template renders through a delivery | pass | row (topic qa.ntpl.RUNID, channel email, locale en, subject "NT subject for {{ title }}", body "NT body: {{ title }} via template", format text); a scratch notify flow on that topic, channel email, title QA-NT-TITLE, to the assignee (no locale) → sys_email subject "NT subject for QA-NT-TITLE", body "NT body: QA-NT-TITLE via template". Ladder control: a topic whose only row is en-US, sent to a recipient with no locale, rendered the inline title and body (subject "INLINE-…") — the en-US row was not used |
Automated pins run (RUNNER rule 6)
packages/services/service-messaging/src/preference-resolver.test.ts: 25 passed (incl. the mandatory-topic bypass cases), under the shared verify lock.
Reproduction rules
No clause scored fail, so none is owed. No authentication or authorization hole was found; nothing here is withheld under the RUNNER rule-2 carve-out.
Derived item verdict
integration-system.notification-preference-suppression r3: partial (4 pass + 1 blocked(fixture) of 5 clauses).
- The revised step[6] and clause 4 hold as written: the row authored at
enrendered for a no-locale recipient, and anen-US-only row was never reached from that ladder. - Fixture gap (parked on platform-checklist: revise the items the #23878 full run and the #23879 since:v18 run found stale (knownGaps, steps, fixtures, oracles, source anchors across 15 areas; no clause red) — ledger follow-up #24036, unchanged): mandatoryTopics is a constructor option the showcase does not set.
Checklist-accuracy findings and fixture gaps from this run close out on #24036.
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 17, 2026
Close-out (
domain:devxseat 2): nofail; the onepartialgap is parked below. Ruling C on #24127 (maintainer): a verification re-run of a ledger edit no longer carries aqa-runrecord, and the existing ones close out now. The revised item landed with #24141 (9ffe8af094), Part of #24036.Parked-on: #24036 · integration-system.notification-preference-suppression · clause 3 mandatoryTopics half blocked(fixture): a constructor option the showcase does not set (the item's knownGaps[1]; mechanism pinned by preference-resolver.test.ts)
Generated by Claude Code