@wichayutdew/pi-workflows 3.2.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/index.js +7 -3
  2. package/examples/starter-kit/agents/reviewer.md +1 -1
  3. package/examples/starter-kit/settings.yaml +0 -1
  4. package/examples/starter-kit/steps/work/implement.md +1 -0
  5. package/examples/starter-kit/steps/work/intake.md +5 -0
  6. package/examples/starter-kit/steps/work/plan.md +17 -51
  7. package/examples/starter-kit/steps/work/prepare-workspace.md +8 -0
  8. package/examples/starter-kit/steps/work//363/260/215/224 publish-remote.md" +16 -0
  9. package/examples/starter-kit/work.workflow.yaml +60 -32
  10. package/package.json +1 -1
  11. package/src/harness/delegation-plan.ts +1 -0
  12. package/src/harness/status-actions.ts +3 -0
  13. package/src/harness/types.ts +1 -0
  14. package/src/workflow-status/format-status.ts +5 -1
  15. package/src/workflow-status/render-step-detail.ts +3 -0
  16. package/src/workflow-status/types.ts +1 -0
  17. package/examples/starter-kit/investigate.workflow.yaml +0 -84
  18. package/examples/starter-kit/jira.workflow.yaml +0 -75
  19. package/examples/starter-kit/mr-comment.workflow.yaml +0 -142
  20. package/examples/starter-kit/mr-review.workflow.yaml +0 -96
  21. package/examples/starter-kit/steps/investigate/investigate.md +0 -40
  22. package/examples/starter-kit/steps/investigate/retrieve.md +0 -28
  23. package/examples/starter-kit/steps/investigate/validate.md +0 -20
  24. package/examples/starter-kit/steps/jira/create.md +0 -25
  25. package/examples/starter-kit/steps/jira/draft.md +0 -18
  26. package/examples/starter-kit/steps/jira/plan.md +0 -30
  27. package/examples/starter-kit/steps/mr-comment/checkout-source.md +0 -14
  28. package/examples/starter-kit/steps/mr-comment/fetch.md +0 -16
  29. package/examples/starter-kit/steps/mr-comment/implement.md +0 -21
  30. package/examples/starter-kit/steps/mr-comment/plan.md +0 -61
  31. package/examples/starter-kit/steps/mr-comment/publish.md +0 -17
  32. package/examples/starter-kit/steps/mr-comment/verify.md +0 -16
  33. package/examples/starter-kit/steps/mr-review/fetch.md +0 -17
  34. package/examples/starter-kit/steps/mr-review/publish-approved.md +0 -18
  35. package/examples/starter-kit/steps/mr-review/review-for-approval.md +0 -53
  36. package/examples/starter-kit/steps/mr-review/verify-published.md +0 -16
  37. package/examples/starter-kit/steps/shared/prepare-workspace.md +0 -17
  38. package/examples/starter-kit/steps/shared/publish-remote.md +0 -16
  39. package/examples/starter-kit/steps/ticket/implement.md +0 -23
  40. package/examples/starter-kit/steps/ticket/plan.md +0 -60
  41. package/examples/starter-kit/steps/ticket/verify.md +0 -24
  42. package/examples/starter-kit/ticket.workflow.yaml +0 -108
package/dist/index.js CHANGED
@@ -3144,10 +3144,11 @@ function formatWorkflowProgressStatus(snapshot, statusShortcutLabel) {
3144
3144
  const { run, workflow } = snapshot;
3145
3145
  const currentStep = formatStepName(stepTitle(workflow, run.currentStepId), run.currentStepId);
3146
3146
  const activity = run.status === "awaiting-gate" ? "awaiting review" : "working";
3147
+ const workerModel = snapshot.execution?.kind === "subagent" && snapshot.execution.model ? ` · model ${snapshot.execution.model}` : "";
3147
3148
  const workerProgress = snapshot.execution?.kind === "subagent" ? ` · ${snapshot.execution.progress}` : "";
3148
3149
  const usage = workflowUsage(run);
3149
3150
  const usageText = usage.models.length > 0 ? ` · ${formatUsage(usage)}` : "";
3150
- return `${workflowStatusIcon(run, snapshot.now)} ${run.workflowId} · step ${currentStep} · ${activity}${workerProgress}${usageText} · ${statusShortcutLabel}`;
3151
+ return `${workflowStatusIcon(run, snapshot.now)} ${run.workflowId} · step ${currentStep} · ${activity}${workerModel}${workerProgress}${usageText} · ${statusShortcutLabel}`;
3151
3152
  }
