You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
spec: ExecutionStatus gains missed (a scheduled flow's due time that passed while no kernel was ticking, recorded once, never replayed) — child of #25235, ruling 6353729816 #25325
Filed by domain:spec seat 2 (seat post #18549), os-bill, session session_01B2EeooonSXrANpkpgUSfFZ, on the cross-lane hand-off 6353797671 and its addendum 6354069893 from domain:services seat 1 (card #25235, claim 6353512245). ⛔ Not a claim.
Parent: #25235 (domain:services). Ruling: 6353729816 on #25235, letter A, quoting the maintainer's objectstack-ai/cloud#3149 item 5: "on the next tick, each scheduled flow whose due time passed while the kernel was not ticking gets one run-history entry with status missed (due time, detected time)", "No replay".
What this lane adds
packages/spec/src/automation/execution.zod.ts: 'missed' appended last to ExecutionStatus (the file's own rule, as for refused), so execution.test.ts moves with it: the first eight members unchanged, the ninth stays refused, the tenth is missed.
TSDoc, in substance: a scheduled flow's due time that passed while no kernel was ticking, recorded once by the next kernel that found it; terminal; never started, resumed or replayed; distinct from cancelled (nobody cancelled it) and from failed (nothing ran). On the run row and the ExecutionLog, startedAt carries the due time and completedAt the detection time; durationMs, error and refusalMessage are absent. No new field.
One services line rides the same PR, agreed in advance by the services seat (6354069893):packages/plugins/plugin-approvals/src/approval-service.ts (around line 526) declares RUN_STATUS_LIVENESSas const satisfies Record<ExecutionStatus, RunLiveness>, so the new member does not compile without missed: 'terminal' there, and the services PR cannot carry it first (satisfies refuses the extra key before the member exists).
Not touched: AutomationResult.status, TriggerFlowResponseSchema.data.status (contracts/automation-result-status.pin.test.ts stays as is), JobExecutionStatus. ListRunsRequestSchema.status and the REST ?status= filter widen by construction; the generated references for automation/execution and api/automation-api regenerate.
Who waits on it
domain:services (#25235): sys_automation_run.status and the engine's TERMINAL_RUN_STATUSES enumerate ExecutionStatus, and listRuns returns ExecutionLog entries typed by it, so a missed row before the member exists would be an off-spec value (Prime Directive 12). The services half is built and opens its PR once this member is on main.
Acceptance
ExecutionStatus ends with missed; the order pin moves as above; the TSDoc says what missed means and what the run row carries.
plugin-approvals typechecks and its totality test passes with missed: 'terminal'.
Declarations (the hand-off's reading; the dev measures): Clause-②: yes (widening), Metadata-protocol: none (a run-row and wire value, nothing an author writes).
Dedupe: searched issues for "ExecutionStatus missed scheduled flow run history status"; only the parent #25235. New.
Claim: PM loop round 15 (the maintainer's one wind-down exception for this seat)
Session: session_01B2EeooonSXrANpkpgUSfFZ (seat session; an in-seat os-dev subagent implements)
Account: os-bill
Branch: claude/project-thread-7afd2e (this session's one designated push branch, restarted from main; claude/issue-N-slug is the convention, and this is the measured platform exception the pm-dispatch runbook records)
Worktree: objectstack-issue-25325
Domain: domain:spec
Seat: domain:spec#2 (seat post #18549)
File surface: packages/spec/src/automation/execution.zod.ts and execution.test.ts, the one agreed services line in packages/plugins/plugin-approvals/src/approval-service.ts (missed: 'terminal' in RUN_STATUS_LIVENESS, hand-off 6354069893), the regenerated references for automation/execution and api/automation-api, one changeset (stop on breach; explain in the report)
Container & model: S, mode:in-seat, model: default, effort: medium; a contract review of record before the queue, by the maintainer's other review account (needs:contract-review)
Clause-②: yes (widening) (expected: one enum member appended; the dev measures it from the diff)
Responsibility: n/a — not a defect; a new terminal run status ruled under 6353729816 on #25235
Thread-read: none
Serial constraints cleared: none. No open PR touches execution.zod.ts or approval-service.ts (open-PR file scan).
{
"issue": 25325,
"status": "done",
"branch": "claude/project-thread-7afd2e",
"pr": "#25363",
"session": "session_01B2EeooonSXrANpkpgUSfFZ (subagent of the seat session)",
"premise_still_valid": true,
"summary": "ExecutionStatus gains 'missed', appended tenth after 'refused' (premise verified at base 69913f8: nine members, refused last, the satisfies site at approval-service.ts:532). It carries TSDoc on its meaning and on what the ExecutionLog and run row carry. The order pin in execution.test.ts moved (first eight unchanged, [8]=refused, at(-1)=missed, length 10). plugin-approvals RUN_STATUS_LIVENESS gains missed: 'terminal', declared to domain:services in the PR body citing 6354069893. gen:docs regenerated exactly the two expected reference pages, and one patch changeset covers @objectstack/spec and @objectstack/plugin-approvals. One wording correction against the schema: ExecutionLogSchema has no top-level error field (errors live only on steps[]), so the TSDoc lists durationMs/refusalMessage as absent and steps as empty on the ExecutionLog, and duration_ms/error/refusal_message as absent on the stored row (started_at/finished_at). The card was claimed with an assignee already set (os-bill); I did not write the card assignee. The PR assignee is os-bill.",
"tests": "@ a6b929f: spec build: lock VERDICT command-exit 0. spec vitest src/automation/execution.test.ts: Test Files 1 passed, Tests 49 passed. plugin-approvals closure build ('@objectstack/plugin-approvals^...'): VERDICT 0. plugin-approvals typecheck + test + spec typecheck: VERDICT command-exit 0, Test Files 94 passed, Tests 1214 passed (run-status-liveness totality test included). Reverse verification (cross-package type): ablation-replace deleted the missed: 'terminal' line (anchor x1 -> x0, blob ec2bce55 -> f8e853d6); plugin-approvals typecheck exit 2 with TS1360 (the map no longer satisfies the Record whose key union includes "missed"). Restored with git checkout HEAD --: git diff HEAD empty, HEAD blob hash match. Behavioural ablation: n/a (a type-level enum widening, no tested runtime behaviour changed). The runtime it.each(ExecutionStatus.options) test is declared to CI (Test Core).",
"gates": "dispatch-gates --commands --repo objectstack-ai/objectstack @ a6b929f: 116 derived. All ran with exit codes captured before any pipe: 113 exit 0, 3 exit 3 PREREQUISITE NOT MET => NOT MEASURED (check:skill-examples: client SDK dist absent; check:i18n: workspace CLI dist absent; check:dual-build-cjs-loads: whole-repo dist absent). Declared to CI. --ran: '116 derived famil(ies) accounted for — 113 run, 3 NOT-MEASURED', 0 UNRUN, exit 0. spec check:generated: first run exit 1 naming only content/docs/references/** (gen:docs). After gen:docs, check:api-surface, check:authorable-surface and check:docs were among the 113 green. PR check-runs at a6b929f when reported: 'No other open PR may claim the same issue'=success; Packed-tarball smoke and 18.x upgrade harness=skipped (opt-in); Lint, Type Check, Check Changeset, Governed Surface Queue Guard and the claim checks=in_progress. Test Core and Build Core were not yet listed.",
"line_budget": "6 files, +48 / -6 vs base 69913f8 (changeset 19, references 3/2, approval-service 3, execution.test 8/4, execution.zod 15)",
"files_changed": [".changeset/25325-execution-status-missed.md", "content/docs/references/api/automation-api.mdx", "content/docs/references/automation/execution.mdx", "packages/plugins/plugin-approvals/src/approval-service.ts", "packages/spec/src/automation/execution.test.ts", "packages/spec/src/automation/execution.zod.ts"],
"deviations": "Branch claude/project-thread-7afd2e instead of claude/issue-25325-*, set by the PM and named in claim 6356112178. The PR body's first line is the platform attribution HTML comment the dispatch requires verbatim; os-dev forbids HTML-comment MARKERS in report text, and this report has none. test:repo and full dogfood not run: there is no ! in the title and no (narrowing) arm, so both belong to CI.",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0 — no MCP GitHub calls; reads via gh api REST",
"api_writes": "2 — fleet-write relay pr_create (POST /repos/objectstack-ai/objectstack/pulls draft + POST /issues/25363/assignees), and this os-dev-report comment (POST /repos//issues/25325/comments via post-stamped.mjs); plus git push of the branch (not a REST write)",
"open_questions": [],
"out_of_scope_findings": []
}
Seat check 6357165210 on head a6b929fa39, under ruling 6353729816 on #25235 and contract review PASS 6357150459. The PR leaves draft and joins the merge queue now; the landing record follows here. Once it is on main, the services half of #25235 can resume.
closed completed by Fixes #25325; pm:dispatched removed in this act
ACCEPT 6357165210 · contract review PASS 6357150459. ExecutionStatus now carries missed on main, so the services half of #25235 can resume on its Restart-when:.
Activity
objectstack-fleet commentedon Oct 23, 2026
Claim: PM loop round 15 (the maintainer's one wind-down exception for this seat)
Session:
session_01B2EeooonSXrANpkpgUSfFZ(seat session; an in-seatos-devsubagent implements)Account:
os-billBranch:
claude/project-thread-7afd2e(this session's one designated push branch, restarted frommain;claude/issue-N-slugis the convention, and this is the measured platform exception the pm-dispatch runbook records)Worktree:
objectstack-issue-25325Domain:
domain:specSeat:
domain:spec#2(seat post #18549)File surface:
packages/spec/src/automation/execution.zod.tsandexecution.test.ts, the one agreed services line inpackages/plugins/plugin-approvals/src/approval-service.ts(missed: 'terminal'inRUN_STATUS_LIVENESS, hand-off6354069893), the regenerated references forautomation/executionandapi/automation-api, one changeset (stop on breach; explain in the report)Container & model:
S,mode:in-seat,model: default,effort: medium; a contract review of record before the queue, by the maintainer's other review account (needs:contract-review)Clause-②: yes (widening) (expected: one enum member appended; the dev measures it from the diff)
Responsibility: n/a — not a defect; a new terminal run status ruled under
6353729816on #25235Thread-read: none
Serial constraints cleared: none. No open PR touches
execution.zod.tsorapproval-service.ts(open-PR file scan).Generated by Claude Code
objectstack-fleet commentedon Oct 23, 2026
os-dev-report
{
"issue": 25325,
"status": "done",
"branch": "claude/project-thread-7afd2e",
"pr": "#25363",
"session": "session_01B2EeooonSXrANpkpgUSfFZ (subagent of the seat session)",
"premise_still_valid": true,
"summary": "ExecutionStatus gains 'missed', appended tenth after 'refused' (premise verified at base 69913f8: nine members, refused last, the satisfies site at approval-service.ts:532). It carries TSDoc on its meaning and on what the ExecutionLog and run row carry. The order pin in execution.test.ts moved (first eight unchanged, [8]=refused, at(-1)=missed, length 10). plugin-approvals RUN_STATUS_LIVENESS gains missed: 'terminal', declared to domain:services in the PR body citing 6354069893. gen:docs regenerated exactly the two expected reference pages, and one patch changeset covers @objectstack/spec and @objectstack/plugin-approvals. One wording correction against the schema: ExecutionLogSchema has no top-level error field (errors live only on steps[]), so the TSDoc lists durationMs/refusalMessage as absent and steps as empty on the ExecutionLog, and duration_ms/error/refusal_message as absent on the stored row (started_at/finished_at). The card was claimed with an assignee already set (os-bill); I did not write the card assignee. The PR assignee is os-bill.",
"tests": "@ a6b929f: spec build: lock VERDICT command-exit 0. spec vitest src/automation/execution.test.ts: Test Files 1 passed, Tests 49 passed. plugin-approvals closure build ('@objectstack/plugin-approvals^...'): VERDICT 0. plugin-approvals typecheck + test + spec typecheck: VERDICT command-exit 0, Test Files 94 passed, Tests 1214 passed (run-status-liveness totality test included). Reverse verification (cross-package type): ablation-replace deleted the missed: 'terminal' line (anchor x1 -> x0, blob ec2bce55 -> f8e853d6); plugin-approvals typecheck exit 2 with TS1360 (the map no longer satisfies the Record whose key union includes "missed"). Restored with git checkout HEAD --: git diff HEAD empty, HEAD blob hash match. Behavioural ablation: n/a (a type-level enum widening, no tested runtime behaviour changed). The runtime it.each(ExecutionStatus.options) test is declared to CI (Test Core).",
"gates": "dispatch-gates --commands --repo objectstack-ai/objectstack @ a6b929f: 116 derived. All ran with exit codes captured before any pipe: 113 exit 0, 3 exit 3 PREREQUISITE NOT MET => NOT MEASURED (check:skill-examples: client SDK dist absent; check:i18n: workspace CLI dist absent; check:dual-build-cjs-loads: whole-repo dist absent). Declared to CI. --ran: '116 derived famil(ies) accounted for — 113 run, 3 NOT-MEASURED', 0 UNRUN, exit 0. spec check:generated: first run exit 1 naming only content/docs/references/** (gen:docs). After gen:docs, check:api-surface, check:authorable-surface and check:docs were among the 113 green. PR check-runs at a6b929f when reported: 'No other open PR may claim the same issue'=success; Packed-tarball smoke and 18.x upgrade harness=skipped (opt-in); Lint, Type Check, Check Changeset, Governed Surface Queue Guard and the claim checks=in_progress. Test Core and Build Core were not yet listed.",
"line_budget": "6 files, +48 / -6 vs base 69913f8 (changeset 19, references 3/2, approval-service 3, execution.test 8/4, execution.zod 15)",
"files_changed": [".changeset/25325-execution-status-missed.md", "content/docs/references/api/automation-api.mdx", "content/docs/references/automation/execution.mdx", "packages/plugins/plugin-approvals/src/approval-service.ts", "packages/spec/src/automation/execution.test.ts", "packages/spec/src/automation/execution.zod.ts"],
"deviations": "Branch claude/project-thread-7afd2e instead of claude/issue-25325-*, set by the PM and named in claim 6356112178. The PR body's first line is the platform attribution HTML comment the dispatch requires verbatim; os-dev forbids HTML-comment MARKERS in report text, and this report has none. test:repo and full dogfood not run: there is no ! in the title and no (narrowing) arm, so both belong to CI.",
"dogfood_battery": "n/a — no
!in the PR title and no (narrowing) arm","mcp_calls": "0 — no MCP GitHub calls; reads via gh api REST",
"api_writes": "2 — fleet-write relay pr_create (POST /repos/objectstack-ai/objectstack/pulls draft + POST /issues/25363/assignees), and this os-dev-report comment (POST /repos//issues/25325/comments via post-stamped.mjs); plus git push of the branch (not a REST write)",
"open_questions": [],
"out_of_scope_findings": []
}
Generated by Claude Code
objectstack-fleet commentedon Oct 23, 2026
ACCEPT on PR #25363 ·
domain:specseat 2 (#18549) · 2026-10-23T04:10ZSeat check
6357165210on heada6b929fa39, under ruling6353729816on #25235 and contract review PASS6357150459. The PR leaves draft and joins the merge queue now; the landing record follows here. Once it is onmain, the services half of #25235 can resume.Generated by Claude Code
objectstack-fleet commentedon Oct 23, 2026
Landing record ·
domain:specseat 2 · sessionsession_01B2EeooonSXrANpkpgUSfFZ· 2026-10-23T04:47Zmerged: true, merge commitd12e650ded11983272a0ebda8c75d962573ebb85origin/maind12e650ded(git merge-base --is-ancestor)gh-readonly-queue/main/*25363*ref remainscompletedbyFixes #25325;pm:dispatchedremoved in this actACCEPT
6357165210· contract review PASS6357150459.ExecutionStatusnow carriesmissedonmain, so the services half of #25235 can resume on itsRestart-when:.Generated by Claude Code