[docs] regenerate lifecycle artifacts for sync_branch + branch-keyed submit_root gate

The committed artifacts were stale: lifecycle.py grew the sync_branch verb
(B1) and the branch-keyed submit_root gate description (B2/B3) but the
generated markdown/json were never regenerated. make foundation-check
enforces artifact==generator(lifecycle.py); regenerating restores that.
No source change — pure generator output.
This commit is contained in:
Renn F
2026-06-29 03:03:34 +02:00
parent 592c84da5d
commit 0c1c3b345a
4 changed files with 331 additions and 85 deletions
@@ -10,4 +10,5 @@ other verb will be rejected with a Decision telling you the right one.
- **i_will_work_on**: Claim a task, set the plan, and transition to in_progress. Atomic - preconditions checked before any state mutation. - **i_will_work_on**: Claim a task, set the plan, and transition to in_progress. Atomic - preconditions checked before any state mutation.
- **open_pr**: Push the branch and open a PR. Atomic - preconditions (assignee, >=1 commit, no prior PR) checked BEFORE any git operation. After success, call i_am_done. - **open_pr**: Push the branch and open a PR. Atomic - preconditions (assignee, >=1 commit, no prior PR) checked BEFORE any git operation. After success, call i_am_done.
- **resume**: Resume a paused task you own. paused -> in_progress. - **resume**: Resume a paused task you own. paused -> in_progress.
- **sync_branch**: Rebase your task's branch onto its current base THROUGH the gate (raw git is denied). Use when your branch has fallen behind its base — e.g. a sibling task's PR merged into the parent branch while you worked. Fetches origin, rebases head onto base, and force-pushes (with-lease). No DB state change. On conflicts the rebase is aborted and the conflicted files are returned — resolve by hand, commit, then sync_branch again.
- **unclaim**: Voluntarily release a claim back to pending. The work-in-progress branch is preserved. - **unclaim**: Voluntarily release a claim back to pending. The work-in-progress branch is preserved.
@@ -11,7 +11,7 @@ other verb will be rejected with a Decision telling you the right one.
- **i_am_idle**: Signal you have no active work. PMs auto-pause owned in_progress tasks. - **i_am_idle**: Signal you have no active work. PMs auto-pause owned in_progress tasks.
- **i_will_plan**: PM mirror of i_will_work_on for parent tasks. Claim, plan, transition to in_progress; from there delegate subtasks. - **i_will_plan**: PM mirror of i_will_work_on for parent tasks. Claim, plan, transition to in_progress; from there delegate subtasks.
- **resume**: Resume a paused task you own. paused -> in_progress. - **resume**: Resume a paused task you own. paused -> in_progress.
- **submit_root**: Main PM opens the root→master PR and moves the root task to awaiting_pr_review for the main reviewer (the root analogue of the cell PM's submit_up). After pr_pass, call complete to escalate to the CEO. Only for code roots; branchless coordination roots skip the gate and complete directly. - **submit_root**: Main PM opens the root→master PR and moves the root task to awaiting_pr_review for the main reviewer (the root analogue of the cell PM's submit_up). After pr_pass, call complete to escalate to the CEO. For branch-bearing roots (a Main-PM root-subtask assembles the cells' merged work); branchless coordination roots skip the gate and complete directly. The gate is branch-keyed, not task_type-keyed — a Main-PM root is planning-typed, never code.
- **triage**: List actionable tasks in your scope. - **triage**: List actionable tasks in your scope.
- **triage_all**: List actionable tasks across all teams (Main PM only). - **triage_all**: List actionable tasks across all teams (Main PM only).
- **unblock**: PM unblocks a blocked task; restores pre-block state. - **unblock**: PM unblocks a blocked task; restores pre-block state.
+15 -2
View File
@@ -73,6 +73,8 @@ Escalate to your role's escalation_target.
**Composes:** (no atomic actions) **Composes:** (no atomic actions)
**Preconditions:** non_terminal
## fail_review ## fail_review
@@ -162,7 +164,7 @@ Push the branch and open a PR. Atomic - preconditions (assignee, >=1 commit, no
**Side effects:** push_branch, create_pr **Side effects:** push_branch, create_pr
**Preconditions:** commits>=1, no_prior_pr, owns_task **Preconditions:** commits>=1, no_prior_pr, owns_task, pr_open_state
## pass_review ## pass_review
@@ -221,7 +223,7 @@ Resume a paused task you own. paused -> in_progress.
## submit_root ## submit_root
Main PM opens the root→master PR and moves the root task to awaiting_pr_review for the main reviewer (the root analogue of the cell PM's submit_up). After pr_pass, call complete to escalate to the CEO. Only for code roots; branchless coordination roots skip the gate and complete directly. Main PM opens the root→master PR and moves the root task to awaiting_pr_review for the main reviewer (the root analogue of the cell PM's submit_up). After pr_pass, call complete to escalate to the CEO. For branch-bearing roots (a Main-PM root-subtask assembles the cells' merged work); branchless coordination roots skip the gate and complete directly. The gate is branch-keyed, not task_type-keyed — a Main-PM root is planning-typed, never code.
**Allowed roles:** main_pm **Allowed roles:** main_pm
@@ -241,6 +243,17 @@ Cell PM opens the cell→root PR and moves the cell task into the PR-review gate
**Pre side effects:** create_pr **Pre side effects:** create_pr
## sync_branch
Rebase your task's branch onto its current base THROUGH the gate (raw git is denied). Use when your branch has fallen behind its base — e.g. a sibling task's PR merged into the parent branch while you worked. Fetches origin, rebases head onto base, and force-pushes (with-lease). No DB state change. On conflicts the rebase is aborted and the conflicted files are returned — resolve by hand, commit, then sync_branch again.
**Allowed roles:** developer
**Composes:** (no atomic actions)
**Preconditions:** owns_task
## triage ## triage
List actionable tasks in your scope. List actionable tasks in your scope.
+314 -82
View File
@@ -1,19 +1,38 @@
{ {
"claim_rules": { "claim_rules": {
"auditor": [], "auditor": [],
"cell_pm": ["needs_revision", "pending"], "cell_pm": [
"needs_revision",
"pending"
],
"ceo": [], "ceo": [],
"developer": ["needs_revision", "pending"], "developer": [
"documenter": ["awaiting_documentation", "pending"], "needs_revision",
"pending"
],
"documenter": [
"awaiting_documentation",
"pending"
],
"head_marketing": [], "head_marketing": [],
"main_pm": ["needs_revision", "pending"], "main_pm": [
"pr_reviewer": ["awaiting_pr_review", "pending"], "needs_revision",
"pending"
],
"pr_reviewer": [
"awaiting_pr_review",
"pending"
],
"product_owner": [], "product_owner": [],
"qa": ["awaiting_qa"] "qa": [
"awaiting_qa"
]
}, },
"intents": [ "intents": [
{ {
"allowed_roles": ["documenter"], "allowed_roles": [
"documenter"
],
"composes": [], "composes": [],
"description": "Claim awaiting_documentation. Returns evidence inline.", "description": "Claim awaiting_documentation. Returns evidence inline.",
"name": "claim_doc_task", "name": "claim_doc_task",
@@ -21,7 +40,9 @@
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["pr_reviewer"], "allowed_roles": [
"pr_reviewer"
],
"composes": [], "composes": [],
"description": "Claim an assembled-PR review task (awaiting_pr_review) WITHOUT transitioning it \u2014 mirrors QA's claim_review. The assembled diff and the parent task's acceptance criteria are returned inline.", "description": "Claim an assembled-PR review task (awaiting_pr_review) WITHOUT transitioning it \u2014 mirrors QA's claim_review. The assembled diff and the parent task's acceptance criteria are returned inline.",
"name": "claim_gate_review", "name": "claim_gate_review",
@@ -29,15 +50,22 @@
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["pr_reviewer"], "allowed_roles": [
"composes": ["claim", "start"], "pr_reviewer"
],
"composes": [
"claim",
"start"
],
"description": "Claim an inbound external-PR review task and start work. pending -> claimed -> in_progress.", "description": "Claim an inbound external-PR review task and start work. pending -> claimed -> in_progress.",
"name": "claim_pr_review", "name": "claim_pr_review",
"pre_side_effects": [], "pre_side_effects": [],
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["qa"], "allowed_roles": [
"qa"
],
"composes": [], "composes": [],
"description": "Claim a task in awaiting_qa for review. Returns evidence inline.", "description": "Claim a task in awaiting_qa for review. Returns evidence inline.",
"name": "claim_review", "name": "claim_review",
@@ -45,31 +73,52 @@
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["cell_pm", "main_pm"], "allowed_roles": [
"composes": ["complete"], "cell_pm",
"main_pm"
],
"composes": [
"complete"
],
"description": "Cell PM merges the PR (leaf into the cell branch, or the gated cell\u2192root PR into the root branch) + transitions to completed; Main PM escalates the root to the CEO (who merges root\u2192master).", "description": "Cell PM merges the PR (leaf into the cell branch, or the gated cell\u2192root PR into the root branch) + transitions to completed; Main PM escalates the root to the CEO (who merges root\u2192master).",
"name": "complete", "name": "complete",
"pre_side_effects": [], "pre_side_effects": [],
"side_effects": ["pr_merge"] "side_effects": [
"pr_merge"
]
}, },
{ {
"allowed_roles": ["cell_pm", "main_pm"], "allowed_roles": [
"composes": ["create_subtask"], "cell_pm",
"main_pm"
],
"composes": [
"create_subtask"
],
"description": "Create a subtask under the current task. Validates the delegation chain (main_pm->cell_pm; cell_pm->its team's devs) and the assignee-vs-task_type rule (Cell PMs get planning-typed tasks; devs get code/research, UX devs also design). documentation is NOT delegatable \u2014 the lifecycle auto-creates the doc phase after the code subtask passes QA.", "description": "Create a subtask under the current task. Validates the delegation chain (main_pm->cell_pm; cell_pm->its team's devs) and the assignee-vs-task_type rule (Cell PMs get planning-typed tasks; devs get code/research, UX devs also design). documentation is NOT delegatable \u2014 the lifecycle auto-creates the doc phase after the code subtask passes QA.",
"name": "delegate", "name": "delegate",
"pre_side_effects": [], "pre_side_effects": [],
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["head_marketing", "main_pm", "product_owner"], "allowed_roles": [
"composes": ["escalate_to_ceo"], "head_marketing",
"main_pm",
"product_owner"
],
"composes": [
"escalate_to_ceo"
],
"description": "Escalate to CEO with reason. Transitions to awaiting_ceo_approval.", "description": "Escalate to CEO with reason. Transitions to awaiting_ceo_approval.",
"name": "escalate_to_ceo", "name": "escalate_to_ceo",
"pre_side_effects": [], "pre_side_effects": [],
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["cell_pm", "main_pm"], "allowed_roles": [
"cell_pm",
"main_pm"
],
"composes": [], "composes": [],
"description": "Escalate to your role's escalation_target.", "description": "Escalate to your role's escalation_target.",
"name": "escalate_up", "name": "escalate_up",
@@ -77,8 +126,12 @@
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["qa"], "allowed_roles": [
"composes": ["qa_fail"], "qa"
],
"composes": [
"qa_fail"
],
"description": "Fail QA with concrete issues. Transitions to needs_revision.", "description": "Fail QA with concrete issues. Transitions to needs_revision.",
"name": "fail_review", "name": "fail_review",
"pre_side_effects": [], "pre_side_effects": [],
@@ -100,16 +153,27 @@
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["developer", "documenter", "qa"], "allowed_roles": [
"composes": ["block"], "developer",
"documenter",
"qa"
],
"composes": [
"block"
],
"description": "Escalate to PM. Logs a struggle journal entry.", "description": "Escalate to PM. Logs a struggle journal entry.",
"name": "i_am_blocked", "name": "i_am_blocked",
"pre_side_effects": [], "pre_side_effects": [],
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["developer"], "allowed_roles": [
"composes": ["submit_verification", "submit_qa"], "developer"
],
"composes": [
"submit_verification",
"submit_qa"
],
"description": "Submit work for QA. Auto-runs in_progress->verifying then verifying->awaiting_qa. Strict - PR must be open (call open_pr first) and >=1 commit.", "description": "Submit work for QA. Auto-runs in_progress->verifying then verifying->awaiting_qa. Strict - PR must be open (call open_pr first) and >=1 commit.",
"name": "i_am_done", "name": "i_am_done",
"pre_side_effects": [], "pre_side_effects": [],
@@ -136,71 +200,111 @@
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["documenter"], "allowed_roles": [
"composes": ["docs_complete"], "documenter"
],
"composes": [
"docs_complete"
],
"description": "Signal docs complete. Transitions to awaiting_pm_review.", "description": "Signal docs complete. Transitions to awaiting_pm_review.",
"name": "i_documented", "name": "i_documented",
"pre_side_effects": [], "pre_side_effects": [],
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["cell_pm", "main_pm"], "allowed_roles": [
"composes": ["claim", "set_plan", "start"], "cell_pm",
"main_pm"
],
"composes": [
"claim",
"set_plan",
"start"
],
"description": "PM mirror of i_will_work_on for parent tasks. Claim, plan, transition to in_progress; from there delegate subtasks.", "description": "PM mirror of i_will_work_on for parent tasks. Claim, plan, transition to in_progress; from there delegate subtasks.",
"name": "i_will_plan", "name": "i_will_plan",
"pre_side_effects": [], "pre_side_effects": [],
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["developer"], "allowed_roles": [
"composes": ["claim", "set_plan", "start"], "developer"
],
"composes": [
"claim",
"set_plan",
"start"
],
"description": "Claim a task, set the plan, and transition to in_progress. Atomic - preconditions checked before any state mutation.", "description": "Claim a task, set the plan, and transition to in_progress. Atomic - preconditions checked before any state mutation.",
"name": "i_will_work_on", "name": "i_will_work_on",
"pre_side_effects": [], "pre_side_effects": [],
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["developer"], "allowed_roles": [
"developer"
],
"composes": [], "composes": [],
"description": "Push the branch and open a PR. Atomic - preconditions (assignee, >=1 commit, no prior PR) checked BEFORE any git operation. After success, call i_am_done.", "description": "Push the branch and open a PR. Atomic - preconditions (assignee, >=1 commit, no prior PR) checked BEFORE any git operation. After success, call i_am_done.",
"name": "open_pr", "name": "open_pr",
"pre_side_effects": [], "pre_side_effects": [],
"side_effects": ["push_branch", "create_pr"] "side_effects": [
"push_branch",
"create_pr"
]
}, },
{ {
"allowed_roles": ["qa"], "allowed_roles": [
"composes": ["qa_pass"], "qa"
],
"composes": [
"qa_pass"
],
"description": "Pass QA. Transitions awaiting_qa -> awaiting_documentation.", "description": "Pass QA. Transitions awaiting_qa -> awaiting_documentation.",
"name": "pass_review", "name": "pass_review",
"pre_side_effects": [], "pre_side_effects": [],
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["pr_reviewer"], "allowed_roles": [
"composes": ["pr_review_done"], "pr_reviewer"
],
"composes": [
"pr_review_done"
],
"description": "Post one complete change-request to the external PR and finish the review task. in_progress -> completed.", "description": "Post one complete change-request to the external PR and finish the review task. in_progress -> completed.",
"name": "post_pr_review", "name": "post_pr_review",
"pre_side_effects": [], "pre_side_effects": [],
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["pr_reviewer"], "allowed_roles": [
"composes": ["pr_fail"], "pr_reviewer"
],
"composes": [
"pr_fail"
],
"description": "Fail the assembled-PR review with concrete issues. Transitions awaiting_pr_review -> needs_revision, routed back like a QA fail.", "description": "Fail the assembled-PR review with concrete issues. Transitions awaiting_pr_review -> needs_revision, routed back like a QA fail.",
"name": "pr_fail", "name": "pr_fail",
"pre_side_effects": [], "pre_side_effects": [],
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["pr_reviewer"], "allowed_roles": [
"composes": ["pr_pass"], "pr_reviewer"
],
"composes": [
"pr_pass"
],
"description": "Pass the assembled-PR review. Transitions awaiting_pr_review -> awaiting_pm_review so the PM can merge.", "description": "Pass the assembled-PR review. Transitions awaiting_pr_review -> awaiting_pm_review so the PM can merge.",
"name": "pr_pass", "name": "pr_pass",
"pre_side_effects": [], "pre_side_effects": [],
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["cell_pm"], "allowed_roles": [
"cell_pm"
],
"composes": [], "composes": [],
"description": "Hand a claimed/in_progress task to another developer in your own cell. The branch is keyed to the task (not the agent), so it is preserved \u2014 the new developer continues the work-in-progress. No status change.", "description": "Hand a claimed/in_progress task to another developer in your own cell. The branch is keyed to the task (not the agent), so it is preserved \u2014 the new developer continues the work-in-progress. No status change.",
"name": "reassign", "name": "reassign",
@@ -208,27 +312,57 @@
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["cell_pm", "developer", "documenter", "main_pm", "qa"], "allowed_roles": [
"composes": ["resume"], "cell_pm",
"developer",
"documenter",
"main_pm",
"qa"
],
"composes": [
"resume"
],
"description": "Resume a paused task you own. paused -> in_progress.", "description": "Resume a paused task you own. paused -> in_progress.",
"name": "resume", "name": "resume",
"pre_side_effects": [], "pre_side_effects": [],
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["main_pm"], "allowed_roles": [
"composes": ["submit_for_review"], "main_pm"
"description": "Main PM opens the root\u2192master PR and moves the root task to awaiting_pr_review for the main reviewer (the root analogue of the cell PM's submit_up). After pr_pass, call complete to escalate to the CEO. Only for code roots; branchless coordination roots skip the gate and complete directly.", ],
"composes": [
"submit_for_review"
],
"description": "Main PM opens the root\u2192master PR and moves the root task to awaiting_pr_review for the main reviewer (the root analogue of the cell PM's submit_up). After pr_pass, call complete to escalate to the CEO. For branch-bearing roots (a Main-PM root-subtask assembles the cells' merged work); branchless coordination roots skip the gate and complete directly. The gate is branch-keyed, not task_type-keyed \u2014 a Main-PM root is planning-typed, never code.",
"name": "submit_root", "name": "submit_root",
"pre_side_effects": ["create_root_pr"], "pre_side_effects": [
"create_root_pr"
],
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["cell_pm"], "allowed_roles": [
"composes": ["submit_for_review"], "cell_pm"
],
"composes": [
"submit_for_review"
],
"description": "Cell PM opens the cell\u2192root PR and moves the cell task into the PR-review gate (awaiting_pr_review). The cell reviewer reviews the assembled diff; after pr_pass the same Cell PM completes it.", "description": "Cell PM opens the cell\u2192root PR and moves the cell task into the PR-review gate (awaiting_pr_review). The cell reviewer reviews the assembled diff; after pr_pass the same Cell PM completes it.",
"name": "submit_up", "name": "submit_up",
"pre_side_effects": ["create_pr"], "pre_side_effects": [
"create_pr"
],
"side_effects": []
},
{
"allowed_roles": [
"developer"
],
"composes": [],
"description": "Rebase your task's branch onto its current base THROUGH the gate (raw git is denied). Use when your branch has fallen behind its base \u2014 e.g. a sibling task's PR merged into the parent branch while you worked. Fetches origin, rebases head onto base, and force-pushes (with-lease). No DB state change. On conflicts the rebase is aborted and the conflicted files are returned \u2014 resolve by hand, commit, then sync_branch again.",
"name": "sync_branch",
"pre_side_effects": [],
"side_effects": [] "side_effects": []
}, },
{ {
@@ -246,7 +380,9 @@
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["main_pm"], "allowed_roles": [
"main_pm"
],
"composes": [], "composes": [],
"description": "List actionable tasks across all teams (Main PM only).", "description": "List actionable tasks across all teams (Main PM only).",
"name": "triage_all", "name": "triage_all",
@@ -254,15 +390,26 @@
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["cell_pm", "main_pm"], "allowed_roles": [
"composes": ["unblock"], "cell_pm",
"main_pm"
],
"composes": [
"unblock"
],
"description": "PM unblocks a blocked task; restores pre-block state.", "description": "PM unblocks a blocked task; restores pre-block state.",
"name": "unblock", "name": "unblock",
"pre_side_effects": [], "pre_side_effects": [],
"side_effects": [] "side_effects": []
}, },
{ {
"allowed_roles": ["cell_pm", "developer", "documenter", "main_pm", "qa"], "allowed_roles": [
"cell_pm",
"developer",
"documenter",
"main_pm",
"qa"
],
"composes": [], "composes": [],
"description": "Voluntarily release a claim back to pending. The work-in-progress branch is preserved.", "description": "Voluntarily release a claim back to pending. The work-in-progress branch is preserved.",
"name": "unclaim", "name": "unclaim",
@@ -273,109 +420,160 @@
"transitions": [ "transitions": [
{ {
"action": "cancel", "action": "cancel",
"roles": ["cell_pm", "ceo", "main_pm"], "roles": [
"cell_pm",
"ceo",
"main_pm"
],
"source": "awaiting_ceo_approval", "source": "awaiting_ceo_approval",
"target": "cancelled" "target": "cancelled"
}, },
{ {
"action": "ceo_approve", "action": "ceo_approve",
"roles": ["ceo"], "roles": [
"ceo"
],
"source": "awaiting_ceo_approval", "source": "awaiting_ceo_approval",
"target": "completed" "target": "completed"
}, },
{ {
"action": "ceo_reject", "action": "ceo_reject",
"roles": ["ceo"], "roles": [
"ceo"
],
"source": "awaiting_ceo_approval", "source": "awaiting_ceo_approval",
"target": "needs_revision" "target": "needs_revision"
}, },
{ {
"action": "docs_complete", "action": "docs_complete",
"roles": ["documenter"], "roles": [
"documenter"
],
"source": "awaiting_documentation", "source": "awaiting_documentation",
"target": "awaiting_pm_review" "target": "awaiting_pm_review"
}, },
{ {
"action": "cancel", "action": "cancel",
"roles": ["cell_pm", "ceo", "main_pm"], "roles": [
"cell_pm",
"ceo",
"main_pm"
],
"source": "awaiting_documentation", "source": "awaiting_documentation",
"target": "cancelled" "target": "cancelled"
}, },
{ {
"action": "claim", "action": "claim",
"roles": ["documenter"], "roles": [
"documenter"
],
"source": "awaiting_documentation", "source": "awaiting_documentation",
"target": "claimed" "target": "claimed"
}, },
{ {
"action": "escalate_to_ceo", "action": "escalate_to_ceo",
"roles": ["head_marketing", "main_pm", "product_owner"], "roles": [
"head_marketing",
"main_pm",
"product_owner"
],
"source": "awaiting_pm_review", "source": "awaiting_pm_review",
"target": "awaiting_ceo_approval" "target": "awaiting_ceo_approval"
}, },
{ {
"action": "cancel", "action": "cancel",
"roles": ["cell_pm", "ceo", "main_pm"], "roles": [
"cell_pm",
"ceo",
"main_pm"
],
"source": "awaiting_pm_review", "source": "awaiting_pm_review",
"target": "cancelled" "target": "cancelled"
}, },
{ {
"action": "complete", "action": "complete",
"roles": ["cell_pm", "main_pm"], "roles": [
"cell_pm",
"main_pm"
],
"source": "awaiting_pm_review", "source": "awaiting_pm_review",
"target": "completed" "target": "completed"
}, },
{ {
"action": "pr_pass", "action": "pr_pass",
"roles": ["pr_reviewer"], "roles": [
"pr_reviewer"
],
"source": "awaiting_pr_review", "source": "awaiting_pr_review",
"target": "awaiting_pm_review" "target": "awaiting_pm_review"
}, },
{ {
"action": "cancel", "action": "cancel",
"roles": ["cell_pm", "ceo", "main_pm"], "roles": [
"cell_pm",
"ceo",
"main_pm"
],
"source": "awaiting_pr_review", "source": "awaiting_pr_review",
"target": "cancelled" "target": "cancelled"
}, },
{ {
"action": "claim", "action": "claim",
"roles": ["pr_reviewer"], "roles": [
"pr_reviewer"
],
"source": "awaiting_pr_review", "source": "awaiting_pr_review",
"target": "claimed" "target": "claimed"
}, },
{ {
"action": "pr_fail", "action": "pr_fail",
"roles": ["pr_reviewer"], "roles": [
"pr_reviewer"
],
"source": "awaiting_pr_review", "source": "awaiting_pr_review",
"target": "needs_revision" "target": "needs_revision"
}, },
{ {
"action": "qa_pass", "action": "qa_pass",
"roles": ["qa"], "roles": [
"qa"
],
"source": "awaiting_qa", "source": "awaiting_qa",
"target": "awaiting_documentation" "target": "awaiting_documentation"
}, },
{ {
"action": "cancel", "action": "cancel",
"roles": ["cell_pm", "ceo", "main_pm"], "roles": [
"cell_pm",
"ceo",
"main_pm"
],
"source": "awaiting_qa", "source": "awaiting_qa",
"target": "cancelled" "target": "cancelled"
}, },
{ {
"action": "claim", "action": "claim",
"roles": ["qa"], "roles": [
"qa"
],
"source": "awaiting_qa", "source": "awaiting_qa",
"target": "claimed" "target": "claimed"
}, },
{ {
"action": "qa_fail", "action": "qa_fail",
"roles": ["qa"], "roles": [
"qa"
],
"source": "awaiting_qa", "source": "awaiting_qa",
"target": "needs_revision" "target": "needs_revision"
}, },
{ {
"action": "cancel", "action": "cancel",
"roles": ["cell_pm", "ceo", "main_pm"], "roles": [
"cell_pm",
"ceo",
"main_pm"
],
"source": "backlog", "source": "backlog",
"target": "cancelled" "target": "cancelled"
}, },
@@ -387,13 +585,21 @@
}, },
{ {
"action": "escalate_to_ceo", "action": "escalate_to_ceo",
"roles": ["head_marketing", "main_pm", "product_owner"], "roles": [
"head_marketing",
"main_pm",
"product_owner"
],
"source": "blocked", "source": "blocked",
"target": "awaiting_ceo_approval" "target": "awaiting_ceo_approval"
}, },
{ {
"action": "cancel", "action": "cancel",
"roles": ["cell_pm", "ceo", "main_pm"], "roles": [
"cell_pm",
"ceo",
"main_pm"
],
"source": "blocked", "source": "blocked",
"target": "cancelled" "target": "cancelled"
}, },
@@ -411,7 +617,11 @@
}, },
{ {
"action": "cancel", "action": "cancel",
"roles": ["cell_pm", "ceo", "main_pm"], "roles": [
"cell_pm",
"ceo",
"main_pm"
],
"source": "claimed", "source": "claimed",
"target": "cancelled" "target": "cancelled"
}, },
@@ -441,13 +651,19 @@
}, },
{ {
"action": "cancel", "action": "cancel",
"roles": ["cell_pm", "ceo", "main_pm"], "roles": [
"cell_pm",
"ceo",
"main_pm"
],
"source": "in_progress", "source": "in_progress",
"target": "cancelled" "target": "cancelled"
}, },
{ {
"action": "pr_review_done", "action": "pr_review_done",
"roles": ["pr_reviewer"], "roles": [
"pr_reviewer"
],
"source": "in_progress", "source": "in_progress",
"target": "completed" "target": "completed"
}, },
@@ -465,7 +681,11 @@
}, },
{ {
"action": "cancel", "action": "cancel",
"roles": ["cell_pm", "ceo", "main_pm"], "roles": [
"cell_pm",
"ceo",
"main_pm"
],
"source": "needs_revision", "source": "needs_revision",
"target": "cancelled" "target": "cancelled"
}, },
@@ -477,7 +697,11 @@
}, },
{ {
"action": "cancel", "action": "cancel",
"roles": ["cell_pm", "ceo", "main_pm"], "roles": [
"cell_pm",
"ceo",
"main_pm"
],
"source": "paused", "source": "paused",
"target": "cancelled" "target": "cancelled"
}, },
@@ -489,7 +713,11 @@
}, },
{ {
"action": "cancel", "action": "cancel",
"roles": ["cell_pm", "ceo", "main_pm"], "roles": [
"cell_pm",
"ceo",
"main_pm"
],
"source": "pending", "source": "pending",
"target": "cancelled" "target": "cancelled"
}, },
@@ -507,7 +735,11 @@
}, },
{ {
"action": "cancel", "action": "cancel",
"roles": ["cell_pm", "ceo", "main_pm"], "roles": [
"cell_pm",
"ceo",
"main_pm"
],
"source": "verifying", "source": "verifying",
"target": "cancelled" "target": "cancelled"
} }