feat(core,daemon,cli): add dryRun thread-level parameter to StartSignal #103

Merged
xiaomo merged 1 commits from feat/101-dry-run into main 2026-04-24 23:50:56 +00:00
Owner

What

Add dryRun: boolean to StartSignal.meta, allowing workflows to skip side effects during test runs.

Why

Workflows need a way to run end-to-end without actual side effects (file writes, git ops, API calls). dryRun as a thread-level param lets each role decide what to skip.

Changes

  • core/types.ts: StartSignal.meta{ maxRounds: number; dryRun: boolean }
  • core/daemon-ipc-protocol.ts: DaemonIpcTriggerWorkflowRequest + parseTriggerWorkflowFields include dryRun (default false)
  • cli/commands/workflow.ts + daemon-client.ts: Parse and pass dryRun from --payload JSON
  • daemon/workflow-worker.ts: Propagate dryRun through StartThread/ResumeThread IPC, isStartMeta guard, initThreadMessages
  • daemon/workflow-manager.ts + kernel.ts: WorkflowLaunchParams includes dryRun; sense-triggered workflows default false
  • workflow-utils: New isDryRun(start: StartSignal): boolean helper
  • store/log-store.ts: getTriggerPayload handles dryRun in launch records

Usage

nerve workflow trigger my-wf --payload '{"prompt":"test","dryRun":true}'

Tests

376 tests pass across all packages (core 26, workflow-utils 4, store 73, cli 122, daemon 151).

Ref

Fixes #101

## What Add `dryRun: boolean` to `StartSignal.meta`, allowing workflows to skip side effects during test runs. ## Why Workflows need a way to run end-to-end without actual side effects (file writes, git ops, API calls). `dryRun` as a thread-level param lets each role decide what to skip. ## Changes - **core/types.ts**: `StartSignal.meta` → `{ maxRounds: number; dryRun: boolean }` - **core/daemon-ipc-protocol.ts**: `DaemonIpcTriggerWorkflowRequest` + `parseTriggerWorkflowFields` include `dryRun` (default `false`) - **cli/commands/workflow.ts** + **daemon-client.ts**: Parse and pass `dryRun` from `--payload` JSON - **daemon/workflow-worker.ts**: Propagate `dryRun` through `StartThread`/`ResumeThread` IPC, `isStartMeta` guard, `initThreadMessages` - **daemon/workflow-manager.ts** + **kernel.ts**: `WorkflowLaunchParams` includes `dryRun`; sense-triggered workflows default `false` - **workflow-utils**: New `isDryRun(start: StartSignal): boolean` helper - **store/log-store.ts**: `getTriggerPayload` handles `dryRun` in launch records ## Usage ```bash nerve workflow trigger my-wf --payload '{"prompt":"test","dryRun":true}' ``` ## Tests 376 tests pass across all packages (core 26, workflow-utils 4, store 73, cli 122, daemon 151). ## Ref Fixes #101
xiaoju added 1 commit 2026-04-24 23:46:23 +00:00
- StartSignal.meta gains dryRun: boolean (alongside maxRounds)
- DaemonIpcTriggerWorkflowRequest includes dryRun, parsed with default false
- CLI parses dryRun from --payload JSON, passes through daemon client
- workflow-worker/workflow-manager propagate dryRun through full IPC chain
- Sense-triggered workflows default to dryRun: false
- workflow-utils exports isDryRun(start) helper
- All tests updated, 376 pass

Fixes #101
xiaomo approved these changes 2026-04-24 23:50:54 +00:00
xiaomo left a comment
Owner

LGTM — 全链路 dryRun 透传干净,防御性解析到位,测试覆盖充分。

LGTM — 全链路 dryRun 透传干净,防御性解析到位,测试覆盖充分。
xiaomo merged commit 6f2cddd695 into main 2026-04-24 23:50:56 +00:00
This repo is archived. You cannot comment on pull requests.
No Reviewers
No Label
2 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: uncaged/nerve#103