@wichayutdew/pi-workflows 2.5.1 → 2.6.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.
- package/README.md +4 -1
- package/dist/index.js +1133 -2409
- package/examples/starter-kit/agents/planner.md +7 -0
- package/examples/starter-kit/agents/reviewer.md +6 -0
- package/examples/starter-kit/agents/scout.md +6 -0
- package/examples/starter-kit/agents/worker.md +7 -0
- package/examples/starter-kit/agents/workspace-preparer.md +6 -0
- package/examples/starter-kit/investigate.workflow.yaml +114 -0
- package/examples/starter-kit/mr-comment.workflow.yaml +114 -54
- package/examples/starter-kit/mr-review.workflow.yaml +77 -56
- package/examples/starter-kit/settings.yaml +3 -0
- package/examples/starter-kit/steps/investigate/investigate.md +77 -0
- package/examples/starter-kit/steps/investigate/retrieve.md +63 -0
- package/examples/starter-kit/steps/investigate/validate.md +46 -0
- package/examples/starter-kit/steps/mr-comment/checkout-source.md +67 -0
- package/examples/starter-kit/steps/mr-comment/fetch.md +34 -26
- package/examples/starter-kit/steps/mr-comment/implement.md +34 -27
- package/examples/starter-kit/steps/mr-comment/plan.md +54 -40
- package/examples/starter-kit/steps/mr-comment/publish.md +28 -27
- package/examples/starter-kit/steps/mr-comment/verify.md +42 -35
- package/examples/starter-kit/steps/mr-review/fetch.md +52 -22
- package/examples/starter-kit/steps/mr-review/publish-approved.md +49 -0
- package/examples/starter-kit/steps/mr-review/review-for-approval.md +142 -0
- package/examples/starter-kit/steps/mr-review/verify-published.md +37 -0
- package/examples/starter-kit/steps/shared/prepare-workspace.md +91 -73
- package/examples/starter-kit/steps/shared/publish-remote.md +45 -0
- package/examples/starter-kit/steps/ticket/implement.md +59 -25
- package/examples/starter-kit/steps/ticket/plan.md +145 -72
- package/examples/starter-kit/steps/ticket/verify.md +80 -45
- package/examples/starter-kit/steps/work/implement.md +60 -24
- package/examples/starter-kit/steps/work/plan.md +129 -57
- package/examples/starter-kit/steps/work/verify.md +58 -22
- package/examples/starter-kit/ticket.workflow.yaml +75 -36
- package/examples/starter-kit/work.workflow.yaml +63 -33
- package/package.json +3 -16
- package/schemas/workflow.schema.json +2 -15
- package/src/agents/profile.ts +98 -0
- package/src/config/ceiling.ts +0 -82
- package/src/config/types.ts +6 -53
- package/src/config/validation/settings.ts +2 -14
- package/src/config/validation/step.ts +12 -8
- package/src/config/validation/workflow.ts +1 -10
- package/src/engine/run-workflow-validation.ts +0 -3
- package/src/engine/state-types.ts +1 -1
- package/src/harness/action-context.ts +1 -13
- package/src/harness/delegation-control-actions.ts +4 -63
- package/src/harness/delegation-plan.ts +26 -80
- package/src/harness/delegation-response-actions.ts +22 -135
- package/src/harness/dependencies.ts +1 -12
- package/src/harness/status-actions.ts +1 -0
- package/src/harness/step-execution-actions.ts +2 -9
- package/src/harness/types.ts +2 -40
- package/src/harness.ts +2 -17
- package/src/index.ts +4 -9
- package/src/integrations/subagents/child-policy-validation.ts +6 -7
- package/src/integrations/subagents/child-runtime-dependencies.ts +1 -1
- package/src/integrations/subagents/child-runtime-policy.ts +1 -7
- package/src/integrations/subagents/child-runtime.ts +18 -9
- package/src/integrations/subagents/client.ts +240 -98
- package/src/integrations/subagents/protocol-events.ts +32 -15
- package/src/integrations/subagents/protocol.ts +1 -1
- package/src/preflight.ts +0 -8
- package/src/prompt/main-workflow-notice.ts +8 -15
- package/src/prompt/step-task.ts +7 -6
- package/src/workflow-status/format-status.ts +5 -1
- package/src/workflow-status/render-step-detail.ts +94 -0
- package/src/workflow-status/types.ts +1 -0
- package/src/workflow-status/view.ts +49 -14
- package/agents/step.md +0 -32
- package/examples/mr-comments.workflow.yaml +0 -125
- package/examples/prompts/mr-comments/implement.md +0 -17
- package/examples/prompts/mr-comments/inspect.md +0 -5
- package/examples/prompts/mr-comments/plan.md +0 -54
- package/examples/prompts/mr-comments/verify.md +0 -9
- package/examples/settings.yaml +0 -27
- package/examples/starter-kit/steps/mr-review/publish.md +0 -48
- package/examples/starter-kit/steps/mr-review/review.md +0 -76
- package/examples/starter-kit/steps/mr-review/verify.md +0 -35
- package/src/config/validation/subagent.ts +0 -288
- package/src/harness/delegation-failure.ts +0 -248
- package/src/harness/delegation-recovery-validation.ts +0 -161
- package/src/harness/delegation-retry-policy.ts +0 -120
- package/src/integrations/subagents/client-delegation.ts +0 -181
- package/src/integrations/subagents/client-messages.ts +0 -66
- package/src/integrations/subagents/client-types.ts +0 -36
- package/src/integrations/subagents/diagnostic-format.ts +0 -45
- package/src/integrations/subagents/diagnostic-text.ts +0 -114
- package/src/integrations/subagents/diagnostic-types.ts +0 -83
- package/src/integrations/subagents/diagnostics.ts +0 -26
- package/src/integrations/subagents/failure-correlation.ts +0 -285
- package/src/integrations/subagents/failure-transcript.ts +0 -252
- package/src/integrations/subagents/hidden-bash-failure.ts +0 -98
- package/src/integrations/subagents/replay-audit.ts +0 -146
- package/src/integrations/subagents/replay-safety.ts +0 -67
- package/src/integrations/subagents/session-diagnostics.ts +0 -357
|
@@ -1,25 +1,55 @@
|
|
|
1
|
-
You are the
|
|
2
|
-
|
|
3
|
-
remote state.
|
|
1
|
+
You are the read-only evidence-fetch stage for a hosted merge-request or
|
|
2
|
+
pull-request review. You are the active workflow step; do not delegate this work.
|
|
4
3
|
|
|
5
|
-
|
|
4
|
+
Hosted review URL and optional user context:
|
|
6
5
|
{{workflow.input}}
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
7
|
+
Require exactly one HTTPS merge-request or pull-request URL. Detect its host
|
|
8
|
+
from the URL and never cross hosts. Use the configured matching read-only MCP
|
|
9
|
+
tools first when available, then authenticated read-only `glab` or `gh`
|
|
10
|
+
commands, then configured read-only web tools. Do not mutate local or remote
|
|
11
|
+
state and never expose credentials.
|
|
12
|
+
|
|
13
|
+
Fetch and refresh all evidence needed by a separate reviewer:
|
|
14
|
+
|
|
15
|
+
- canonical URL, host, project or repository identity, MR/PR number, state,
|
|
16
|
+
author, title, description, source and target branches, and current head SHA;
|
|
17
|
+
- GitLab base/start/head diff refs or the equivalent GitHub review coordinates;
|
|
18
|
+
- every commit and the complete changed-file manifest and diff;
|
|
19
|
+
- conflicts or mergeability, pipelines/checks and their jobs, and current
|
|
20
|
+
status;
|
|
21
|
+
- existing reviews, inline comments, discussions, resolution state, and any
|
|
22
|
+
exact duplicate of a possible current finding;
|
|
23
|
+
- applicable repository instructions, architecture/build documentation,
|
|
24
|
+
changed files, relevant callers, tests, and focused history available in the
|
|
25
|
+
checkout.
|
|
26
|
+
|
|
27
|
+
This stage gathers facts only. Do not decide the final verdict, propose a
|
|
28
|
+
review comment, construct a mutation command, or submit anything to
|
|
29
|
+
Plannotator. When one read-only call fails, record the exact failure and try a
|
|
30
|
+
safe semantically equivalent read-only source. Stop only after the evidence is
|
|
31
|
+
complete or all safe alternatives are exhausted.
|
|
32
|
+
|
|
33
|
+
Call `workflow_complete_step` alone with outcome `fetched`. Put a self-contained
|
|
34
|
+
Markdown evidence bundle in `summary`, organized as:
|
|
35
|
+
|
|
36
|
+
1. `# Hosted review evidence`
|
|
37
|
+
2. `## Identity and immutable coordinates`
|
|
38
|
+
3. `## Description and commits`
|
|
39
|
+
4. `## Complete change manifest and diff evidence`
|
|
40
|
+
5. `## Pipelines or checks`
|
|
41
|
+
6. `## Existing review state`
|
|
42
|
+
7. `## Repository context`
|
|
43
|
+
8. `## Fetch diagnostics`
|
|
44
|
+
|
|
45
|
+
Preserve exact paths, line numbers, SHAs, statuses, discussion identifiers, and
|
|
46
|
+
decisive code excerpts. If the raw diff is too large for the handoff, include
|
|
47
|
+
the complete changed-file manifest, every diff hunk's exact coordinates and
|
|
48
|
+
meaning, and the exact same-host/read-only command or repository ref by which
|
|
49
|
+
the fresh reviewer can retrieve the already-fetched raw content again. Do not
|
|
50
|
+
include an executable remote mutation command.
|
|
51
|
+
|
|
52
|
+
Use outcome `blocked` only when missing access or evidence prevents a safe
|
|
53
|
+
review after all configured read-only alternatives were attempted. Include the
|
|
54
|
+
exact failures and safe recovery needed. There is no automatic retry; a
|
|
55
|
+
blocked result pauses the workflow.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
You are the publication stage for an explicitly approved hosted-code-review
|
|
2
|
+
artifact. You are the active workflow step; do not broaden, rewrite, or
|
|
3
|
+
re-review the approved content and do not delegate this work.
|
|
4
|
+
|
|
5
|
+
Original workflow input:
|
|
6
|
+
{{workflow.input}}
|
|
7
|
+
|
|
8
|
+
Plannotator-approved review artifact:
|
|
9
|
+
{{reviewed.artifact}}
|
|
10
|
+
|
|
11
|
+
Approval feedback:
|
|
12
|
+
{{reviewed.feedback}}
|
|
13
|
+
|
|
14
|
+
Previous step handoff:
|
|
15
|
+
{{last.summary}}
|
|
16
|
+
|
|
17
|
+
Parse exactly one fenced `json` Publication contract from the approved
|
|
18
|
+
artifact. Require its top-level non-empty `actions` array and validate every
|
|
19
|
+
action against the artifact's URL, host, current head SHA, finding or clean
|
|
20
|
+
verdict, optional path/line, exact body, effect kind, and marker. Execute only
|
|
21
|
+
exact `toolName: "bash"` commands copied literally from the approved
|
|
22
|
+
contract. An approved GitLab inline-discussion action may be the Fish `begin
|
|
23
|
+
… end` block containing `set body` and one `glab api` call. Never
|
|
24
|
+
synthesize, normalize, repair, re-quote, or add an action.
|
|
25
|
+
|
|
26
|
+
Refresh the same-host review head and anchor using configured read-only
|
|
27
|
+
`glab`/`gh` calls. If either changed, execute nothing and return `blocked`.
|
|
28
|
+
Before each approved action, query the same host's public
|
|
29
|
+
discussions/review-comments collection and search for the exact marker, body,
|
|
30
|
+
head, path, and line. Skip only when the complete effect is already observable.
|
|
31
|
+
|
|
32
|
+
If absent, execute that approved command exactly once. Require a successful
|
|
33
|
+
response and capture its remote discussion/comment identifier and URL when
|
|
34
|
+
available. After any mutation-capable command is attempted, an error or
|
|
35
|
+
ambiguous result is `blocked`; never replay it. Never push, approve, merge,
|
|
36
|
+
resolve, close, delete, publish unapproved text, expose credentials, cross
|
|
37
|
+
hosts, or perform an unlisted mutation.
|
|
38
|
+
|
|
39
|
+
Call `workflow_complete_step` alone with outcome `published` only after every action
|
|
40
|
+
either succeeded once or its exact effect was already observable. In `summary`
|
|
41
|
+
record the canonical review URL, refreshed head, the unchanged approved
|
|
42
|
+
contract, each pre-action observation, whether it was skipped or attempted,
|
|
43
|
+
the exact command, result, remote identifier/URL, and remaining actions.
|
|
44
|
+
When the previous handoff contains an actionable verification finding, treat it
|
|
45
|
+
as a corrective publication handoff: re-check the exact approved effect and
|
|
46
|
+
retry only when its absence is conclusive. Never use it to alter the approved
|
|
47
|
+
content, target, or action list. Use outcome `blocked` with the same full
|
|
48
|
+
action ledger when freshness, validation, execution, or correlation is
|
|
49
|
+
ambiguous or unsafe.
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
You are the fresh independent reviewer for a hosted merge request or pull
|
|
2
|
+
request. This is the only review artifact submitted to Plannotator. Do not
|
|
3
|
+
modify local or remote state and do not delegate this work.
|
|
4
|
+
|
|
5
|
+
Original hosted review input:
|
|
6
|
+
{{workflow.input}}
|
|
7
|
+
|
|
8
|
+
Fetched evidence bundle:
|
|
9
|
+
{{last.summary}}
|
|
10
|
+
|
|
11
|
+
Previously rejected artifact:
|
|
12
|
+
{{gate.artifact}}
|
|
13
|
+
|
|
14
|
+
Plannotator feedback from a previous submission:
|
|
15
|
+
{{gate.feedback}}
|
|
16
|
+
|
|
17
|
+
When feedback is non-empty, revise the rejected artifact against current
|
|
18
|
+
evidence and submit the complete review proposal for another review. Each
|
|
19
|
+
rejection returns to this same review step.
|
|
20
|
+
|
|
21
|
+
Treat the fetched bundle as the starting evidence, not as a verdict. Re-read
|
|
22
|
+
applicable repository instructions and inspect the changed code, callers,
|
|
23
|
+
tests, and history. Refresh the same-host head SHA, complete diff,
|
|
24
|
+
pipelines/checks, and discussions with configured read-only tools before
|
|
25
|
+
finishing. If the head or material diff changed, rebuild the review against the
|
|
26
|
+
new current coordinates; do not reuse stale anchors.
|
|
27
|
+
|
|
28
|
+
Review correctness, regressions, security, concurrency, compatibility,
|
|
29
|
+
maintainability, and missing tests. Verify every proposed finding against the
|
|
30
|
+
current code and remove false, stale, duplicate, stylistic-only, or
|
|
31
|
+
non-actionable comments. Each remaining finding needs an exact changed-line
|
|
32
|
+
anchor, severity, causal explanation, user impact, and smallest useful fix or
|
|
33
|
+
test. Passing CI is evidence, not proof that an uncovered path is correct.
|
|
34
|
+
|
|
35
|
+
Produce one complete Markdown artifact in this order:
|
|
36
|
+
|
|
37
|
+
1. `# Review: <short verdict>`
|
|
38
|
+
2. `## Verdict` — URL, host, current head SHA, and concise outcome.
|
|
39
|
+
3. `## Findings` — ordered by severity. Each finding includes exact path and
|
|
40
|
+
changed line, problem, impact, evidence, and requested change. Write
|
|
41
|
+
`No actionable findings.` when clean.
|
|
42
|
+
4. `## Validation` — refreshed diff, checks/pipelines, discussions,
|
|
43
|
+
repository context, and focused checks used to disprove false positives.
|
|
44
|
+
5. `## Publication contract` — exactly one fenced `json` object with an
|
|
45
|
+
`actions` array.
|
|
46
|
+
6. `## Safety boundaries` — exact approved scope and prohibited actions.
|
|
47
|
+
|
|
48
|
+
The publication contract is part of the review artifact. It is always
|
|
49
|
+
non-empty because this workflow posts the approved review. For findings,
|
|
50
|
+
include exactly one public inline-comment action per approved finding. For a
|
|
51
|
+
clean review, include exactly one same-host public review-summary action whose
|
|
52
|
+
body says no actionable findings and includes the reviewed head SHA.
|
|
53
|
+
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"actions": [
|
|
57
|
+
{
|
|
58
|
+
"toolName": "bash",
|
|
59
|
+
"input": {
|
|
60
|
+
"command": "<exact standalone same-host public review-comment command>"
|
|
61
|
+
},
|
|
62
|
+
"effect": {
|
|
63
|
+
"kind": "inline-comment",
|
|
64
|
+
"host": "<host>",
|
|
65
|
+
"reviewUrl": "<canonical URL>",
|
|
66
|
+
"headSha": "<current head SHA>",
|
|
67
|
+
"path": "<exact path>",
|
|
68
|
+
"line": 1,
|
|
69
|
+
"body": "<exact public comment body>",
|
|
70
|
+
"marker": "<unique deterministic pi-workflows marker>"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
]
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Every command and effect value must occur literally and completely in the
|
|
78
|
+
artifact. Commands must use only configured `glab api` or `gh api`, target the
|
|
79
|
+
same review and current head, and contain no redirection, glob expansion,
|
|
80
|
+
wrapper shell, credentials, or placeholders. GitHub commands must be a single
|
|
81
|
+
shell-free `gh api` invocation. A GitLab inline-discussion command may instead
|
|
82
|
+
be the required Fish `begin … end` block below, containing only the body
|
|
83
|
+
assignment and one `glab api` invocation. Each body must end with a stable
|
|
84
|
+
unique marker derived from the workflow, head SHA, path, and line so publish
|
|
85
|
+
and verify stages can prove idempotence.
|
|
86
|
+
|
|
87
|
+
A clean review-summary effect uses `kind: "review-summary"`, the same host,
|
|
88
|
+
canonical review URL and head SHA, exact public body, and deterministic marker;
|
|
89
|
+
it omits path and line. It must create an ordinary public MR note on GitLab or
|
|
90
|
+
a public `COMMENT` review on GitHub. It must not approve the change.
|
|
91
|
+
|
|
92
|
+
For GitLab, first prove the authenticated discussions listing endpoint with a
|
|
93
|
+
successful read-only
|
|
94
|
+
`glab api projects/<project-id>/merge_requests/<iid>/discussions` call. Public
|
|
95
|
+
inline comments must POST to that same `/discussions` collection with `body`
|
|
96
|
+
and current `position[base_sha]`, `position[start_sha]`,
|
|
97
|
+
`position[head_sha]`, `position[position_type]`, `position[old_path]`,
|
|
98
|
+
`position[new_path]`, and the applicable old or new line. The contract command
|
|
99
|
+
for a GitLab discussion must be Fish-compatible and preserve multiline bodies:
|
|
100
|
+
wrap the exact body assignment and discussion request in `begin` and `end`.
|
|
101
|
+
Inside the block, assign the body with `set body '<body>'`, escaping every
|
|
102
|
+
embedded apostrophe as `\''`, then invoke `glab --hostname <host> api
|
|
103
|
+
--method POST projects/<project-id>/merge_requests/<iid>/discussions --form
|
|
104
|
+
"body=$body"` followed by one `--form` per required position field. Keep the
|
|
105
|
+
entire block as the exact approved command snippet; do not replace `begin …
|
|
106
|
+
end` or `set` with POSIX syntax, inline the body into `--form`, or collapse
|
|
107
|
+
its newlines. For example:
|
|
108
|
+
|
|
109
|
+
```fish
|
|
110
|
+
begin
|
|
111
|
+
set body 'Exact comment line one
|
|
112
|
+
Exact comment line two with an apostrophe: two'\''s-complement.
|
|
113
|
+
[stable-marker]'
|
|
114
|
+
glab --hostname gitlab.example.com api \
|
|
115
|
+
--method POST \
|
|
116
|
+
projects/123/merge_requests/4/discussions \
|
|
117
|
+
--form "body=$body" \
|
|
118
|
+
--form "position[base_sha]=30a497e7c99866d41224c4ab3720eb67fea3b115" \
|
|
119
|
+
--form "position[start_sha]=30a497e7c99866d41224c4ab3720eb67fea3b115" \
|
|
120
|
+
--form "position[head_sha]=c416579b65a63a93b378da32eae01d4dba5c8100" \
|
|
121
|
+
--form "position[position_type]=text" \
|
|
122
|
+
--form "position[old_path]=app/src/test/kotlin/org/example/AppTest.kt" \
|
|
123
|
+
--form "position[new_path]=app/src/test/kotlin/org/example/AppTest.kt" \
|
|
124
|
+
--form "position[new_line]=20"
|
|
125
|
+
end
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
For GitHub, first prove the authenticated review-comments listing endpoint with
|
|
129
|
+
a successful read-only `gh api` call. Public inline comments must POST to the
|
|
130
|
+
same pull request's review-comments collection with the exact body, current
|
|
131
|
+
commit ID, path, side, and line supported by that host.
|
|
132
|
+
|
|
133
|
+
Plannotator approval authorizes only the exact fenced contract. It never
|
|
134
|
+
authorizes a push, approval, merge, resolution, closure, deletion,
|
|
135
|
+
cross-host action, or unlisted mutation. A rejected proposal is revised here;
|
|
136
|
+
never restart the workflow or create a new workspace.
|
|
137
|
+
|
|
138
|
+
Call `workflow_complete_step` alone with outcome `submit`. Put the complete review
|
|
139
|
+
in `artifact` and repeat it exactly in `summary`. Use outcome `blocked` only
|
|
140
|
+
when missing or stale evidence prevents a safe review artifact after all
|
|
141
|
+
configured read-only alternatives were attempted; include exact recovery
|
|
142
|
+
evidence. There is no automatic retry.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
You are the final read-only verification stage for an approved hosted review.
|
|
2
|
+
You are the active workflow step. Do not mutate local or remote state, execute a publication command, or delegate this work.
|
|
3
|
+
|
|
4
|
+
Original workflow input:
|
|
5
|
+
{{workflow.input}}
|
|
6
|
+
|
|
7
|
+
Plannotator-approved review artifact:
|
|
8
|
+
{{reviewed.artifact}}
|
|
9
|
+
|
|
10
|
+
Publication ledger or blocked recovery handoff:
|
|
11
|
+
{{last.summary}}
|
|
12
|
+
|
|
13
|
+
Parse the approved non-empty Publication contract and refresh the same review
|
|
14
|
+
using only configured read-only `glab` or `gh` calls. Require the current head
|
|
15
|
+
SHA to match the approved artifact. For every action, query the host's public
|
|
16
|
+
discussion, note, or review collection and independently prove the exact
|
|
17
|
+
marker, body, head, effect kind, optional path/line, and remote identifier or
|
|
18
|
+
URL. Do not accept the publication ledger alone as proof.
|
|
19
|
+
|
|
20
|
+
Call `workflow_complete_step` alone with:
|
|
21
|
+
|
|
22
|
+
- `verified` only when every approved effect is currently observable exactly
|
|
23
|
+
once or in the explicitly idempotent form described by the contract;
|
|
24
|
+
- `failed` for an actionable, unambiguous missing or mismatched approved
|
|
25
|
+
effect. Its self-contained summary becomes the next publication worker's
|
|
26
|
+
corrective handoff, so include the expected and observed state, exact
|
|
27
|
+
evidence, and the smallest safe repair;
|
|
28
|
+
- `retry` for a transient read-only verification failure after safe equivalent
|
|
29
|
+
checks were attempted;
|
|
30
|
+
- `blocked` only when the review, head, target, or remote result is stale,
|
|
31
|
+
ambiguous, or unsafe to repair automatically.
|
|
32
|
+
|
|
33
|
+
For `verified` and `failed`, report the canonical review URL, current head,
|
|
34
|
+
verified or missing remote identifiers/URLs and anchors, action count, and
|
|
35
|
+
final verdict. On a retry after `blocked`, refresh the exact blocked
|
|
36
|
+
coordinates and remote result; return `verified` or `failed` when the evidence
|
|
37
|
+
is now conclusive, and do not mutate state yourself.
|
|
@@ -1,95 +1,113 @@
|
|
|
1
|
-
You
|
|
2
|
-
workflow
|
|
1
|
+
You are the workspace-preparation stage for a user-owned Git workflow. You are
|
|
2
|
+
the active workflow step; do not delegate this work.
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
Workflow request:
|
|
5
5
|
{{workflow.input}}
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Stable workflow run ID:
|
|
8
8
|
{{run.id}}
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
Prepare exactly one dedicated Git branch and registered worktree for this run.
|
|
11
|
+
This prompt owns the Git behavior; the workflow harness only validates and
|
|
12
|
+
persists the directory you return.
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
Use the `using-git-worktrees` skill and the repository's nearest instructions.
|
|
15
|
+
Start by resolving the current directory and Git root, then inspect branch,
|
|
16
|
+
HEAD, `git status --short`, refs, repository branch conventions, and
|
|
17
|
+
`git worktree list --porcelain`. Preserve all existing files, branches,
|
|
18
|
+
worktrees, and uncommitted user changes.
|
|
19
|
+
|
|
20
|
+
On the first visit, the current non-run checkout is the source checkout. On a
|
|
15
21
|
later visit from the already bound run-owned worktree, recover the original
|
|
16
|
-
source
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
later visit has no trustworthy source identity, use `blocked`
|
|
20
|
-
guessing a default branch. Capture the source
|
|
21
|
-
HEAD
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
Compute one stable short
|
|
22
|
+
source Git root and local branch/ref from the previous workspace manifest, then
|
|
23
|
+
validate both against current Git registration. Never treat the run-owned
|
|
24
|
+
target as its own source merely because it is now the workflow workspace cwd. If a
|
|
25
|
+
later visit has no trustworthy original source identity, use `blocked` instead
|
|
26
|
+
of guessing a default branch. Capture the source ref and its exact current
|
|
27
|
+
local HEAD as this attempt's intended base. Do not fetch, pull, or infer a
|
|
28
|
+
remote base.
|
|
29
|
+
|
|
30
|
+
Compute one stable short marker from `{{run.id}}` and require it in both the
|
|
25
31
|
dedicated branch and worktree name. Before selecting the current checkout or
|
|
26
|
-
deriving a new name, search
|
|
27
|
-
marker.
|
|
32
|
+
deriving a new name, search all registered worktrees and refs for that marker.
|
|
28
33
|
|
|
29
|
-
If exactly one branch/worktree pair is owned by this run, validate its
|
|
30
|
-
path
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
that exact pair, this rule naturally selects it.
|
|
35
|
-
worktree is resumable and must never cause a replacement workspace.
|
|
34
|
+
If exactly one branch/worktree pair is owned by this run, validate its
|
|
35
|
+
registered path and branch plus YAML-authorized-root containment, then reuse it
|
|
36
|
+
even when dirty and even when this step was launched from a different primary
|
|
37
|
+
or linked worktree. Preserve every uncommitted change and preserve its current
|
|
38
|
+
HEAD unless the guarded clean-worktree rebase below is both needed and safe. If
|
|
39
|
+
the current checkout is that exact pair, this rule naturally selects it.
|
|
36
40
|
|
|
37
41
|
Never reuse the current checkout merely because it is a linked worktree or is
|
|
38
|
-
on a non-default branch. It
|
|
39
|
-
run marker. This prevents an unrelated earlier task worktree from
|
|
40
|
-
this run's already-created target.
|
|
42
|
+
on a named non-default branch. It remains the source checkout unless it matches
|
|
43
|
+
the exact run marker. This prevents an unrelated earlier task worktree from
|
|
44
|
+
replacing this run's already-created target.
|
|
45
|
+
|
|
46
|
+
Only when no exact run-owned pair exists, derive a concise
|
|
47
|
+
repository-conventional task branch and deterministic adjacent worktree path
|
|
48
|
+
containing the marker. Verify that the target canonicalizes inside one of the
|
|
49
|
+
YAML-authorized roots before mutation. Create the new pair from the exact source
|
|
50
|
+
HEAD observed by this step, regardless of whether the source checkout is
|
|
51
|
+
primary or linked. The branch must be new and must not be the source branch.
|
|
41
52
|
|
|
42
|
-
|
|
43
|
-
adjacent worktree path containing the marker. Create the new pair from the
|
|
44
|
-
exact source HEAD observed by this step, regardless of whether the source
|
|
45
|
-
checkout is primary or linked. Before mutation, prove the target canonicalizes
|
|
46
|
-
inside an allowed root and does not belong to unrelated work.
|
|
53
|
+
Be idempotent:
|
|
47
54
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
- Inspect registered worktrees and refs before every mutation.
|
|
56
|
+
- If this run's exact branch and worktree were already created by an earlier
|
|
57
|
+
attempt, validate and reuse them before considering any source checkout. A
|
|
58
|
+
dirty existing run-owned worktree is valid resumable work: preserve and
|
|
59
|
+
report its changes instead of blocking or creating a replacement.
|
|
60
|
+
- If only part of the operation exists, diagnose it and complete only the
|
|
61
|
+
missing safe operation when the marker proves one unambiguous identity.
|
|
62
|
+
- If the intended branch or path belongs to unrelated work, differs from the
|
|
63
|
+
expected identity, has multiple marker matches, or is ambiguous, use
|
|
64
|
+
`blocked`; never delete, overwrite, force, reset, switch, or repurpose it.
|
|
65
|
+
Dirtiness alone is safe for this run's exact existing worktree.
|
|
66
|
+
- Never create a second branch or worktree for the same run.
|
|
52
67
|
|
|
53
68
|
After selecting the exact run-owned worktree, inspect its current HEAD, status,
|
|
54
69
|
operation state, upstream/remote reachability, and ancestry against the
|
|
55
70
|
captured local source HEAD:
|
|
56
71
|
|
|
57
|
-
-
|
|
72
|
+
- If the captured source HEAD is already an ancestor of the selected HEAD,
|
|
58
73
|
preserve the selected HEAD. Target-only commits are legitimate resumable
|
|
59
|
-
workflow work, not a stale workspace
|
|
60
|
-
-
|
|
74
|
+
workflow work, not a stale workspace. Rebasing would be a no-op.
|
|
75
|
+
- If the source HEAD is not an ancestor and the selected worktree is dirty,
|
|
61
76
|
preserve it without stashing or rebasing. Report `rebase: deferred-dirty`
|
|
62
|
-
with
|
|
63
|
-
recorded state and must not
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
edit project files,
|
|
77
|
+
with exact source and selected state. The next planner must work from that
|
|
78
|
+
recorded state and must not request another refresh for the same source
|
|
79
|
+
snapshot.
|
|
80
|
+
- If the source HEAD is not an ancestor, the selected worktree is clean, and no
|
|
81
|
+
Git operation is active, rebase only the exact run-owned dedicated branch
|
|
82
|
+
onto the captured local source HEAD. First prove that the rewritten commits
|
|
83
|
+
are local, unpublished, linear run-owned work and that no unrelated ref will
|
|
84
|
+
move. Do not rewrite published, signed, merge, or unrelated history.
|
|
85
|
+
- If that rebase conflicts or fails after it starts, do not edit conflicts or
|
|
86
|
+
continue it. Abort only the rebase started by this attempt, prove the exact
|
|
87
|
+
pre-attempt selected HEAD and status were restored, and use `blocked` with
|
|
88
|
+
conflict and rollback evidence. If restoration cannot be proven, preserve
|
|
89
|
+
all recovery state and stop without further mutation.
|
|
90
|
+
|
|
91
|
+
Do not edit project files, stage, commit, reset, clean, stash, push, fetch,
|
|
92
|
+
pull, publish, force, update unrelated refs, or change an external system. The
|
|
77
93
|
only history rewrite authorized here is the guarded rebase of the exact
|
|
78
94
|
run-owned branch above; the only rollback is aborting that same in-progress
|
|
79
|
-
rebase.
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
95
|
+
rebase. After creation or reuse, verify the selected path is an absolute
|
|
96
|
+
existing Git worktree on the selected dedicated branch. A newly created
|
|
97
|
+
worktree must have the captured source HEAD and clean status. A dirty exact
|
|
98
|
+
run-owned worktree remains valid and unchanged. In all cases, the source
|
|
99
|
+
checkout must remain unchanged.
|
|
100
|
+
|
|
101
|
+
Call `workflow_complete_step` alone with outcome `ready` only after those checks
|
|
102
|
+
pass. Include `workspace: {cwd: "<absolute selected worktree path>"}`. The
|
|
103
|
+
summary must be a self-contained workspace manifest containing source Git root,
|
|
104
|
+
source branch/ref and captured HEAD; selected worktree path, dedicated branch,
|
|
105
|
+
before/after HEAD, whether it was created or reused, ancestry before/after,
|
|
106
|
+
`rebase: not-needed | completed | deferred-dirty`, initial/final status, and
|
|
107
|
+
exact verification evidence.
|
|
108
|
+
|
|
109
|
+
Use outcome `retry` without `workspace` only for a recoverable tool or
|
|
110
|
+
environment failure after safe alternatives were attempted. Include the exact
|
|
111
|
+
failed call, error, observed partial state, and next idempotent action. Use
|
|
112
|
+
`blocked` without `workspace` for conflicts, unsafe source state, missing Git
|
|
113
|
+
authority, or exhausted recovery. Do not ask a terminal question.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
You are the remote-action execution stage after the single approved plan and
|
|
2
|
+
independent verification. You are the active workflow step; do not broaden the approved action set or delegate this work.
|
|
3
|
+
|
|
4
|
+
Original workflow input:
|
|
5
|
+
{{workflow.input}}
|
|
6
|
+
|
|
7
|
+
Approved exact actions:
|
|
8
|
+
{{last.summary}}
|
|
9
|
+
|
|
10
|
+
The approved action contract is final authority. Do not ask a
|
|
11
|
+
terminal question. Use `blocked` with declarative evidence when the reviewed
|
|
12
|
+
contract, head, anchor, or target is materially stale; do not request a live
|
|
13
|
+
decision.
|
|
14
|
+
|
|
15
|
+
Refresh the same-host review head and anchors using only non-mutating commands.
|
|
16
|
+
If they changed, call `workflow_complete_step` with outcome `blocked` and execute
|
|
17
|
+
nothing. Before each approved action, query its observable remote effect: for a
|
|
18
|
+
push, compare the exact remote ref and SHA; for a comment, search the exact
|
|
19
|
+
review, anchor, and body. Also read any latest retry or paused attempt in the
|
|
20
|
+
handoff as an action ledger. Skip an action only when its exact effect is
|
|
21
|
+
already observable. If completion cannot be determined safely, use `blocked`
|
|
22
|
+
instead of repeating it.
|
|
23
|
+
|
|
24
|
+
Execute each remaining exact action once, in order, using only the approved
|
|
25
|
+
`git push`, `gh api`, or `glab api` command. Require a successful result for
|
|
26
|
+
every attempted action. Never alter the command text.
|
|
27
|
+
|
|
28
|
+
Do not stop at the first pre-action evidence failure. Inspect its exact error
|
|
29
|
+
and try a safe semantically equivalent non-mutating alternative. Use `retry`
|
|
30
|
+
only when observable state proves that no remote mutation was attempted and a
|
|
31
|
+
next workflow step can continue without duplicating an effect. Include the exact
|
|
32
|
+
failed call, alternatives, observed state, next alternative, unchanged action
|
|
33
|
+
contract, and full action ledger. After any mutation-capable command is
|
|
34
|
+
attempted, ambiguity or failure remains `blocked` unless its exact effect is
|
|
35
|
+
already observable; never blindly replay it.
|
|
36
|
+
|
|
37
|
+
Never force-push, approve, merge, resolve a discussion, close, delete, expose
|
|
38
|
+
credentials, cross hosts, or perform an unlisted mutation.
|
|
39
|
+
|
|
40
|
+
Call `workflow_complete_step` alone with outcome `drafted` only after every
|
|
41
|
+
approved action either succeeds now or is proven already complete. In the
|
|
42
|
+
summary, record every exact command, the state observed before it, whether it
|
|
43
|
+
was skipped or attempted, the result and remote correlation, and all remaining
|
|
44
|
+
unattempted actions. Use the same full ledger with `blocked` on post-action
|
|
45
|
+
failure or ambiguity so pause, retry, and resume cannot silently repeat work.
|