diff --git a/docs/dashboard.md b/docs/dashboard.md index 930ead20..19c8c4f2 100644 --- a/docs/dashboard.md +++ b/docs/dashboard.md @@ -28,7 +28,7 @@ order: | Tab | Sub-sections | Shows | |-----|--------------|-------| -| **Overview** | Summary · Health · Stats | Daemon status (OODA loop active / stopped), current cycle number, top-priority goal, last cycle's actions, and the recent-actions stream (**Summary**); system status — version, daemon state, active process count, disk usage — open PRs, open issues, and the **Machines & Memory Sharing** card, i.e. whether Simard runs on one machine or a group and how they share what they've learned (**Health**); and aggregate run counters and rollups (**Stats**). | +| **Overview** | Summary · Health · Stats | Daemon status (OODA loop active / stopped), current cycle number, top-priority goal, last cycle's actions, and the recent-actions stream (**Summary**); system status — version, daemon state, active process count, disk usage — per-PR **Merge Readiness** (the single Overview PR surface — the duplicative "Open PRs" card was removed, see [Overview → Health: Open PRs card removed](#overview-tab-health-open-prs-card-removed-26)), open issues, and the **Machines & Memory Sharing** card, i.e. whether Simard runs on one machine or a group and how they share what they've learned (**Health**); and aggregate run counters and rollups (**Stats**). | | **Goals** | Goals · Work Board | The full goal register — active top-N goals with priority, status, and current activity, plus the proposed backlog with promote/dismiss controls (**Goals**) — and the shared scratch canvas with Task Memory and Recent Actions (**Work Board**). | | **Activity** | Logs · Traces · Thinking · Failures | The **Background Service Log** (live activity from Simard's always-on background process), the cost ledger, and the **Cycle Reports** card — recent OODA cycles with their live cycle number, real per-cycle tree status, and Observe/Orient/Decide/Act detail, collapsed with a `×N` repeat-count and refreshed live, see [Activity: Cycle Reports](#activity-tab-logs-cycle-reports-26) — with a severity menu (All / Errors / Warnings / Info) and free-text search (**Logs**); recent agent traces from the cost ledger, journald, and in-process spans, plus OTEL status, each row read as plain language — **when**, **what**, **who** (**Traces**); the **Thinking** panel's two halves — a **Cycle History** table (collapsed per-cycle timeline with real timestamps, a `×N` repeat-count for runs of equivalent cycles, difference-carrying summaries, and a self-hiding duration-trend chart) and the **Agent Internal Reasoning** OODA Observe/Orient/Decide/Act breakdown, see [Thinking: Cycle History](#thinking-tab-cycle-history-21) (**Thinking**); and brain-fallback and decision failures (**Failures**). | | **Workers** | Processes · Engineers · Terminal | The live process tree under the daemon — engineer subprocesses, LLM sessions, tmux sessions, and their resource usage (**Processes** / **Engineers**) — and a browser-attached PTY into the daemon host (**Terminal**). | @@ -145,6 +145,21 @@ works. The transform is render-layer only: the canonical `brain` / `ooda_brain` strings, logs, and API responses are unchanged. See [Overview action-detail humanization](reference/dashboard-action-detail-humanization.md). +### Overview tab → Health: Open PRs card removed (#26) + +The **Health** sub-section previously carried two overlapping PR cards: a plain +**Open PRs** list and the richer **Merge Readiness** card. Everything the Open +PRs card showed (PR number, title, link) is a strict subset of Merge Readiness, +which additionally reports whether each PR can merge (CI rollup, base-branch +allow-list, objective merge-gate verdict, blocker reason, and the active +merge-judge kind). The duplicate **Open PRs** card has been **removed +completely** — its markup, its client renderer, and its `/api/activity` → +`open_prs` data producer (one fewer `gh pr list` subprocess per Overview +refresh). **Merge Readiness** is now the single Overview PR surface; the +**Pull Requests → Readiness** tab (`/api/prs`) is a separate view and is +unaffected. Full before/after and the `/api/activity` contract change are in the +[Open PRs card removal & live memory-consolidation reference](reference/dashboard-overview-health-and-live-memory.md). + ### Overview tab → Health: plain-English "Machines & Memory Sharing" card The **Health** sub-section's card that reports whether Simard is running on one @@ -335,6 +350,20 @@ holding thousands of facts told operators that memory was empty when it was rich. The panel now hides empty legacy tiles so the displayed numbers always match Simard's actual remembered state. +The **Last Memory Compaction** statistic in the same card now reflects **live** +consolidation state (#26). It previously derived from the modification time of +the retired JSON snapshot files, so it stayed frozen even while consolidation +ran (~30 `consolidate-memory` actions per 30 min; episodic memory growing +through the day). It now reads the most recent live consolidation signal — the +newest `consolidate-memory` OODA action timestamp — and shows `Not tracked yet` +when no such signal exists yet: it fails closed to `null` rather than fabricating +a value, with no legacy-file or directory-mtime fallback. `/api/memory` gains a +`recent_consolidation_activity` `{count, last}` summary, so the statistic visibly +advances as memory grows. This +is the same live-read reconciliation as the Activity and Goals tabs (#2697 / +#2695). See the +[Open PRs card removal & live memory-consolidation reference](reference/dashboard-overview-health-and-live-memory.md). + ## Feedback widget: report a bug / request a feature (#2629) Every tab carries a **Report bug / Request feature** control in the shared @@ -634,4 +663,5 @@ The `SIMARD_DASHBOARD_URL` environment variable is honored by `conftest.py` (def - [How to report a bug or request a feature from the dashboard](howto/report-a-bug-or-request-a-feature.md) - [Thinking tab — Cycle History (timestamps, collapse, duration trend)](reference/dashboard-thinking-cycle-history.md) - [Activity tab — Cycle Reports (live cycle number, accurate tree status, shared detail)](reference/dashboard-activity-cycle-reports.md) +- [Overview Health & live memory-consolidation (Open PRs card removal, live Last Memory Compaction)](reference/dashboard-overview-health-and-live-memory.md) - [Background tab prefetch and refresh (instant tab switches)](reference/dashboard-background-tab-prefetch.md) diff --git a/docs/index.md b/docs/index.md index ee2d385e..7f81279a 100644 --- a/docs/index.md +++ b/docs/index.md @@ -73,6 +73,7 @@ Terminal sessions and repo-grounded engineer runs now bridge through one explici - [Dashboard Chat reference](./reference/dashboard-chat.md) - Durable, resumable dashboard chat sessions: the on-disk `chat_sessions/` store, the `GET /api/chat/sessions[/{id}]` REST API, and the `/ws/chat` streaming protocol with non-streaming fallback (issue #2577). - [Thinking tab — Cycle History reference](./reference/dashboard-thinking-cycle-history.md) - The Thinking tab's first-half Cycle History: real per-cycle timestamps, consecutive-cycle collapse with a `×N` repeat-count and cycle range, difference-carrying row summaries, and a duration-trend chart that hides when data is absent — the `/api/ooda-cycles` contract and the relaxed `thinking_collapse` mode, with the second-half OODA reasoning breakdown preserved unchanged (#21). - [Activity tab — Cycle Reports reference](./reference/dashboard-activity-cycle-reports.md) - The Activity tab's Logs-sub-section Cycle Reports card: the live OODA cycle index (never a frozen `#1`), the real per-cycle working-tree status (clean vs. dirty, not a stale constant), per-cycle Observe/Orient/Decide/Act detail, and `×N` collapse — all read through the single shared cycle-report reader and strict collapse pass the Thinking tab's Agent Internal Reasoning view uses, and rendered through the same shared entry-renderer, with a 15 s live refresh, so the two views agree on the same data instead of one rendering a stale copy — the `/api/logs` → `cycle_reports` contract (#26). +- [Dashboard Overview Health & live memory-consolidation reference](./reference/dashboard-overview-health-and-live-memory.md) - Two dashboard component fixes (#26): the duplicative Overview → Health "Open PRs" card is removed (markup, client renderer, and the `/api/activity` → `open_prs` producer all gone), leaving the strictly-superset Merge Readiness card as the single Overview PR surface; and the Resources → Memory "Last Memory Compaction" statistic now reflects LIVE consolidation state — the newest `consolidate-memory` OODA action timestamp (or `Not tracked yet` when none exists yet — fails closed to null, no fabricated fallback) plus a new `recent_consolidation_activity` `{count, last}` on `/api/memory` — so it advances as episodic memory grows instead of showing a stale snapshot, reconciling with the Activity/Goals live-read fixes (#2697/#2695). - [Signal continuous conversation reference](./reference/signal-continuous-conversation.md) - One long-lived, durable meeting session per operator over Signal: the `signal_sessions/` store keyed via `operators.json`, `/new` (reset) · `/help` · `/close` lifecycle controls, resume-across-restart, and preserved Note-to-Self loop prevention (issue #2577). - [Terminal session idle detection](./reference/terminal-session-idle-detection.md) - How Simard determines when a PTY session is genuinely idle vs. silently computing. - [RustyClawd Bash-tool idle-liveness](./reference/rustyclawd-bash-tool-idle-liveness.md) - How the RustyClawd Bash tool replaced its wall-clock cap with idle-liveness (#2607) so a still-producing command is never SIGKILLed on elapsed time: the `SIMARD_RUSTYCLAWD_IDLE_LIVENESS_SECS` idle window (`0` = unbounded) and the audit of every wall-clock cap on agent/LLM work. diff --git a/docs/reference/dashboard-overview-health-and-live-memory.md b/docs/reference/dashboard-overview-health-and-live-memory.md new file mode 100644 index 00000000..d8df7a62 --- /dev/null +++ b/docs/reference/dashboard-overview-health-and-live-memory.md @@ -0,0 +1,314 @@ +--- +title: Dashboard — Open PRs card removal & live memory-consolidation display +description: Reference for two dashboard component fixes shipped for issue #26 — the duplicative Overview → Health "Open PRs" card is removed (its markup, its client renderer, and its /api/activity → open_prs data producer are all gone), leaving the strictly-superset Merge Readiness card as the single Overview PR surface; and the Resources → Memory "Last Memory Compaction" statistic now reflects LIVE consolidation state (real last-consolidation timestamp and a recent-activity count sourced from the live cognitive store and the consolidate-memory OODA action stream) instead of a stale snapshot derived from legacy JSON file mtimes. +last_updated: 2026-07-06 +owner: simard +doc_type: reference +related: + - ../dashboard.md + - ./dashboard-activity-cycle-reports.md + - ./dashboard-goal-lifecycle-status.md + - ./cognitive-memory-client-helpers.md + - ../memory.md +--- + +# Dashboard — Open PRs card removal & live memory-consolidation display + +Reference documentation for two Simard dashboard component fixes shipped for +[issue #26](https://github.com/rysweet/Simard/issues/26). Both are **data** +fixes to already-existing Overview/Resources cards, not new surfaces: + +1. **Open PRs card removed.** The Overview → **Health** sub-section carried two + overlapping PR cards — a plain **Open PRs** list and a richer **Merge + Readiness** card. The Open PRs card is a strict subset of Merge Readiness and + has been **removed completely** — markup, client renderer, and its + server-side data producer. Merge Readiness is the single Overview PR surface. +2. **Live memory-consolidation display.** The Resources → **Memory** + sub-section's **Last Memory Compaction** statistic showed a stale, frozen + value even while memory consolidation was actively running. It now reflects + **live** consolidation state, in the same live-read spirit as the Activity + and Goals tab fixes ([#2697](https://github.com/rysweet/Simard/issues/2697), + [#2695](https://github.com/rysweet/Simard/issues/2695)). + +| Fix | Surface | Location | Endpoint | Change | +|-----|---------|----------|----------|--------| +| 1 | Overview → Health | former `#open-prs-list` card (`index_html/part_00.rs`) | `GET /api/activity` → `open_prs` | **removed** (card + renderer + data key) | +| 2 | Resources → Memory | `#mem-overview` "Last Memory Compaction" stat (`index_html/part_02.rs`) | `GET /api/memory` → `last_consolidation`, `recent_consolidation_activity` | **now live** | + +> **Not touched.** The **Merge Readiness** card (`GET /api/merge-readiness`, +> `merge_readiness.rs`) and the **Pull Requests → Readiness** tab +> (`GET /api/prs`, `pr_readiness.rs`) are independent surfaces with their own +> data paths. Both keep working unchanged. The identically-named `open_prs` +> array inside the `/api/merge-readiness` payload is a **different object** from +> the removed `/api/activity` → `open_prs` and is untouched. + +--- + +## Fix 1 — Open PRs card removed + +### Why + +The Overview → **Health** sub-section previously rendered two PR cards side by +side: + +- **Open PRs** — a flat list of the operator's own open PRs (`#N`, title, age), + produced by `gh pr list --author @me` and surfaced at `/api/activity` under + the `open_prs` key. +- **Merge Readiness** — a per-PR readiness card (CI status-check rollup, base + branch allow-list, objective merge-gate verdict, blocker reason, and the + active merge-judge kind), produced by `/api/merge-readiness`. + +Every datum the Open PRs card showed (PR number, title, URL) is **also** present +in the Merge Readiness card, which additionally shows *whether each PR can +merge*. The Open PRs card carried **no unique useful information**, so it was a +duplicate that added visual noise and an extra `gh` invocation per Overview +refresh. It has been removed cleanly rather than folded, because there was +nothing to fold. + +### What changed + +The removal is surgical and additive-safe — it deletes only the Open PRs +surface and its now-dead data producer, and leaves the rest of the Overview +Health layout (Merge Readiness, System Status, Cognition: Recall Precision, Open +Issues, Machines & Memory Sharing) intact. + +**Client (removed):** + +- The card markup in `index_html/part_00.rs`: + ```html +