taskledger 0.1.0__tar.gz → 0.1.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {taskledger-0.1.0 → taskledger-0.1.2}/API.md +27 -1
- taskledger-0.1.2/CHANGELOG.md +63 -0
- {taskledger-0.1.0/taskledger.egg-info → taskledger-0.1.2}/PKG-INFO +35 -5
- {taskledger-0.1.0 → taskledger-0.1.2}/README.md +34 -4
- {taskledger-0.1.0 → taskledger-0.1.2}/docs/api.rst +15 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/docs/architecture_taskledger_split.rst +4 -4
- {taskledger-0.1.0 → taskledger-0.1.2}/docs/command_contract.rst +56 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/docs/full_task_cycle.rst +31 -4
- {taskledger-0.1.0 → taskledger-0.1.2}/docs/public_surface.rst +16 -5
- {taskledger-0.1.0 → taskledger-0.1.2}/docs/usage.rst +63 -1
- {taskledger-0.1.0 → taskledger-0.1.2}/pyproject.toml +1 -1
- {taskledger-0.1.0 → taskledger-0.1.2}/skills/taskledger/SKILL.md +50 -9
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/__main__.py +2 -2
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/_version.py +3 -3
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/api/__init__.py +1 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/api/plans.py +2 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/api/questions.py +2 -0
- taskledger-0.1.2/taskledger/api/releases.py +15 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/api/task_runs.py +2 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/api/tasks.py +6 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/cli.py +156 -6
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/cli_implement.py +58 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/cli_misc.py +46 -1
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/cli_plan.py +32 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/cli_question.py +138 -9
- taskledger-0.1.2/taskledger/cli_release.py +162 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/cli_task.py +153 -7
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/command_inventory.py +10 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/domain/models.py +81 -1
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/domain/states.py +3 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/errors.py +5 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/exchange.py +27 -0
- taskledger-0.1.2/taskledger/launcher.py +25 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/services/doctor.py +51 -7
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/services/handoff.py +109 -1
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/services/navigation.py +369 -58
- taskledger-0.1.2/taskledger/services/releases.py +560 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/services/serve_read_model.py +170 -59
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/services/tasks.py +952 -78
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/storage/common.py +3 -3
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/storage/init.py +4 -1
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/storage/paths.py +2 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/storage/task_store.py +61 -1
- {taskledger-0.1.0 → taskledger-0.1.2/taskledger.egg-info}/PKG-INFO +35 -5
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger.egg-info/SOURCES.txt +8 -0
- taskledger-0.1.2/taskledger.egg-info/entry_points.txt +2 -0
- taskledger-0.1.2/tests/test_cli_import_resilience.py +162 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_command_inventory.py +4 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_delta_remaining_contracts.py +498 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_docs_and_skill.py +6 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_doctor.py +65 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_models_v1_schema.py +27 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_plan_approval_contract.py +42 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_plan_lint.py +162 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_project_root_config.py +3 -3
- taskledger-0.1.2/tests/test_question_add_many.py +160 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_question_plan_regeneration.py +114 -0
- taskledger-0.1.2/tests/test_release_changelog.py +675 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_storage_bundle_layout.py +1 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_storage_common.py +2 -1
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_storage_init.py +1 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_taskledger_cli_api_parity.py +12 -1
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_taskledger_v2_cli.py +843 -0
- taskledger-0.1.2/tests/test_taskledger_v2_exchange.py +373 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_todo_implementation_gate.py +80 -0
- taskledger-0.1.0/taskledger.egg-info/entry_points.txt +0 -2
- taskledger-0.1.0/tests/test_taskledger_v2_exchange.py +0 -143
- {taskledger-0.1.0 → taskledger-0.1.2}/.codecrate.toml +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/.github/workflows/codecov.yml +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/.github/workflows/pre-commit.yml +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/.github/workflows/python-publish.yml +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/.github/workflows/tests.yml +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/.gitignore +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/.pre-commit-config.yaml +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/.readthedocs.yaml +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/.ruff.toml +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/.taskledger.toml +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/AGENTS.md +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/LICENSE +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/docs/Makefile +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/docs/build.sh +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/docs/conf.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/docs/index.rst +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/docs/multi_repo.rst +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/docs/requirements.txt +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/setup.cfg +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/setup.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/__init__.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/api/handoff.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/api/introductions.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/api/locks.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/api/project.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/api/search.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/cli_actor.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/cli_common.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/cli_migrate.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/cli_validate.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/domain/__init__.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/domain/policies.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/ids.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/py.typed +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/search.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/services/__init__.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/services/actors.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/services/dashboard.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/services/handoff_lifecycle.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/services/phase5_lock_transfer.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/services/plan_lint.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/services/validation.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/services/web_dashboard.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/storage/__init__.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/storage/atomic.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/storage/events.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/storage/frontmatter.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/storage/indexes.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/storage/locks.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/storage/meta.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/storage/migrations.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/storage/project_config.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/storage/repos.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger/timeutils.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger.egg-info/dependency_links.txt +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger.egg-info/requires.txt +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/taskledger.egg-info/top_level.txt +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/conftest.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_active_task.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_actor_harness_state.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_agent_session_protocol.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_cli_command_contract.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_command_example_linter.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_domain_policies.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_events.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_handoff_lifecycle.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_implementation_change_scan.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_json_contracts.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_legacy_cleanup_contracts.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_lifecycle_policies.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_locks_audit.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_plan_todo_materialization.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_question_filter_answers.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_search.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_serve_dashboard.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_services_dashboard.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_sidecar_collections.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_storage_migration.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_storage_repos.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_task_events.py +0 -0
- {taskledger-0.1.0 → taskledger-0.1.2}/tests/test_tasks_service_static.py +0 -0
|
@@ -11,6 +11,7 @@ This repository exposes a task-first public API. The supported modules are:
|
|
|
11
11
|
- `taskledger.api.introductions`
|
|
12
12
|
- `taskledger.api.locks`
|
|
13
13
|
- `taskledger.api.handoff`
|
|
14
|
+
- `taskledger.api.releases`
|
|
14
15
|
- `taskledger.api.search`
|
|
15
16
|
|
|
16
17
|
## Import boundary
|
|
@@ -66,7 +67,9 @@ from taskledger.errors import (
|
|
|
66
67
|
- `show_task`
|
|
67
68
|
- `edit_task`
|
|
68
69
|
- `cancel_task`
|
|
70
|
+
- `uncancel_task`
|
|
69
71
|
- `close_task`
|
|
72
|
+
- `create_follow_up_task`
|
|
70
73
|
- `add_requirement`
|
|
71
74
|
- `remove_requirement`
|
|
72
75
|
- `waive_requirement`
|
|
@@ -83,11 +86,13 @@ from taskledger.errors import (
|
|
|
83
86
|
- `can_perform`
|
|
84
87
|
- `reindex`
|
|
85
88
|
- `repair_task_record`
|
|
89
|
+
- `repair_orphaned_planning_run`
|
|
86
90
|
|
|
87
91
|
### `taskledger.api.plans`
|
|
88
92
|
|
|
89
93
|
- `start_planning`
|
|
90
94
|
- `propose_plan`
|
|
95
|
+
- `plan_template`
|
|
91
96
|
- `upsert_plan`
|
|
92
97
|
- `regenerate_plan_from_answers`
|
|
93
98
|
- `materialize_plan_todos`
|
|
@@ -103,6 +108,7 @@ from taskledger.errors import (
|
|
|
103
108
|
### `taskledger.api.questions`
|
|
104
109
|
|
|
105
110
|
- `add_question`
|
|
111
|
+
- `add_questions`
|
|
106
112
|
- `list_questions`
|
|
107
113
|
- `list_open_questions`
|
|
108
114
|
- `answer_question`
|
|
@@ -114,6 +120,7 @@ from taskledger.errors import (
|
|
|
114
120
|
|
|
115
121
|
- `start_implementation`
|
|
116
122
|
- `restart_implementation`
|
|
123
|
+
- `resume_implementation`
|
|
117
124
|
- `log_implementation`
|
|
118
125
|
- `add_implementation_deviation`
|
|
119
126
|
- `add_implementation_artifact`
|
|
@@ -192,6 +199,13 @@ Focused handoffs store the generated Markdown context snapshot in the handoff
|
|
|
192
199
|
record body and return compact metadata, including `context_hash` and
|
|
193
200
|
`context_path`.
|
|
194
201
|
|
|
202
|
+
### `taskledger.api.releases`
|
|
203
|
+
|
|
204
|
+
- `build_changelog_context`
|
|
205
|
+
- `list_release_records`
|
|
206
|
+
- `show_release`
|
|
207
|
+
- `tag_release`
|
|
208
|
+
|
|
195
209
|
### `taskledger.api.search`
|
|
196
210
|
|
|
197
211
|
- `search_workspace`
|
|
@@ -213,6 +227,7 @@ The public task-first CLI surface is organized around these command groups:
|
|
|
213
227
|
- `file`
|
|
214
228
|
- `link`
|
|
215
229
|
- `require`
|
|
230
|
+
- `release`
|
|
216
231
|
- `lock`
|
|
217
232
|
- `context`
|
|
218
233
|
- `handoff`
|
|
@@ -243,12 +258,23 @@ structured `error` object on failure.
|
|
|
243
258
|
Workflow additions:
|
|
244
259
|
|
|
245
260
|
- `task create` creates a task. Use `task activate TASK_REF` to make it active.
|
|
261
|
+
- `task follow-up PARENT_REF TITLE` creates a new draft child task linked to a
|
|
262
|
+
completed parent. Use it for small post-completion deltas instead of
|
|
263
|
+
reopening the done task.
|
|
264
|
+
- `plan template` and `question add-many` support faster plan drafting and batch
|
|
265
|
+
planning setup.
|
|
246
266
|
- `plan draft`, `plan upsert --from-answers`, and
|
|
247
267
|
`plan materialize-todos` support the question-answer-regenerate loop.
|
|
248
268
|
- `question status` reports required open questions and whether regeneration is
|
|
249
|
-
needed.
|
|
269
|
+
needed, including plan-template hints when answered questions require a plan update.
|
|
250
270
|
- `implement restart --summary ...` starts a new implementation run from
|
|
251
271
|
`failed_validation` while preserving the prior failed validation history.
|
|
272
|
+
- `implement resume --reason ...` reacquires an implementation lock for an
|
|
273
|
+
existing running implementation run after a lock break or other orphaned-lock
|
|
274
|
+
recovery.
|
|
275
|
+
- `task uncancel --reason ... [--to STAGE]` restores truly cancelled tasks to a
|
|
276
|
+
safe durable non-active stage; active work still resumes through the normal
|
|
277
|
+
stage-specific commands.
|
|
252
278
|
- `todo done` records evidence with `--evidence`, `--artifact`, and `--change`.
|
|
253
279
|
- `handoff create|list|show|claim|close|cancel` are available on the main
|
|
254
280
|
task-first handoff command group.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## v0.1.1 - 2026-04-29
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Added `task follow-up` to create linked post-completion child tasks, preserve closure metadata, and show parent and follow-up relationships in task and handoff views.
|
|
8
|
+
- Added durable release records and a new `taskledger release` command group with `tag`, `list`, `show`, and `changelog`, including export/import support and public API coverage.
|
|
9
|
+
- Added planning helpers with `question add-many`, `plan template`, richer regeneration hints in `next-action`, and recovery commands for orphaned implementation work with `implement resume`, `task uncancel`, and `can implement-resume`.
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- Hardened CLI startup so optional command-group import failures no longer block core commands, and launcher failures return structured diagnostics.
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- Fixed recovery guidance for uncancelled tasks with orphaned implementation runs so `next-action` and `can implement` recommend `implement resume` instead of a fresh start.
|
|
18
|
+
|
|
19
|
+
### Documentation
|
|
20
|
+
|
|
21
|
+
- Documented release tagging, changelog generation, planning helpers, follow-up task workflow, and recovery semantics across README, RST docs, API docs, and the taskledger skill.
|
|
22
|
+
|
|
23
|
+
### Quality
|
|
24
|
+
|
|
25
|
+
- Expanded regression coverage for follow-up tasks, release workflow, CLI import resilience, planning helpers, and implementation recovery. Repo-wide pytest, ruff, and mypy passed.
|
|
26
|
+
|
|
27
|
+
## v0.1.0 - 2026-04-29
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
|
|
31
|
+
- Added initial unit test coverage for `storage/common`, `storage/init`, `storage/repos`, `domain/policies`, and `services/doctor_v2`, raising overall coverage from 62% to 65%.
|
|
32
|
+
- Added a second coverage pass for storage memories, items, contexts, validation, and dashboard services, raising overall coverage to 73%.
|
|
33
|
+
- Added question status filtering plus `taskledger question answers` with markdown and JSON output.
|
|
34
|
+
- Added `taskledger plan lint`, stricter executable-plan linting, and approval gating for lint failures.
|
|
35
|
+
- Added focused worker contexts and durable handoff snapshots for implementer and reviewer workflows.
|
|
36
|
+
- Added richer `next-action` output with next item, command hints, and progress details.
|
|
37
|
+
- Added project-root config discovery and external storage roots via `taskledger.toml`.
|
|
38
|
+
- Added the localhost-only read-only `taskledger serve` dashboard.
|
|
39
|
+
- Added an explicit failed-validation recovery path with `taskledger implement restart`.
|
|
40
|
+
- Added compact single-agent workflow guidance and richer `todo next` and `todo show` hints.
|
|
41
|
+
|
|
42
|
+
### Changed
|
|
43
|
+
|
|
44
|
+
- Hardened agent guardrails by requiring reasons for approval escape hatches, blocking empty-todo approvals by default, and adding durable `plan command` execution.
|
|
45
|
+
- Finished agent-protocol hardening with stronger typed normalization, safer plan todo materialization, and automatic todo source inference from the active lock.
|
|
46
|
+
- Removed redundant derived task, plan-version, and latest-run indexes so Markdown bundles remain canonical and JSON indexes remain rebuildable caches.
|
|
47
|
+
- Completed the broader pre-release cleanup pass from `todo.md`, including public API export cleanup, stricter storage diagnostics, canonical module paths, normalized JSON command naming, and packaging cleanup.
|
|
48
|
+
- Extended the serve dashboard with a dedicated read model, recent-event tail loading, route caching, and non-overlapping partial refreshes for better hot-path performance.
|
|
49
|
+
- Redesigned the serve dashboard into a more human-focused layout with richer sidebar metadata, accessibility coverage, and updated docs.
|
|
50
|
+
- Improved dashboard review ergonomics and refresh stability with pause and resume controls, diffed rerenders, preserved details state, and lazy raw-payload rendering.
|
|
51
|
+
- Finished release-readiness cleanup by consolidating maintained docs under RST and keeping `skills/taskledger/SKILL.md` as the single canonical skill file.
|
|
52
|
+
|
|
53
|
+
### Fixed
|
|
54
|
+
|
|
55
|
+
- Fixed `taskledger view` so todo counts and item lists reflect persisted todos instead of always showing `0/0`.
|
|
56
|
+
- Fixed orphan slug-directory creation under `.taskledger/tasks/` and added repair support for existing bad directories.
|
|
57
|
+
- Fixed repo-wide pre-commit and mypy failures across more than twenty files.
|
|
58
|
+
- Fixed serve response handling so client disconnects no longer produce `BrokenPipeError` tracebacks.
|
|
59
|
+
- Fixed the serve dashboard todo-renderer JavaScript regression that broke refresh parsing.
|
|
60
|
+
|
|
61
|
+
### Quality
|
|
62
|
+
|
|
63
|
+
- Improved testing depth across storage, dashboard, lifecycle, and documentation surfaces to support release readiness and regression protection.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: taskledger
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Durable project-state storage and CLI for coding workflows
|
|
5
5
|
Author: Taskledger Contributors
|
|
6
6
|
Maintainer: Holger Nahrstaedt
|
|
@@ -40,6 +40,11 @@ Provides-Extra: rich
|
|
|
40
40
|
Requires-Dist: rich; extra == "rich"
|
|
41
41
|
Dynamic: license-file
|
|
42
42
|
|
|
43
|
+
[](https://pypi.org/project/taskledger/)
|
|
44
|
+

|
|
45
|
+

|
|
46
|
+
[](https://codecov.io/gh/holgern/taskledger)
|
|
47
|
+
|
|
43
48
|
# taskledger
|
|
44
49
|
|
|
45
50
|
`taskledger` is a task-first durable state layer for staged coding work. It keeps
|
|
@@ -74,7 +79,7 @@ The supported command surface is organized as:
|
|
|
74
79
|
|
|
75
80
|
**Project lifecycle:**
|
|
76
81
|
|
|
77
|
-
- `init`, `status`, `export`, `import`, `snapshot`
|
|
82
|
+
- `init`, `status`, `export`, `import`, `snapshot`, `release`
|
|
78
83
|
|
|
79
84
|
## Install
|
|
80
85
|
|
|
@@ -106,9 +111,10 @@ plan from answers, approve it, implement todos with evidence, and validate it:
|
|
|
106
111
|
taskledger task create "Rewrite V2" --slug rewrite-v2 --description "Migrate to the task-first design."
|
|
107
112
|
taskledger task activate rewrite-v2 --reason "Start planning"
|
|
108
113
|
taskledger plan start
|
|
109
|
-
taskledger question add --text
|
|
110
|
-
taskledger question answer-many --text
|
|
114
|
+
taskledger question add-many --required-for-plan --text $'Should exports include the new state?\nShould snapshots include implementation artifacts?'
|
|
115
|
+
taskledger question answer-many --text $'q-0001: Yes.\nq-0002: No.'
|
|
111
116
|
taskledger question status
|
|
117
|
+
taskledger plan template --from-answers --file ./plan.md
|
|
112
118
|
taskledger plan upsert --from-answers --file ./plan.md
|
|
113
119
|
taskledger plan lint --version 1
|
|
114
120
|
taskledger plan accept --version 1 --note "Ready."
|
|
@@ -150,6 +156,22 @@ taskledger context --for implementation --format markdown
|
|
|
150
156
|
taskledger implement restart --summary "Fix failed validation findings."
|
|
151
157
|
```
|
|
152
158
|
|
|
159
|
+
## Release tagging and changelog context
|
|
160
|
+
|
|
161
|
+
Use durable release tags to mark completed task boundaries and generate
|
|
162
|
+
provider-neutral changelog source packs from finished tasks:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
taskledger release tag 0.4.1 --at-task task-0030 --note "0.4.1 released"
|
|
166
|
+
taskledger release changelog 0.4.2 --since 0.4.1 --until-task task-0035 --output /tmp/taskledger-0.4.2-changelog-source.md
|
|
167
|
+
taskledger release show 0.4.1
|
|
168
|
+
taskledger release list
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
`release changelog` does not call an LLM API. It renders compact Markdown or JSON
|
|
172
|
+
from done tasks, implementation logs, code changes, and validation evidence so a
|
|
173
|
+
separate coding harness can draft the final human changelog.
|
|
174
|
+
|
|
153
175
|
`taskledger next-action` is the preferred fresh-context entrypoint. It stays
|
|
154
176
|
read-only and points at the next concrete question, todo, criterion, or repair
|
|
155
177
|
step.
|
|
@@ -254,6 +276,7 @@ records under the configured storage root:
|
|
|
254
276
|
taskledger.toml
|
|
255
277
|
.taskledger/
|
|
256
278
|
intros/
|
|
279
|
+
releases/
|
|
257
280
|
tasks/
|
|
258
281
|
events/
|
|
259
282
|
indexes/ # optional derived caches and registries
|
|
@@ -272,6 +295,7 @@ taskledger init --taskledger-dir /mnt/cloud/taskledger/project-a
|
|
|
272
295
|
```text
|
|
273
296
|
/home/me/src/project-a/taskledger.toml
|
|
274
297
|
/mnt/cloud/taskledger/project-a/storage.yaml
|
|
298
|
+
/mnt/cloud/taskledger/project-a/releases/
|
|
275
299
|
/mnt/cloud/taskledger/project-a/tasks/
|
|
276
300
|
/mnt/cloud/taskledger/project-a/events/
|
|
277
301
|
/mnt/cloud/taskledger/project-a/indexes/
|
|
@@ -395,13 +419,19 @@ taskledger snapshot ./artifacts
|
|
|
395
419
|
|
|
396
420
|
## Skill packaging
|
|
397
421
|
|
|
422
|
+
Agent workflows work best when the `taskledger` skill is installed in the
|
|
423
|
+
coding harness. The CLI has a task-first lifecycle with explicit planning,
|
|
424
|
+
approval, implementation, validation, locks, and handoff gates; without the
|
|
425
|
+
skill, an agent may not know the intended command sequence or gate semantics.
|
|
426
|
+
|
|
398
427
|
The canonical skill file lives at:
|
|
399
428
|
|
|
400
429
|
```text
|
|
401
430
|
skills/taskledger/SKILL.md
|
|
402
431
|
```
|
|
403
432
|
|
|
404
|
-
|
|
433
|
+
Keep this skill outside the Python package. No additional
|
|
434
|
+
`skills/taskledger/examples/` directory is required.
|
|
405
435
|
|
|
406
436
|
## Development
|
|
407
437
|
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
[](https://pypi.org/project/taskledger/)
|
|
2
|
+

|
|
3
|
+

|
|
4
|
+
[](https://codecov.io/gh/holgern/taskledger)
|
|
5
|
+
|
|
1
6
|
# taskledger
|
|
2
7
|
|
|
3
8
|
`taskledger` is a task-first durable state layer for staged coding work. It keeps
|
|
@@ -32,7 +37,7 @@ The supported command surface is organized as:
|
|
|
32
37
|
|
|
33
38
|
**Project lifecycle:**
|
|
34
39
|
|
|
35
|
-
- `init`, `status`, `export`, `import`, `snapshot`
|
|
40
|
+
- `init`, `status`, `export`, `import`, `snapshot`, `release`
|
|
36
41
|
|
|
37
42
|
## Install
|
|
38
43
|
|
|
@@ -64,9 +69,10 @@ plan from answers, approve it, implement todos with evidence, and validate it:
|
|
|
64
69
|
taskledger task create "Rewrite V2" --slug rewrite-v2 --description "Migrate to the task-first design."
|
|
65
70
|
taskledger task activate rewrite-v2 --reason "Start planning"
|
|
66
71
|
taskledger plan start
|
|
67
|
-
taskledger question add --text
|
|
68
|
-
taskledger question answer-many --text
|
|
72
|
+
taskledger question add-many --required-for-plan --text $'Should exports include the new state?\nShould snapshots include implementation artifacts?'
|
|
73
|
+
taskledger question answer-many --text $'q-0001: Yes.\nq-0002: No.'
|
|
69
74
|
taskledger question status
|
|
75
|
+
taskledger plan template --from-answers --file ./plan.md
|
|
70
76
|
taskledger plan upsert --from-answers --file ./plan.md
|
|
71
77
|
taskledger plan lint --version 1
|
|
72
78
|
taskledger plan accept --version 1 --note "Ready."
|
|
@@ -108,6 +114,22 @@ taskledger context --for implementation --format markdown
|
|
|
108
114
|
taskledger implement restart --summary "Fix failed validation findings."
|
|
109
115
|
```
|
|
110
116
|
|
|
117
|
+
## Release tagging and changelog context
|
|
118
|
+
|
|
119
|
+
Use durable release tags to mark completed task boundaries and generate
|
|
120
|
+
provider-neutral changelog source packs from finished tasks:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
taskledger release tag 0.4.1 --at-task task-0030 --note "0.4.1 released"
|
|
124
|
+
taskledger release changelog 0.4.2 --since 0.4.1 --until-task task-0035 --output /tmp/taskledger-0.4.2-changelog-source.md
|
|
125
|
+
taskledger release show 0.4.1
|
|
126
|
+
taskledger release list
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
`release changelog` does not call an LLM API. It renders compact Markdown or JSON
|
|
130
|
+
from done tasks, implementation logs, code changes, and validation evidence so a
|
|
131
|
+
separate coding harness can draft the final human changelog.
|
|
132
|
+
|
|
111
133
|
`taskledger next-action` is the preferred fresh-context entrypoint. It stays
|
|
112
134
|
read-only and points at the next concrete question, todo, criterion, or repair
|
|
113
135
|
step.
|
|
@@ -212,6 +234,7 @@ records under the configured storage root:
|
|
|
212
234
|
taskledger.toml
|
|
213
235
|
.taskledger/
|
|
214
236
|
intros/
|
|
237
|
+
releases/
|
|
215
238
|
tasks/
|
|
216
239
|
events/
|
|
217
240
|
indexes/ # optional derived caches and registries
|
|
@@ -230,6 +253,7 @@ taskledger init --taskledger-dir /mnt/cloud/taskledger/project-a
|
|
|
230
253
|
```text
|
|
231
254
|
/home/me/src/project-a/taskledger.toml
|
|
232
255
|
/mnt/cloud/taskledger/project-a/storage.yaml
|
|
256
|
+
/mnt/cloud/taskledger/project-a/releases/
|
|
233
257
|
/mnt/cloud/taskledger/project-a/tasks/
|
|
234
258
|
/mnt/cloud/taskledger/project-a/events/
|
|
235
259
|
/mnt/cloud/taskledger/project-a/indexes/
|
|
@@ -353,13 +377,19 @@ taskledger snapshot ./artifacts
|
|
|
353
377
|
|
|
354
378
|
## Skill packaging
|
|
355
379
|
|
|
380
|
+
Agent workflows work best when the `taskledger` skill is installed in the
|
|
381
|
+
coding harness. The CLI has a task-first lifecycle with explicit planning,
|
|
382
|
+
approval, implementation, validation, locks, and handoff gates; without the
|
|
383
|
+
skill, an agent may not know the intended command sequence or gate semantics.
|
|
384
|
+
|
|
356
385
|
The canonical skill file lives at:
|
|
357
386
|
|
|
358
387
|
```text
|
|
359
388
|
skills/taskledger/SKILL.md
|
|
360
389
|
```
|
|
361
390
|
|
|
362
|
-
|
|
391
|
+
Keep this skill outside the Python package. No additional
|
|
392
|
+
`skills/taskledger/examples/` directory is required.
|
|
363
393
|
|
|
364
394
|
## Development
|
|
365
395
|
|
|
@@ -14,6 +14,7 @@ Supported modules
|
|
|
14
14
|
- ``taskledger.api.introductions``
|
|
15
15
|
- ``taskledger.api.locks``
|
|
16
16
|
- ``taskledger.api.handoff``
|
|
17
|
+
- ``taskledger.api.releases``
|
|
17
18
|
- ``taskledger.api.search``
|
|
18
19
|
|
|
19
20
|
Import boundary
|
|
@@ -46,7 +47,9 @@ Task API
|
|
|
46
47
|
- ``show_task``
|
|
47
48
|
- ``edit_task``
|
|
48
49
|
- ``cancel_task``
|
|
50
|
+
- ``uncancel_task``
|
|
49
51
|
- ``close_task``
|
|
52
|
+
- ``create_follow_up_task``
|
|
50
53
|
- ``add_requirement``
|
|
51
54
|
- ``remove_requirement``
|
|
52
55
|
- ``waive_requirement``
|
|
@@ -63,12 +66,14 @@ Task API
|
|
|
63
66
|
- ``can_perform``
|
|
64
67
|
- ``reindex``
|
|
65
68
|
- ``repair_task_record``
|
|
69
|
+
- ``repair_orphaned_planning_run``
|
|
66
70
|
|
|
67
71
|
Plan API
|
|
68
72
|
--------
|
|
69
73
|
|
|
70
74
|
- ``start_planning``
|
|
71
75
|
- ``propose_plan``
|
|
76
|
+
- ``plan_template``
|
|
72
77
|
- ``upsert_plan``
|
|
73
78
|
- ``list_plan_versions``
|
|
74
79
|
- ``show_plan``
|
|
@@ -85,6 +90,7 @@ Question API
|
|
|
85
90
|
------------
|
|
86
91
|
|
|
87
92
|
- ``add_question``
|
|
93
|
+
- ``add_questions``
|
|
88
94
|
- ``answer_question``
|
|
89
95
|
- ``answer_questions``
|
|
90
96
|
- ``list_questions``
|
|
@@ -97,6 +103,7 @@ Run API
|
|
|
97
103
|
|
|
98
104
|
- ``start_implementation``
|
|
99
105
|
- ``restart_implementation``
|
|
106
|
+
- ``resume_implementation``
|
|
100
107
|
- ``log_implementation``
|
|
101
108
|
- ``add_implementation_deviation``
|
|
102
109
|
- ``add_implementation_artifact``
|
|
@@ -143,6 +150,14 @@ Handoff API
|
|
|
143
150
|
- ``close_handoff_api``
|
|
144
151
|
- ``cancel_handoff_api``
|
|
145
152
|
|
|
153
|
+
Release API
|
|
154
|
+
~~~~~~~~~~~
|
|
155
|
+
|
|
156
|
+
- ``build_changelog_context``
|
|
157
|
+
- ``list_release_records``
|
|
158
|
+
- ``show_release``
|
|
159
|
+
- ``tag_release``
|
|
160
|
+
|
|
146
161
|
Search API
|
|
147
162
|
~~~~~~~~~~
|
|
148
163
|
|
|
@@ -32,7 +32,7 @@ Command surface
|
|
|
32
32
|
---------------
|
|
33
33
|
|
|
34
34
|
The supported command groups are ``task``, ``plan``, ``question``, ``implement``,
|
|
35
|
-
``validate``, ``todo``, ``intro``, ``file``, ``link``, ``require``, ``
|
|
36
|
-
``handoff``, ``context``, ``actor``, ``view``, ``next-action``, ``can``,
|
|
37
|
-
``grep``, ``symbols``, ``deps``, ``doctor``, ``repair``, ``reindex``,
|
|
38
|
-
``status``, ``export``, ``import``, and ``snapshot``.
|
|
35
|
+
``validate``, ``todo``, ``intro``, ``file``, ``link``, ``require``, ``release``,
|
|
36
|
+
``lock``, ``handoff``, ``context``, ``actor``, ``view``, ``next-action``, ``can``,
|
|
37
|
+
``search``, ``grep``, ``symbols``, ``deps``, ``doctor``, ``repair``, ``reindex``,
|
|
38
|
+
``init``, ``status``, ``export``, ``import``, and ``snapshot``.
|
|
@@ -27,6 +27,7 @@ when explicitly targeting another task.
|
|
|
27
27
|
|
|
28
28
|
taskledger plan start
|
|
29
29
|
taskledger plan start --task task-0001
|
|
30
|
+
taskledger implement resume --task task-0001 --reason "Reacquire implementation lock."
|
|
30
31
|
taskledger implement restart --task task-0001 --summary "Fix validation findings."
|
|
31
32
|
taskledger implement finish --task task-0001 --summary "Implemented."
|
|
32
33
|
taskledger validate status --task task-0001
|
|
@@ -41,10 +42,29 @@ Positional refs are reserved for the direct resource being changed or shown:
|
|
|
41
42
|
.. code-block:: bash
|
|
42
43
|
|
|
43
44
|
taskledger task activate TASK_REF
|
|
45
|
+
taskledger task follow-up PARENT_REF TITLE [options]
|
|
44
46
|
taskledger todo done TODO_ID --task TASK_REF --evidence "pytest -q"
|
|
45
47
|
taskledger question answer QUESTION_ID --task TASK_REF --text "Yes."
|
|
46
48
|
taskledger handoff show HANDOFF_ID --task TASK_REF
|
|
47
49
|
taskledger require add REQUIRED_TASK_REF --task TASK_REF
|
|
50
|
+
taskledger release show 0.4.1
|
|
51
|
+
|
|
52
|
+
Release commands
|
|
53
|
+
----------------
|
|
54
|
+
|
|
55
|
+
Release boundaries are durable project records, not task lifecycle states:
|
|
56
|
+
|
|
57
|
+
.. code-block:: bash
|
|
58
|
+
|
|
59
|
+
taskledger release tag 0.4.1 --at-task task-0030 --note "0.4.1 released"
|
|
60
|
+
taskledger release list
|
|
61
|
+
taskledger release show 0.4.1
|
|
62
|
+
taskledger release changelog 0.4.2 --since 0.4.1 --until-task task-0035 --output /tmp/taskledger-0.4.2-changelog-source.md
|
|
63
|
+
|
|
64
|
+
``release tag`` writes a durable release record under ``.taskledger/releases/``.
|
|
65
|
+
``release changelog`` is read-oriented: it renders Markdown or JSON changelog
|
|
66
|
+
context from done tasks and may write an external output file, but it does not
|
|
67
|
+
mutate ledger state.
|
|
48
68
|
|
|
49
69
|
``next-action`` result contract
|
|
50
70
|
-------------------------------
|
|
@@ -79,6 +99,9 @@ and may also include:
|
|
|
79
99
|
* ``next_item`` for the concrete target
|
|
80
100
|
* ``commands`` for ordered command hints with one primary command
|
|
81
101
|
* ``progress`` for question, todo, or validation queues
|
|
102
|
+
* ``template_command`` plus ``required_plan_fields`` and
|
|
103
|
+
``recommended_plan_fields`` when the next step is regenerating a plan from
|
|
104
|
+
answered questions
|
|
82
105
|
|
|
83
106
|
Agents should inspect ``next_item``, prefer ``next_command`` when it is safe,
|
|
84
107
|
avoid inventing question answers, and never mark todos done without evidence.
|
|
@@ -86,6 +109,39 @@ avoid inventing question answers, and never mark todos done without evidence.
|
|
|
86
109
|
When a task is in ``failed_validation``, ``next-action`` should direct agents
|
|
87
110
|
back to implementation with ``taskledger implement restart --summary SUMMARY``.
|
|
88
111
|
|
|
112
|
+
When a task persists ``planning``, ``implementing``, or ``validating`` as its
|
|
113
|
+
status but ``active_stage`` is missing, ``next-action`` must not report
|
|
114
|
+
``The task is cancelled.`` For an orphaned implementation with a still-running
|
|
115
|
+
latest implementation run and no active lock, it should direct agents to
|
|
116
|
+
``taskledger implement resume --task TASK_REF --reason "..."``.
|
|
117
|
+
For an approved task with a non-implementation run still marked running,
|
|
118
|
+
``next-action`` must not direct agents to ``taskledger implement start``.
|
|
119
|
+
It should report a repair-oriented action and point to ``taskledger doctor``.
|
|
120
|
+
Truly cancelled tasks recover through ``taskledger task uncancel --reason "..."``
|
|
121
|
+
to a durable non-active stage rather than directly re-entering an active stage.
|
|
122
|
+
|
|
123
|
+
Run and lock repair
|
|
124
|
+
-------------------
|
|
125
|
+
|
|
126
|
+
``taskledger doctor`` and ``taskledger doctor locks`` report running runs without
|
|
127
|
+
matching active locks. Orphaned running planning runs can be finished only
|
|
128
|
+
through an explicit repair command with a reason:
|
|
129
|
+
|
|
130
|
+
.. code-block:: bash
|
|
131
|
+
|
|
132
|
+
taskledger repair run --task TASK_REF --run RUN_ID --reason "Planning was already completed."
|
|
133
|
+
|
|
134
|
+
The repair command refuses to finish non-planning runs, non-running runs, or
|
|
135
|
+
runs that still have a matching active lock.
|
|
136
|
+
|
|
137
|
+
Post-completion follow-up deltas
|
|
138
|
+
--------------------------------
|
|
139
|
+
|
|
140
|
+
``taskledger task follow-up PARENT_REF TITLE`` is the supported path for small
|
|
141
|
+
post-completion changes. It requires a ``done`` parent task, creates a new draft
|
|
142
|
+
child task with ``parent_task_id`` and ``parent_relation=follow_up``, and keeps
|
|
143
|
+
the parent task terminal.
|
|
144
|
+
|
|
89
145
|
Human monitoring UI
|
|
90
146
|
-------------------
|
|
91
147
|
|
|
@@ -279,13 +279,32 @@ After validation passes, close the task and inspect final state:
|
|
|
279
279
|
taskledger task dossier --format markdown
|
|
280
280
|
taskledger handoff create --mode validation --summary "Parser fix is implemented and validated."
|
|
281
281
|
taskledger handoff show HANDOFF_ID --format text
|
|
282
|
-
taskledger task close --
|
|
282
|
+
taskledger task close --note "Fixed parser delimiter handling and validated parser regressions."
|
|
283
|
+
taskledger release tag 0.4.2 --at-task parser-fix --note "0.4.2 released."
|
|
283
284
|
taskledger task show
|
|
284
285
|
taskledger status --full
|
|
285
286
|
taskledger doctor
|
|
286
287
|
|
|
287
|
-
|
|
288
|
-
|
|
288
|
+
After validation passes, the task is in ``done`` state. ``task close`` is a
|
|
289
|
+
final acknowledgement command for an already-done task. Release boundaries are
|
|
290
|
+
tracked by ``taskledger release tag``. The dossier and handoff commands preserve
|
|
291
|
+
a fresh-context summary for future agents or reviewers.
|
|
292
|
+
|
|
293
|
+
Post-completion follow-up deltas
|
|
294
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
295
|
+
|
|
296
|
+
When the original task is complete and a later small delta is needed, keep the
|
|
297
|
+
parent task closed and create a new follow-up child task:
|
|
298
|
+
|
|
299
|
+
.. code-block:: bash
|
|
300
|
+
|
|
301
|
+
taskledger task follow-up parser-fix "Rename parser error copy" --description "Small post-completion delta." --activate
|
|
302
|
+
taskledger plan start
|
|
303
|
+
taskledger plan upsert --file ./plan.md
|
|
304
|
+
taskledger plan accept --version 1 --note "Approved tiny follow-up delta."
|
|
305
|
+
|
|
306
|
+
Use the normal lifecycle on the follow-up task. Do not reopen the completed
|
|
307
|
+
parent task for ordinary deltas.
|
|
289
308
|
|
|
290
309
|
11. Recovery And Maintenance Commands
|
|
291
310
|
-------------------------------------
|
|
@@ -298,6 +317,8 @@ cycle:
|
|
|
298
317
|
taskledger lock show
|
|
299
318
|
taskledger doctor locks
|
|
300
319
|
taskledger lock break --reason "Recover stale planning lock."
|
|
320
|
+
taskledger implement resume --reason "Reacquire implementation lock for existing running run."
|
|
321
|
+
taskledger task uncancel --reason "Restore the task to a safe durable stage."
|
|
301
322
|
taskledger repair index
|
|
302
323
|
taskledger repair task --reason "Inspect task record after manual edit."
|
|
303
324
|
taskledger reindex
|
|
@@ -305,4 +326,10 @@ cycle:
|
|
|
305
326
|
taskledger snapshot ./taskledger-snapshot --include-bodies --include-run-artifacts
|
|
306
327
|
|
|
307
328
|
Locks are never cleared silently. Use ``lock break`` only after inspecting the
|
|
308
|
-
lock and recording a reason.
|
|
329
|
+
lock and recording a reason. If a broken stale lock leaves an implementation run
|
|
330
|
+
still marked ``running``, continue with ``implement resume`` instead of starting a
|
|
331
|
+
new implementation run. If a task is truly ``cancelled``, use ``task uncancel``
|
|
332
|
+
to restore a safe durable stage before re-entering planning, implementation, or
|
|
333
|
+
validation through the normal stage-specific commands. After ``task uncancel``,
|
|
334
|
+
run ``next-action`` again; if it reports ``implement-resume``, reacquire the
|
|
335
|
+
existing implementation run rather than running ``implement start``.
|
|
@@ -11,7 +11,7 @@ Supported CLI groups
|
|
|
11
11
|
--------------------
|
|
12
12
|
|
|
13
13
|
- ``task``, ``plan``, ``question``, ``implement``, ``validate``, ``todo``
|
|
14
|
-
- ``intro``, ``file``, ``link``, ``require``, ``lock``, ``handoff``
|
|
14
|
+
- ``intro``, ``file``, ``link``, ``require``, ``release``, ``lock``, ``handoff``
|
|
15
15
|
- ``doctor``, ``repair``, ``next-action``, ``can``, ``reindex``
|
|
16
16
|
- ``init``, ``status``, ``export``, ``import``, ``snapshot``
|
|
17
17
|
- ``context``, ``view``, ``serve``, ``search``, ``grep``, ``symbols``, ``deps``
|
|
@@ -20,18 +20,26 @@ Supported CLI groups
|
|
|
20
20
|
keep using the CLI and JSON command surface for automation.
|
|
21
21
|
|
|
22
22
|
The supported implementation lifecycle includes ``implement restart --summary
|
|
23
|
-
"..."`` when a task is in ``failed_validation
|
|
23
|
+
"..."`` when a task is in ``failed_validation`` and ``implement resume --reason
|
|
24
|
+
"..."`` when an existing running implementation run has lost its lock.
|
|
25
|
+
|
|
26
|
+
Small post-completion deltas use ``task follow-up PARENT_REF TITLE`` to create a
|
|
27
|
+
new child task instead of reopening a ``done`` task.
|
|
28
|
+
|
|
29
|
+
Release boundaries are tracked separately from task lifecycle state with
|
|
30
|
+
``release tag`` and ``release changelog``.
|
|
24
31
|
|
|
25
32
|
question subcommands
|
|
26
33
|
--------------------
|
|
27
34
|
|
|
28
35
|
- ``question add``, ``question list [--status STATUS]``, ``question answers [--format markdown|json]``
|
|
36
|
+
- ``question add-many [--text TEXT|--yaml-file PATH] [--required-for-plan]``
|
|
29
37
|
- ``question answer``, ``question answer-many``, ``question dismiss``, ``question open``, ``question status``
|
|
30
38
|
|
|
31
39
|
plan subcommands
|
|
32
40
|
----------------
|
|
33
41
|
|
|
34
|
-
- ``plan start``, ``plan propose``, ``plan upsert``, ``plan lint``, ``plan approve``, ``plan accept``, ``plan reject``, ``plan show``, ``plan diff``
|
|
42
|
+
- ``plan start``, ``plan propose``, ``plan template``, ``plan upsert``, ``plan lint``, ``plan approve``, ``plan accept``, ``plan reject``, ``plan show``, ``plan diff``
|
|
35
43
|
- ``plan regenerate --from-answers``, ``plan materialize-todos``, ``plan command -- ...``
|
|
36
44
|
|
|
37
45
|
todo subcommands
|
|
@@ -51,11 +59,14 @@ Supported Python API modules
|
|
|
51
59
|
- ``taskledger.api.introductions``
|
|
52
60
|
- ``taskledger.api.locks``
|
|
53
61
|
- ``taskledger.api.handoff``
|
|
62
|
+
- ``taskledger.api.releases``
|
|
54
63
|
- ``taskledger.api.search``
|
|
55
64
|
|
|
56
65
|
``taskledger.api.task_runs`` includes the public lifecycle helpers
|
|
57
|
-
``start_implementation``, ``restart_implementation``, ``
|
|
58
|
-
``finish_validation``.
|
|
66
|
+
``start_implementation``, ``restart_implementation``, ``resume_implementation``,
|
|
67
|
+
``start_validation``, and ``finish_validation``. ``taskledger.api.tasks`` also
|
|
68
|
+
exposes ``uncancel_task`` for restoring truly cancelled tasks to a safe durable
|
|
69
|
+
stage.
|
|
59
70
|
|
|
60
71
|
Removed legacy surfaces
|
|
61
72
|
-----------------------
|