3152
3153
  // src/workflow-status/view.ts
3153
3154
  import {
@@ -3315,6 +3316,7 @@ function renderLiveWorkerSession(theme, snapshot, detail, width) {
3315
3316
  "",
3316
3317
  theme.bold(theme.fg("accent", "Live Worker Session")),
3317
3318
  ...keyValueLines(theme, "worker", snapshot.execution.agent, width, "accent"),
3319
+ ...snapshot.execution.model ? keyValueLines(theme, "model", snapshot.execution.model, width, "muted") : [],
3318
3320
  ...keyValueLines(theme, "state", snapshot.execution.progress, width, "accent"),
3319
3321
  "",
3320
3322
  theme.bold(theme.fg("accent", "● Input prompt")),
@@ -4422,7 +4424,8 @@ function workflowStatusSnapshot() {
4422
4424
  agent: this.activeDelegation.agent,
4423
4425
  requestId: this.activeDelegation.requestId,
4424
4426
  progress: this.activeDelegation.progress ?? "starting",
4425
- activityLog: this.activeDelegation.activityLog ?? []
4427
+ activityLog: this.activeDelegation.activityLog ?? [],
4428
+ ...this.activeDelegation.model ? { model: this.activeDelegation.model } : {}
4426
4429
  };
4427
4430
  } else if (this.mainSteps.activeStepId) {
4428
4431
  execution = { kind: "main" };
@@ -6693,7 +6696,8 @@ function createDelegationPlan(input, dependencies) {
6693
6696
  resultDirectory: workspace.resultDirectory,
6694
6697
  policy,
6695
6698
  transcriptTask: task,
6696
- agent
6699
+ agent,
6700
+ ...agentProfile.model ? { model: agentProfile.model } : {}
6697
6701
  };
6698
6702
  const request = {
6699
6703
  version: 1,
@@ -1,5 +1,5 @@
1
1
  ---
2
- thinking: xhigh
2
+ thinking: high
3
3
  ---
4
4
 
5
5
  You are the independent review role for one workflow step.
@@ -1,4 +1,3 @@
1
- # yaml-language-server: $schema=https://raw.githubusercontent.com/wichayutdew/pi-workflows/main/schemas/settings.schema.json
2
1
  version: 1
3
2
  allowProjectWorkflows: false
4
3
  statusShortcut: ctrl+alt+c
@@ -17,6 +17,7 @@ Latest ledger:
17
17
  1. **Workspace Integrity**: Operate strictly in `repositories[0].cwd`. Never switch branches, create workspaces, or touch unrelated files.
18
18
  2. **Execution Authority**: Run only commands listed in `worker` array. No unapproved commands or external pushes.
19
19
  3. **Resumable State**: If pre-existing dirty files were recorded in preparation, leave them intact; do not commit or stash them.
20
+ 4. **No External Writes**: Never push, create or update reviews, or mutate Jira from this stage.
20
21
  4. **Outcomes**:
21
22
  - `ready`: Implementation complete, RED/GREEN evidence logged, commit created. Pass unchanged `json` contract to reviewer.
22
23
  - `retry`: Recoverable transient tool/environment issue.
@@ -0,0 +1,5 @@
1
+ You are the read-only intake stage. Normalize `{{workflow.input}}` before any branch or worktree exists.
2
+
3
+ If exactly one Jira key is present, retrieve it with Atlassian and return `blocked` if it is malformed, inaccessible, ambiguous, or contradictory. Otherwise use the user requirement. Select a safe Conventional Commit type and concise semantic summary; block rather than guess.
4
+
5
+ Return `ready` with a compact JSON handoff: `mode` (`jira` or `requirement`), `jiraTicket` (observed key or null), `summary`, `branchType`, `acceptanceCriteria`, and evidence. On `{{restart.workspace}}`, preserve the existing run-owned branch identity; block if the new input contradicts its verified Jira key. Never mutate Jira, Git, branches, worktrees, or remotes.
@@ -1,51 +1,17 @@
1
- You are the planning and evidence stage for local work. Stay read-only in this child workspace; do not launch subagents.
2
-
3
- Workflow request:
4
- {{workflow.input}}
5
-
6
- Previously rejected artifact:
7
- {{gate.artifact}}
8
-
9
- Plannotator feedback:
10
- {{gate.feedback}}
11
-
12
- ## Plan Artifact Structure
13
-
14
- Format the artifact in order:
15
- 1. `# <Outcome-oriented title>`
16
- 2. `## Review summary` — 3-5 bullets: result, scope, exclusions.
17
- 3. `## Review focus` Consequential user choices (or `No decisions needed`).
18
- 4. `## Proposed approach` — Numbered actions with target, change, reason, and criterion.
19
- 5. `## Validation` — Verification checks and expected proofs.
20
- 6. `## Risks` — Material risks with mitigation/rollback signals.
21
- 7. `## Execution appendix (machine-readable)` — Fenced JSON with `repositories` array (`cwd`, `baseHead`, `branch`, `commitTitle`, `acceptanceCriteria`, `worker`, `reviewer`).
22
-
23
- ```json
24
- {
25
- "repositories": [
26
- {
27
- "cwd": "<bound absolute path>",
28
- "baseHead": "<observed selected HEAD>",
29
- "branch": "<dedicated branch>",
30
- "commitTitle": "type(scope): subject",
31
- "acceptanceCriteria": ["AC 1", "AC 2"],
32
- "worker": [
33
- {"id": "test-red", "command": "...", "purpose": "prove failing test"},
34
- {"id": "test-green", "command": "...", "purpose": "prove passing test"}
35
- ],
36
- "reviewer": [
37
- {"id": "full-tests", "command": "...", "purpose": "run full test suite"},
38
- {"id": "lint", "command": "...", "purpose": "run linter"}
39
- ]
40
- }
41
- ]
42
- }
43
- ```
44
-
45
- ## Artifact limit
46
- Keep the submitted artifact concise and at most 8,000 characters. Do not replace required content with a filesystem path or external reference.
47
-
48
- ## Outcomes
49
- - `submit`: Plan ready for Plannotator review. Pass the **complete Markdown text content** directly in the `artifact` parameter.
50
- - `workspace-refresh`: Source ref advanced unexpectedly and workspace is clean.
51
- - `blocked`: Unsafe multi-repo requirement or unrecoverable workspace state.
1
+ You are the read-only planning stage. Use the normalized intake handoff in `{{last.summary}}`; inspect the source checkout, origin, base HEAD, target branch, and description template without creating a branch or worktree.
2
+
3
+ Submit exactly:
4
+ # <Outcome title>
5
+ ## Goal/Acceptance Criteria
6
+ ## Non Goal
7
+ ## Implementation Steps and Tests
8
+ List concise add/remove steps and only tests with an assessable benefit.
9
+ ## Validation
10
+ List exact independent Bash commands and expected proof.
11
+ ## Risks/Decisions Needed
12
+ ## Publications Contract/Metadata
13
+ Record observed provider/repository/target, proposed deterministic source branch, semantic title, template evidence, traceability mode, and Jira key or null. Jira mode requires exactly one matching `[KEY]` title key; requirement mode forbids bracketed keys.
14
+ ## Execution appendix (machine-readable)
15
+ Include JSON with `repositories` (sourceRoot, baseHead, branch, worker, reviewer), `traceability`, and `publication` (provider, repository, sourceBranch, targetBranch, title, descriptionTemplate, managedDescription).
16
+
17
+ Propose `<type>/<KEY>` for verified Jira or `<type>/<semantic-kebab-summary>` otherwise. No random suffix, run ID, or future worktree path. `submit` only after all metadata is observed.
@@ -0,0 +1,8 @@
1
+ You prepare the approved branch after the plan gate. Do not launch subagents.
2
+
3
+ Approved plan: {{reviewed.artifact}}
4
+ Restart workspace: {{restart.workspace}}
5
+
6
+ Create or reuse only the approved `publication.sourceBranch` at approved `repositories[0].baseHead`. The run ID is for ownership/idempotence lookup only and must never be appended to a branch name. Branches are `<type>/<JIRA-KEY>` for verified Jira or `<type>/<semantic-kebab-summary>` otherwise; reject random numbers, timestamps, hashes, and recomputed names.
7
+
8
+ If `{{restart.workspace}}` is set, rebind that exact worktree and existing branch; block if it differs from the approved branch. Preserve user changes and unrelated worktrees. If source HEAD advanced from approved baseHead, return `workspace-refresh` without mutation. Return `ready` with bound workspace path and manifest, `retry` only for transient failures, and `blocked` for unsafe state.
@@ -0,0 +1,16 @@
1
+ You publish verified work only. Original request: {{workflow.input}}
2
+ Approved plan: {{reviewed.artifact}}
3
+
4
+ Derive provider, repository, and target branch from observed `origin`; block unsupported or ambiguous hosts. Validate the approved Conventional Commit title before remote action. Use traceability mode/jiraTicket from the artifact, never workflow command identity. Push only with non-force `git push --set-upstream origin <sourceBranch>`.
5
+
6
+ Use GitHub MCP (`pull_request_read`, `create_pull_request`, `update_pull_request`) or GitLab MCP; use matching `gh pr`/`glab mr` fallback only when required MCP operations are unavailable or fail. Resolve repository-file, gitlab-server-default, or "none" descriptionTemplate with validated sha256/template rules.
7
+
8
+ ## Existing review safety
9
+ Check for one existing open review. Its title is immutable: never update it. Preserve every byte outside one valid workflow-owned region. Valid matching pairs are:
10
+
11
+ <!-- ai-only-start -->
12
+ <!-- ai-only-end -->
13
+
14
+ For an existing valid pair, replace only its interior with approved managed implementation/test content; skip update when unchanged. With no markers, append exactly one approved pair and preserve existing body. mixed, duplicated, reversed, or malformed markers are `blocked`; never replace the full body. For a new review, preserve the resolved template/static body and append the approved managed region. Do not approve, merge, or close reviews.
15
+
16
+ Return `published` only after push and permitted creation/update; otherwise `retry` before mutation or `blocked` with evidence.
@@ -1,43 +1,37 @@
1
1
  version: 1
2
2
  id: work
3
3
  command: work
4
- description: 'Prepare a dedicated workspace, plan, implement, and verify local work. Example: /work Add rate limiting to user registration endpoint'
5
- start: prepare-workspace
4
+ description: 'Plan, implement, verify, and publish Pull Request'
5
+ start: intake
6
6
  maxStepVisits: 20
7
7
  summaryMaxChars: 30000
8
8
  steps:
9
- prepare-workspace:
10
- title: Prepare dedicated branch and worktree
9
+ intake:
10
+ title: Normalize requirement and optional Jira evidence
11
11
  prompt:
12
- file: steps/shared/prepare-workspace.md
13
- agent: workspace-preparer
14
- workspace:
15
- bindOn:
16
- - ready
17
- allowedRoots:
18
- - ~/repositories/worktrees
12
+ file: steps/work/intake.md
13
+ agent: planner
19
14
  permissions:
20
- tools: [read, ls, bash]
15
+ tools: [read, ls, bash, mcp]
21
16
  mcp: []
22
17
  extensions: [/]
23
- skills: [using-git-worktrees, caveman]
18
+ skills: []
24
19
  bash:
25
20
  mode: unrestricted
26
21
  transitions:
27
22
  ready: plan
28
- retry: prepare-workspace
23
+ retry: intake
29
24
  blocked: $pause
30
25
  plan:
31
- title: Explore and plan local work
26
+ title: Explore and approve local work
32
27
  prompt:
33
28
  file: steps/work/plan.md
34
29
  agent: planner
35
30
  permissions:
36
31
  tools: [read, ls, bash, mcp]
37
- mcp: [context7, sourcegraph, glean, gh_grep]
32
+ mcp: []
38
33
  extensions: [/]
39
- skills:
40
- [coding-standards, writing-plans, search-code-sourcegraph, caveman]
34
+ skills: []
41
35
  bash:
42
36
  mode: unrestricted
43
37
  gate:
@@ -47,34 +41,53 @@ steps:
47
41
  rejectedOutcome: changes-requested
48
42
  timeoutMs: 30000
49
43
  artifactContract:
50
- maxChars: 8000
44
+ maxChars: 10000
51
45
  requiredSubstrings:
52
- - '## Review summary'
53
- - '## Review focus'
54
- - '## Proposed approach'
46
+ - '## Goal/Acceptance Criteria'
47
+ - '## Non Goal'
48
+ - '## Implementation Steps and Tests'
55
49
  - '## Validation'
56
- - '## Risks'
50
+ - '## Risks/Decisions Needed'
51
+ - '## Publications Contract/Metadata'
57
52
  - '## Execution appendix (machine-readable)'
58
53
  forbiddenSubstrings:
59
54
  - 'The complete gate artifact is the exact Markdown saved at'
60
55
  onValidationFailure: retry
61
56
  transitions:
62
- approved: implement
57
+ approved: prepare-workspace
63
58
  changes-requested: plan
64
- workspace-refresh: prepare-workspace
65
59
  retry: plan
66
60
  blocked: $pause
61
+ prepare-workspace:
62
+ title: Prepare approved branch and worktree
63
+ prompt:
64
+ file: steps/work/prepare-workspace.md
65
+ agent: workspace-preparer
66
+ workspace:
67
+ bindOn: [ready]
68
+ allowedRoots: [~/repositories/worktrees]
69
+ permissions:
70
+ tools: [read, ls, bash]
71
+ mcp: []
72
+ extensions: [/]
73
+ skills: []
74
+ bash:
75
+ mode: unrestricted
76
+ transitions:
77
+ ready: implement
78
+ workspace-refresh: plan
79
+ retry: prepare-workspace
80
+ blocked: $pause
67
81
  implement:
68
- title: Implement the approved local plan
82
+ title: Implement approved work
69
83
  prompt:
70
84
  file: steps/work/implement.md
71
85
  agent: worker
72
86
  permissions:
73
87
  tools: [read, ls, bash, edit, write, mcp]
74
- mcp: [context7]
88
+ mcp: []
75
89
  extensions: [/]
76
- skills:
77
- [coding-standards, test-driven-development, lint-commands, caveman]
90
+ skills: []
78
91
  bash:
79
92
  mode: unrestricted
80
93
  transitions:
@@ -90,12 +103,27 @@ steps:
90
103
  tools: [read, ls, bash]
91
104
  mcp: []
92
105
  extensions: [/]
93
- skills:
94
- [verification-before-completion, lint-commands, commit-format, caveman]
106
+ skills: []
95
107
  bash:
96
108
  mode: unrestricted
97
109
  transitions:
98
- passed: $done
110
+ passed: publish
99
111
  failed: implement
100
112
  retry: verify
101
113
  blocked: verify
114
+ publish:
115
+ title: Publish verified branch and open review
116
+ prompt:
117
+ file: steps/work/publish-remote.md
118
+ agent: worker
119
+ permissions:
120
+ tools: [read, ls, bash, mcp]
121
+ mcp: []
122
+ extensions: [/]
123
+ skills: []
124
+ bash:
125
+ mode: unrestricted
126
+ transitions:
127
+ published: $done
128
+ retry: publish
129
+ blocked: $pause
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wichayutdew/pi-workflows",
3
- "version": "3.2.0",
3
+ "version": "3.4.0",
4
4
  "description": "A declarative, pauseable workflow harness for Pi",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -205,6 +205,7 @@ export function createDelegationPlan(
205
205
  policy,
206
206
  transcriptTask: task,
207
207
  agent,
208
+ ...(agentProfile.model ? { model: agentProfile.model } : {}),
208
209
  };
209
210
  const request: SubagentDelegationRequest = {
210
211
  version: 1,
@@ -64,6 +64,9 @@ function workflowStatusSnapshot(
64
64
  requestId: this.activeDelegation.requestId,
65
65
  progress: this.activeDelegation.progress ?? 'starting',
66
66
  activityLog: this.activeDelegation.activityLog ?? [],
67
+ ...(this.activeDelegation.model
68
+ ? { model: this.activeDelegation.model }
69
+ : {}),
67
70
  };
68
71
  } else if (this.mainSteps.activeStepId) {
69
72
  execution = { kind: 'main' };
@@ -11,6 +11,7 @@ export type ActiveDelegation = {
11
11
  policy: ChildStepPolicy;
12
12
  transcriptTask: string;
13
13
  agent: string;
14
+ model?: string;
14
15
  progress?: string;
15
16
  activityLog?: Array<string>;
16
17
  cancelling?: boolean;
@@ -27,13 +27,17 @@ export function formatWorkflowProgressStatus(
27
27
  );
28
28
  const activity =
29
29
  run.status === 'awaiting-gate' ? 'awaiting review' : 'working';
30
+ const workerModel =
31
+ snapshot.execution?.kind === 'subagent' && snapshot.execution.model
32
+ ? ` · model ${snapshot.execution.model}`
33
+ : '';
30
34
  const workerProgress =
31
35
  snapshot.execution?.kind === 'subagent'
32
36
  ? ` · ${snapshot.execution.progress}`
33
37
  : '';
34
38
  const usage = workflowUsage(run);
35
39
  const usageText = usage.models.length > 0 ? ` · ${formatUsage(usage)}` : '';
36
- return `${workflowStatusIcon(run, snapshot.now)} ${run.workflowId} · step ${currentStep} · ${activity}${workerProgress}${usageText} · ${statusShortcutLabel}`;
40
+ return `${workflowStatusIcon(run, snapshot.now)} ${run.workflowId} · step ${currentStep} · ${activity}${workerModel}${workerProgress}${usageText} · ${statusShortcutLabel}`;
37
41
  }
38
42
 
39
43
  /** Format a plain-text workflow status suitable for fallback notifications. */
@@ -311,6 +311,9 @@ function renderLiveWorkerSession(
311
311
  width,
312
312
  'accent',
313
313
  ),
314
+ ...(snapshot.execution.model
315
+ ? keyValueLines(theme, 'model', snapshot.execution.model, width, 'muted')
316
+ : []),
314
317
  ...keyValueLines(
315
318
  theme,
316
319
  'state',
@@ -15,6 +15,7 @@ export type WorkflowStatusExecution =
15
15
  readonly agent: string;
16
16
  readonly requestId: string;
17
17
  readonly progress: string;
18
+ readonly model?: string;
18
19
  readonly activityLog?: ReadonlyArray<string>;
19
20
  };
20
21
 
@@ -1,84 +0,0 @@
1
- version: 1
2
- id: investigate
3
- command: investigate
4
- description: 'Derive, approve, investigate, and independently validate an evidence-backed finding. Example: /investigate PROJ-123 Root cause of elevated 500 error rates in checkout service'
5
- start: retrieve
6
- maxStepVisits: 12
7
- summaryMaxChars: 30000
8
- steps:
9
- retrieve:
10
- title: Retrieve investigation scope and Jira evidence
11
- prompt:
12
- file: steps/investigate/retrieve.md
13
- agent: scout
14
- permissions:
15
- tools: [read, ls, bash, mcp]
16
- mcp: [atlassian, context7, sourcegraph, glean, grafana]
17
- extensions: [/]
18
- skills: [jira-ticket, start-triage, search-code-sourcegraph, caveman]
19
- bash:
20
- mode: unrestricted
21
- gate:
22
- provider: plannotator
23
- submitOutcome: submit
24
- approvedOutcome: approved
25
- rejectedOutcome: changes-requested
26
- timeoutMs: 30000
27
- artifactContract:
28
- maxChars: 6000
29
- requiredSubstrings:
30
- - '## Brief description'
31
- - '## Goals'
32
- - '## Boundaries'
33
- - '## Evidence & sources'
34
- - '## Report destination'
35
- - '## Open evidence gaps'
36
- forbiddenSubstrings:
37
- - 'The complete gate artifact is the exact Markdown saved at'
38
- onValidationFailure: retry
39
- transitions:
40
- approved: investigate
41
- changes-requested: retrieve
42
- retry: retrieve
43
- blocked: $pause
44
- investigate:
45
- title: Investigate approved scope and write findings
46
- prompt:
47
- file: steps/investigate/investigate.md
48
- agent: worker
49
- permissions:
50
- tools: [read, ls, bash, write, mcp]
51
- mcp: [atlassian, context7, sourcegraph, glean, grafana, gitlab]
52
- extensions: [/]
53
- skills:
54
- [
55
- coding-standards,
56
- systematic-debugging,
57
- start-triage,
58
- grafana-logs,
59
- search-code-sourcegraph,
60
- caveman,
61
- ]
62
- bash:
63
- mode: unrestricted
64
- transitions:
65
- ready: validate
66
- retry: investigate
67
- blocked: $pause
68
- validate:
69
- title: Independently validate investigation findings
70
- prompt:
71
- file: steps/investigate/validate.md
72
- agent: reviewer
73
- permissions:
74
- tools: [read, ls, bash, mcp]
75
- mcp: [atlassian, sourcegraph, glean, gitlab]
76
- extensions: [/]
77
- skills: [verification-before-completion, caveman]
78
- bash:
79
- mode: unrestricted
80
- transitions:
81
- approved: $done
82
- gaps: investigate
83
- retry: validate
84
- blocked: validate
@@ -1,75 +0,0 @@
1
- version: 1
2
- id: jira
3
- command: jira
4
- description: 'Draft, approve, and create a Jira Epic with ordered Stories. Example: /jira ACTB Implement multi-region failover for pricing service'
5
- start: draft
6
- maxStepVisits: 12
7
- summaryMaxChars: 30000
8
- steps:
9
- draft:
10
- title: Normalize Epic and Story input
11
- prompt:
12
- file: steps/jira/draft.md
13
- agent: scout
14
- permissions:
15
- tools: [read, ls, bash]
16
- mcp: []
17
- extensions: [/]
18
- skills: [jira-ticket, caveman]
19
- bash:
20
- mode: unrestricted
21
- transitions:
22
- ready: plan
23
- retry: draft
24
- blocked: $pause
25
- plan:
26
- title: Validate Jira schema and approve Epic and Story plan
27
- prompt:
28
- file: steps/jira/plan.md
29
- agent: planner
30
- permissions:
31
- tools: [read, ls, bash, mcp]
32
- mcp: [atlassian]
33
- extensions: [/]
34
- skills: [jira-ticket, caveman]
35
- bash:
36
- mode: unrestricted
37
- gate:
38
- provider: plannotator
39
- submitOutcome: submit
40
- approvedOutcome: approved
41
- rejectedOutcome: changes-requested
42
- timeoutMs: 30000
43
- artifactContract:
44
- maxChars: 16000
45
- requiredSubstrings:
46
- - '# Create Jira Epic and Stories'
47
- - '## Jira field contract'
48
- - '## Epic'
49
- - '## Ordered Stories'
50
- - '## Creation sequence'
51
- - '## Safety limits'
52
- forbiddenSubstrings:
53
- - 'The complete gate artifact is the exact Markdown saved at'
54
- onValidationFailure: retry
55
- transitions:
56
- approved: create
57
- changes-requested: plan
58
- retry: plan
59
- blocked: $pause
60
- create:
61
- title: Create approved Jira Epic and Stories
62
- prompt:
63
- file: steps/jira/create.md
64
- agent: worker
65
- permissions:
66
- tools: [read, ls, bash, mcp]
67
- mcp: [atlassian]
68
- extensions: [/]
69
- skills: [jira-ticket, caveman]
70
- bash:
71
- mode: unrestricted
72
- transitions:
73
- ready: $done
74
- retry: create
75
- blocked: $pause