pi-goal-list-loop-audit 0.38.37 → 0.38.38

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,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.38.38 — elapsed-time duplication cut + PR #47 closed (2026-09-09)
4
+
5
+ ### Fixed
6
+
7
+ - **Elapsed time in two places (field 20260909_002132):** the `setStatus` one-liner no longer carries `total …` on the idle/busy/working branches — other sessions' tab strips showed `glla: [WORKING] total …` under a card already reading it. The card head keeps the timer unconditionally; state + task/queue counts stay on the status line. (`Chrome Bridge`/`(indefinite)` framing is pi core, not GLLA — only our timer text was cut.)
8
+ - **PR #47 triage:** KV-cache checkpoint complaint verified real on main but the strip shape is unsafe as-is (post-compaction blindness, no compensating pointer) — replied per-piece, gave the contributor a merge-based re-sync command, closed without merging per the #45/#46 precedent (live `active.jsonl`, 39-behind divergence, bundled features). Per-task audits stay held pending cost review.
9
+
10
+ ### Verification
11
+
12
+ - New pins: status-without-timer + card-keeps-timer; full `release:check` 0 failures; `tsc --noEmit` clean.
13
+ - Evidence: `audit/ELAPSED-DUPLICATION-PR47-2026-09-09.md`. No open PRs.
14
+
3
15
  ## 0.38.37 — bullets + deliberate non-do (2026-09-09)
4
16
 
5
17
  ### 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.37 continue through the supervisor freeze (`/glla pause`),
21
+ v0.35.14–v0.38.38 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
@@ -1323,8 +1323,11 @@ function buildStatusTextBase(state: State, audit?: AuditDisplayProgress | null,
1323
1323
  // state + counts only. Freshness tails (`last host activity`,
1324
1324
  // `last stream`) duplicated the card-head `stream {age}` readout —
1325
1325
  // one surface owns liveness so the two can never disagree.
1326
+ // v0.38.38 (field 20260909_002132): the elapsed `total …` duplicated
1327
+ // the card head too (other sessions' tab strips showed
1328
+ // `glla: [WORKING] total …` under a card already reading it) — the
1329
+ // card owns the timer now; the status line keeps state + counts.
1326
1330
  const idleDetails = [
1327
- goalTotalText(g, now),
1328
1331
  (state.list?.length ?? 0) > 0 ? `${state.list!.length} queued` : "",
1329
1332
  ].filter(Boolean);
1330
1333
  return `glla: ${activityStateBadge("IDLE", theme, "warning")}${idleDetails.length > 0 ? ` ${idleDetails.join(" · ")}` : ""}${heldSuffix}`;
@@ -1335,7 +1338,6 @@ function buildStatusTextBase(state: State, audit?: AuditDisplayProgress | null,
1335
1338
  // like progress. Queued work is neither idle nor currently executing.
1336
1339
  if (activity === "busy") {
1337
1340
  const busyDetails = [
1338
- goalTotalText(g, now),
1339
1341
  g.taskList ? `${countDone(g)}/${countTotal(g)} tasks` : "",
1340
1342
  (state.list?.length ?? 0) > 0 ? `${state.list!.length} queued` : "",
1341
1343
  ].filter(Boolean);
@@ -1370,11 +1372,11 @@ function buildStatusTextBase(state: State, audit?: AuditDisplayProgress | null,
1370
1372
  const recovery = state.mainModelRecovery;
1371
1373
  const blockedByRecovery = queued && recovery && recovery.retryAt;
1372
1374
  const recoverySuffix = blockedByRecovery ? ` · parked on provider recovery` : "";
1373
- // Keep the screenshot-proven order: state, elapsed, freshness, then
1374
- // queue/task context. It scans like a compact instrument readout and
1375
- // remains useful when the above-editor card is hidden or scrolled away.
1375
+ // Keep the screenshot-proven order: state, then queue/task context.
1376
+ // It scans like a compact instrument readout and remains useful when
1377
+ // the above-editor card is hidden or scrolled away. Elapsed `total …`
1378
+ // lives on the card head only (v0.38.38, field 20260909_002132).
1376
1379
  const details = [
1377
- goalTotalText(g, now),
1378
1380
  g.taskList ? `${countDone(g)}/${countTotal(g)} tasks` : "",
1379
1381
  // v0.34.124: the QUEUED "why" — an accepted dispatch that pi has not
1380
1382
  // started. (The last-activity age that used to ride here moved to the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-goal-list-loop-audit",
3
- "version": "0.38.37",
3
+ "version": "0.38.38",
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",