Skip to content

feat(runner): workflow-runner core - #9

Open
RobertCrupa wants to merge 3 commits into
feat/judge-actorfrom
feat/workflow-runner-core
Open

RobertCrupa wants to merge 3 commits into
feat/judge-actorfrom
feat/workflow-runner-core

Conversation

@RobertCrupa

Copy link
Copy Markdown

Adds the workflow-runner Actor (`actors/workflow-runner/`): reads a Langfuse dataset, runs one headless Claude Code session per scenario in parallel, emits traces, collects evidence, scores deterministic checks, calls the judge, and reports team-facing scope/health/Slack digest results.

The harness adapter registry supports a single kind (`claude-code`) here; Codex is added as a second backend in a later PR in this stack.

Depends on the judge Actor from #8.

🤖 Generated with Claude Code

Reads a Langfuse dataset (a suite), runs one headless Claude Code session per
scenario in parallel, emits traces (agent span + per-turn generations +
per-tool observations), collects evidence (Actor runs, dataset items,
reference runs), scores deterministic checks, calls the judge, and reports
team-facing scope/health/Slack digest results. The harness adapter registry
supports a single kind, claude-code; Codex is added as a second backend in a
later branch. Builds on feat/judge-actor.
…fault

Number(healthThresholdInput) || 0.9 replaced a legal "0" (never fail on
health) with the 0.9 default, so a run could still exit with code 10.
The scheduled-run Slack digest default never fired either: Apify sets
APIFY_META_ORIGIN=SCHEDULER, which lowercases to "scheduler" and never
equals the "schedule" literal the check compares against.

Both resolutions move to a pure src/config.ts so they can be tested
without importing the Actor entry point: resolveHealthThreshold falls
back only on a missing or non-finite value, resolveTrigger normalises
the scheduler origin to the "schedule" label the input schema
documents, and shouldNotify reads that label. The notify field loses
its false default so an unset value can mean "scheduled runs only".
Sessions are spawned detached, so each `claude` process group survived
an abort and kept burning compute and tokens after the run stopped.
Track every live child in adapters/shared.ts and kill the whole set
from an Actor 'aborting' handler before exiting, as AGENTS.md requires.
@RobertCrupa
RobertCrupa force-pushed the feat/workflow-runner-core branch from 572d72c to d4b2e40 Compare September 21, 2026 13:29
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.

3 participants