Skip to content

Commit adb0450

Browse files
committed
docs(qa): object-hook-lifecycle step 1 carries the inquiry's required fields
The re-run's name-only body answered 400 VALIDATION_FAILED before any hook ran; email and message are required on showcase_inquiry. Claude-Session: https://claude.ai/code/session_016PVjjuVPte5XEJvaQx1E4t Co-authored-by: Claude <noreply@anthropic.com>
1 parent f294a59 commit adb0450

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

‎docs/qa/platform-checklist/areas/records-forms.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3288,7 +3288,7 @@
32883288
],
32893289
"steps": [
32903290
"boot showcase isolated WITH OS_LOG_LEVEL=info exported (or --log-level info): the audit oracle is a ctx.log.info line, and `os dev` defaults the kernel logger to warn (packages/cli/src/utils/log-level.ts DEFAULT_LOG_LEVEL), so on a default boot a correct product prints no audit line and every 'fires' clause reads as a no-fire; sign in as seeded admin; confirm the four hooks this item drives actually registered before asserting any no-fire — GET /api/v1/meta/types/hook (or the boot log) lists showcase_normalize_task_title / showcase_stamp_inquiry_defaults / showcase_audit_task_completion / showcase_warn_over_budget (a hook that never bound fakes every no-fire — seed-data-thin)",
3291-
"stamp defaults (beforeInsert): POST /api/v1/data/showcase_inquiry {name:'os-qa-<runid>'} OMITTING status AND source; re-read via GET and confirm source == 'web' — the hook is the SOLE producer of that value (the source field carries no default), so a correct read proves the hook fired; status == 'new' corroborates but is NOT hook-attributable alone (the 'new' status option is default:true)",
3291+
"stamp defaults (beforeInsert): POST /api/v1/data/showcase_inquiry {name:'os-qa-<runid>', email, message} — email and message are required, so a name-only body answers 400 VALIDATION_FAILED before any hook runs — OMITTING status AND source; re-read via GET and confirm source == 'web' — the hook is the SOLE producer of that value (the source field carries no default), so a correct read proves the hook fired; status == 'new' corroborates but is NOT hook-attributable alone (the 'new' status option is default:true)",
32923292
"title trim (beforeInsert + beforeUpdate): POST /api/v1/data/showcase_task with title ' os-qa-<runid> ' (leading/trailing spaces) and valid required fields; re-read → title == 'os-qa-<runid>' (insert trim); then PATCH the same row's title to another padded value and re-read → trimmed again (update trim); ONE multi-event hook covered both",
32933293
"completion audit — FIRES (transition): PATCH /api/v1/data/showcase_task/<Build homepage id> {done:true} (previous done:false); after the HTTP response resolves, settle briefly (the audit is async fire-and-forget, it runs after the write returns), then read the server log for 'task completed: Build homepage'",
32943294
"completion audit — DOES NOT FIRE (two-root proof): PATCH an already-done task (<App wireframes id>, done:true) changing ONLY priority (medium→high), leaving done untouched; settle; confirm NO new 'task completed: App wireframes' line — previous.done == true makes the transition condition false even though record.done == true",
@@ -3416,7 +3416,7 @@
34163416
{
34173417
"revision": 5,
34183418
"date": "2026-10-16",
3419-
"change": "steps[0] and acceptance[8].verify corrected (checklist-accuracy findings of QA run #23949, wave #23878). The audit oracle is a ctx.log.info line, and the CLI's default log level is warn, so the boot step now exports OS_LOG_LEVEL=info (#23949 ran on an info boot). The fail-closed scratch must be runtime-unevaluable, not uncompilable: an uncompilable condition is refused at authoring with 422 INVALID_METADATA expression-invalid and never reaches the runtime gate. Not loosened: a write that lands past an unevaluable condition still FAILS",
3419+
"change": "steps[0], steps[1] and acceptance[8].verify corrected (checklist-accuracy findings of QA run #23949, wave #23878, and of this card's re-run). The audit oracle is a ctx.log.info line, and the CLI's default log level is warn, so the boot step now exports OS_LOG_LEVEL=info (#23949 ran on an info boot). The fail-closed scratch must be runtime-unevaluable, not uncompilable: an uncompilable condition is refused at authoring with 422 INVALID_METADATA expression-invalid and never reaches the runtime gate. And steps[1]'s inquiry body named only `name`, which answers 400 VALIDATION_FAILED (email and message are required) before any hook runs; the step now carries them. Not loosened: a write that lands past an unevaluable condition still FAILS",
34203420
"ref": "#24036"
34213421
}
34223422
]

0 commit comments

Comments
 (0)