@renaiss-shipflow/cli 0.27.7 → 0.27.9
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/dist/commands/pr.d.ts +216 -22
- package/dist/commands/pr.d.ts.map +1 -1
- package/dist/commands/pr.js +428 -55
- package/dist/commands/pr.js.map +1 -1
- package/dist/packet.d.ts +35 -3
- package/dist/packet.d.ts.map +1 -1
- package/dist/packet.js +162 -9
- package/dist/packet.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/pr.d.ts
CHANGED
|
@@ -14,22 +14,80 @@ export declare function buildShipFlowHeader(project: string, issueNumber?: numbe
|
|
|
14
14
|
/** What `pr sync --keep-conflicts` prints as the resolution recipe. NEVER
|
|
15
15
|
* `git add -A`: the UNMERGED index state is the ONLY thing that makes git
|
|
16
16
|
* refuse to commit a file still containing `<<<<<<<`, and `add -A` clears
|
|
17
|
-
* exactly that. Stage the paths you actually resolved, then re-gate.
|
|
18
|
-
|
|
17
|
+
* exactly that. Stage the paths you actually resolved, then re-gate.
|
|
18
|
+
*
|
|
19
|
+
* A FUNCTION of the base (issue #412, finding 3): the printed gate command has
|
|
20
|
+
* to carry `--base`, because the moment `git rebase --continue` commits the
|
|
21
|
+
* markers a bare `pr conflict-check` has nothing left to enumerate and reports
|
|
22
|
+
* clean. This is also what step 5 of `references/conflict-resolution.md` tells
|
|
23
|
+
* the agent to run, so the two now say the same thing.
|
|
24
|
+
*
|
|
25
|
+
* `root` anchors the printed `git add` (see `anchoredGit`) so it runs from a
|
|
26
|
+
* subdirectory too — the paths the operator substitutes come from the gate, and
|
|
27
|
+
* those are repo-root-relative. Injected, not probed, so the recipe stays pure. */
|
|
28
|
+
export declare function resolutionRecipe(baseRef: string, root?: string | null): readonly string[];
|
|
29
|
+
/** The ONE place the gate's re-check invocation is spelled (PR #434 review).
|
|
30
|
+
*
|
|
31
|
+
* `pr sync` printed a base-less `pr conflict-check` on both of its refusal
|
|
32
|
+
* paths while `resolutionRecipe` — three lines away, in the same
|
|
33
|
+
* command — threaded the base. That is the vacuous form this PR exists to stop
|
|
34
|
+
* recommending: it makes the operator re-resolve a base the caller already
|
|
35
|
+
* knows, and auto-resolution can land on a DIFFERENT ref than the one `pr sync`
|
|
36
|
+
* actually rebased onto, so the re-check would certify a tree against the wrong
|
|
37
|
+
* base. Every printed invocation now goes through here, so the base-less form
|
|
38
|
+
* can't reappear in one message while the others are correct. Where no concrete
|
|
39
|
+
* ref is in scope, pass the `origin/<base>` placeholder — never nothing. */
|
|
40
|
+
export declare function recheckCommand(baseRef: string): string;
|
|
41
|
+
/** A git command the operator can paste into ANY shell, at ANY depth in the
|
|
42
|
+
* worktree (PR #434 review, finding 2).
|
|
43
|
+
*
|
|
44
|
+
* The gate reports **repo-root-relative** paths — `gitPaths` pins its CWD to
|
|
45
|
+
* `repoToplevel()` so enumeration and grep share one frame of reference — so a
|
|
46
|
+
* printed `git add -- sub/app.ts` pasted from `sub/` resolves `sub/sub/app.ts`
|
|
47
|
+
* and dies with `could not open directory 'sub/sub/'`. `-C <root>` puts the
|
|
48
|
+
* printed command in the same frame the printed path is expressed in, which is
|
|
49
|
+
* the only way one string can be correct from every CWD. (Under the default
|
|
50
|
+
* `diff.relative=false` the un-anchored form was already wrong from a subdir;
|
|
51
|
+
* anchoring makes every printed path-bearing command runnable, not just this
|
|
52
|
+
* one.)
|
|
53
|
+
*
|
|
54
|
+
* Root unknown → print the plain form. A `git -C '' …` would be worse than no
|
|
55
|
+
* anchor, and a gate that cannot locate its own toplevel is already failing
|
|
56
|
+
* loudly for that reason. */
|
|
57
|
+
export declare function anchoredGit(root: string | null, args: string): string;
|
|
58
|
+
/** The repo root to anchor a PRINTED command to, or `null` when it can't be
|
|
59
|
+
* located. `repoToplevel()` throws by design (a gate that cannot find its tree
|
|
60
|
+
* has proved nothing); a *hint string* must never be the thing that crashes the
|
|
61
|
+
* process, so this degrades to the un-anchored form instead. */
|
|
62
|
+
export declare function printedRoot(): string | null;
|
|
19
63
|
/** One conflict-marker line found in a tracked file. */
|
|
20
64
|
export interface ConflictMarkerHit {
|
|
21
65
|
path: string;
|
|
22
66
|
line: number;
|
|
23
67
|
text: string;
|
|
24
68
|
}
|
|
69
|
+
/** What a `git grep -z -n` stream parse recovered.
|
|
70
|
+
*
|
|
71
|
+
* `hits` are the marker lines of files that carry a REAL conflict. `paths` is
|
|
72
|
+
* every path the parse read a well-formed record for — INCLUDING files whose
|
|
73
|
+
* only match was a bare `=======`. The two are deliberately different sets, and
|
|
74
|
+
* `paths` (never `hits`) is the parser's coverage claim: it is what the
|
|
75
|
+
* authoritative files-with-matches pass is checked against in
|
|
76
|
+
* `scanConflictMarkers`. Checking against `hits` instead would hard-block every
|
|
77
|
+
* push over any file containing a lone 7-equals line — the parser is *designed*
|
|
78
|
+
* not to trip on those, and `git grep -l` cannot tell one from a real conflict. */
|
|
79
|
+
export interface ConflictMarkerParse {
|
|
80
|
+
hits: ConflictMarkerHit[];
|
|
81
|
+
paths: string[];
|
|
82
|
+
}
|
|
25
83
|
/** The `git grep -E` pattern for the four marker families git can leave behind
|
|
26
84
|
* (`<<<<<<<`, `|||||||` in diff3 mode, `=======`, `>>>>>>>`). */
|
|
27
85
|
export declare const CONFLICT_MARKER_PATTERN = "^(<{7}|\\|{7}|={7}|>{7})( |$)";
|
|
28
86
|
/**
|
|
29
|
-
* Parse `git grep -z -n` output
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
87
|
+
* Parse `git grep -z -n` output: a file counts as conflicted when it has a
|
|
88
|
+
* `<<<<<<<` start **OR** a `>>>>>>>` end. A bare `=======` (or a lone diff3
|
|
89
|
+
* `|||||||`) never trips the gate on its own — that's the only line a changelog
|
|
90
|
+
* or a rule of prose plausibly starts with.
|
|
33
91
|
*
|
|
34
92
|
* This used to require BOTH arms (the "triad rule"), which let a half-resolved
|
|
35
93
|
* file through: delete one arm, leave `<<<<<<< HEAD` behind, and since `git add`
|
|
@@ -49,8 +107,23 @@ export declare const CONFLICT_MARKER_PATTERN = "^(<{7}|\\|{7}|={7}|>{7})( |$)";
|
|
|
49
107
|
* (PR #394 review). git prints colons in paths unquoted, so no colon-based
|
|
50
108
|
* parse can be correct; NUL is the only unambiguous delimiter.
|
|
51
109
|
*
|
|
110
|
+
* The walk is POSITIONAL, not a `split("\0")` field walk (issue #412, finding 1).
|
|
111
|
+
* A `split` treats fields as fixed pairs, so ONE extra NUL anywhere in the stream
|
|
112
|
+
* shifts parity for everything after it. A matched LINE can legitimately contain
|
|
113
|
+
* a NUL: git's binary heuristic only inspects the first 8000 bytes, so a >8 KB
|
|
114
|
+
* text file with an embedded NUL further in is scanned as text and printed
|
|
115
|
+
* verbatim. Measured: a `======= \0Y` line in a 9.9 KB file desynced the walk and
|
|
116
|
+
* dropped EVERY later file in sorted-path order — a victim with three live
|
|
117
|
+
* markers reported CLEAN. `--text` does not fix this; the NUL is still inside the
|
|
118
|
+
* matched line. Reading each field to its own terminator does: a path cannot
|
|
119
|
+
* contain a NUL (POSIX), so field 1 ends at the 1st NUL and field 2 at the 2nd,
|
|
120
|
+
* and a grep match is exactly one line, so the text ends at the next LF —
|
|
121
|
+
* whatever bytes it contains.
|
|
122
|
+
*
|
|
52
123
|
* Pure + testable (`pr sync` shells out to gh+git and has no harness).
|
|
53
124
|
*/
|
|
125
|
+
export declare function parseConflictMarkerRecords(out: string): ConflictMarkerParse;
|
|
126
|
+
/** The marker hits alone — see `parseConflictMarkerRecords` for the coverage set. */
|
|
54
127
|
export declare function parseConflictMarkerGrep(out: string): ConflictMarkerHit[];
|
|
55
128
|
/** The outcome of enumerating paths for the gate. `ok: false` means the git
|
|
56
129
|
* command FAILED — which is emphatically NOT the same as "nothing changed".
|
|
@@ -67,29 +140,137 @@ export interface PathEnumeration {
|
|
|
67
140
|
* pathspecs — which would silently drop that file from the marker scan.
|
|
68
141
|
* Failure is REPORTED (`ok: false`), never flattened into an empty result:
|
|
69
142
|
* `scanConflictMarkers([])` is `[]`, so a swallowed error would have read as a
|
|
70
|
-
* clean tree and let the push through (PR #394 review).
|
|
143
|
+
* clean tree and let the push through (PR #394 review).
|
|
144
|
+
*
|
|
145
|
+
* Runs from `repoToplevel()`, and that is LOAD-BEARING (issue #412, finding 4 —
|
|
146
|
+
* PR #434 review). Enumeration and grep are a PAIR and must share one frame of
|
|
147
|
+
* reference: `git grep` always runs from the root (see `grepConflictMarkers`),
|
|
148
|
+
* so the paths handed to it must be root-relative too. `git diff --name-only`
|
|
149
|
+
* honours `diff.relative` — set to true (config, or a `--relative` in the
|
|
150
|
+
* command) it emits CWD-relative paths AND drops everything outside the CWD.
|
|
151
|
+
* Run the gate from `sub/` and `sub/app.ts` was enumerated as `app.ts`, which
|
|
152
|
+
* the root-anchored grep matched nothing for: exit 1 ("no match") read as a
|
|
153
|
+
* CLEAN tree over three live markers. Pinning the CWD here fixes it at the
|
|
154
|
+
* source, for every call site, and needs no `--no-relative` flag (git ≥2.30):
|
|
155
|
+
* at the toplevel, relative and absolute are the same thing.
|
|
156
|
+
*
|
|
157
|
+
* A root that cannot be located degrades to `ok: false` rather than throwing —
|
|
158
|
+
* callers rely on this never throwing (`pr sync`'s best-effort listing), and a
|
|
159
|
+
* gate that cannot find its tree has enumerated nothing, which is exactly what
|
|
160
|
+
* `ok: false` means. */
|
|
71
161
|
export declare function gitPaths(cmd: string): PathEnumeration;
|
|
72
162
|
/** Files this branch changed relative to `baseRef` — the only place a rebase
|
|
73
163
|
* can have left markers, so the gate never scans (or trips on) unrelated files. */
|
|
74
164
|
export declare function changedPaths(baseRef: string): PathEnumeration;
|
|
75
|
-
/**
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
|
|
165
|
+
/** The repository root, as the CWD every gate git command runs FROM — BOTH the
|
|
166
|
+
* `git diff` that enumerates (`gitPaths`) and the `git grep` that scans
|
|
167
|
+
* (`grepConflictMarkers`).
|
|
168
|
+
*
|
|
169
|
+
* Load-bearing (issue #412, finding 4): `git grep` resolves pathspecs relative
|
|
170
|
+
* to the CWD, so paths enumerated in one frame and grepped in another match
|
|
171
|
+
* nothing — `git grep` exits 1 ("no match"), which the gate reads as CLEAN over
|
|
172
|
+
* live markers. Anchoring only one half is worse than anchoring neither: under
|
|
173
|
+
* `diff.relative=true` the two halves then disagree where before they at least
|
|
174
|
+
* agreed (PR #434 review). It must be a toplevel CWD and NOT a `:(top)`
|
|
175
|
+
* pathspec prefix: `--literal-pathspecs`, which the `:leading.ts` regression
|
|
176
|
+
* requires, disables pathspec magic outright. Failure to locate the root throws
|
|
177
|
+
* — a gate that cannot find the tree it is certifying has proved nothing.
|
|
178
|
+
* (`gitPaths` catches that throw and degrades to `ok: false`, its own way of
|
|
179
|
+
* saying the same thing.) */
|
|
180
|
+
export declare function repoToplevel(): string;
|
|
181
|
+
/** Split paths into `git grep`-sized batches, budgeting the QUOTED byte length
|
|
182
|
+
* actually spent on the command line. A single path over budget still gets its
|
|
183
|
+
* own chunk rather than looping forever. Pure, so the budgeting is testable
|
|
184
|
+
* without building a 100 KB fixture. */
|
|
185
|
+
export declare function chunkPathspecs(paths: string[], maxFiles?: number, maxBytes?: number): string[][];
|
|
186
|
+
/**
|
|
187
|
+
* Scan the working tree for leftover conflict markers in `paths`.
|
|
188
|
+
*
|
|
189
|
+
* Two passes per chunk, and the split is the point (issue #412, finding 1):
|
|
190
|
+
*
|
|
191
|
+
* 1. `-l` — the AUTHORITY on WHICH files match. `-z -l` emits NUL-terminated
|
|
192
|
+
* paths, so `split("\0")` is exact and no parse can lose a file.
|
|
193
|
+
* 2. `-n` — the line/text DETAIL, positionally parsed.
|
|
194
|
+
*
|
|
195
|
+
* Then fail CLOSED if the `-l` set is not covered by the paths the `-n` parse
|
|
196
|
+
* recovered: the detail pass lost a file the authority saw, so this scan cannot
|
|
197
|
+
* certify anything. The comparison is against `parse.paths` — every path a
|
|
198
|
+
* record was read for — and emphatically NOT against the filtered `hits`. `-l`
|
|
199
|
+
* cannot distinguish a bare `=======` from a real conflict and the parser
|
|
200
|
+
* deliberately does not trip on one, so checking `hits` would make any file
|
|
201
|
+
* containing a lone 7-equals line permanently unpushable.
|
|
202
|
+
*/
|
|
203
|
+
export declare function scanConflictMarkers(paths: string[], budget?: {
|
|
204
|
+
maxFiles?: number;
|
|
205
|
+
maxBytes?: number;
|
|
206
|
+
}): ConflictMarkerHit[];
|
|
207
|
+
/** Files the `-l` authority matched that the `-n` parse recovered no record for.
|
|
208
|
+
* Non-empty ⇒ the scan lost coverage and must fail closed.
|
|
209
|
+
*
|
|
210
|
+
* ⚠️ `recovered` is `ConflictMarkerParse.paths` — every path a record was read
|
|
211
|
+
* for — and NEVER the filtered hits. `git grep -l` matches a bare `=======` the
|
|
212
|
+
* same as a real `<<<<<<<`, while the parser deliberately does not trip on a
|
|
213
|
+
* lone separator. Comparing against hits would therefore report every file
|
|
214
|
+
* containing a single 7-equals line as "lost", hard-blocking its push forever:
|
|
215
|
+
* a repo-wide denial of service on the gate, invisible today only because this
|
|
216
|
+
* repo happens to contain zero such lines. */
|
|
217
|
+
export declare function unrecoveredMatches(matched: string[], recovered: string[]): string[];
|
|
90
218
|
/** Which rebase state git has left in this worktree, if any. Reads the
|
|
91
219
|
* worktree's own git dir, so it is correct inside `git worktree` checkouts. */
|
|
92
220
|
export declare function rebaseInProgress(): "rebase-merge" | "rebase-apply" | null;
|
|
221
|
+
/** The commit an in-flight rebase is replaying ONTO, read from the rebase state
|
|
222
|
+
* git itself wrote (`.git/rebase-merge/onto` or `.git/rebase-apply/onto`).
|
|
223
|
+
* `rebaseInProgress()` already names the directory, so this is a file read. */
|
|
224
|
+
export declare function rebaseOnto(): string | null;
|
|
225
|
+
/** The remote's default branch, from `refs/remotes/origin/HEAD`. */
|
|
226
|
+
export declare function originHeadRef(): string | null;
|
|
227
|
+
/** Last-ditch default branch when `origin/HEAD` was never set (a plain `git
|
|
228
|
+
* clone --depth` or a hand-added remote leaves it unset). */
|
|
229
|
+
export declare function defaultBranchRef(): string | null;
|
|
230
|
+
/** Which ref `conflict-check` diffs against, and where that ref came from. */
|
|
231
|
+
export type BaseSource = "rebase-onto" | "origin-head" | "default-branch" | "explicit";
|
|
232
|
+
export interface ResolvedBase {
|
|
233
|
+
base: string;
|
|
234
|
+
source: BaseSource;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Resolve the base `conflict-check` scans against (issue #412, finding 3).
|
|
238
|
+
*
|
|
239
|
+
* Without a base the check is VACUOUS at exactly the moment it matters. Once
|
|
240
|
+
* `git rebase --continue` has COMMITTED the markers, nothing is unmerged and
|
|
241
|
+
* nothing differs from HEAD, so both of the local enumeration sources are empty
|
|
242
|
+
* and the gate prints `{"clean":true,"scanned":0}` and exits 0 — over a tree
|
|
243
|
+
* whose HEAD blob literally contains `<<<<<<< HEAD`. The same tree with
|
|
244
|
+
* `--base main` yields 3 hits and exit 8.
|
|
245
|
+
*
|
|
246
|
+
* Precedence, most-specific first:
|
|
247
|
+
* 1. `rebase-onto` — mid-rebase, the commit git is actually replaying onto is
|
|
248
|
+
* the true base, whatever anyone typed.
|
|
249
|
+
* 2. `origin-head` / 3. `default-branch` — the repo's own default branch.
|
|
250
|
+
* 4. `explicit` — the operator's `--base`.
|
|
251
|
+
*
|
|
252
|
+
* NOT `@{upstream}`: that resolves to `origin/<same-branch>`, which is the
|
|
253
|
+
* branch's own remote copy and not the PR base at all — diffing a branch against
|
|
254
|
+
* itself is a vacuous scan wearing a base's clothes — and it is unset on any
|
|
255
|
+
* freshly created branch anyway.
|
|
256
|
+
*
|
|
257
|
+
* Ranking `explicit` LAST is deliberate and must stay that way: a stale `--base`
|
|
258
|
+
* flag must not override the commit git is actually replaying onto mid-rebase,
|
|
259
|
+
* and ranking it up would change which single ref `base` reports as covered.
|
|
260
|
+
*
|
|
261
|
+
* `--base` keeps its documented ADDITIVE contract at the call site: an explicit
|
|
262
|
+
* ref the precedence didn't pick is still scanned, it just isn't what gets
|
|
263
|
+
* reported as the resolved base — the caller reports the FULL set it diffed
|
|
264
|
+
* against as `bases`, so nothing scanned goes unnamed (PR #434 review). Pure
|
|
265
|
+
* (probes are injected) so the precedence is unit-testable without a rebase
|
|
266
|
+
* fixture.
|
|
267
|
+
*/
|
|
268
|
+
export declare function resolveScanBase(i: {
|
|
269
|
+
onto: string | null;
|
|
270
|
+
originHead: string | null;
|
|
271
|
+
defaultBranch: string | null;
|
|
272
|
+
explicit?: string;
|
|
273
|
+
}): ResolvedBase | null;
|
|
93
274
|
export type SyncEntryVerdict = {
|
|
94
275
|
ok: true;
|
|
95
276
|
} | {
|
|
@@ -103,11 +284,24 @@ export type SyncEntryVerdict = {
|
|
|
103
284
|
* misleading `On branch "HEAD" but PR #N is "x"` and every later loop git op
|
|
104
285
|
* failed. Each refusal names the state AND the exact command that clears it.
|
|
105
286
|
* Pure (state is injected) so it's unit-testable without a git fixture.
|
|
287
|
+
*
|
|
288
|
+
* `base` is the ref the printed re-check names, and it must be CONCRETE (PR #434
|
|
289
|
+
* review, finding 1). This branch fires only when a rebase IS in progress, so
|
|
290
|
+
* the caller always has one — the rebase's own `onto`, else `origin/<the PR's
|
|
291
|
+
* base>` — and the `origin/<base>` placeholder printed here before was a command
|
|
292
|
+
* the operator could not run: `conflict-check --base 'origin/<base>'` fails to
|
|
293
|
+
* resolve the ref and exits 8 via `enumerationFailed`, i.e. the recovery hint
|
|
294
|
+
* itself reported "the gate proved nothing". The placeholder survives only as
|
|
295
|
+
* the last resort for a caller that truly has neither source.
|
|
296
|
+
*
|
|
297
|
+
* `root` anchors the printed `git add` for a subdirectory shell (`anchoredGit`).
|
|
106
298
|
*/
|
|
107
299
|
export declare function syncEntryGuard(i: {
|
|
108
300
|
rebase: "rebase-merge" | "rebase-apply" | null;
|
|
109
301
|
currentBranch: string;
|
|
110
302
|
head: string;
|
|
111
303
|
number: number;
|
|
304
|
+
base?: string | null;
|
|
305
|
+
root?: string | null;
|
|
112
306
|
}): SyncEntryVerdict;
|
|
113
307
|
//# sourceMappingURL=pr.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../src/commands/pr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmDzC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../src/commands/pr.ts"],"names":[],"mappings":"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"}
|