@jwilger/pi-development-system 0.26.0 → 0.27.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jwilger/pi-development-system",
3
- "version": "0.26.0",
3
+ "version": "0.27.0",
4
4
  "description": "A pi extension package representing a seasoned approach to software development using a full AI SDLC.",
5
5
  "keywords": [
6
6
  "pi-package"
@@ -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, the reviewer marks it a false positive with evidence (Jev can only suggest).
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.
@@ -156,7 +156,7 @@ export function reviewerTask(input: {
156
156
  const lenses = input.lenses.join(", ");
157
157
  return [
158
158
  `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 status --short\` (git diff does not show them; read them directly). Read the callers, callees and tests it depends on, no more.`,
159
+ `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
160
  "Do not modify files; report demonstrable defects with a realistic trigger and the smallest local repair.",
161
161
  "Return exactly the review packet from your instructions, with exactly this header (slice and round must not change):",
162
162
  "",
@@ -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 }),