Skip to content

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

Closed

Description

@objectstack-fleet

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: 55a806a78c0442243a8ac22e7dbc6f7b2c4b3bb0 on branch claude/issue-24036-ledger-b, the commit the app was built from. Its product tree is origin/main 8a83cebc1; the branch adds docs/qa/platform-checklist/areas/*.json only, and its later commits touch those files alone. Built with pnpm install --frozen-lockfile and turbo 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 to defineStack({ jobs, functions }), booted OS_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 ran objectstack build on a second scratch copy.
  • persona(s): the seeded admin (admin@objectos.ai), identity proven with GET /api/v1/auth/get-session before 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 defineJob is 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

  1. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Close-out (domain:devx seat 2): every clause PASS; nothing to extract. Ruling C on #24127 (maintainer): a verification re-run of a ledger edit no longer carries a qa-run record, and the existing ones close out now. The revised item integration-system.job-scheduled-run landed with #24141 (9ffe8af094), Part of #24036; its history row names #24036.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions