vouchington-tooling 0.52.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.52.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": {
@@ -4,7 +4,7 @@
4
4
  {
5
5
  "name": "agent-workflow",
6
6
  "plugin": "vouchington-workflow",
7
- "pluginVersion": "0.13.0",
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.0",
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.0",
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.0",
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.0",
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.0",
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.0",
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.0",
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.0",
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.0",
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.0",
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.0",
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.0",
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.0",
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.0",
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.0",
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.0",
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.0",
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.0",
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.0",
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 merge the ready prefix in one command; a ready lower layer does not freeze later work.
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
- frees the ready prefix above it to merge in one command.
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 ready prefix
58
+ ## Merge the whole stack
58
59
 
59
- - Do not merge one layer at a time, and do not wait for the whole stack. Layers accumulate rebase
60
- surface, CI cost, and review context, and drift against the default branch.
61
- - The ready prefix is the bottom-most open layer plus every consecutive layer above it that is
62
- also ready and inside the human's approval. As soon as the bottom layer is ready, merge the ready
63
- prefix with one command whose target is the prefix's top layer. When every layer is ready and
64
- approved, the target is the top of the stack.
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-ready-prefix) before each merge.
67
- - After a merge, GitHub retargets the next unmerged layer onto the default branch. That layer is
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 merging that ready prefix.
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 ready prefix in one command, and it is
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 ready prefix
92
+ ## Merge the whole stack
93
93
 
94
- The ready prefix is the bottom-most open layer plus every consecutive layer above it that is also
95
- ready and inside the approval. Its top layer is the merge target. A shepherd that prints a merge
96
- of its highest ready layer may name a layer above the approved range. Target the highest approved
97
- layer of the prefix instead; that is still one command.
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 the next ready prefix after an earlier
101
- merge. It does not cover a layer added after the approval. Ask before merging any layer outside
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 each approved merge, run these checks in order:
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
- 3. For every layer in the prefix, capture `pulls/<N>.head.sha` before the final poll and after it.
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, which is the ready prefix.
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. Keep shepherding the layers above. When the new bottom is ready, merge
119
- the next ready prefix the same way. Before any local edit, rebase, or push on a remaining
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 prefix queues
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 merge that ready prefix before continuing.
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 ready prefix per
141
- [Merge the ready prefix](../stacked-prs/SKILL.md#merge-the-ready-prefix), within explicit human
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. End the ready prefix below the first layer that is out of scope
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