@jwilger/pi-development-system 0.26.0 → 0.27.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
|
@@ -22,7 +22,8 @@ Review is a soft gate (`review.unsatisfied`): skipping it needs a recorded depar
|
|
|
22
22
|
round in one call). A packet is recorded once, in the round its header names;
|
|
23
23
|
if the diff changed since the start, the round is refused: start again.
|
|
24
24
|
4. Read the reply: `review: N/R clean` and `next:`.
|
|
25
|
-
- `fix-findings`: fix every blocking and should-fix finding, then start a new round
|
|
25
|
+
- `fix-findings`: fix every blocking and should-fix finding, then start a new round
|
|
26
|
+
(starting again on an unchanged diff is refused).
|
|
26
27
|
- `review`: the streak is short (or the diff changed with findings); start another round.
|
|
27
28
|
- `stale-diff`: the diff changed after a satisfied review; one more round.
|
|
28
29
|
- `done`: commit.
|
|
@@ -60,7 +61,9 @@ commit keeps the clean rounds already earned unless findings come back.
|
|
|
60
61
|
## Rules of thumb
|
|
61
62
|
|
|
62
63
|
- Fix the findings before the next round. Do not argue a finding away; if it is
|
|
63
|
-
wrong,
|
|
64
|
+
wrong, record a `review.unsatisfied` departure with the evidence
|
|
65
|
+
(`devsys_record_departure`). Starting a round again on an unchanged diff after
|
|
66
|
+
findings is refused, so a finding is cleared by a fix, never by a re-roll.
|
|
64
67
|
- Do not widen a review into an audit of the tree. The reviewer reads the diff and
|
|
65
68
|
what it depends on.
|
|
66
69
|
- Never edit the packet to make it pass.
|
package/src/core/review-flow.ts
CHANGED
|
@@ -70,7 +70,8 @@ export function splitDiffByFile(diff: string): Record<string, string> {
|
|
|
70
70
|
const flush = () => {
|
|
71
71
|
if (path !== undefined) out[path] = lines.join("\n");
|
|
72
72
|
};
|
|
73
|
-
|
|
73
|
+
// git ends its output with a newline: drop it so the last section digests like any other.
|
|
74
|
+
for (const line of diff.replace(/\n$/, "").split("\n")) {
|
|
74
75
|
// Git quotes unusual paths ("b/na\303\257ve.md"); strip the quotes rather than lose the section.
|
|
75
76
|
const header = /^diff --git "?a\/.*?"? "?b\/(.*?)"?$/.exec(line);
|
|
76
77
|
if (header !== null) {
|
|
@@ -156,7 +157,7 @@ export function reviewerTask(input: {
|
|
|
156
157
|
const lenses = input.lenses.join(", ");
|
|
157
158
|
return [
|
|
158
159
|
`Review slice ${input.slice}, round ${input.round}, through these lenses: ${lenses}.`,
|
|
159
|
-
`See the change with \`git diff ${input.diffRange}\` (and \`git diff --stat ${input.diffRange}\`), plus any untracked files listed by \`git
|
|
160
|
+
`See the change with \`git diff ${input.diffRange}\` (and \`git diff --stat ${input.diffRange}\`), plus any untracked files listed by \`git ls-files --others --exclude-standard\` (git diff does not show them; read them directly). Read the callers, callees and tests it depends on, no more.`,
|
|
160
161
|
"Do not modify files; report demonstrable defects with a realistic trigger and the smallest local repair.",
|
|
161
162
|
"Return exactly the review packet from your instructions, with exactly this header (slice and round must not change):",
|
|
162
163
|
"",
|
package/src/review/digest.ts
CHANGED
|
@@ -46,6 +46,8 @@ export async function snapshotDiff(
|
|
|
46
46
|
// can hide an edit whose converted text is unchanged.
|
|
47
47
|
"--submodule=short",
|
|
48
48
|
"--no-textconv",
|
|
49
|
+
// diff.ignoreSubmodules=all would hide a bump that `git add` still stages.
|
|
50
|
+
"--ignore-submodules=dirty",
|
|
49
51
|
];
|
|
50
52
|
const [diff, stat, others] = await Promise.all([
|
|
51
53
|
exec("git", [...plain, "--full-index", "--no-renames", range], { cwd, timeout: 15_000 }),
|