Repository navigation
feat(tasks): close the gaps found building a Q4 roadmap with the CLI - #121
Conversation
## Summary Building a full roadmap on live with only the CLI and the skill (5 identities, 103 tasks) exposed CLI-side defects and missing flags. This fixes them and documents the rest. ## Change Log - tasks timeline: the door answers ONE document (window, bands, rows, ...), not a paged list; the CLI read it as a list and printed nothing. Now renders goals + dated work, JSON passes the document through, --include-unscheduled added, dead paging flags removed - saved views: If-Match sends the strong form of a weak ETag; tasks view update no longer puts agent_name in the body (the door rejects it) - task create: --start-date, --estimate, --parent, --label (attached through the label door, failure names the created task in text and in the --json envelope) - task update: --start-date, --estimate, --milestone, --clear-milestone - board states / mentionables: readable at 80 columns (no truncated names or tokens) - errors: throttled (retry_after in the JSON envelope and the human message), task_archived, project_name_conflict, milestone_not_on_project - help: view save documents the view object; task move says a cross-board move gives a new key - README rows updated ## Risks - print_tasks_rows gained a minimum width for text columns and hides all-empty columns on request; asserted by the existing table tests plus new 80-column tests - tasks timeline lost --page/--page-size/--limit (they never reached the wire) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This comment has been minimized.
This comment has been minimized.
## Change Log - task create: a label failure after the create exits with the documented partial-write code (1), says once that the task exists (text and --json message) and no longer prints a second generic error - task create: blank --label values (empty, commas only) make no label call - task create/update: --due is typed like --start-date, so a bad date exits 2 locally - throttled: the wait hint appears once (exact seconds when known, a generic nudge otherwise) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
AI review for
|
There was a problem hiding this comment.
Code review — 0 finding(s): 0 critical · 0 warning · 0 info
Check: ✅ passing — strictness block-on-critical: highest severity none ≤ critical threshold
No findings posted inline.
Summary
Verdict
Prior review findings are addressed. The follow-up commit fixes the doubled throttle copy, the partial-write exit path, typed --due, and blank --label no-ops, with tests that lock each one in.
What changed since last review
throttledmessage — base copy no longer includes a wait sentence;_throttle_hintappends eitherTry again in Ns.or the generic wait once on human 429s. JSON still carriesretry_afterwhen known.- Label attach after create — failures exit with
EXIT_PARTIAL_WRITE(1), print one human message that names the existing task (and the server reason), and under--jsonemitcreated_taskwithout going throughexit_for_tasks_error(which was stacking a second print and the wrong exit-code path). --due— sameTASK_DATE_TYPEas--start-dateon create and update; invalid dates exit 2 locally before any client call.- Blank labels —
_split_labelsruns first; empty / comma-only values skip the label door entirely.
Residual notes (not blocking)
The label-failure path no longer funnels through exit_for_tasks_error, so a rare 429 on the label door omits retry_after from the JSON envelope and the human wait hint. Exit stays 1 by design (task already exists). Worth a follow-up only if agents need throttle metadata on that partial path.
Release decision
Recommendation: approve
Since last review (c09c008 → de93a5c): resolved 4 · still open 0 · regressed 0 · new 0 · 4 auto-retired (fix corroborated; thread already collapsed).
Prior findings
- retired
dailybot_cli/commands/task.py:646(verified_fixed) - retired
dailybot_cli/commands/public_api_helpers.py:856(verified_fixed) - retired
dailybot_cli/commands/task.py:593(verified_fixed) - retired
dailybot_cli/commands/task.py:520(verified_fixed)
Check status: ✅ passing — strictness
block-on-critical, highest severity in effectnone: highest severitynone≤ critical threshold.This line is written by the reviewer runtime after the gate ran and matches the check conclusion and the tracking comment. Any recommendation above is the model's advisory opinion, not the gate.
Summary
I built a full Q4 roadmap on a live org using only the CLI and the Dailybot skill, with one admin and four member identities (5 goals, 6 projects, 7 boards, 20 milestones, 103 tasks, comments, relations, attachments, updates, views). Everything worked except the defects below. This PR fixes the CLI-side ones. The server-side ones were fixed by the API agent in the API repo and are re-verified here against a local API.
What changed
tasks timelineprinted nothing. The door answers one document (window,bands,rows,dependencies,unscheduled,truncated); the CLI read it as a paged list. It now renders the goals that overlap the window and the dated work,--jsonpasses the document through,--include-unscheduledis new, and the paging flags that never reached the wire are gone.If-Matchsends the strong form of a weak ETag, andtasks view updateno longer putsagent_namein the body (the door rejects it).view savehelp now documents the view object.task create:--start-date,--estimate,--parent,--label. Labels attach through the label door right after the create; if that step fails the message and the--jsonenvelope (created_task) say the task exists, so nobody re-runs the create.task update:--start-date,--estimate,--milestone,--clear-milestone(single PATCH,milestone_not_on_projectexplained).board statesandboard mentionablesno longer truncate names or the mention token.throttled(retry_afterin the JSON envelope and the message),task_archived,project_name_conflict.task move --helpsays a cross-board move gives the task a new key (its uuid never changes).Verification
pytest: 3147 passed.ruff check,ruff format --check,mypy dailybot_cli: clean.retry_after.--milestone), a 53-step capability matrix per user and a 60-command sweep passed, and all 15 gaps re-checked.Gap status (local API, five profiles)
duplicate --include owner500agent_nameontasks view updateproject create --healthignoredbulk createdrops labelstasks timelineemptyretry_afterRelease
User-facing CLI changes, so this should release normally (MINOR); no
[skip release].🤖 Generated with Claude Code