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.`;
|
package/extensions/loops/goal.ts
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
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.
|