Repository navigation
QA run · integration-system.job-scheduled-run (1/1) · 55a806a7 · 2026-10-17 · 1 PASS / 0 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #24100
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: a scratch copy of
examples/app-showcase(beside it in the worktree, never committed) adding eight scratch jobs and their functions todefineStack({ jobs, functions }), bootedOS_AUTOMATION_SCHEDULED_WORK_ENABLED=1 OS_PORT=41923 objectstack dev --ui --seed-admin -p 41923 -d file:(run dir)/jobs/data.db, then the same copy on a fresh DB with--log-level debug(port 41924) for the DEBUG line; each stopped by its process-group id. The two build probes ranobjectstack buildon a second scratch copy. - persona(s): the seeded admin (
admin@objectos.ai), identity proven withGET /api/v1/auth/get-sessionbefore the first cell - timestamps: 2026-10-17, 00:23Z to 00:26Z
Scope
Selector integration-system.job-scheduled-run resolves to 1 runnable item: integration-system.job-scheduled-run at revision 4, P1, surface mixed. No planned or blocked-hidden item.
Per-clause verdicts
| # | clause (short) | verdict | evidence |
|---|---|---|---|
| 0 | cron, interval, once each fire | pass | qa_job_interval (intervalMs 5000): 12 success runs by 00:24:26, each with a side-effect line; qa_job_once (at 00:24:34.493Z): one run at 00:24:34.493Z, side-effect "once"; qa_job_cron (* * * * *, timezone Asia/Tokyo): runs at 00:24:00 and 00:25:00, side-effect "cron". sys_job persists schedule_type / schedule_expression / timezone per job; showcase_health_sweep is registered ("[Registry] Registered job: com.example.showcase:showcase_health_sweep") with its sys_job row (cron 0 1 * * *) |
| 1 | name-keyed sys_job and counters | pass | sys_job rows keyed by name with adapter ids (job_…); counters move with each run: interval run_count 3→12, cron 1→2, once 0→1, throw failure_count 2→3, last_run_at / last_status updated each time |
| 2 | retry per the converged policy; no policy = one attempt | pass | qa_job_throw (maxRetries 2, backoffMs 1000, multiplier 2): attempts 1, 2, 3 at 00:24:23.504, 00:24:24.508 (+1.0s), 00:24:26.515 (+2.0s), each failed "qa deliberate failure", then last_status failed; qa_job_throw_nopolicy: exactly one attempt per fire |
| 3 | over-timeout run is timeout and counts as a failure |
pass | qa_job_timeout (timeoutMs 1000, handler sleeps 3s): run status timeout, error "Job "qa_job_timeout" timed out after 1000ms", failure_count 1; the handler finished at +3s after the run was recorded (abandoned, not cancelled). Retry-of-timeout was not exercised (the probe had no policy) |
| 4 | the dangerous skip is a WARN; enabled:false at DEBUG | pass | default-level boot: WARN [AppPlugin] job handler not found in bundle.functions — skipping … {"job":"qa_job_nohandler","handler":"qaNoSuchFunction"}; the debug boot: DEBUG [AppPlugin] job disabled — skipping {"job":"qa_job_disabled"}. Neither job has a sys_job or sys_job_run row, and qa_job_disabled's handler never wrote its side effect |
| 5 | closed doors refuse loudly | pass | build probe id: 'x': exit 2, "Unrecognized key(s) on this job: id. • job.id was removed in @objectstack/spec 17.0.0 … name IS the job's identity everywhere … Run os migrate meta --from 16"; build probe with cron and fn: exit 2, "Did you mean cron → schedule, fn → handler?"; runtime PUT /api/v1/meta/job/qa_runtime_job 403 NOT_CREATABLE, follow-up GET 404 |
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.job-scheduled-run r4: pass (6 pass of 6 clauses).
- The revision this run validates holds: without the fixture switch a stock boot schedules nothing — the stock boot on port 41921 (no switch) holds no showcase_health_sweep sys_job row (only approvals-sla-escalation) and its banner says no packaged
defineJobis scheduled — and with it every variant fired. Clause 4 reads the WARN at the default level and the DEBUG line on the debug boot, as revised. - Checklist-accuracy finding of this run, fixed on the branch before this record: fixtures.requires[2] quoted the AppPlugin "declarative jobs NOT scheduled" line as what the boot logs, but that line is info-level; at the default level the boot banner carries the reason. The fixture text now quotes both.
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): every clause PASS; nothing to extract. 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 itemintegration-system.job-scheduled-runlanded with #24141 (9ffe8af094), Part of #24036; itshistoryrow names #24036.Generated by Claude Code