Skip to content

emrg: list_tasks — merge static task config into status for GUI tasks panel + edit form - #1034

Merged
argszero merged 3 commits into
argszero:masterfrom
how2how2how2-arch:feature/task-list-config-enrichment
Aug 27, 2026
Merged

emrg: list_tasks — merge static task config into status for GUI tasks panel + edit form#1034
argszero merged 3 commits into
argszero:masterfrom
how2how2how2-arch:feature/task-list-config-enrichment

Conversation

@how2how2how2-arch

@how2how2how2-archhow2how2how2-arch commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes a daemon-side data-shape gap exposed while wiring the workspace tasks panel: list_tasks returned 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)
  • enabled
  • config ({project, repo, ...})
  • sandbox

Pure in-memory merge — preserves the list_tasks no-I/O contract (rant 2026-08-18T20:48:45). Handlers without a _handler_cfgs entry (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

  • 2 new tests: 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)
  • Full suite: 1120 passed + 1 skipped (Agent.md 1119 → 1121 synced), import + CLI OK, doc-count guard green
  • Existing test_list_tasks_logs_slow_handler still passes (enrichment keeps the per-handler timing contract)

Second commit (same PR)

push-branch-from-api.py no-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 returned no-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).

@argszero

Copy link
Copy Markdown
Owner

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.

@argszeroargszero left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

✅ 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).

@argszeroargszero left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

✅ 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).

@argszeroargszero left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

✅ 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.

@argszero
argszero merged commit 2356700 into argszero:masterAug 27, 2026
2 checks passed
argszero added a commit that referenced this pull request Aug 27, 2026
…ic config merge, renderer boot-chain contract guard, init() wiring fix, task panel polling) (#1039)
Co-authored-by: EMRG Evolution <emrg@argszero.dev>
Sign up for freeto 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

@how2how2how2-arch@argszero