Skip to content

emrg: GUI rant panel + list_rants daemon command (rant 2026-08-13T14:10:14 P4) - #750

Merged
argszero merged 1 commit into
masterfrom
feature/gui-rant-panel
Aug 13, 2026
Merged

emrg: GUI rant panel + list_rants daemon command (rant 2026-08-13T14:10:14 P4)#750
argszero merged 1 commit into
masterfrom
feature/gui-rant-panel

Conversation

@argszero

Copy link
Copy Markdown
Owner

GUI redesign (host rant 2026-08-13T14:10:14) — P4 rant panel.

The sidebar Rant nav entry now opens a functional rant management panel (previously a placeholder).

Daemon (new capability)

  • list_rants command: reads ~/.emrg/rants.jsonl, optional status filter (pending / in_progress / completed / "" = all), newest-first order, corrupt lines skipped, missing file → empty list (never crashes). Response frame rants_list.

GUI

  • Rant panel with 4 status filter tabs (全部/待处理/进行中/已完成) — each re-queries the daemon with the status param.
  • List rows: timestamp + status badge (zh/en) + project + progress snippet; clicking a row expands a detail section with full message + full progress.
  • 新建 Rant form: project dropdown (listProjects) + message textarea → sendRant (existing IPC), success toast + list refresh.
  • openRantsPanel() lazy-loads on nav open (same pattern as P3/P5 panels); i18n zh/en rants.* keys (incl. data-i18n-placeholder for the textarea, satisfying the Stage-3 Chinese-string guard).

IPC chain

  • main.js emrg:listRants handler + preload.js listRants; daemon_client.js RESPONSE_TYPES list_rants → rants_list.

Tests

  • +2 pytest (list_rants filter/order/corrupt-skip + missing-file): 777→779.
  • +1 renderer smoke (list + status badges + detail expand + filter passthrough + new-rant submit): GUI 235→236 (renderer smoke 113→114).
  • +1 assertion in RESPONSE_TYPES mirror test (list_rants → rants_list).
  • 779 pytest + 236 GUI + import + CLI + doc-count guard all green locally; CI pending.

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle (1/3)

Reviewed the full diff for P4 (rant panel) of the GUI redesign (rant 14:10:14):

  • Daemon list_rants: reads rants.jsonl with optional status filter, newest-first, corrupt lines skipped, missing file → empty — 2 pytest tests cover filter/order/corrupt/missing.
  • GUI panel: 4 status filter tabs (re-query with status param), rows with timestamp + status badge + project + progress snippet, click-to-expand detail (full message + progress), new-rant form (project dropdown + sendRant reuse).
  • IPC chain complete: main.js handler + preload + RESPONSE_TYPES list_rants → rants_list (+1 mirror-test assertion); lazy-load on nav open matches P3/P5 pattern; i18n zh/en incl. data-i18n-placeholder (Stage-3 guard satisfied).
  • Verified locally: 779 pytest + 236 GUI + import + CLI + doc-count guard green; CI test + test-windows PASS (31679974507), mergeStateStatus CLEAN.

@pm25coder

Copy link
Copy Markdown
Contributor

Tested this PR end-to-end on Windows — implementation is solid and everything works as described:

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle (2/3)

Reviewed full diff for P4 (GUI rant panel + list_rants, rant 14:10:14, 367+/5-):

  • daemon: list_rants reads _rants_log (daemon.py:176, same file the rant command writes), optional status filter ('' = all, old entries default 'pending'), newest-first sort, corrupt lines skipped, OSError → empty + error frame. +2 tests (filter+order+corrupt-skip, missing-file).
  • main.js: emrg:listRants IPC with status validation + 5s timeout; preload/daemon_client wiring; RESPONSE_TYPES list_rants→rants_list (protocol mirrored + tested).
  • renderer: rant panel with 4 filter tabs, list rows (timestamp/status badge/project/progress), click-to-expand detail (row.after — test stub updated to real sibling insert), new-rant form (project dropdown via listProjects + sendRant), openRantsPanel follows openTasksPanel pattern.
  • i18n: 17 zh/en keys, consistent naming.
  • Verified: 2 new daemon tests pass, 779 pytest collected, npm test 236/236 pass, node --check OK, doc-count guard green, CI test+test-windows SUCCESS (31679974507), mergeStateStatus CLEAN.

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle (3/3)

Third independent-cycle approval. Head 04d55df unchanged; CI test + test-windows PASS (31679974507), mergeStateStatus CLEAN. P4 rant panel + list_rants daemon command, 779 pytest + 236 GUI. Reached 3 consecutive ✅ — merging.

@argszero
argszero merged commit 1f4fa57 into master Aug 13, 2026
2 checks passed
pm25coder pushed a commit to pm25coder/emrg that referenced this pull request Aug 13, 2026
argszero pushed a commit that referenced this pull request Aug 13, 2026
* emrg: evolution_prompt quick-ref — add #750 GUI rant panel entry

* emrg: quick-ref #750 — fix i18n key count 20 -> 19 per review

---------

Co-authored-by: EMRG Evolution <emrg@argszero.dev>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants