pi-goal-list-loop-audit 0.29.1 → 0.29.3

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.
@@ -417,7 +417,8 @@ export function auditMeasureCmd(): string {
417
417
  * Each iteration: fresh audit pass → append NEW findings → fix the top
418
418
  * open ones → check them off with the fix commit. Honesty laws: never
419
419
  * fabricate findings, never rewrite the file's history, never check a box
420
- * without the fix commit existing.
420
+ * without the fix commit existing (committed with the repo's configured
421
+ * identity, on the current branch — no invented identities or branches).
421
422
  */
422
423
  export function auditTarget(): string {
423
424
  return `Audit the project for real problems and fix them, iteration by iteration. Every iteration: (1) run a FRESH audit pass over the codebase — spawn Explore subagents for breadth — hunting real issues: bugs, broken flows, regressions, drift between docs and code, dead code, security holes. Not style nits, not speculative refactors. (2) Append every NEW finding as one checkbox line "- [ ] SEVERITY: short description (file:line)" to ${AUDIT_FINDINGS_REL} (create the file on the first finding; append-only — never delete, rewrite, or reorder existing lines; never re-report a finding already listed). (3) Fix the highest-severity OPEN finding(s) — real fixes, committed — then check the box: "- [x] … — fixed in <commit>". (4) Honesty law: never fabricate findings to look busy; never mark a finding fixed without the fix commit existing. When a full audit pass surfaces nothing new AND no open findings remain, say so plainly — the orchestrator counts open findings every iteration and the plateau stop ends the loop when the well is dry.`;
@@ -1602,6 +1602,12 @@ async function showDecisionPrompt(ctx: ExtensionContext): Promise<boolean> {
1602
1602
  if (!pick) return true; // Escape — the widget card remains the fallback
1603
1603
  const idx = options.indexOf(pick);
1604
1604
  const label = g.pauseOptions![idx] ?? pick.replace(/ {2}\(recommended\)$/, "");
1605
+ // v0.29.3: the wipe escape — "… (/glla wipe)" options run the wipe
1606
+ // (which Confirms on its own — destructive actions keep their gate).
1607
+ if (/\(\/glla wipe\)\s*$/.test(label)) {
1608
+ await cmdGllaWipe(ctx);
1609
+ return true;
1610
+ }
1605
1611
  // Executable options — "Label (/goal cancel)" — RUN the command.
1606
1612
  // Placeholder commands (…/<arg>) fall through to the message path.
1607
1613
  const cmdMatch = label.match(/\(\/(goal|list|loop) ([a-z]+)\)\s*$/);
@@ -5031,7 +5037,10 @@ export default function (pi: ExtensionAPI): void {
5031
5037
  if (next.length !== before) changed = true;
5032
5038
  }
5033
5039
  if (changed) pi.setActiveTools(next);
5034
- if (!toolHealNotified) {
5040
+ if (!toolHealNotified && missing.length > 0) {
5041
+ // v0.29.3: the notify used to fire even when NOTHING was missing —
5042
+ // "glla: 0 agent tool(s) were hidden … re-activated ()" at every pi
5043
+ // start (field-observed in darklord). Warn only on a real heal.
5035
5044
  toolHealNotified = true;
5036
5045
  const list = missing.join(", ");
5037
5046
  ctx.ui.notify(
@@ -5276,7 +5285,12 @@ export default function (pi: ExtensionAPI): void {
5276
5285
  updateGoal({
5277
5286
  status: "paused",
5278
5287
  pauseKind: "decision",
5279
- pauseOptions: ["Stop the loop, then resume the goal (/loop stop)", "Cancel the goal (/goal cancel) — the loop keeps running"],
5288
+ // v0.29.3: third option the wipe escape. Old projects stack a
5289
+ // goal AND a loop AND a list from pre-guard versions; arbitrating
5290
+ // between two artifacts the user doesn't even remember is the odd
5291
+ // part — "i feel like wipe does [make sense]". Wipe keeps its own
5292
+ // Confirm (destructive), so picking it is safe to offer.
5293
+ pauseOptions: ["Stop the loop, then resume the goal (/loop stop)", "Cancel the goal (/goal cancel) — the loop keeps running", "Wipe everything — clean slate for stale leftovers (/glla wipe)"],
5280
5294
  pauseRecommended: 1,
5281
5295
  pauseReason: "held on session load — the loop owns the active slot (one active thing at a time)",
5282
5296
  pauseSuggestedAction: "/loop to work the loop, or /loop stop then /goal resume to work the goal",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-goal-list-loop-audit",
3
- "version": "0.29.1",
3
+ "version": "0.29.3",
4
4
  "description": "Goal. Loop. Audit. Done. \u2014 a pi-coding-agent extension that supervises long-running work, with isolated auditor on each completion. Beat bamboozling by design: the auditor runs in a fresh session with no extensions, no skills, no editor \u2014 only the read tools needed to verify your goal.",
5
5
  "license": "MIT",
6
6
  "author": "dracon",
@@ -150,6 +150,7 @@ When the user must CHOOSE between paths, use `pause_goal` with `kind="decision"`
150
150
 
151
151
  - **Do not modify the objective silently.** The objective is the user's; if it has drifted from what makes sense, use `complete_goal`'s `newObjective` at completion time, or `pause_goal` and propose a `/goal tweak` mid-flight — never just work on something else and claim the original.
152
152
  - **Do not pretend completion.** If verification evidence is missing, call `pause_goal` instead of `complete_goal`.
153
+ - **Git discipline: never touch identity or branches.** Commit with the repo's configured identity exactly as-is — no `git config user.*`, no per-commit `git -c user.name=…` overrides, no invented identities like `<task>-agent <…@local>` (field-observed: a phase agent branded itself `phase-e-agent <phase-e@local>` and polluted the history). No creating or switching branches either — commit on the branch you found (usually `main`) and push to its upstream. If git refuses a commit for a missing identity, STOP and ask the user — never invent one.
153
154
  - **Do not polish doorknobs.** If you are out of work and the goal is satisfied, call `complete_goal` instead of inventing a side-improvement.
154
155
  - **Do not give up early.** If a task is hard, run it down properly. The auditor will catch doorknobs; the agent's job is to do the real work.
155
156
 
@@ -45,6 +45,8 @@ ${STRATEGY_NOTE}
45
45
  - Never repeat yourself: before acting, check what earlier iterations
46
46
  already did (git log / the artifacts themselves) and pick the next
47
47
  unaddressed piece of the spec.
48
+ - Git discipline: commit with the repo's configured identity as-is, on the
49
+ branch you found — never set `git config user.*` or invent an identity.
48
50
  - When the spec is genuinely, verifiably exhausted — every section
49
51
  addressed, every case handled — say so plainly in your reply instead of
50
52
  inventing cosmetic work. The user watches an honest loop gladly; a
@@ -44,6 +44,10 @@ ${STRATEGY_NOTE}
44
44
  - Do not modify the measure command or anything it reads for configuration;
45
45
  gaming the metric is bamboozling and the plateau detector will simply stop
46
46
  the loop.
47
+ - Git discipline: commit with the repo's configured identity as-is, on the
48
+ branch you found — never set `git config user.*`, never use per-commit
49
+ identity overrides, never invent `<task>-agent <…@local>` identities or
50
+ scratch branches.
47
51
  - The spec is ALIVE: if the target needs sharpening or the metric no longer
48
52
  captures "better", call propose_loop_refine with your rationale — the user
49
53
  confirms or rejects. Never game or silently abandon the metric; refine it.