Skip to main content

HERMES_WORKFLOW

Constant HERMES_WORKFLOW 

Source
pub const HERMES_WORKFLOW: &str = "# Hermes 0.21 card machine and independent run supervision. ADR 0001.\ndescription: Hermes Kanban\'s lifecycle and dispatcher, with supercode\'s session lanes\nparams:\n  dispatch_in_gateway: true\n  dispatch_interval_seconds: 60\n  dispatch_stale_timeout_seconds: null\n  failure_limit: 2\n  claim_ttl_seconds: 900\n  max_in_progress: null\n  max_in_progress_per_profile: null\n  max_spawn: null\n  default_assignee: null\n  review_dispatch: true\n  review_skills:\n  - sdlc-review\n  auto_decompose: true\n  auto_decompose_per_tick: 3\n  reconcile_orphans: true\n  block_recurrence_limit: 2\n  rate_limit_cooldown_seconds: 300\n  recent_success_seconds: 3600\n  active_pr_seconds: 86400\n  blocker_pattern: (?i)\\b(quota|rate[\\s_-]?limit|429|403|auth\\w*|unauthorized|forbidden|billing|subscription|access[\\s_]denied|permission[\\s_]denied|invalid[\\s_]api[\\s_]key)\\b\n  pr_pattern: (?i)https?://github\\.com/[^/\\s]+/[^/\\s]+/pull/\\d+\n  session_grace_seconds: 120\n  goal_mode_default: false\n  goal_max_turns: 20\n  heartbeat_quiet_seconds: 1800\n  managers: []\n  machine_offline_grace_seconds: 3600\n  machines: {}\nroles:\n  implementer: card.assignee ?? params.default_assignee\n  reviewer: card.assignee ?? params.default_assignee\n  creator: card.created_by\n  triager: card.assignee ?? params.default_assignee\ninitial:\n- guard: event.initial_status == \'blocked\'\n  target: blocked\n  actions:\n  - assign:\n      field: goal_mode\n      value: \'{{event.goal ?? (event.subtask_of == null && params.goal_mode_default)}}\'\n- guard: event.triage\n  target: triage\n  actions:\n  - assign:\n      field: goal_mode\n      value: \'{{event.goal ?? (event.subtask_of == null && params.goal_mode_default)}}\'\n- guard: \'!card.parents.all(p, p.status in [\'\'done\'\', \'\'archived\'\'])\'\n  target: todo\n  actions:\n  - assign:\n      field: goal_mode\n      value: \'{{event.goal ?? (event.subtask_of == null && params.goal_mode_default)}}\'\n- target: ready\n  actions:\n  - assign:\n      field: goal_mode\n      value: \'{{event.goal ?? (event.subtask_of == null && params.goal_mode_default)}}\'\nstatuses:\n  triage:\n    stored_as: triage\n    description: a rough idea waiting to be specified (Hermes asks its auxiliary model; here a session writes it)\n    run_role: triager\n    resume_as: triage\n  todo:\n    stored_as: todo\n    description: waiting on its parents\n    always:\n    - guard: card.arc != null && card.arc.status in [\'done\', \'archived\']\n      target: blocked\n      actions:\n      - assign:\n          field: block_kind\n          value: needs_input\n      - record:\n          kind: blocked\n          payload:\n            reason: its arc {{card.arc.id}} ended with it open\n            kind: needs_input\n            source_status: ready\n    - guard: card.parents.all(p, p.status in [\'done\', \'archived\'])\n      target: ready\n      actions:\n      - record: promoted\n  ready:\n    stored_as: ready\n    description: waiting for the dispatcher to start it\n    always:\n    - guard: card.arc != null && card.arc.status in [\'done\', \'archived\']\n      target: blocked\n      actions:\n      - assign:\n          field: block_kind\n          value: needs_input\n      - record:\n          kind: blocked\n          payload:\n            reason: its arc {{card.arc.id}} ended with it open\n            kind: needs_input\n            source_status: ready\n    - guard: \'!card.parents.all(p, p.status in [\'\'done\'\', \'\'archived\'\'])\'\n      target: todo\n  running:\n    stored_as: running\n    description: its implementer is working it\n    run_role: implementer\n    resume_as: ready\n  review:\n    stored_as: review\n    description: its implementer asked for review\n    run_role: reviewer\n    resume_as: review\n    exit:\n    - close_session: reviewer\n  blocked:\n    stored_as: blocked\n    description: waiting on a person, a capability, or a transient cause\n    always:\n    - guard: card.last_block_event != \'blocked\' && card.counters.failures < (card.max_retries ?? params.failure_limit) &&\n        card.parents.all(p, p.status in [\'done\', \'archived\'])\n      target: \'{{card.resume_status ?? \'\'ready\'\'}}\'\n      actions:\n      - record: promoted\n  scheduled:\n    stored_as: scheduled\n    description: set aside until someone brings it back\n  done:\n    stored_as: done\n    description: finished\n  archived:\n    stored_as: archived\n    description: out of the way\ndispatch:\n  serve: params.dispatch_in_gateway\n  tick: params.dispatch_interval_seconds\n  start: start\n  eligible: card.current_run_id == null && (card.claim_lock == null && card.subtask_of == null && !(run.local && (host.memory_pressure\n    == \'critical\' || (host.memory_pressure == \'elevated\' && tick.local_started >= 1))))\n  order:\n  - \'card.status == \'\'review\'\' ? 1 : 0\'\n  - -card.priority\n  - card.created_at\n  limits:\n  - description: the home runs this many cards at most across its boards (kanban.max_in_progress)\n    group: \'\'\'home\'\'\'\n    counts: card.stored_as == \'running\'\n    max: params.max_in_progress ?? host.max_in_progress\n    reserve:\n      for: card.status == \'review\'\n      slots: 1\n  - description: the board runs this many cards at most (kanban.max_spawn)\n    group: card.board\n    counts: card.stored_as == \'running\'\n    max: params.max_spawn\n  - description: the profile\'s capacity (worker.capacity, else kanban.max_in_progress_per_profile)\n    group: card.assignee\n    counts: card.stored_as == \'running\'\n    max: lane.capacity ?? params.max_in_progress_per_profile\n  - description: the machine\'s capacity; an idle session on a done or blocked card holds its place until closed (ours)\n    group: card.machine\n    counts: card.stored_as == \'running\' || card.session_live\n    max: params.machines[card.machine].capacity\n  - description: triage sessions started per tick (kanban.auto_decompose_per_tick)\n    group: \'\'\'triage\'\'\'\n    counts: card.status == \'triage\' && card.current_run_id != null && card.started_this_tick\n    max: params.auto_decompose_per_tick\nnotify:\n  creator:\n    completed: \'\u{2714} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} done \u{2014} {{card.title}}{{event.summary\n      ? \'\'\n\n      \'\' + cut(event.summary, 300) : \'\'\'\'}}\'\n    blocked: \'\u{23f8} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} blocked{{event.reason ? \'\': \'\' +\n      cut(event.reason, 300) : \'\'\'\'}}\'\n    gave_up: \'\u{2716} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} gave up after {{event.failures}}\n      failures{{event.error ? \'\'\n\n      \'\' + cut(event.error, 300) : \'\'\'\'}}\'\n    crashed: \'\u{2716} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}}: its worker exited without completing\n      it; the board will retry\'\n    timed_out: \'\u{23f1} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} timed out (max_runtime {{event.limit_seconds}}s);\n      the board will retry\'\n    status: \'\u{1f504} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} \u{2192} {{event.status}}\'\n    block_loop_detected: \'\u{1f6d1} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} went to triage: blocked\n      {{event.recurrences}}x for the same cause{{event.reason ? \'\': \'\' + cut(event.reason, 200) : \'\'\'\'}}\'\n    review_requested: \'\u{1f440} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} ready for review \u{2014} {{card.title}}{{event.summary\n      ? \'\'\n\n      \'\' + cut(event.summary, 300) : \'\'\'\'}}\'\n    changes_requested: \'\u{1f6d1} card {{card.id}}: review asked for changes: {{cut(event.reason ?? \'\'reviewer feedback\'\', 300)}}\'\n    session_started: \'\u{25b6} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} \u{2014} {{card.title}}: the board\n      started session {{event.session_id}} on {{event.machine}} (pane {{event.pane}}; {{event.address}}).\'\n    session_resumed: \'\u{25b6} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} \u{2014} {{card.title}}: the board\n      resumed session {{event.session_id}} on {{event.machine}} (pane {{event.pane}}; {{event.address}}).\'\n    session_replaced: \'\u{25b6} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} \u{2014} {{card.title}}: the board\n      could not resume the card\'\'s last session and started session {{event.session_id}} on {{event.machine}} (pane {{event.pane}};\n      {{event.address}}).\'\n    session_adopted: \'\u{25b6} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} \u{2014} {{card.title}}: the board\n      found session {{event.session_id}} still live on {{event.machine}} and kept it ({{event.address}}).\'\n    session_lost: \'\u{2716} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}}: session {{event.session_id}}\n      is gone from {{event.machine}}; the board resumes it, and replaces it from the card only when it cannot.\'\n    spawn_failed: \'\u{2716} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}}: its session did not start:\n      {{cut(event.error, 300)}}\'\n  worker:\n    commented: \'\u{1f4ac} card {{card.id}}, {{event.author}}:\n\n      {{comment.body}}\'\n    assigned: card {{card.id}} is now assigned to {{event.assignee ?? \'nobody\'}}\n    machine_set: card {{card.id}} now runs on {{event.machine ?? \'no machine\'}}\n    blocked: \'\u{23f8} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} blocked{{event.reason ? \'\': \'\' +\n      cut(event.reason, 300) : \'\'\'\'}}\'\n    unblocked: \u{25b6} card {{card.id}} unblocked\n    completed: \'\u{2714} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} done \u{2014} {{card.title}}{{event.summary\n      ? \'\'\n\n      \'\' + cut(event.summary, 300) : \'\'\'\'}}\'\n    archived: card {{card.id}} archived\n    changes_requested: \'\u{1f6d1} card {{card.id}}: review asked for changes: {{cut(event.reason ?? \'\'reviewer feedback\'\', 300)}}\'\n    linked: \'card {{card.id}}: dependency linked ({{event.parent}} \u{2192} {{event.child}})\'\n    unlinked: \'card {{card.id}}: dependency unlinked ({{event.parent}} \u{2192} {{event.child}})\'\n    promoted_manual: card {{card.id}} promoted to ready by {{event.actor}}\n    subtask_added: \'card {{card.id}} has a new subtask {{event.subtask}}: {{event.title}}\'\n    session_adopted: \'\u{25b6} card {{card.id}} \u{2014} {{card.title}} is running again, with you: carry it on from where it stands (`supercode\n      workflow show {{card.id}}` reads it).\'\n  dependency:\n    completed: \'\u{2714} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} done \u{2014} {{card.title}}{{event.summary\n      ? \'\'\n\n      \'\' + cut(event.summary, 300) : \'\'\'\'}}\'\n    blocked: \'\u{23f8} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} blocked{{event.reason ? \'\': \'\' +\n      cut(event.reason, 300) : \'\'\'\'}}\'\n    unblocked: \u{25b6} card {{card.id}} unblocked\n    review_requested: \'\u{1f440} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} ready for review \u{2014} {{card.title}}{{event.summary\n      ? \'\'\n\n      \'\' + cut(event.summary, 300) : \'\'\'\'}}\'\n    changes_requested: \'\u{1f6d1} card {{card.id}}: review asked for changes: {{cut(event.reason ?? \'\'reviewer feedback\'\', 300)}}\'\n    commented: \'\u{1f4ac} card {{card.id}}, {{event.author}}:\n\n      {{comment.body}}\'\n  chat:\n    completed: \'\u{2714} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} done \u{2014} {{card.title}}{{event.summary\n      ? \'\'\n\n      \'\' + cut(event.summary, 300) : \'\'\'\'}}\'\n    blocked: \'\u{23f8} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} blocked{{event.reason ? \'\': \'\' +\n      cut(event.reason, 300) : \'\'\'\'}}\'\n    gave_up: \'\u{2716} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} gave up after {{event.failures}}\n      failures{{event.error ? \'\'\n\n      \'\' + cut(event.error, 300) : \'\'\'\'}}\'\n    crashed: \'\u{2716} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}}: its worker exited without completing\n      it; the board will retry\'\n    timed_out: \'\u{23f1} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} timed out (max_runtime {{event.limit_seconds}}s);\n      the board will retry\'\n    status: \'\u{1f504} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} \u{2192} {{event.status}}\'\n    block_loop_detected: \'\u{1f6d1} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} went to triage: blocked\n      {{event.recurrences}}x for the same cause{{event.reason ? \'\': \'\' + cut(event.reason, 200) : \'\'\'\'}}\'\n    review_requested: \'\u{1f440} {{card.assignee ? \'\'@\'\' + card.assignee + \'\' \'\' : \'\'\'\'}}card {{card.id}} ready for review \u{2014} {{card.title}}{{event.summary\n      ? \'\'\n\n      \'\' + cut(event.summary, 300) : \'\'\'\'}}\'\n    changes_requested: \'\u{1f6d1} card {{card.id}}: review asked for changes: {{cut(event.reason ?? \'\'reviewer feedback\'\', 300)}}\'\nverbs:\n  specify:\n  - target: todo\n    actions:\n    - specify: \'{{event}}\'\n    - record: specified\n    guard: (card.current_run_id == null) && (true)\n    from:\n    - triage\n  - by:\n    - implementer\n    target: todo\n    actions:\n    - end_run:\n        outcome: specified\n    - specify: \'{{event}}\'\n    - record: specified\n    guard: (card.current_run_id != null) && (true)\n    from:\n    - triage\n  decompose:\n  - target: todo\n    actions:\n    - decompose: \'{{event}}\'\n    - record: decomposed\n    guard: (card.current_run_id == null) && (true)\n    from:\n    - triage\n  - by:\n    - implementer\n    target: todo\n    actions:\n    - end_run:\n        outcome: decomposed\n    - decompose: \'{{event}}\'\n    - record: decomposed\n    guard: (card.current_run_id != null) && (true)\n    from:\n    - triage\n  start:\n  - by:\n    - platform\n    guard: (card.current_run_id == null) && (params.auto_decompose)\n    target: triage\n    actions:\n    - claim: implementer\n    from:\n    - triage\n  - by:\n    - manager\n    target: triage\n    actions:\n    - claim: implementer\n    guard: (card.current_run_id == null) && (true)\n    from:\n    - triage\n  - by:\n    - platform\n    validate:\n    - expr: \'!(card.last_run.outcome == \'\'rate_limited\'\' && now - card.last_run.ended_at < params.rate_limit_cooldown_seconds)\'\n      message: rate_limit_cooldown\n    - expr: \'!matches(card.last_failure_error, params.blocker_pattern)\'\n      message: blocker_auth\n    - expr: \'!(card.last_completed != null && now - card.last_completed.ended_at < params.recent_success_seconds && card.events_since(card.last_completed.ended_at,\n        [\'\'status\'\', \'\'promoted\'\', \'\'unblocked\'\', \'\'reclaimed\'\']).size() == 0)\'\n      message: recent_success\n    - expr: \'!card.comments_since(now - params.active_pr_seconds).exists(c, matches(c.body, params.pr_pattern))\'\n      message: active_pr\n    target: running\n    actions:\n    - claim: implementer\n    from:\n    - ready\n  - by:\n    - platform\n    guard: (card.current_run_id == null) && (params.review_dispatch)\n    validate:\n    - expr: \'!(card.last_run.outcome == \'\'rate_limited\'\' && now - card.last_run.ended_at < params.rate_limit_cooldown_seconds)\'\n      message: rate_limit_cooldown\n    - expr: \'!matches(card.last_failure_error, params.blocker_pattern)\'\n      message: blocker_auth\n    target: review\n    actions:\n    - claim: reviewer\n    from:\n    - review\n  block:\n  - by:\n    - implementer\n    - manager\n    description: \'you cannot go on: `\"<why>\" --kind needs_input|capability|transient|dependency`\'\n    target: blocked\n    actions:\n    - end_run:\n        outcome: blocked\n    - assign:\n        field: block_kind\n        value: \'{{event.kind}}\'\n    - record: blocked\n    guard: (card.current_run_id != null) && (true)\n    from:\n    - triage\n  - guard: event.kind == \'dependency\'\n    target: todo\n    actions:\n    - assign:\n        field: block_kind\n        value: \'{{event.kind}}\'\n    - record: dependency_wait\n    from:\n    - ready\n  - guard: card.block_kind == event.kind && card.counters.block_recurrences + 1 >= params.block_recurrence_limit\n    target: triage\n    actions:\n    - count: block_recurrences\n    - record: block_loop_detected\n    from:\n    - ready\n  - target: blocked\n    actions:\n    - count: block_recurrences\n    - assign:\n        field: block_kind\n        value: \'{{event.kind}}\'\n    - record: blocked\n    from:\n    - ready\n  - by:\n    - implementer\n    - manager\n    description: \'you cannot go on and nothing you wait on will wake you (a wait with a known end is a heartbeat `--until`):\n      `\"<why>\" --kind needs_input|capability|transient|dependency`\'\n    guard: event.kind == \'dependency\'\n    target: todo\n    actions:\n    - end_run:\n        outcome: blocked\n    - assign:\n        field: block_kind\n        value: \'{{event.kind}}\'\n    - record: dependency_wait\n    from:\n    - running\n  - by:\n    - implementer\n    - manager\n    guard: card.block_kind == event.kind && card.counters.block_recurrences + 1 >= params.block_recurrence_limit\n    target: triage\n    actions:\n    - end_run:\n        outcome: blocked\n    - count: block_recurrences\n    - record: block_loop_detected\n    from:\n    - running\n  - by:\n    - implementer\n    - manager\n    target: blocked\n    actions:\n    - end_run:\n        outcome: blocked\n    - count: block_recurrences\n    - assign:\n        field: block_kind\n        value: \'{{event.kind}}\'\n    - record: blocked\n    from:\n    - running\n  - target: blocked\n    actions:\n    - assign:\n        field: block_kind\n        value: \'{{event.kind}}\'\n    - record: blocked\n    guard: (card.current_run_id == null) && (true)\n    from:\n    - review\n  - by:\n    - reviewer\n    - manager\n    description: \'you cannot go on and nothing you wait on will wake you (a wait with a known end is a heartbeat `--until`):\n      `\"<why>\" --kind needs_input|capability|transient|dependency`\'\n    target: blocked\n    actions:\n    - end_run:\n        outcome: blocked\n    - assign:\n        field: block_kind\n        value: \'{{event.kind}}\'\n    - record: blocked\n    guard: (card.current_run_id != null) && (true)\n    from:\n    - review\n  - by:\n    - implementer\n    - manager\n    guard: event.kind == \'dependency\'\n    target: todo\n    actions:\n    - assign:\n        field: block_kind\n        value: \'{{event.kind}}\'\n    - record:\n        kind: dependency_wait\n        payload:\n          reason: \'{{event.reason}}\'\n          kind: dependency\n          source_status: \'{{card.resume_status}}\'\n    from:\n    - blocked\n  - by:\n    - implementer\n    - manager\n    description: \'the block is another: `\"<why>\" --kind needs_input|capability|transient|dependency`\'\n    actions:\n    - assign:\n        field: block_kind\n        value: \'{{event.kind}}\'\n    - record:\n        kind: blocked\n        payload:\n          reason: \'{{event.reason}}\'\n          kind: \'{{event.kind}}\'\n          source_status: \'{{card.resume_status}}\'\n    from:\n    - blocked\n  promote:\n  - validate:\n    - expr: event.force || card.parents.all(p, p.status in [\'done\', \'archived\'])\n      message: parents not done (force to override)\n    target: ready\n    actions:\n    - record: promoted_manual\n    from:\n    - todo\n  - validate:\n    - expr: event.force || card.parents.all(p, p.status in [\'done\', \'archived\'])\n      message: parents not done (force to override)\n    target: ready\n    actions:\n    - record: promoted_manual\n    from:\n    - blocked\n  schedule:\n  - target: scheduled\n    actions:\n    - record: scheduled\n    from:\n    - todo\n  - target: scheduled\n    actions:\n    - record: scheduled\n    from:\n    - ready\n  - by:\n    - manager\n    target: scheduled\n    actions:\n    - end_run:\n        outcome: scheduled\n    - record: scheduled\n    from:\n    - running\n  - target: scheduled\n    actions:\n    - record: scheduled\n    from:\n    - blocked\n  request_review:\n  - target: review\n    actions:\n    - assign:\n        field: assignee\n        value: \'{{event.reviewer ?? (card.last_reviewer in lanes ? card.last_reviewer : null) ?? card.assignee}}\'\n    - record: review_requested\n    from:\n    - ready\n  - by:\n    - implementer\n    - manager\n    description: \'the work is ready for review: `--summary \"<what to review>\"`\'\n    validate:\n    - expr: event.run_id == card.current_run_id || event.force\n      message: the card is running under a live claim; its worker requests review, or pass --force\n    target: review\n    actions:\n    - end_run:\n        outcome: review_requested\n    - assign:\n        field: assignee\n        value: \'{{event.reviewer ?? (card.last_reviewer in lanes ? card.last_reviewer : null) ?? card.assignee}}\'\n    - record: review_requested\n    from:\n    - running\n  complete:\n  - validate:\n    - expr: card.parents.all(p, p.status in [\'done\', \'archived\'])\n      message: the card waits on parents that are not done\n    target: done\n    actions:\n    - end_run:\n        outcome: completed\n    - set_result: \'{{event}}\'\n    - reset:\n      - failures\n      - block_recurrences\n    - assign:\n        field: last_failure_error\n        value: \'{{null}}\'\n    - assign:\n        field: block_kind\n        value: \'{{null}}\'\n    - cleanup_workspace: null\n    - record: completed\n    - check_references: \'{{event}}\'\n    from:\n    - ready\n  - by:\n    - implementer\n    - manager\n    description: \'the work is done: `--summary \"<what you did and how it was verified>\"`\'\n    validate:\n    - expr: event.run_id == null || event.run_id == card.current_run_id\n      message: that run is no longer the card\'s current run\n    - expr: card.parents.all(p, p.status in [\'done\', \'archived\'])\n      message: the card waits on parents that are not done\n    target: done\n    actions:\n    - end_run:\n        outcome: completed\n    - set_result: \'{{event}}\'\n    - reset:\n      - failures\n      - block_recurrences\n    - assign:\n        field: last_failure_error\n        value: \'{{null}}\'\n    - assign:\n        field: block_kind\n        value: \'{{null}}\'\n    - cleanup_workspace: null\n    - record: completed\n    - check_references: \'{{event}}\'\n    from:\n    - running\n  - by:\n    - reviewer\n    - manager\n    description: \'the work is done: `--summary \"<what you did and how it was verified>\"`\'\n    validate:\n    - expr: card.parents.all(p, p.status in [\'done\', \'archived\'])\n      message: the card waits on parents that are not done\n    target: done\n    actions:\n    - end_run:\n        outcome: completed\n        summary: \'{{event.summary ?? \'\'Review approved without additional evidence.\'\'}}\'\n    - set_result: \'{{event}}\'\n    - reset:\n      - failures\n      - block_recurrences\n    - assign:\n        field: last_failure_error\n        value: \'{{null}}\'\n    - assign:\n        field: block_kind\n        value: \'{{null}}\'\n    - cleanup_workspace: null\n    - record: completed\n    - check_references: \'{{event}}\'\n    guard: (card.current_run_id == null) && (true)\n    from:\n    - review\n  - by:\n    - reviewer\n    - manager\n    description: \'the work is done: `--summary \"<what you did and how it was verified>\"`\'\n    validate:\n    - expr: card.parents.all(p, p.status in [\'done\', \'archived\'])\n      message: the card waits on parents that are not done\n    target: done\n    actions:\n    - end_run:\n        outcome: completed\n    - set_result: \'{{event}}\'\n    - reset:\n      - failures\n      - block_recurrences\n    - assign:\n        field: last_failure_error\n        value: \'{{null}}\'\n    - assign:\n        field: block_kind\n        value: \'{{null}}\'\n    - cleanup_workspace: null\n    - record: completed\n    - check_references: \'{{event}}\'\n    guard: (card.current_run_id != null) && (true)\n    from:\n    - review\n  - validate:\n    - expr: card.parents.all(p, p.status in [\'done\', \'archived\'])\n      message: the card waits on parents that are not done\n    target: done\n    actions:\n    - set_result: \'{{event}}\'\n    - reset:\n      - failures\n      - block_recurrences\n    - assign:\n        field: last_failure_error\n        value: \'{{null}}\'\n    - assign:\n        field: block_kind\n        value: \'{{null}}\'\n    - record: completed\n    - check_references: \'{{event}}\'\n    from:\n    - blocked\n  reclaim:\n  - by:\n    - manager\n    target: ready\n    actions:\n    - end_run:\n        outcome: reclaimed\n    - reset:\n      - failures\n    - record: reclaimed\n    from:\n    - running\n  request_changes:\n  - by:\n    - reviewer\n    - manager\n    target: \'{{card.parents.all(p, p.status in [\'\'done\'\', \'\'archived\'\']) ? \'\'ready\'\' : \'\'todo\'\'}}\'\n    actions:\n    - assign:\n        field: assignee\n        value: \'{{card.implementer}}\'\n    - record: changes_requested\n    guard: (card.current_run_id == null) && (true)\n    from:\n    - review\n  - by:\n    - reviewer\n    - manager\n    description: \'send it back to its implementer: `\"<what must change>\"`\'\n    target: \'{{card.parents.all(p, p.status in [\'\'done\'\', \'\'archived\'\']) ? \'\'ready\'\' : \'\'todo\'\'}}\'\n    actions:\n    - end_run:\n        outcome: changes_requested\n    - assign:\n        field: assignee\n        value: \'{{card.implementer}}\'\n    - record: changes_requested\n    guard: (card.current_run_id != null) && (true)\n    from:\n    - review\n  reopen_review:\n  - by:\n    - manager\n    target: \'{{card.parents.all(p, p.status in [\'\'done\'\', \'\'archived\'\']) ? \'\'ready\'\' : \'\'todo\'\'}}\'\n    actions:\n    - assign:\n        field: assignee\n        value: \'{{card.implementer}}\'\n    - record: review_reopened\n    guard: (card.current_run_id == null) && (true)\n    from:\n    - review\n  unblock:\n  - by:\n    - implementer\n    description: \'what you waited on arrived: `--reason \"<what arrived>\"`\'\n    guard: card.counters.failures < (card.max_retries ?? params.failure_limit)\n    target: \'{{card.parents.all(p, p.status in [\'\'done\'\', \'\'archived\'\']) ? (card.resume_status ?? \'\'ready\'\') : \'\'todo\'\'}}\'\n    actions:\n    - record: unblocked\n    from:\n    - blocked\n  - target: \'{{card.parents.all(p, p.status in [\'\'done\'\', \'\'archived\'\']) ? (card.resume_status ?? \'\'ready\'\') : \'\'todo\'\'}}\'\n    actions:\n    - reset:\n      - failures\n    - assign:\n        field: last_failure_error\n        value: \'{{null}}\'\n    - record: unblocked\n    from:\n    - blocked\n  - target: ready\n    actions:\n    - record: unblocked\n    from:\n    - scheduled\n  edit:\n  - actions:\n    - set_result: \'{{event}}\'\n    - record: edited\n    from:\n    - done\n  reopen:\n  - target: \'{{card.parents.all(p, p.status in [\'\'done\'\', \'\'archived\'\']) ? \'\'ready\'\' : \'\'todo\'\'}}\'\n    actions:\n    - invalidate_descendants: null\n    - record: status\n    from:\n    - done\n  - target: \'{{card.parents.all(p, p.status in [\'\'done\'\', \'\'archived\'\']) ? \'\'ready\'\' : \'\'todo\'\'}}\'\n    actions:\n    - invalidate_descendants: null\n    - record: status\n    from:\n    - archived\n  comment:\n  - actions:\n    - record: commented\n  assign:\n  - validate:\n    - expr: \'!(card.status in [\'\'running\'\', \'\'reviewing\'\'])\'\n      message: the card is running; reclaim it before reassigning\n    guard: event.assignee != card.assignee\n    actions:\n    - assign:\n        field: assignee\n        value: \'{{event.assignee}}\'\n    - reset:\n      - failures\n    - assign:\n        field: last_failure_error\n        value: \'{{null}}\'\n    - record: assigned\n  - actions:\n    - record: assigned\n  set_model:\n  - actions:\n    - assign:\n        field: model_override\n        value: \'{{event.model}}\'\n    - assign:\n        field: provider_override\n        value: \'{{event.provider}}\'\n    - record: model_override_set\n  set_goal:\n  - actions:\n    - assign:\n        field: goal_mode\n        value: \'{{event.goal}}\'\n    - assign:\n        field: goal_max_turns\n        value: \'{{event.max_turns}}\'\n    - record: goal_set\n  link:\n  - actions:\n    - link: \'{{event.parent}}\'\n    - record: linked\n  unlink:\n  - actions:\n    - unlink: \'{{event.parent}}\'\n    - record: unlinked\n  archive:\n  - target: archived\n    actions:\n    - end_run:\n        outcome: reclaimed\n        summary: task archived with run still active\n    - record: archived\n  adopt:\n  - by:\n    - manager\n    validate:\n    - expr: card.status in [\'todo\', \'ready\', \'blocked\', \'scheduled\', \'triage\', \'review\']\n      message: only an open card takes a session\n    target: running\n    actions:\n    - claim: implementer\nrun:\n  initial: active\n  roles:\n    triager:\n      role: implementer\n      session: worker\n      prompt_file: prompts/triager.md\n    implementer:\n      role: implementer\n      session: worker\n      limits:\n        runtime: card.max_runtime_seconds\n        stale: \'run.surface == \'\'headless\'\' ? params.dispatch_stale_timeout_seconds : null\'\n        grace: params.session_grace_seconds\n      prompt_file: prompts/implementer.md\n    reviewer:\n      role: reviewer\n      session: reviewer\n      skills:\n      - sdlc-review\n      limits:\n        runtime: card.max_runtime_seconds\n        grace: params.session_grace_seconds\n      prompt_file: prompts/reviewer.md\n  states:\n    active: {}\n    triaging_spawn_failed_0: {}\n    triaging_spawn_failed_1: {}\n    triaging_session_idle_1: {}\n    triaging_machine_offline_0: {}\n    triaging_session_lost_0: {}\n    triaging_orphaned_0: {}\n    triaging_exited_0: {}\n    running_exited_0: {}\n    running_exited_1: {}\n    running_exited_2: {}\n    running_exited_3: {}\n    running_spawn_failed_0: {}\n    running_spawn_failed_1: {}\n    running_timed_out_0: {}\n    running_timed_out_1: {}\n    running_orphaned_0: {}\n    running_stale_0: {}\n    running_session_lost_0: {}\n    running_session_lost_1: {}\n    running_session_lost_2: {}\n    running_machine_offline_0: {}\n    running_session_idle_1: {}\n    reviewing_exited_0: {}\n    reviewing_spawn_failed_0: {}\n    reviewing_spawn_failed_1: {}\n    reviewing_timed_out_0: {}\n    reviewing_session_lost_0: {}\n    reviewing_orphaned_0: {}\n    reviewing_session_idle_1: {}\n    reviewing_machine_offline_0: {}\n  \'on\':\n    heartbeat:\n    - by:\n      - implementer\n      description: \'still working on a long step, or waiting on something outside (a person, a run): the board leaves you\n        be for a while, or until the time you name (`--note \"<what>\" [--until <time|2h>]`)\'\n      guard: card.status == \'triage\' && ((card.current_run_id != null) && (true))\n      actions:\n      - extend_claim: null\n      - reset:\n        - goal_turns\n      - record: heartbeat\n    - by:\n      - implementer\n      description: \'still working on a long step, or waiting on something outside (a person, a run): the board leaves you\n        be for a while, or until the time you name (`--note \"<what>\" [--until <time|2h>]`)\'\n      guard: card.status == \'running\' && (true)\n      actions:\n      - extend_claim: null\n      - reset:\n        - goal_turns\n      - record: heartbeat\n    - by:\n      - reviewer\n      description: \'still working on a long step, or waiting on something outside (a person, a run): the board leaves you\n        be for a while, or until the time you name (`--note \"<what>\" [--until <time|2h>]`)\'\n      guard: card.status == \'review\' && ((card.current_run_id != null) && (true))\n      actions:\n      - extend_claim: null\n      - reset:\n        - goal_turns\n      - record: heartbeat\n    spawn_failed:\n    - by:\n      - platform\n      guard: card.status == \'triage\' && ((card.current_run_id != null) && (card.counters.failures + 1 >= (card.max_retries\n        ?? params.failure_limit)))\n      target: triaging_spawn_failed_0\n      actions:\n      - end_run:\n          outcome: spawn_failed\n      - count: failures\n      - record: spawn_failed\n    - by:\n      - platform\n      guard: card.status == \'triage\' && ((card.current_run_id != null) && (true))\n      target: triaging_spawn_failed_1\n      actions:\n      - end_run:\n          outcome: spawn_failed\n      - count: failures\n      - record: spawn_failed\n    - by:\n      - platform\n      guard: card.status == \'running\' && (card.counters.failures + 1 >= (card.max_retries ?? params.failure_limit))\n      target: running_spawn_failed_0\n      actions:\n      - end_run:\n          outcome: spawn_failed\n      - count: failures\n      - record: spawn_failed\n    - by:\n      - platform\n      guard: card.status == \'running\' && (true)\n      target: running_spawn_failed_1\n      actions:\n      - end_run:\n          outcome: spawn_failed\n      - count: failures\n      - record: spawn_failed\n    - by:\n      - platform\n      guard: card.status == \'review\' && ((card.current_run_id != null) && (card.counters.failures + 1 >= (card.max_retries\n        ?? params.failure_limit)))\n      target: reviewing_spawn_failed_0\n      actions:\n      - end_run:\n          outcome: spawn_failed\n      - count: failures\n      - record: spawn_failed\n    - by:\n      - platform\n      guard: card.status == \'review\' && ((card.current_run_id != null) && (true))\n      target: reviewing_spawn_failed_1\n      actions:\n      - end_run:\n          outcome: spawn_failed\n      - count: failures\n      - record: spawn_failed\n    session_idle:\n    - by:\n      - platform\n      guard: card.status == \'triage\' && ((card.current_run_id != null) && (card.last_heartbeat_at != null && now < (card.last_events.heartbeat.payload.until\n        ?? card.last_heartbeat_at + params.heartbeat_quiet_seconds)))\n    - by:\n      - platform\n      guard: card.status == \'triage\' && ((card.current_run_id != null) && (event.turns >= (card.goal_max_turns ?? params.goal_max_turns)))\n      target: triaging_session_idle_1\n      actions:\n      - end_run:\n          outcome: blocked\n      - assign:\n          field: block_kind\n          value: needs_input\n    - by:\n      - platform\n      guard: card.status == \'triage\' && ((card.current_run_id != null) && (true))\n      actions:\n      - count: goal_turns\n      - send_to_actor: \'Card {{card.id}} ({{card.title}}) is waiting for you to decide ({{event.turns + 1}} of {{card.goal_max_turns\n          ?? params.goal_max_turns}}).\n\n          {{doors}}\'\n      - record:\n          kind: decision_asked\n          payload:\n            turn: \'{{event.turns + 1}}\'\n            budget: \'{{card.goal_max_turns ?? params.goal_max_turns}}\'\n    - by:\n      - platform\n      guard: card.status == \'running\' && (card.last_heartbeat_at != null && now < (card.last_events.heartbeat.payload.until\n        ?? card.last_heartbeat_at + params.heartbeat_quiet_seconds))\n    - by:\n      - platform\n      guard: card.status == \'running\' && ((card.goal_mode || !event.worked) && event.turns >= (card.goal_max_turns ?? params.goal_max_turns))\n      target: running_session_idle_1\n      actions:\n      - end_run:\n          outcome: blocked\n      - assign:\n          field: block_kind\n          value: needs_input\n    - by:\n      - platform\n      guard: card.status == \'running\' && (card.goal_mode)\n      actions:\n      - count: goal_turns\n      - send_to_actor: \'Card {{card.id}} ({{card.title}}) is not done yet: keep working toward it (goal turn {{event.turns\n          + 1}} of {{card.goal_max_turns ?? params.goal_max_turns}}).\n\n          {{doors}}\'\n      - record:\n          kind: goal_continued\n          payload:\n            turn: \'{{event.turns + 1}}\'\n            budget: \'{{card.goal_max_turns ?? params.goal_max_turns}}\'\n    - by:\n      - platform\n      guard: card.status == \'running\' && (true)\n      actions:\n      - reset: \'{{event.worked ? [\'\'goal_turns\'\'] : []}}\'\n      - count: goal_turns\n      - send_to_actor: \'Card {{card.id}} ({{card.title}}) is still running and you are idle: decide ({{(event.worked ? 0 :\n          event.turns) + 1}} of {{card.goal_max_turns ?? params.goal_max_turns}}). If there is more to do, keep working. A\n          session that stays idle without deciding has its card blocked for its creator.\n\n          {{doors}}\'\n      - record:\n          kind: decision_asked\n          payload:\n            turn: \'{{(event.worked ? 0 : event.turns) + 1}}\'\n            budget: \'{{card.goal_max_turns ?? params.goal_max_turns}}\'\n    - by:\n      - platform\n      guard: card.status == \'review\' && ((card.current_run_id != null) && (card.last_heartbeat_at != null && now < (card.last_events.heartbeat.payload.until\n        ?? card.last_heartbeat_at + params.heartbeat_quiet_seconds)))\n    - by:\n      - platform\n      guard: card.status == \'review\' && ((card.current_run_id != null) && (event.turns >= (card.goal_max_turns ?? params.goal_max_turns)))\n      target: reviewing_session_idle_1\n      actions:\n      - end_run:\n          outcome: blocked\n      - assign:\n          field: block_kind\n          value: needs_input\n    - by:\n      - platform\n      guard: card.status == \'review\' && ((card.current_run_id != null) && (true))\n      actions:\n      - count: goal_turns\n      - send_to_actor: \'Card {{card.id}} ({{card.title}}) is waiting for you to decide ({{event.turns + 1}} of {{card.goal_max_turns\n          ?? params.goal_max_turns}}).\n\n          {{doors}}\'\n      - record:\n          kind: decision_asked\n          payload:\n            turn: \'{{event.turns + 1}}\'\n            budget: \'{{card.goal_max_turns ?? params.goal_max_turns}}\'\n    machine_offline:\n    - by:\n      - platform\n      guard: card.status == \'triage\' && ((card.current_run_id != null) && (event.seconds >= params.machine_offline_grace_seconds))\n      target: triaging_machine_offline_0\n      actions:\n      - end_run:\n          outcome: reclaimed\n      - assign:\n          field: block_kind\n          value: capability\n    - by:\n      - platform\n      guard: card.status == \'running\' && (event.seconds >= params.machine_offline_grace_seconds)\n      target: running_machine_offline_0\n      actions:\n      - end_run:\n          outcome: reclaimed\n      - assign:\n          field: block_kind\n          value: capability\n    - by:\n      - platform\n      guard: card.status == \'review\' && ((card.current_run_id != null) && (event.seconds >= params.machine_offline_grace_seconds))\n      target: reviewing_machine_offline_0\n      actions:\n      - end_run:\n          outcome: reclaimed\n      - assign:\n          field: block_kind\n          value: capability\n    session_lost:\n    - by:\n      - platform\n      guard: card.status == \'triage\' && ((card.current_run_id != null) && (true))\n      target: triaging_session_lost_0\n      actions:\n      - end_run:\n          outcome: reclaimed\n      - record: session_lost\n    - by:\n      - platform\n      guard: card.status == \'running\' && (event.never_came_up && card.counters.failures + 1 >= (card.max_retries ?? params.failure_limit))\n      target: running_session_lost_0\n      actions:\n      - end_run:\n          outcome: reclaimed\n      - count: failures\n      - record: session_lost\n    - by:\n      - platform\n      guard: card.status == \'running\' && (event.never_came_up)\n      target: running_session_lost_1\n      actions:\n      - end_run:\n          outcome: reclaimed\n      - count: failures\n      - record: session_lost\n    - by:\n      - platform\n      guard: card.status == \'running\' && (true)\n      target: running_session_lost_2\n      actions:\n      - end_run:\n          outcome: reclaimed\n      - record: session_lost\n    - by:\n      - platform\n      guard: card.status == \'review\' && ((card.current_run_id != null) && (true))\n      target: reviewing_session_lost_0\n      actions:\n      - end_run:\n          outcome: reclaimed\n      - record: session_lost\n    orphaned:\n    - by:\n      - platform\n      guard: card.status == \'triage\' && ((card.current_run_id != null) && (params.reconcile_orphans))\n      target: triaging_orphaned_0\n      actions:\n      - end_run:\n          outcome: reclaimed\n      - record: reconciled\n      - comment: \'Requeued: the card was running with no claim and nothing live behind it.\'\n    - by:\n      - platform\n      guard: card.status == \'running\' && (params.reconcile_orphans)\n      target: running_orphaned_0\n      actions:\n      - end_run:\n          outcome: reclaimed\n      - record: reconciled\n      - comment: \'Requeued: the card was running with no claim and nothing live behind it.\'\n    - by:\n      - platform\n      guard: card.status == \'review\' && ((card.current_run_id != null) && (params.reconcile_orphans))\n      target: reviewing_orphaned_0\n      actions:\n      - end_run:\n          outcome: reclaimed\n      - record: reconciled\n      - comment: \'Requeued: the card was running with no claim and nothing live behind it.\'\n    exited:\n    - by:\n      - platform\n      guard: card.status == \'triage\' && ((card.current_run_id != null) && (true))\n      target: triaging_exited_0\n      actions:\n      - end_run:\n          outcome: crashed\n      - record: crashed\n    - by:\n      - platform\n      guard: card.status == \'running\' && (event.code == 75)\n      target: running_exited_0\n      actions:\n      - end_run:\n          outcome: rate_limited\n      - record: rate_limited\n    - by:\n      - platform\n      guard: card.status == \'running\' && (event.code == 0)\n      target: running_exited_1\n      actions:\n      - end_run:\n          outcome: protocol_violation\n      - count: failures\n      - record: crashed\n    - by:\n      - platform\n      guard: card.status == \'running\' && (card.counters.failures + 1 >= (card.max_retries ?? params.failure_limit))\n      target: running_exited_2\n      actions:\n      - end_run:\n          outcome: \'{{event.code == 0 ? \'\'protocol_violation\'\' : \'\'crashed\'\'}}\'\n      - count: failures\n      - record: crashed\n    - by:\n      - platform\n      guard: card.status == \'running\' && (true)\n      target: running_exited_3\n      actions:\n      - end_run:\n          outcome: \'{{event.code == 0 ? \'\'protocol_violation\'\' : \'\'crashed\'\'}}\'\n      - count: failures\n      - record: crashed\n    - by:\n      - platform\n      guard: card.status == \'review\' && ((card.current_run_id != null) && (true))\n      target: reviewing_exited_0\n      actions:\n      - end_run:\n          outcome: crashed\n      - count: failures\n      - record: crashed\n    timed_out:\n    - by:\n      - platform\n      guard: card.status == \'running\' && (card.counters.failures + 1 >= (card.max_retries ?? params.failure_limit))\n      target: running_timed_out_0\n      actions:\n      - stop_run: null\n      - end_run:\n          outcome: timed_out\n      - count: failures\n      - record: timed_out\n    - by:\n      - platform\n      guard: card.status == \'running\' && (true)\n      target: running_timed_out_1\n      actions:\n      - stop_run: null\n      - end_run:\n          outcome: timed_out\n      - count: failures\n      - record: timed_out\n    - by:\n      - platform\n      guard: card.status == \'review\' && ((card.current_run_id != null) && (true))\n      target: reviewing_timed_out_0\n      actions:\n      - stop_run: null\n      - end_run:\n          outcome: timed_out\n      - count: failures\n      - record: timed_out\n    stale:\n    - by:\n      - platform\n      guard: card.status == \'running\' && (true)\n      target: running_stale_0\n      actions:\n      - stop_run: null\n      - end_run:\n          outcome: stale\n      - record: stale\n  outcomes:\n    triaging_spawn_failed_0:\n    - target: blocked\n      actions:\n      - record: gave_up\n    triaging_spawn_failed_1:\n    - target: triage\n      actions: []\n    triaging_session_idle_1:\n    - target: blocked\n      actions:\n      - record:\n          kind: blocked\n          payload:\n            reason: its triage session went idle {{event.turns}} times without deciding; review it\n            kind: needs_input\n            source_status: triage\n    triaging_machine_offline_0:\n    - target: blocked\n      actions:\n      - record:\n          kind: blocked\n          payload:\n            reason: machine {{event.machine}} has been off the fleet for {{event.seconds}}s\n            kind: capability\n            source_status: triage\n    triaging_session_lost_0:\n    - target: triage\n      actions: []\n    triaging_orphaned_0:\n    - target: triage\n      actions: []\n    triaging_exited_0:\n    - target: triage\n      actions: []\n    running_exited_0:\n    - target: ready\n      actions: []\n    running_exited_1:\n    - target: blocked\n      actions:\n      - record: gave_up\n    running_exited_2:\n    - target: blocked\n      actions:\n      - record: gave_up\n    running_exited_3:\n    - target: ready\n      actions: []\n    running_spawn_failed_0:\n    - target: blocked\n      actions:\n      - record: gave_up\n    running_spawn_failed_1:\n    - target: ready\n      actions: []\n    running_timed_out_0:\n    - target: blocked\n      actions:\n      - record: gave_up\n    running_timed_out_1:\n    - target: ready\n      actions: []\n    running_orphaned_0:\n    - target: ready\n      actions: []\n    running_stale_0:\n    - target: ready\n      actions: []\n    running_session_lost_0:\n    - target: blocked\n      actions:\n      - record: gave_up\n    running_session_lost_1:\n    - target: ready\n      actions: []\n    running_session_lost_2:\n    - target: ready\n      actions: []\n    running_machine_offline_0:\n    - target: blocked\n      actions:\n      - record:\n          kind: blocked\n          payload:\n            reason: machine {{event.machine}} has been off the fleet for {{event.seconds}}s\n            kind: capability\n            source_status: ready\n    running_session_idle_1:\n    - target: blocked\n      actions:\n      - record:\n          kind: blocked\n          payload:\n            reason: its session went idle {{event.turns}} times without deciding done or blocked; review it\n            kind: needs_input\n            source_status: ready\n    reviewing_exited_0:\n    - target: review\n      actions: []\n    reviewing_spawn_failed_0:\n    - target: blocked\n      actions:\n      - record: gave_up\n    reviewing_spawn_failed_1:\n    - target: review\n      actions: []\n    reviewing_timed_out_0:\n    - target: review\n      actions: []\n    reviewing_session_lost_0:\n    - target: review\n      actions: []\n    reviewing_orphaned_0:\n    - target: review\n      actions: []\n    reviewing_session_idle_1:\n    - target: blocked\n      actions:\n      - record:\n          kind: blocked\n          payload:\n            reason: its reviewer went idle {{event.turns}} times without deciding; review it\n            kind: needs_input\n            source_status: review\n    reviewing_machine_offline_0:\n    - target: blocked\n      actions:\n      - record:\n          kind: blocked\n          payload:\n            reason: machine {{event.machine}} has been off the fleet for {{event.seconds}}s\n            kind: capability\n            source_status: review\nstored_as:\n- guard: card.current_run_id != null\n  status: running\nlosses:\n- role-specific prompts\n- machines, panes and resume\n- run supervision nudges\n- notice subscriptions\n- pause flag lowers to blocked\n- archived loses done versus cancelled\n";
Expand description

The built-in Hermes workflow’s source.