pi-goal-list-loop-audit 0.38.32 → 0.38.33

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.38.33 — findings.md indent convention normalized (2026-09-08)
4
+
5
+ ### Fixed
6
+ - Indented checkboxes now count and queue identically across all four findings.md readers (DECIDED 2026-09-08: normalize). The fan-out parser already queued indented boxes while `countOpenAuditFindings`, `topOpenAuditFinding`, and the `auditMeasureCmd` shell grep ignored them — metric, reprieve, and queue disagreed. All three counters accept optional leading indent, mirroring the fan-out shape; the reprieve strips the indent, never the text.
7
+ - Regression coverage in `tests/loop-forever.test.ts` (four-reader agreement + indent-strip pins; the exact-string measure pin and closed-FIX count updated); `tsc` clean.
8
+
3
9
  ## 0.38.32 — migrate-on-read backfill for pre-v0.38.21 audit histories (2026-09-08)
4
10
 
5
11
  ### Fixed
package/docs/INDEX.md CHANGED
@@ -18,7 +18,7 @@ For shipped docs, the relevant entry points are:
18
18
  failback; v0.35.9 hardened cross-version npm tarball checks; v0.35.10
19
19
  handles multi-entry npm dry-run reports; v0.35.11 accepts both npm report
20
20
  shapes; v0.35.12 supports npm 12's keyed pack reports; v0.35.13 fixes stale-API recovery loops.
21
- v0.35.14–v0.38.32 continue through the supervisor freeze (`/glla pause`),
21
+ v0.35.14–v0.38.33 continue through the supervisor freeze (`/glla pause`),
22
22
  load hold, auditor picker parity, Windows launch fix, zombie-watchdog
23
23
  subagent carve-out, due-wait backstop, the `/glla agents` visibility panel,
24
24
  durable state-root selection, blank-until-resume auditor context, frozen
@@ -574,7 +574,7 @@ export function auditMeasureCmd(): string {
574
574
  // no fix commit — counting them as "closed findings" inflated the
575
575
  // monotonic metric without any fix landing and delayed the dry-well
576
576
  // plateau stop.
577
- return `c=$(grep -cE '^- \\[[xX]\\] FIX' ${AUDIT_FINDINGS_REL} 2>/dev/null); echo \${c:-0}`;
577
+ return `c=$(grep -cE '^[[:space:]]*- \\[[xX]\\] FIX' ${AUDIT_FINDINGS_REL} 2>/dev/null); echo \${c:-0}`;
578
578
  }
579
579
 
580
580
  /**
@@ -598,12 +598,15 @@ export const AUDIT_PLATEAU_MAX_REPRIEVES = 2;
598
598
 
599
599
  /** v0.29.19: orchestrator-side count of OPEN audit findings — the honest
600
600
  * "is the well dry" signal for audit-loop plateau decisions. The plateau
601
- * stop means "the well is dry"; with K open boxes it is objectively not. */
601
+ * stop means "the well is dry"; with K open boxes it is objectively not.
602
+ * v0.38.33 (DECIDED 2026-09-08 normalize): optional leading indent counts —
603
+ * the fan-out parser already queues indented boxes, so the metric must see
604
+ * them too. Mirrors the fan-out open-box shape. */
602
605
  export function countOpenAuditFindings(cwd: string): number {
603
606
  try {
604
607
  const p = join(piGlaDir(cwd), "audit-loop/findings.md");
605
608
  if (!existsSync(p)) return 0;
606
- return readFileSync(p, "utf-8").split("\n").filter((l) => /^- \[[ \t]+\]/.test(l)).length;
609
+ return readFileSync(p, "utf-8").split("\n").filter((l) => /^\s*-\s*\[[ \t]+\]/.test(l)).length;
607
610
  } catch {
608
611
  return 0;
609
612
  }
@@ -615,10 +618,11 @@ export function topOpenAuditFinding(cwd: string): string | null {
615
618
  try {
616
619
  const p = join(piGlaDir(cwd), "audit-loop/findings.md");
617
620
  if (!existsSync(p)) return null;
618
- const line = readFileSync(p, "utf-8").split("\n").find((l) => /^- \[[ \t]+\]/.test(l));
621
+ const line = readFileSync(p, "utf-8").split("\n").find((l) => /^\s*-\s*\[[ \t]+\]/.test(l));
619
622
  // v0.38.30 audit: strip with the same [ \t]+ class as the matcher
620
623
  // (an aligned `- [ ]` box used to leak markup into the reprieve note).
621
- return line ? line.replace(/^- \[[ \t]+\]\s*/, "").trim().slice(0, 120) : null;
624
+ // v0.38.33: strip the optional indent the matcher accepts, same shape.
625
+ return line ? line.replace(/^\s*-\s*\[[ \t]+\]\s*/, "").trim().slice(0, 120) : null;
622
626
  } catch {
623
627
  return null;
624
628
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-goal-list-loop-audit",
3
- "version": "0.38.32",
3
+ "version": "0.38.33",
4
4
  "description": "Mission control for autonomous pi: interview-drafted goals, an audited task queue, and forever-loops (metric, spec, project-audit) that run for hours. A detached extension-less auditor process re-verifies every completion with raw evidence without holding the main pi turn; confirmed drafts, decision pauses and consent gates keep you in charge.",
5
5
  "license": "AGPL-3.0-only",
6
6
  "author": "dracon",