emrg: list_tasks — merge static task config into status for GUI tasks panel + edit form - #1034
Conversation
…/config/sandbox) for GUI tasks panel + edit form
…chment adds 2 tests)
argszero
commented
Aug 27, 2026
Maintainer push: the doc-count guard caught a stale Agent.md count — the branch documented 1121 Python tests (its base was pre-#1029) but the 2 new list_tasks tests make the real total 1123. Merged master and bumped Agent.md to 1123 (bb043c3). Local verification on the merged tree: pytest 1122 passed + 1 skipped (1123), the 3 list_tasks tests pass. CI re-ran via the synchronize event. |
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM 1/3 — cycle 2026-08-27T09:56:27. Deep review after the maintainer fix:
- The change merges the task's static config (type/enabled/config/sandbox) from _handler_cfgs into list_tasks() status output — exactly what the GUI tasks panel + edit form need (TaskFormDialog from #1032 reads task.sandbox / task.config.project/repo, which were previously undefined → GUI fell back to evolution/defaults). This closes the R2245 data-shape gap.
- Keyed by handler.name, which matches how _handler_cfgs is populated in both the boot path (_start_handler) and hot-reload path (_start_handler_async). Pure in-memory — preserves the list_tasks I/O-free guarantee (rant 2026-08-18T20:48:45).
- Guards: cfg absent → status untouched (hot-reload race edge covered by test_list_tasks_without_cfg_leaves_status_untouched). Runtime fields survive the merge (test asserts running/interval intact).
- Fixed the doc-count guard: merged master, Agent.md Python count 1121 → 1123 (bb043c3) — the 2 new tests make the real total 1123, verified with pytest --collect-only and a full local run (1122 passed + 1 skipped).
- CI re-ran green on the fixed head (33031814013, test + test-windows).
No blocking issues. First vote (1/3).
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM 2/3 — cycle 2026-08-27T10:07:33. Independent re-verification: head unchanged (bb043c3, maintainer fix), CI run 33031814013 green (test + test-windows), MERGEABLE/CLEAN. Doc-count guard satisfied (Agent.md documents 1123). No new feedback since 1/3 (095627).
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM 3/3 — cycle 2026-08-27T10:25:09. Independent re-verification: head unchanged (bb043c3, maintainer fix), CI run 33031814013 green (test + test-windows), MERGEABLE/CLEAN. Design verified in 1/3 review (static task config merge into list_tasks for GUI tasks panel + edit form, pure in-memory, positive + negative tests). Three consecutive approvals from cycles 095627 → 100733 → 102509 with no blocking feedback. Merging.
Uh oh!
There was an error while loading. Please reload this page.
…ic config merge, renderer boot-chain contract guard, init() wiring fix, task panel polling) (#1039) Co-authored-by: EMRG Evolution <emrg@argszero.dev>
Summary
Fixes a daemon-side data-shape gap exposed while wiring the workspace tasks panel:
list_tasksreturned only runtime state (handler.status()), so the GUI never received the task's static config — the type badge always fell back to"evolution", enabled/project/repo/sandbox were undefined, and the edit form (PR #1032) prefilled wrong defaults in production.Change
TaskScheduler.list_tasks()now merges the task's static config from_handler_cfgs(the full tasks.yml entry, already held in memory) into each handler's status:type(e.g.journal,evolution)enabledconfig({project, repo, ...})sandboxPure in-memory merge — preserves the
list_tasksno-I/O contract (rant 2026-08-18T20:48:45). Handlers without a_handler_cfgsentry (hot-reload edge) are left untouched.This is the counterpart to #1032: the renderer edit form reads these exact fields, so together the pair makes task editing work end-to-end with real data.
Verification
test_list_tasks_includes_static_task_config(type/enabled/config/sandbox present, runtime fields survive),test_list_tasks_without_cfg_leaves_status_untouched(no decoration for unknown handlers)test_list_tasks_logs_slow_handlerstill passes (enrichment keeps the per-handler timing contract)Second commit (same PR)
push-branch-from-api.pyno-op bug found while pushing this PR during the github.com:443 outage (HTTPS down → Git Data API fallback): when an interrupted run uploads the commit objects + rewrites the local branch ref but dies before creating the remote ref, the retry's ancestor probe finds the tip object already present →base == local_tip→ the old code returnedno-op("nothing to do") without creating the ref — the branch never appeared. Fixed: the no-op shortcut now requires the ref to actually exist; when it doesn't, the script creates the ref directly (empty chain, no re-upload). Regression test added (test_push_creates_missing_ref_when_tip_object_already_present).