apm-core 0.1.44

Core library for APM — a git-native project manager for parallel AI coding agents.
Documentation
[workflow]

[[workflow.states]]
id    = "new"
label = "New"

  [[workflow.states.transitions]]
  to      = "groomed"
  trigger = "manual"
  outcome = "needs_input"

  [[workflow.states.transitions]]
  to      = "closed"
  trigger = "manual"
  outcome = "cancelled"

[[workflow.states]]
id           = "groomed"
label        = "Groomed"
dep_requires = "spec"

  [[workflow.states.transitions]]
  to              = "in_design"
  trigger         = "command:start"
  context_section = "Problem"
  outcome         = "needs_input"

  [[workflow.states.transitions]]
  to      = "closed"
  trigger = "manual"
  outcome = "cancelled"

[[workflow.states]]
id    = "question"
label = "Question"

  [[workflow.states.transitions]]
  to      = "groomed"
  trigger = "manual"
  outcome = "needs_input"

  [[workflow.states.transitions]]
  to      = "closed"
  trigger = "manual"
  outcome = "cancelled"

[[workflow.states]]
id             = "specd"
label          = "Specd"
satisfies_deps = "spec"
worker_end     = true

  [[workflow.states.transitions]]
  to      = "ready"
  trigger = "manual"
  outcome = "needs_input"

  [[workflow.states.transitions]]
  to      = "ammend"
  trigger = "manual"
  outcome = "needs_input"

  [[workflow.states.transitions]]
  to      = "closed"
  trigger = "manual"
  outcome = "cancelled"

[[workflow.states]]
id             = "ammend"
label          = "Ammend"
dep_requires   = "spec"
satisfies_deps = "spec"

  [[workflow.states.transitions]]
  to      = "specd"
  trigger = "manual"
  outcome = "success"

  [[workflow.states.transitions]]
  to      = "question"
  trigger = "manual"
  outcome = "needs_input"

  [[workflow.states.transitions]]
  to      = "groomed"
  trigger = "manual"
  outcome = "needs_input"

  [[workflow.states.transitions]]
  to      = "closed"
  trigger = "manual"
  outcome = "cancelled"

[[workflow.states]]
id             = "in_design"
label          = "In Design"
worker_profile = "claude/spec-writer"

  [[workflow.states.transitions]]
  to      = "specd"
  trigger = "manual"
  outcome = "success"

  [[workflow.states.transitions]]
  to      = "question"
  trigger = "manual"
  outcome = "needs_input"

  [[workflow.states.transitions]]
  to      = "closed"
  trigger = "manual"
  outcome = "cancelled"

[[workflow.states]]
id             = "ready"
label          = "Ready"
satisfies_deps = "spec"

  [[workflow.states.transitions]]
  to      = "in_progress"
  trigger = "command:start"
  outcome = "needs_input"

  [[workflow.states.transitions]]
  to      = "ammend"
  trigger = "manual"
  outcome = "needs_input"

  [[workflow.states.transitions]]
  to      = "specd"
  trigger = "manual"
  outcome = "needs_input"

  [[workflow.states.transitions]]
  to      = "closed"
  trigger = "manual"
  outcome = "cancelled"

[[workflow.states]]
id             = "in_progress"
label          = "In Progress"
satisfies_deps = "spec"
worker_profile = "claude/coder"

  [[workflow.states.transitions]]
  to         = "implemented"
  trigger    = "manual"
  completion = "pr_or_epic_merge"
  on_failure = "merge_failed"
  outcome    = "success"

  [[workflow.states.transitions]]
  to      = "blocked"
  trigger = "manual"
  label   = "Agent is blocked — wrote questions in ### Open questions"
  outcome = "needs_input"

  [[workflow.states.transitions]]
  to      = "ready"
  trigger = "manual"
  warning = "Reverting in_progress ticket to ready — any uncommitted work on the branch may be lost"
  outcome = "needs_input"

  [[workflow.states.transitions]]
  to      = "ammend"
  trigger = "manual"
  outcome = "needs_input"

  [[workflow.states.transitions]]
  to      = "closed"
  trigger = "manual"
  outcome = "cancelled"

[[workflow.states]]
id    = "blocked"
label = "Blocked"

  [[workflow.states.transitions]]
  to      = "ready"
  trigger = "manual"
  label   = "Supervisor answered questions — agent can resume"
  outcome = "needs_input"

  [[workflow.states.transitions]]
  to      = "closed"
  trigger = "manual"
  outcome = "cancelled"

[[workflow.states]]
id             = "implemented"
label          = "Implemented"
satisfies_deps = true
worker_end     = true

  [[workflow.states.transitions]]
  to            = "ready"
  trigger       = "manual"
  focus_section = "Code review"
  outcome       = "needs_input"

  [[workflow.states.transitions]]
  to      = "ammend"
  trigger = "manual"
  outcome = "needs_input"

  [[workflow.states.transitions]]
  to      = "closed"
  trigger = "manual"
  outcome = "cancelled"

[[workflow.states]]
id    = "merge_failed"
label = "Merge failed"

  [[workflow.states.transitions]]
  to         = "implemented"
  trigger    = "manual"
  completion = "pr_or_epic_merge"
  on_failure = "merge_failed"
  outcome    = "needs_input"

[[workflow.states]]
id             = "closed"
label          = "Closed"
terminal       = true
satisfies_deps = true

[workflow.prioritization]
priority_weight = 10.0
effort_weight   = -2.0
risk_weight     = -1.0