Skip to content

feat(workflows): set heartbeat cadence explicitly on every builtin workflow - #2383

Merged
flora131 merged 1 commit into
mainfrom
feat/workflow-heartbeat-builtins
Aug 14, 2026
Merged

feat(workflows): set heartbeat cadence explicitly on every builtin workflow#2383
flora131 merged 1 commit into
mainfrom
feat/workflow-heartbeat-builtins

Conversation

@flora131

@flora131 flora131 commented Aug 14, 2026

Copy link
Copy Markdown
Collaborator

Stack for #1975

Merge bottom to top; each PR is based on the one below it.

PR Slice
top this PR ← you are here builtin heartbeat cadences
#2379 terminal cleanup and restart recovery
#2377 scheduling and queued parent delivery
bottom #2229 authoring contract and event payload

Now that a positive cadence actually delivers, each bundled builtin should say what it wants rather than inherit it.

open-claude-design0, runs quiet

It is driven by the user reviewing generated HTML turn by turn, so the parent chat is already the thing holding it to its goal. A periodic alignment steer would interrupt that review rather than inform it.

The eight autonomous builtins → 15, stated explicitly

adversarial-verification, classify-and-act, fan-out-and-synthesize, generate-and-filter, goal, loop-until-done, ralph, tournament.

These were already resolving to 15 by omission, so their behaviour does not change. Stating it keeps the per-workflow decision visible in the definition and stops a future change to the global default from silently re-cadencing a long autonomous run — which is exactly the class of run where an unnoticed cadence change matters most.

Only open-claude-design changes behaviour.

Verification

  • npm run check green
  • npm run test:unit: 644 files, 6,307 tests pass
  • test/unit/builtin-workflow-heartbeat-cadence.test.ts pins all nine: the eight at 15, open-claude-design at 0, and asserts every builtin carries a resolved non-negative finite cadence, so neither the disable nor the default can drift unnoticed

Note for reviewers: heartbeats are top-level only — a builtin invoked as a nested ctx.workflow(...) child never heartbeats the parent chat, so these settings apply when the builtin is launched as a top-level run.

Part of #1975


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

Greptile Summary

Bundled workflows now declare their heartbeat cadence explicitly: autonomous workflows retain a 15-minute cadence, while open-claude-design remains quiet during user-led design review.

Confidence Score: 5/5

No blocking failure remains.

No accepted blocking findings remain.

T-Rex T-Rex Logs

What T-Rex did

  • Ran the omission probe to verify that the omission path returns a successful exit and that the resolved value matches the default of 15.
  • Executed the current builtin heartbeat cadence test and confirmed all tests passed (10/10).
  • Identified the relevant defaulting path in packages/workflows/src/authoring/workflow.ts (lines 162–165) and noted the non-enforcing assertion referenced in the related unit test.
  • Cataloged the artifacts that support verification: the temporary omission-path e2e test source, and the outputs of the omission probe and the current cadence test.

View all artifacts

T-Rex Ran code and verified through T-Rex

Reviews (2): Last reviewed commit: "feat(workflows): set heartbeat cadence e..." | Re-trigger Greptile

Comment thread test/unit/builtin-workflow-heartbeat-cadence.test.ts
@flora131
flora131 force-pushed the feat/workflow-heartbeat-cleanup branch from 8793da7 to 40efe64 Compare August 14, 2026 16:59
…rkflow

open-claude-design sets 0 and runs quiet. It is driven by the user reviewing
generated HTML turn by turn, so the parent chat is already the thing holding it
to its goal; a periodic alignment steer would interrupt that review rather than
inform it.

The eight autonomous builtins — adversarial-verification, classify-and-act,
fan-out-and-synthesize, generate-and-filter, goal, loop-until-done, ralph, and
tournament — declare the 15-minute default explicitly. They were already
resolving to it by omission, so their behaviour is unchanged; stating it keeps
the per-workflow decision visible and stops a future change to the global
default from silently re-cadencing a long autonomous run.

A test pins all nine, so neither the disable nor the default can drift
unnoticed.

Assistant-model: Claude Opus 5
@flora131
flora131 force-pushed the feat/workflow-heartbeat-builtins branch from e138c3b to b7501fe Compare August 14, 2026 17:00
@flora131
flora131 changed the base branch from feat/workflow-heartbeat-cleanup to main August 14, 2026 17:17
@flora131
flora131 merged commit 44c3f47 into main Aug 14, 2026
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant