vouchington-tooling 0.51.0 → 0.52.1
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vouchington-tooling",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.52.1",
|
|
4
4
|
"description": "Vouchington CLI and extractable tooling libraries.",
|
|
5
5
|
"homepage": "https://github.com/vouchington/vouchington-tooling/tree/main/packages/vouchington-tooling#readme",
|
|
6
6
|
"bugs": {
|
package/skills/manifest.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
{
|
|
5
5
|
"name": "agent-workflow",
|
|
6
6
|
"plugin": "vouchington-workflow",
|
|
7
|
-
"pluginVersion": "0.13.
|
|
7
|
+
"pluginVersion": "0.13.1",
|
|
8
8
|
"path": "agent-workflow/SKILL.md",
|
|
9
9
|
"prerequisites": [
|
|
10
10
|
"blackboard",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
{
|
|
25
25
|
"name": "blackboard",
|
|
26
26
|
"plugin": "vouchington-workflow",
|
|
27
|
-
"pluginVersion": "0.13.
|
|
27
|
+
"pluginVersion": "0.13.1",
|
|
28
28
|
"path": "blackboard/SKILL.md"
|
|
29
29
|
},
|
|
30
30
|
{
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
{
|
|
37
37
|
"name": "dependabot",
|
|
38
38
|
"plugin": "vouchington-workflow",
|
|
39
|
-
"pluginVersion": "0.13.
|
|
39
|
+
"pluginVersion": "0.13.1",
|
|
40
40
|
"path": "dependabot/SKILL.md",
|
|
41
41
|
"prerequisites": ["github-actions-checklist"]
|
|
42
42
|
},
|
|
@@ -50,26 +50,26 @@
|
|
|
50
50
|
{
|
|
51
51
|
"name": "git-commit-checklist",
|
|
52
52
|
"plugin": "vouchington-workflow",
|
|
53
|
-
"pluginVersion": "0.13.
|
|
53
|
+
"pluginVersion": "0.13.1",
|
|
54
54
|
"path": "git-commit-checklist/SKILL.md"
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
57
|
"name": "github-actions-authoring",
|
|
58
58
|
"plugin": "vouchington-workflow",
|
|
59
|
-
"pluginVersion": "0.13.
|
|
59
|
+
"pluginVersion": "0.13.1",
|
|
60
60
|
"path": "github-actions-authoring/SKILL.md",
|
|
61
61
|
"prerequisites": ["github-actions-checklist"]
|
|
62
62
|
},
|
|
63
63
|
{
|
|
64
64
|
"name": "github-actions-checklist",
|
|
65
65
|
"plugin": "vouchington-workflow",
|
|
66
|
-
"pluginVersion": "0.13.
|
|
66
|
+
"pluginVersion": "0.13.1",
|
|
67
67
|
"path": "github-actions-checklist/SKILL.md"
|
|
68
68
|
},
|
|
69
69
|
{
|
|
70
70
|
"name": "github-issue",
|
|
71
71
|
"plugin": "vouchington-workflow",
|
|
72
|
-
"pluginVersion": "0.13.
|
|
72
|
+
"pluginVersion": "0.13.1",
|
|
73
73
|
"path": "github-issue/SKILL.md"
|
|
74
74
|
},
|
|
75
75
|
{
|
|
@@ -82,26 +82,26 @@
|
|
|
82
82
|
{
|
|
83
83
|
"name": "npm-publishing",
|
|
84
84
|
"plugin": "vouchington-workflow",
|
|
85
|
-
"pluginVersion": "0.13.
|
|
85
|
+
"pluginVersion": "0.13.1",
|
|
86
86
|
"path": "npm-publishing/SKILL.md"
|
|
87
87
|
},
|
|
88
88
|
{
|
|
89
89
|
"name": "organize-github-issues",
|
|
90
90
|
"plugin": "vouchington-workflow",
|
|
91
|
-
"pluginVersion": "0.13.
|
|
91
|
+
"pluginVersion": "0.13.1",
|
|
92
92
|
"path": "organize-github-issues/SKILL.md",
|
|
93
93
|
"prerequisites": ["github-issue"]
|
|
94
94
|
},
|
|
95
95
|
{
|
|
96
96
|
"name": "package-json-checklist",
|
|
97
97
|
"plugin": "vouchington-workflow",
|
|
98
|
-
"pluginVersion": "0.13.
|
|
98
|
+
"pluginVersion": "0.13.1",
|
|
99
99
|
"path": "package-json-checklist/SKILL.md"
|
|
100
100
|
},
|
|
101
101
|
{
|
|
102
102
|
"name": "planning",
|
|
103
103
|
"plugin": "vouchington-workflow",
|
|
104
|
-
"pluginVersion": "0.13.
|
|
104
|
+
"pluginVersion": "0.13.1",
|
|
105
105
|
"path": "planning/SKILL.md",
|
|
106
106
|
"prerequisites": ["github-issue"]
|
|
107
107
|
},
|
|
@@ -133,53 +133,53 @@
|
|
|
133
133
|
{
|
|
134
134
|
"name": "pr-description",
|
|
135
135
|
"plugin": "vouchington-workflow",
|
|
136
|
-
"pluginVersion": "0.13.
|
|
136
|
+
"pluginVersion": "0.13.1",
|
|
137
137
|
"path": "pr-description/SKILL.md"
|
|
138
138
|
},
|
|
139
139
|
{
|
|
140
140
|
"name": "retrospective",
|
|
141
141
|
"plugin": "vouchington-workflow",
|
|
142
|
-
"pluginVersion": "0.13.
|
|
142
|
+
"pluginVersion": "0.13.1",
|
|
143
143
|
"path": "retrospective/SKILL.md"
|
|
144
144
|
},
|
|
145
145
|
{
|
|
146
146
|
"name": "retrospective-distill",
|
|
147
147
|
"plugin": "vouchington-workflow",
|
|
148
|
-
"pluginVersion": "0.13.
|
|
148
|
+
"pluginVersion": "0.13.1",
|
|
149
149
|
"path": "retrospective-distill/SKILL.md",
|
|
150
150
|
"prerequisites": ["github-issue"]
|
|
151
151
|
},
|
|
152
152
|
{
|
|
153
153
|
"name": "review-ci-logs",
|
|
154
154
|
"plugin": "vouchington-workflow",
|
|
155
|
-
"pluginVersion": "0.13.
|
|
155
|
+
"pluginVersion": "0.13.1",
|
|
156
156
|
"path": "review-ci-logs/SKILL.md",
|
|
157
157
|
"prerequisites": ["github-actions-checklist", "pr-description"]
|
|
158
158
|
},
|
|
159
159
|
{
|
|
160
160
|
"name": "review-github-issue-taxonomy",
|
|
161
161
|
"plugin": "vouchington-workflow",
|
|
162
|
-
"pluginVersion": "0.13.
|
|
162
|
+
"pluginVersion": "0.13.1",
|
|
163
163
|
"path": "review-github-issue-taxonomy/SKILL.md",
|
|
164
164
|
"prerequisites": ["github-issue"]
|
|
165
165
|
},
|
|
166
166
|
{
|
|
167
167
|
"name": "revisit-followups",
|
|
168
168
|
"plugin": "vouchington-workflow",
|
|
169
|
-
"pluginVersion": "0.13.
|
|
169
|
+
"pluginVersion": "0.13.1",
|
|
170
170
|
"path": "revisit-followups/SKILL.md",
|
|
171
171
|
"prerequisites": ["github-issue"]
|
|
172
172
|
},
|
|
173
173
|
{
|
|
174
174
|
"name": "stacked-prs",
|
|
175
175
|
"plugin": "vouchington-workflow",
|
|
176
|
-
"pluginVersion": "0.13.
|
|
176
|
+
"pluginVersion": "0.13.1",
|
|
177
177
|
"path": "stacked-prs/SKILL.md"
|
|
178
178
|
},
|
|
179
179
|
{
|
|
180
180
|
"name": "static-analysis-checklist",
|
|
181
181
|
"plugin": "vouchington-workflow",
|
|
182
|
-
"pluginVersion": "0.13.
|
|
182
|
+
"pluginVersion": "0.13.1",
|
|
183
183
|
"path": "static-analysis-checklist/SKILL.md",
|
|
184
184
|
"prerequisites": ["github-actions-checklist"]
|
|
185
185
|
},
|
|
@@ -206,7 +206,7 @@
|
|
|
206
206
|
{
|
|
207
207
|
"name": "triage-prs",
|
|
208
208
|
"plugin": "vouchington-workflow",
|
|
209
|
-
"pluginVersion": "0.13.
|
|
209
|
+
"pluginVersion": "0.13.1",
|
|
210
210
|
"path": "triage-prs/SKILL.md",
|
|
211
211
|
"prerequisites": [
|
|
212
212
|
"pr-description",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: stacked-prs
|
|
3
|
-
description: Work native GitHub stacks bottom-up and
|
|
3
|
+
description: Work native GitHub stacks bottom-up and prefer merging the whole stack in one command; drain the ready lower layers first only when the upper layers will clearly take longer.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Stacked pull requests
|
|
@@ -44,7 +44,8 @@ a stack, and who may authorize a merge.
|
|
|
44
44
|
a ready-delay, or green CI.
|
|
45
45
|
- On each shepherd result, act on the lowest owned layer that is not ready before any higher
|
|
46
46
|
layer. Put each fix on the lowest layer that owns it. A bottom layer that reaches ready early
|
|
47
|
-
|
|
47
|
+
waits for the rest of the stack unless the layers above will clearly take longer; keep readying
|
|
48
|
+
them.
|
|
48
49
|
- Before a command that adds layers to a stack, such as `gh stack add` or `gh stack link`, add the
|
|
49
50
|
forge's open-layer count, plus every locally tracked layer not yet submitted, to every layer the
|
|
50
51
|
command would add. `gh stack add` creates only a local branch, so repeated adds before a submit
|
|
@@ -54,20 +55,25 @@ a stack, and who may authorize a merge.
|
|
|
54
55
|
- A ready, mergeable, or queued lower layer blocks only an operation that would rewrite that
|
|
55
56
|
layer. Keep readying every other owned layer.
|
|
56
57
|
|
|
57
|
-
## Merge the
|
|
58
|
+
## Merge the whole stack
|
|
58
59
|
|
|
59
|
-
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
- Prefer merging the whole stack at once: when every layer is ready and inside the human's
|
|
61
|
+
approval, merge it with one command whose target is the top layer. Never merge one layer at a
|
|
62
|
+
time, and never merge only the lower layers when every layer is ready.
|
|
63
|
+
- Ready every layer in parallel so the stack reaches ready together. A ready lower layer waits
|
|
64
|
+
while the layers above are close behind (a poll or a ready-delay away).
|
|
65
|
+
- Drain bottom-up only when the layers above will clearly take longer: a requested change or
|
|
66
|
+
`FIX_CODE` still open, a pending human review, a blocker, or CI far longer than the wait so far.
|
|
67
|
+
Then merge the ready lower layers in one command whose target is the highest ready layer, state
|
|
68
|
+
why in the report, and merge the rest together when it is ready.
|
|
69
|
+
- Re-read every layer's readiness immediately before merging. If the whole stack is ready and
|
|
70
|
+
approved, the target is the top layer; never retarget past the approval.
|
|
65
71
|
- Nothing in the stack merges on its own. Run the merge checks in
|
|
66
|
-
[Drain and keep track](references/drain.md#merge-the-
|
|
67
|
-
- After a
|
|
68
|
-
the new bottom.
|
|
72
|
+
[Drain and keep track](references/drain.md#merge-the-whole-stack) before each merge.
|
|
73
|
+
- After a bottom-up drain, GitHub retargets the next unmerged layer onto the default branch. That
|
|
74
|
+
layer is the new bottom.
|
|
69
75
|
- On a stall, or when a layer closes without merging, stop if the bottom layers are otherwise
|
|
70
|
-
ready. Report every layer and ask before
|
|
76
|
+
ready. Report every layer and ask before draining them.
|
|
71
77
|
- A stall blocks only layers that depend on it. Ready the others. Pause the whole drain only when
|
|
72
78
|
nothing further can be readied without the blocked layer.
|
|
73
79
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Drain and keep track
|
|
2
2
|
|
|
3
3
|
Shepherding a layer to ready and merging are different acts. The first covers every pull request
|
|
4
|
-
the worker owns in the stack at once. The second lands the
|
|
5
|
-
never the agent's own decision.
|
|
4
|
+
the worker owns in the stack at once. The second lands the whole stack in one command once every
|
|
5
|
+
layer is ready, and it is never the agent's own decision.
|
|
6
6
|
|
|
7
7
|
## Establish scope
|
|
8
8
|
|
|
@@ -89,48 +89,55 @@ When the owned set settles, present the stack bottom to top: each layer's number
|
|
|
89
89
|
and whether it is ready or blocked and why. Never leave a ready bottom layer under a blocked upper
|
|
90
90
|
layer without saying so.
|
|
91
91
|
|
|
92
|
-
## Merge the
|
|
92
|
+
## Merge the whole stack
|
|
93
93
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
94
|
+
Prefer one merge of the whole stack: when every open layer is ready and inside the approval, the
|
|
95
|
+
target is the top layer, and one command lands it and every layer below it. A shepherd that prints
|
|
96
|
+
a merge for a lower layer does not change that; when the whole stack is ready, target the top.
|
|
97
|
+
|
|
98
|
+
Drain bottom-up only when the layers above will clearly take longer than the ready lower layers:
|
|
99
|
+
an open requested change or `FIX_CODE`, a pending human review, a blocker, or CI far longer than
|
|
100
|
+
the wait so far. A layer a poll or a ready-delay away is not a reason. Then the target is the
|
|
101
|
+
highest layer of the ready, approved run from the bottom, still one command, and the report says
|
|
102
|
+
why the upper layers were left.
|
|
98
103
|
|
|
99
104
|
Merge only on explicit human approval. The approval names what it covers: one layer, a range, or
|
|
100
|
-
the whole stack. Approving the whole stack also covers
|
|
101
|
-
|
|
102
|
-
it.
|
|
105
|
+
the whole stack. Approving the whole stack also covers a bottom-up drain under the rule above. It
|
|
106
|
+
does not cover a layer added after the approval. Ask before merging any layer outside it.
|
|
103
107
|
|
|
104
|
-
Immediately before
|
|
108
|
+
Immediately before the approved merge, run these checks in order:
|
|
105
109
|
|
|
106
110
|
1. `gh api repos/{owner}/{repo}/stacks/<target>` must return 404. `gh stack merge` resolves a bare
|
|
107
111
|
number as a stack number first, then a pull request number. A 200 response means `--yes` would
|
|
108
112
|
merge every layer of that stack. Stop and ask.
|
|
109
113
|
2. Re-read topology. Confirm every layer from the bottom-most open layer up to the target is open,
|
|
110
|
-
ready, and inside the approval, with nothing broken below.
|
|
111
|
-
|
|
114
|
+
ready, and inside the approval, with nothing broken below. Re-read every layer above the
|
|
115
|
+
target too. If those layers are all ready now and the approval covers them, retarget to the
|
|
116
|
+
highest of them and restart these checks from step 1 for the new target. Never retarget past
|
|
117
|
+
the approval; report the ready layers above it and ask.
|
|
118
|
+
3. For every layer being merged, capture `pulls/<N>.head.sha` before the final poll and after it.
|
|
112
119
|
They must match. A mismatch means a push landed inside the evaluation window: discard the
|
|
113
120
|
verdict and poll again.
|
|
114
121
|
4. `gh stack merge <target> --yes` with the repository's merge strategy. It lands the target and
|
|
115
|
-
every open layer below it
|
|
122
|
+
every open layer below it.
|
|
116
123
|
5. Do not `gh stack sync` here. Return to step 2 of [Establish scope](#establish-scope) and
|
|
117
124
|
re-read topology remotely: rebasing right after a merge can replay already-landed commits from
|
|
118
|
-
a stale local base ref.
|
|
119
|
-
the
|
|
120
|
-
layer, rerun the fetch and ahead/behind check in
|
|
125
|
+
a stale local base ref. After a bottom-up drain, keep shepherding the layers above and merge
|
|
126
|
+
the rest the same way, preferring the whole remainder at once. Before any local edit, rebase, or push
|
|
127
|
+
on a remaining layer, rerun the fetch and ahead/behind check in
|
|
121
128
|
[Import a stack](gh-stack.md#import-a-stack-before-acting-on-it): GitHub rebases the next
|
|
122
129
|
layer remotely, so local upper branches are stale until fast-forwarded. The drain is complete when no unmerged owned layer remains.
|
|
123
130
|
|
|
124
131
|
The window between the last head read and the merge cannot be closed, because `gh stack merge`
|
|
125
132
|
has no head-SHA pin. Branch protection and rulesets are evaluated when the merge runs, and stacks
|
|
126
133
|
cannot bypass merge requirements. If the merge is rejected, re-read topology instead of retrying
|
|
127
|
-
blindly. Under a merge queue, a successful `gh stack merge` only enqueues: the
|
|
134
|
+
blindly. Under a merge queue, a successful `gh stack merge` only enqueues: the layers queue
|
|
128
135
|
together, and a failing layer is ejected along with the layers above it. The next topology
|
|
129
136
|
re-read handles that.
|
|
130
137
|
|
|
131
138
|
When you stop or are blocked (an unresolved escalation, an interrupt or pause, repeated fixes with
|
|
132
139
|
no progress, or an external blocker), report each layer's number and state. If the bottom layers
|
|
133
|
-
are ready, ask whether to
|
|
140
|
+
are ready, ask whether to drain them before continuing.
|
|
134
141
|
|
|
135
142
|
## Keep track: derive the ledger
|
|
136
143
|
|
|
@@ -137,11 +137,11 @@ Classify the outcome:
|
|
|
137
137
|
- **Repository auto-merge disabled:** dispatch the shepherd, report that a manual merge is
|
|
138
138
|
required, and leave auto-merge unchanged.
|
|
139
139
|
- **Native GitHub stack:** shepherd the owned layers per
|
|
140
|
-
[stacked-prs](../stacked-prs/SKILL.md#ownership-and-workers) and merge the
|
|
141
|
-
[Merge the
|
|
140
|
+
[stacked-prs](../stacked-prs/SKILL.md#ownership-and-workers) and merge the whole stack per
|
|
141
|
+
[Merge the whole stack](../stacked-prs/SKILL.md#merge-the-whole-stack), within explicit human
|
|
142
142
|
approval and only as far as this run's decisions cover. Resolve the full stack against the Step 1
|
|
143
|
-
scope and Step 3 decisions first.
|
|
144
|
-
or not `MERGE`; never shepherd or merge a layer this run did not review. GitHub has no
|
|
143
|
+
scope and Step 3 decisions first. A bottom-up drain ends below the first layer that is out of
|
|
144
|
+
scope or not `MERGE`; never shepherd or merge a layer this run did not review. GitHub has no
|
|
145
145
|
auto-merge for stacks, and an armed auto-merge does not authorize the drain on its own.
|
|
146
146
|
|
|
147
147
|
Do not add a second pass that polls the dispatch workflow. It ends once the session is accepted or
|