taskledger 0.2.0__tar.gz → 0.3.1__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.2.0 → taskledger-0.3.1}/.codecrate.toml +1 -1
- {taskledger-0.2.0 → taskledger-0.3.1}/.pre-commit-config.yaml +0 -8
- taskledger-0.3.1/.taskledger.toml +30 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/API.md +22 -0
- taskledger-0.3.1/CHANGELOG.md +181 -0
- {taskledger-0.2.0/taskledger.egg-info → taskledger-0.3.1}/PKG-INFO +108 -2
- {taskledger-0.2.0 → taskledger-0.3.1}/README.md +107 -1
- {taskledger-0.2.0 → taskledger-0.3.1}/docs/api.rst +20 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/docs/command_contract.rst +146 -4
- {taskledger-0.2.0 → taskledger-0.3.1}/docs/full_task_cycle.rst +8 -5
- {taskledger-0.2.0 → taskledger-0.3.1}/docs/index.rst +1 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/docs/public_surface.rst +7 -1
- taskledger-0.3.1/docs/transfer.rst +81 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/docs/usage.rst +163 -7
- {taskledger-0.2.0 → taskledger-0.3.1}/pyproject.toml +3 -1
- {taskledger-0.2.0 → taskledger-0.3.1}/skills/taskledger/SKILL.md +83 -26
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/_version.py +3 -3
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/plans.py +27 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/project.py +48 -2
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/tasks.py +6 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/cli.py +571 -16
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/cli_common.py +178 -4
- taskledger-0.3.1/taskledger/cli_implement.py +511 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/cli_misc.py +61 -5
- taskledger-0.3.1/taskledger/cli_plan.py +792 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/cli_question.py +128 -15
- taskledger-0.3.1/taskledger/cli_task.py +886 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/cli_validate.py +5 -0
- taskledger-0.3.1/taskledger/command_inventory.py +1185 -0
- taskledger-0.3.1/taskledger/domain/_model_utils.py +164 -0
- taskledger-0.3.1/taskledger/domain/active_state.py +144 -0
- taskledger-0.3.1/taskledger/domain/actor.py +119 -0
- taskledger-0.3.1/taskledger/domain/change.py +241 -0
- taskledger-0.3.1/taskledger/domain/check.py +111 -0
- taskledger-0.3.1/taskledger/domain/event.py +69 -0
- taskledger-0.3.1/taskledger/domain/handoff.py +168 -0
- taskledger-0.3.1/taskledger/domain/lock.py +128 -0
- taskledger-0.3.1/taskledger/domain/models.py +70 -0
- taskledger-0.3.1/taskledger/domain/plan.py +146 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/domain/policies.py +28 -0
- taskledger-0.3.1/taskledger/domain/question.py +103 -0
- taskledger-0.3.1/taskledger/domain/release.py +65 -0
- taskledger-0.3.1/taskledger/domain/run.py +145 -0
- taskledger-0.3.1/taskledger/domain/sidecars.py +468 -0
- taskledger-0.3.1/taskledger/domain/task.py +255 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/exchange.py +636 -26
- taskledger-0.3.1/taskledger/services/agent_logging.py +620 -0
- taskledger-0.3.1/taskledger/services/agent_transcripts.py +540 -0
- taskledger-0.3.1/taskledger/services/change_tracking.py +251 -0
- taskledger-0.3.1/taskledger/services/check_tracking.py +126 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/dashboard.py +43 -5
- taskledger-0.3.1/taskledger/services/doctor.py +309 -0
- taskledger-0.3.1/taskledger/services/doctor_checks/migration_checks.py +64 -0
- taskledger-0.3.1/taskledger/services/doctor_checks/project_scan.py +122 -0
- taskledger-0.3.1/taskledger/services/doctor_checks/task_checks.py +408 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/handoff.py +65 -5
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/implementation_flow.py +96 -13
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/navigation.py +281 -133
- taskledger-0.3.1/taskledger/services/next_action_model.py +140 -0
- taskledger-0.3.1/taskledger/services/plan_editing.py +114 -0
- taskledger-0.3.1/taskledger/services/plan_hash.py +23 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/plan_lint.py +12 -12
- taskledger-0.3.1/taskledger/services/plan_materialization.py +309 -0
- taskledger-0.3.1/taskledger/services/plan_review.py +429 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/planning_flow.py +209 -7
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/releases.py +2 -0
- taskledger-0.3.1/taskledger/services/run_store.py +149 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/serve_read_model.py +13 -47
- taskledger-0.3.1/taskledger/services/task_archive.py +205 -0
- taskledger-0.3.1/taskledger/services/task_collections.py +498 -0
- taskledger-0.3.1/taskledger/services/task_lifecycle.py +940 -0
- taskledger-0.3.1/taskledger/services/task_repair.py +246 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/task_reports.py +261 -4
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/tasks.py +454 -1948
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/tree.py +18 -3
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/validation_flow.py +3 -0
- taskledger-0.3.1/taskledger/services/web_dashboard.py +529 -0
- taskledger-0.3.1/taskledger/services/workflow_guidance.py +162 -0
- taskledger-0.3.1/taskledger/storage/agent_logs.py +151 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/init.py +3 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/project_config.py +417 -7
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/project_identity.py +57 -1
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/task_store.py +93 -5
- taskledger-0.3.1/taskledger/web_assets/dashboard.css +491 -0
- taskledger-0.3.1/taskledger/web_assets/dashboard.js +1448 -0
- {taskledger-0.2.0 → taskledger-0.3.1/taskledger.egg-info}/PKG-INFO +108 -2
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger.egg-info/SOURCES.txt +46 -0
- taskledger-0.3.1/tests/__init__.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_active_task.py +36 -0
- taskledger-0.3.1/tests/test_agent_command_logging.py +657 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_agent_session_protocol.py +98 -0
- taskledger-0.3.1/tests/test_cli_command_contract.py +301 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_command_example_linter.py +1 -0
- taskledger-0.3.1/tests/test_command_inventory.py +299 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_delta_remaining_contracts.py +1 -1
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_docs_and_skill.py +58 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_doctor.py +4 -0
- taskledger-0.3.1/tests/test_help_subprocess.py +57 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_implementation_change_scan.py +108 -0
- taskledger-0.3.1/tests/test_implementation_checks.py +349 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_json_contracts.py +100 -0
- taskledger-0.3.1/tests/test_next_action_expired_lock.py +115 -0
- taskledger-0.3.1/tests/test_no_log_feature.py +448 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_plan_approval_contract.py +127 -1
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_plan_lint.py +182 -0
- taskledger-0.3.1/tests/test_plan_review.py +267 -0
- taskledger-0.3.1/tests/test_plan_revision_workflow.py +394 -0
- taskledger-0.3.1/tests/test_project_root_config.py +537 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_question_filter_answers.py +10 -1
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_question_plan_regeneration.py +223 -1
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_serve_dashboard.py +46 -14
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_service_boundaries.py +119 -49
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_services_dashboard.py +31 -4
- taskledger-0.3.1/tests/test_task_archive.py +220 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_task_report.py +65 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_taskledger_cli_api_parity.py +3 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_taskledger_v2_cli.py +157 -3
- taskledger-0.3.1/tests/test_taskledger_v2_exchange.py +1806 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_tree_command.py +84 -0
- taskledger-0.3.1/tests/test_workflow_guidance.py +111 -0
- taskledger-0.2.0/.taskledger.toml +0 -29
- taskledger-0.2.0/CHANGELOG.md +0 -83
- taskledger-0.2.0/taskledger/cli_implement.py +0 -462
- taskledger-0.2.0/taskledger/cli_plan.py +0 -510
- taskledger-0.2.0/taskledger/cli_task.py +0 -603
- taskledger-0.2.0/taskledger/command_inventory.py +0 -145
- taskledger-0.2.0/taskledger/domain/models.py +0 -1794
- taskledger-0.2.0/taskledger/services/doctor.py +0 -668
- taskledger-0.2.0/taskledger/services/web_dashboard.py +0 -1742
- taskledger-0.2.0/tests/test_cli_command_contract.py +0 -157
- taskledger-0.2.0/tests/test_command_inventory.py +0 -78
- taskledger-0.2.0/tests/test_project_root_config.py +0 -202
- taskledger-0.2.0/tests/test_taskledger_v2_exchange.py +0 -675
- {taskledger-0.2.0 → taskledger-0.3.1}/.github/workflows/codecov.yml +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/.github/workflows/pre-commit.yml +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/.github/workflows/python-publish.yml +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/.github/workflows/tests.yml +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/.gitignore +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/.readthedocs.yaml +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/.ruff.toml +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/AGENTS.md +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/LICENSE +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/Makefile +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/docs/Makefile +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/docs/architecture_taskledger_split.rst +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/docs/build.sh +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/docs/conf.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/docs/multi_repo.rst +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/docs/requirements.txt +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/docs/service_boundary_whitelist.rst +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/setup.cfg +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/setup.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/__init__.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/__main__.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/__init__.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/handoff.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/introductions.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/locks.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/questions.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/releases.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/search.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/api/task_runs.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/cli_actor.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/cli_ledger.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/cli_migrate.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/cli_release.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/domain/__init__.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/domain/states.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/errors.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/ids.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/launcher.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/py.typed +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/search.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/__init__.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/actors.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/command_runner.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/handoff_lifecycle.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/phase5_lock_transfer.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/task_queries.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/services/validation.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/__init__.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/atomic.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/common.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/events.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/frontmatter.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/indexes.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/ledger_config.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/locks.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/meta.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/migrations.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/paths.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/storage/repos.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger/timeutils.py +0 -0
- {taskledger-0.2.0/tests → taskledger-0.3.1/taskledger/web_assets}/__init__.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger.egg-info/dependency_links.txt +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger.egg-info/entry_points.txt +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger.egg-info/requires.txt +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/taskledger.egg-info/top_level.txt +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/conftest.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/support/__init__.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/support/builders.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_actor_harness_state.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_atomic_fast_io.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_cli_import_resilience.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_compact_mutation_output.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_domain_policies.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_events.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_handoff_lifecycle.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_legacy_cleanup_contracts.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_lifecycle_policies.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_locks_audit.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_models_v1_schema.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_plan_todo_materialization.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_question_add_many.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_release_changelog.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_search.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_sidecar_collections.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_storage_bundle_layout.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_storage_common.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_storage_init.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_storage_migration.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_storage_repos.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_task_events.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_taskledger_branch_scoped_ledgers.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_tasks_service_static.py +0 -0
- {taskledger-0.2.0 → taskledger-0.3.1}/tests/test_todo_implementation_gate.py +0 -0
|
@@ -6,7 +6,7 @@ respect_gitignore = true
|
|
|
6
6
|
# exclude = ["*/.venv/*", "integration_tests", "examples", "docs"]
|
|
7
7
|
gitignore_allow = ["taskledger/_version.py"]
|
|
8
8
|
exclude = ["*/.venv/*", "integration_tests", "todo.md"]
|
|
9
|
-
include = ["**/*.py", "**/*.toml", "**/*.rst", "**/*.md", "**/*.typed"]
|
|
9
|
+
include = ["**/*.py", "**/*.toml", "**/*.rst", "**/*.md", "**/*.typed", "**/*.js", "**/*.css"]
|
|
10
10
|
split_max_chars = 0
|
|
11
11
|
manifest = false
|
|
12
12
|
layout = "full"
|
|
@@ -64,11 +64,3 @@ repos:
|
|
|
64
64
|
args:
|
|
65
65
|
- --plugin=@prettier/plugin-xml
|
|
66
66
|
files: \.(css|htm|html|js|json|jsx|less|md|scss|toml|ts|xml|yaml|yml)$
|
|
67
|
-
- repo: https://github.com/pre-commit/mirrors-eslint
|
|
68
|
-
rev: v10.2.1
|
|
69
|
-
hooks:
|
|
70
|
-
- id: eslint
|
|
71
|
-
verbose: true
|
|
72
|
-
args:
|
|
73
|
-
- --color
|
|
74
|
-
- --fix
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Project-local taskledger configuration.
|
|
2
|
+
# This file lives in the source project root.
|
|
3
|
+
config_version = 2
|
|
4
|
+
taskledger_dir = '.taskledger'
|
|
5
|
+
|
|
6
|
+
# Stable project identity. Commit this with your source tree.
|
|
7
|
+
project_uuid = "081c7c05-2d10-42b7-9b37-3d814c2f400a"
|
|
8
|
+
|
|
9
|
+
# Taskledger branch-scoped state. This block is intentionally safe to commit.
|
|
10
|
+
ledger_ref = "main"
|
|
11
|
+
ledger_parent_ref = ""
|
|
12
|
+
ledger_next_task_number = 84
|
|
13
|
+
ledger_branch_guard = "off"
|
|
14
|
+
|
|
15
|
+
[prompt_profiles.planning]
|
|
16
|
+
profile = "balanced"
|
|
17
|
+
question_policy = "ask_when_missing"
|
|
18
|
+
max_required_questions = 5
|
|
19
|
+
min_acceptance_criteria = 1
|
|
20
|
+
todo_granularity = "implementation_steps"
|
|
21
|
+
require_files = true
|
|
22
|
+
require_test_commands = true
|
|
23
|
+
require_expected_outputs = true
|
|
24
|
+
require_validation_hints = true
|
|
25
|
+
plan_body_detail = "normal"
|
|
26
|
+
required_question_topics = []
|
|
27
|
+
extra_guidance = ""
|
|
28
|
+
|
|
29
|
+
[agent_logging]
|
|
30
|
+
enabled = true
|
|
@@ -53,6 +53,8 @@ from taskledger.errors import (
|
|
|
53
53
|
- `project_doctor`
|
|
54
54
|
- `project_export`
|
|
55
55
|
- `project_import`
|
|
56
|
+
- `project_export_archive`
|
|
57
|
+
- `project_import_archive`
|
|
56
58
|
- `project_snapshot`
|
|
57
59
|
- `project_tree`
|
|
58
60
|
|
|
@@ -71,7 +73,10 @@ from taskledger.errors import (
|
|
|
71
73
|
- `cancel_task`
|
|
72
74
|
- `uncancel_task`
|
|
73
75
|
- `close_task`
|
|
76
|
+
- `archive_task`
|
|
77
|
+
- `unarchive_task`
|
|
74
78
|
- `create_follow_up_task`
|
|
79
|
+
- `list_archived_task_summaries`
|
|
75
80
|
- `add_requirement`
|
|
76
81
|
- `remove_requirement`
|
|
77
82
|
- `waive_requirement`
|
|
@@ -99,17 +104,34 @@ from taskledger.errors import (
|
|
|
99
104
|
- `propose_plan`
|
|
100
105
|
- `plan_template`
|
|
101
106
|
- `upsert_plan`
|
|
107
|
+
- `PlanReviewOptions`
|
|
108
|
+
- `build_plan_review_payload`
|
|
109
|
+
- `render_plan_review`
|
|
110
|
+
- `export_plan`
|
|
111
|
+
- `amend_plan`
|
|
102
112
|
- `regenerate_plan_from_answers`
|
|
103
113
|
- `materialize_plan_todos`
|
|
104
114
|
- `list_plan_versions`
|
|
105
115
|
- `show_plan`
|
|
106
116
|
- `diff_plan`
|
|
107
117
|
- `lint_plan`
|
|
118
|
+
- `plan_guidance`
|
|
108
119
|
- `approve_plan`
|
|
109
120
|
- `reject_plan`
|
|
110
121
|
- `revise_plan`
|
|
111
122
|
- `run_planning_command`
|
|
112
123
|
|
|
124
|
+
Planning guidance API example:
|
|
125
|
+
|
|
126
|
+
```python
|
|
127
|
+
from pathlib import Path
|
|
128
|
+
|
|
129
|
+
from taskledger.api.plans import plan_guidance
|
|
130
|
+
|
|
131
|
+
payload = plan_guidance(Path.cwd(), "task-0001")
|
|
132
|
+
# payload includes: kind, task_id, has_project_guidance, guidance, profile, question_policy
|
|
133
|
+
```
|
|
134
|
+
|
|
113
135
|
### `taskledger.api.questions`
|
|
114
136
|
|
|
115
137
|
- `add_question`
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## v0.3.1 - 2026-05-12
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Added task-scoped export/import with `--task` positional ref on export, safe ID remapping (`--id-policy preserve|renumber`), counter repair, and artifact path remapping on import. Full-ledger export remains the default; single-task archives filter task-scoped records and clear `active_task`.
|
|
8
|
+
- Added `taskledger plan review` command to show the current or specified plan version with structured JSON output and content rendering.
|
|
9
|
+
- Added `next-action` routing to recommend `plan review --version N` when a plan is awaiting approval.
|
|
10
|
+
|
|
11
|
+
### Documentation
|
|
12
|
+
|
|
13
|
+
- Updated README, command contract, and SKILL.md for task-scoped transfer workflow and `plan review` command.
|
|
14
|
+
|
|
15
|
+
### Quality
|
|
16
|
+
|
|
17
|
+
- Added regression coverage for task-scoped export/import ID mapping, conflict policy, counter repair, artifact remap, and plan review end-to-end.
|
|
18
|
+
- Full suite: 878 tests passing, ruff and mypy clean.
|
|
19
|
+
|
|
20
|
+
## v0.3.0 - 2026-05-05
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
|
|
24
|
+
- Added agent command transcript logging: opt-in config, append-only NDJSON storage, CLI stdout/stderr tee capture, managed-shell capture, `task transcript` command, and `task report --include command-log` section. Export/import preserves transcript archives.
|
|
25
|
+
- Added planning guidance profiles: `plan guidance` command, `--include-guidance` plan template injection, and `prompt_profiles.planning` config with advisory required-fields rendering.
|
|
26
|
+
- Added transcript review mode as the default `task transcript` output, with `--raw` flag for the original table view, duplicate log ID warnings, and logical-row grouping for wrapper/managed-shell pairs.
|
|
27
|
+
- Added enriched command metadata: tier, deprecated, replaced_by, ledger_effect, workspace_effect, external_effect, and agent_safe fields on CommandSpec. Added `--tier` and `--include-deprecated` CLI filters. Deprecated `lock break` in favor of `repair lock`.
|
|
28
|
+
- Added first-class expired-lock resume path: `implement resume --repair-expired-lock` releases expired implementation locks with audit trail, and `next-action` emits `expired-lock-resume` when applicable.
|
|
29
|
+
- Added task-resource positional refs for read-only commands (`task show`, `task view`, etc.) with explicit `--task` required for destructive commands (`task cancel`, `task uncancel`, `task edit`).
|
|
30
|
+
- Added JSON usage-error envelopes for workflow positional-ref rejection and CLI parse errors.
|
|
31
|
+
- Added soft task archive: `task archive`/`task unarchive` commands, archived-task visibility filtering across list/tree/status, and slug reuse semantics.
|
|
32
|
+
- Added export/import project metadata guard, dry-run safety, and include-flag controls.
|
|
33
|
+
- Added plan revision workflow: `plan export`, `plan amend`, and `--auto-revise` with safe plan input path guard and plan.amended audit events.
|
|
34
|
+
- Added plan approval provenance: approval_source and approved_plan_hash stored on acceptance, with hash-mismatch warnings in reports.
|
|
35
|
+
- Added implement finish warning for missing git change scans.
|
|
36
|
+
|
|
37
|
+
### Changed
|
|
38
|
+
|
|
39
|
+
- Split run/lock helpers into `services/run_store.py` from the tasks.py monolith; `tasks.py` re-exports for backward compatibility.
|
|
40
|
+
- Wrapper commands now mirror inner exit status by default instead of always succeeding.
|
|
41
|
+
- Planning guidance recommendation is now integrated into `plan start` and `next-action` with a one-time viewed marker.
|
|
42
|
+
- Plan lint human output now renders summary and issue details instead of bare pass/fail.
|
|
43
|
+
- Question `answer-many` now validates repeat inputs, aliases, and provenance.
|
|
44
|
+
- Doctor mismatch guidance and verbose output improved with actionable repair hints.
|
|
45
|
+
|
|
46
|
+
### Fixed
|
|
47
|
+
|
|
48
|
+
- Fixed task report Plans section so non-accepted plans show reviewable details instead of being omitted.
|
|
49
|
+
- Fixed pre-commit `--all-files` regressions across test files.
|
|
50
|
+
|
|
51
|
+
### Documentation
|
|
52
|
+
|
|
53
|
+
- Documented planning guidance profiles in README, usage, command contract, API, and skill.
|
|
54
|
+
- Documented transcript logging, managed command capture, and review mode in usage and skill.
|
|
55
|
+
- Documented expired-lock-resume path and `--repair-expired-lock` in SKILL.md.
|
|
56
|
+
- Documented command-surface safety guidance, task-resource positional refs, and destructive-target rules in SKILL.md and command contract.
|
|
57
|
+
- Documented plan revision workflow commands and safety semantics in SKILL.md and command examples.
|
|
58
|
+
- Updated failure-review remediation hints for known mistakes in docs and skill.
|
|
59
|
+
|
|
60
|
+
### Quality
|
|
61
|
+
|
|
62
|
+
- Added regression test modules for agent command logging, expired-lock resume, task archive, and plan revision workflow.
|
|
63
|
+
- Expanded command inventory, CLI contract, JSON contract, and docs/skill tests for metadata enrichment, deprecation, targeting, and envelope behavior.
|
|
64
|
+
- Full suite: 770+ tests passing, ruff and mypy clean.
|
|
65
|
+
|
|
66
|
+
## v0.2.0 - 2026-05-03
|
|
67
|
+
|
|
68
|
+
### Added
|
|
69
|
+
|
|
70
|
+
- Added `taskledger task record` for creating done tasks that represent manually completed work, with change records, evidence, and implementation summaries. Does not acquire locks or activate the task. Recorded tasks are included in release changelogs.
|
|
71
|
+
- Added branch-scoped ledger state with `taskledger ledger` command group (`status`, `list`, `fork`, `switch`, `adopt`, `doctor`). Each git branch can maintain its own isolated task ledger, with `adopt` for copying branch-local task history into the current ledger.
|
|
72
|
+
- Added `taskledger tree` command to render ledger and task structure with follow-up nesting, subtree filtering, release boundaries, and per-ledger release counts in both human and JSON output.
|
|
73
|
+
- Added compressed export/import with a project UUID guard to prevent importing archives into the wrong project, plus archive member-count and manifest/payload size limits for safety.
|
|
74
|
+
- Added `taskledger status --check` to run doctor diagnostics alongside status, keeping the default `status` fast by avoiding full record parsing.
|
|
75
|
+
- Added structured diagnostics to `taskledger doctor` JSON output with task IDs, change IDs, run IDs, types, relative paths, and actionable repair hints.
|
|
76
|
+
- Added explicit `repair` command for existing planning-command change records that were incorrectly persisted as code changes.
|
|
77
|
+
- Added a top-level `Makefile` with a `release-check` automation target (compile, test, lint, type-check, build, twine check).
|
|
78
|
+
- Added AST-based service boundary guardrail tests with explicit whitelists and documented rationale.
|
|
79
|
+
|
|
80
|
+
### Changed
|
|
81
|
+
|
|
82
|
+
- Split core plan/implement/validate service entrypoints from `tasks.py` into dedicated `planning_flow.py`, `implementation_flow.py`, and `validation_flow.py` modules. `tasks.py` remains a compatibility facade.
|
|
83
|
+
- Decoupled validation service from private task helpers by extracting shared query logic into a new `task_queries` module.
|
|
84
|
+
- Planning commands are now persisted as planning-run evidence (worklog/artifacts/event) instead of creating `CodeChangeRecord` entries.
|
|
85
|
+
- Replaced chmod-dependent storage write failure test with a deterministic synthetic `OSError` monkeypatch.
|
|
86
|
+
- Sped up test suite with test-only fast fsync bypass, command-runner seam, and reduced subprocess-heavy setup.
|
|
87
|
+
|
|
88
|
+
### Fixed
|
|
89
|
+
|
|
90
|
+
- Fixed import replace so it no longer restores stale locks across machines.
|
|
91
|
+
|
|
92
|
+
### Documentation
|
|
93
|
+
|
|
94
|
+
- Documented branch-scoped ledger workflow, `task record` usage and warnings, `tree` command, and `make release-check` across README, RST docs, API docs, and the taskledger skill.
|
|
95
|
+
- Added `docs/service_boundary_whitelist.md` documenting temporary module/function boundary whitelist entries and split targets.
|
|
96
|
+
|
|
97
|
+
### Quality
|
|
98
|
+
|
|
99
|
+
- Expanded regression coverage for branch-scoped ledgers, task record, tree command, compressed export/import, doctor diagnostics, status performance, service boundaries, and planning command persistence. Repo-wide pytest, ruff, and mypy passed.
|
|
100
|
+
|
|
101
|
+
## v0.1.2 - 2026-04-30
|
|
102
|
+
|
|
103
|
+
### Fixed
|
|
104
|
+
|
|
105
|
+
- Fixed orphaned planning run lifecycle recovery so plan regeneration safely finishes the latest orphaned planning run with audit evidence, plan approval rejects tasks with any running run, and `implement start` reports structured conflict details including run id, run type, lock match status, and suggested diagnostic command.
|
|
106
|
+
- Aligned `next-action` and `can implement` so they never recommend `implement start` when a running run or run/lock mismatch blocks implementation.
|
|
107
|
+
- Expanded `taskledger doctor` and `taskledger doctor locks` to report run/lock mismatches with specific repair guidance.
|
|
108
|
+
|
|
109
|
+
### Added
|
|
110
|
+
|
|
111
|
+
- Added `taskledger repair run` for guarded, reasoned, audited repair of orphaned running planning runs.
|
|
112
|
+
|
|
113
|
+
### Documentation
|
|
114
|
+
|
|
115
|
+
- Updated taskledger skill, command contract, and API docs with running-run conflict protocol and `repair run` usage.
|
|
116
|
+
|
|
117
|
+
### Quality
|
|
118
|
+
|
|
119
|
+
- Expanded regression coverage for plan regeneration recovery, approval guards, next-action alignment, doctor diagnostics, and repair lifecycle. Targeted pytest, ruff, format, and mypy passed.
|
|
120
|
+
|
|
121
|
+
## v0.1.1 - 2026-04-29
|
|
122
|
+
|
|
123
|
+
### Added
|
|
124
|
+
|
|
125
|
+
- 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.
|
|
126
|
+
- 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.
|
|
127
|
+
- 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`.
|
|
128
|
+
|
|
129
|
+
### Changed
|
|
130
|
+
|
|
131
|
+
- Hardened CLI startup so optional command-group import failures no longer block core commands, and launcher failures return structured diagnostics.
|
|
132
|
+
|
|
133
|
+
### Fixed
|
|
134
|
+
|
|
135
|
+
- Fixed recovery guidance for uncancelled tasks with orphaned implementation runs so `next-action` and `can implement` recommend `implement resume` instead of a fresh start.
|
|
136
|
+
|
|
137
|
+
### Documentation
|
|
138
|
+
|
|
139
|
+
- Documented release tagging, changelog generation, planning helpers, follow-up task workflow, and recovery semantics across README, RST docs, API docs, and the taskledger skill.
|
|
140
|
+
|
|
141
|
+
### Quality
|
|
142
|
+
|
|
143
|
+
- Expanded regression coverage for follow-up tasks, release workflow, CLI import resilience, planning helpers, and implementation recovery. Repo-wide pytest, ruff, and mypy passed.
|
|
144
|
+
|
|
145
|
+
## v0.1.0 - 2026-04-29
|
|
146
|
+
|
|
147
|
+
### Added
|
|
148
|
+
|
|
149
|
+
- 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%.
|
|
150
|
+
- Added a second coverage pass for storage memories, items, contexts, validation, and dashboard services, raising overall coverage to 73%.
|
|
151
|
+
- Added question status filtering plus `taskledger question answers` with markdown and JSON output.
|
|
152
|
+
- Added `taskledger plan lint`, stricter executable-plan linting, and approval gating for lint failures.
|
|
153
|
+
- Added focused worker contexts and durable handoff snapshots for implementer and reviewer workflows.
|
|
154
|
+
- Added richer `next-action` output with next item, command hints, and progress details.
|
|
155
|
+
- Added project-root config discovery and external storage roots via `taskledger.toml`.
|
|
156
|
+
- Added the localhost-only read-only `taskledger serve` dashboard.
|
|
157
|
+
- Added an explicit failed-validation recovery path with `taskledger implement restart`.
|
|
158
|
+
- Added compact single-agent workflow guidance and richer `todo next` and `todo show` hints.
|
|
159
|
+
|
|
160
|
+
### Changed
|
|
161
|
+
|
|
162
|
+
- Hardened agent guardrails by requiring reasons for approval escape hatches, blocking empty-todo approvals by default, and adding durable `plan command` execution.
|
|
163
|
+
- Finished agent-protocol hardening with stronger typed normalization, safer plan todo materialization, and automatic todo source inference from the active lock.
|
|
164
|
+
- Removed redundant derived task, plan-version, and latest-run indexes so Markdown bundles remain canonical and JSON indexes remain rebuildable caches.
|
|
165
|
+
- 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.
|
|
166
|
+
- 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.
|
|
167
|
+
- Redesigned the serve dashboard into a more human-focused layout with richer sidebar metadata, accessibility coverage, and updated docs.
|
|
168
|
+
- Improved dashboard review ergonomics and refresh stability with pause and resume controls, diffed rerenders, preserved details state, and lazy raw-payload rendering.
|
|
169
|
+
- Finished release-readiness cleanup by consolidating maintained docs under RST and keeping `skills/taskledger/SKILL.md` as the single canonical skill file.
|
|
170
|
+
|
|
171
|
+
### Fixed
|
|
172
|
+
|
|
173
|
+
- Fixed `taskledger view` so todo counts and item lists reflect persisted todos instead of always showing `0/0`.
|
|
174
|
+
- Fixed orphan slug-directory creation under `.taskledger/tasks/` and added repair support for existing bad directories.
|
|
175
|
+
- Fixed repo-wide pre-commit and mypy failures across more than twenty files.
|
|
176
|
+
- Fixed serve response handling so client disconnects no longer produce `BrokenPipeError` tracebacks.
|
|
177
|
+
- Fixed the serve dashboard todo-renderer JavaScript regression that broke refresh parsing.
|
|
178
|
+
|
|
179
|
+
### Quality
|
|
180
|
+
|
|
181
|
+
- 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.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Durable project-state storage and CLI for coding workflows
|
|
5
5
|
Author: Taskledger Contributors
|
|
6
6
|
Maintainer: Holger Nahrstaedt
|
|
@@ -82,6 +82,53 @@ The supported command surface is organized as:
|
|
|
82
82
|
|
|
83
83
|
- `init`, `status`, `export`, `import`, `snapshot`, `release`
|
|
84
84
|
|
|
85
|
+
### Which read command to use
|
|
86
|
+
|
|
87
|
+
| Need | Command |
|
|
88
|
+
| -------------------------- | --------------------------------------------------- |
|
|
89
|
+
| Next step | `next-action` |
|
|
90
|
+
| Next implementation item | `todo next` |
|
|
91
|
+
| Active task summary | `task show` |
|
|
92
|
+
| Specific task summary | `task show TASK_REF` or `task show --task TASK_REF` |
|
|
93
|
+
| Project/ledger overview | `status`, `tree` |
|
|
94
|
+
| Human dashboard | `serve` |
|
|
95
|
+
| Reviewable markdown report | `task report` |
|
|
96
|
+
| Fresh worker context | `context` or durable `handoff show` |
|
|
97
|
+
| Command audit | `task transcript` |
|
|
98
|
+
|
|
99
|
+
## Planning guidance profiles
|
|
100
|
+
|
|
101
|
+
Taskledger supports project-local advisory planning guidance under
|
|
102
|
+
`[prompt_profiles.planning]` in the active project config file (`taskledger.toml`
|
|
103
|
+
or `.taskledger.toml` when legacy config is still present).
|
|
104
|
+
|
|
105
|
+
```toml
|
|
106
|
+
[prompt_profiles.planning]
|
|
107
|
+
profile = "strict"
|
|
108
|
+
question_policy = "always_before_plan"
|
|
109
|
+
max_required_questions = 3
|
|
110
|
+
min_acceptance_criteria = 2
|
|
111
|
+
todo_granularity = "atomic"
|
|
112
|
+
require_files = true
|
|
113
|
+
require_test_commands = true
|
|
114
|
+
require_expected_outputs = true
|
|
115
|
+
require_validation_hints = true
|
|
116
|
+
plan_body_detail = "detailed"
|
|
117
|
+
required_question_topics = ["scope", "compatibility", "test strategy"]
|
|
118
|
+
extra_guidance = "Every plan must mention docs, tests, and rollback or repair behavior."
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Inspect guidance for the active task:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
taskledger plan guidance
|
|
125
|
+
taskledger --json plan guidance
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
This guidance is advisory and cannot override lifecycle gates, user approval,
|
|
129
|
+
validation requirements, lock rules, or higher-priority harness instructions.
|
|
130
|
+
See `docs/usage.rst` for the full key reference and workflow details.
|
|
131
|
+
|
|
85
132
|
## Install
|
|
86
133
|
|
|
87
134
|
```bash
|
|
@@ -117,6 +164,7 @@ taskledger question answer-many --text $'q-0001: Yes.\nq-0002: No.'
|
|
|
117
164
|
taskledger question status
|
|
118
165
|
taskledger plan template --from-answers --file ./plan.md
|
|
119
166
|
taskledger plan upsert --from-answers --file ./plan.md
|
|
167
|
+
taskledger plan review --version 1
|
|
120
168
|
taskledger plan lint --version 1
|
|
121
169
|
taskledger plan accept --version 1 --note "Ready."
|
|
122
170
|
|
|
@@ -137,6 +185,16 @@ taskledger validate check --criterion ac-0001 --status pass --evidence "pytest -
|
|
|
137
185
|
taskledger validate finish --result passed --summary "Validated the rewrite."
|
|
138
186
|
```
|
|
139
187
|
|
|
188
|
+
To revise a proposed plan, re-enter planning and edit an exported workspace
|
|
189
|
+
copy. Never edit `.taskledger/` files directly:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
taskledger plan revise
|
|
193
|
+
taskledger plan export --version latest --file ./plan.md
|
|
194
|
+
# edit ./plan.md
|
|
195
|
+
taskledger plan upsert --file ./plan.md
|
|
196
|
+
```
|
|
197
|
+
|
|
140
198
|
For manually completed work (e.g., manual testing, operations tasks, or work
|
|
141
199
|
completed outside the task-first lifecycle), use `task record` to create a
|
|
142
200
|
done task directly without acquiring lifecycle locks. **Note**: `task record`
|
|
@@ -148,6 +206,17 @@ taskledger task record "Deploy to production" --summary "Deployed v0.4.1 to prod
|
|
|
148
206
|
taskledger task record "Manual API testing" --summary "Tested new endpoints" --allow-empty-record --reason "Exploratory testing, no formal changes tracked"
|
|
149
207
|
```
|
|
150
208
|
|
|
209
|
+
Archive is a visibility operation: it hides tasks from default list/tree/dashboard
|
|
210
|
+
views without deleting history. Task ids stay monotonic and are never reused.
|
|
211
|
+
Slugs can be reused after archive.
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
taskledger task archive task-0030 --reason "Hide historical task"
|
|
215
|
+
taskledger task list --archived
|
|
216
|
+
taskledger task unarchive task-0030 --reason "Need to continue work" --slug task-0030-reopened
|
|
217
|
+
taskledger tree --include-archived
|
|
218
|
+
```
|
|
219
|
+
|
|
151
220
|
If validation finds an implementation bug, keep the accepted plan and restart
|
|
152
221
|
implementation explicitly:
|
|
153
222
|
|
|
@@ -340,6 +409,7 @@ Use `--json` for machine-readable payloads:
|
|
|
340
409
|
taskledger --json status --full
|
|
341
410
|
taskledger --json task active
|
|
342
411
|
taskledger --json task show
|
|
412
|
+
taskledger --json task show task-0001
|
|
343
413
|
taskledger --json context --for validation --format json
|
|
344
414
|
```
|
|
345
415
|
|
|
@@ -441,11 +511,32 @@ for task-first handoff guidance.
|
|
|
441
511
|
## Export, import, and snapshots
|
|
442
512
|
|
|
443
513
|
```bash
|
|
444
|
-
taskledger
|
|
514
|
+
taskledger init --project-name "Taskledger"
|
|
515
|
+
taskledger export
|
|
516
|
+
taskledger export --task task-0040
|
|
517
|
+
taskledger export task-0040
|
|
518
|
+
taskledger import ./taskledger-transfer.tar.gz --dry-run
|
|
519
|
+
taskledger import ./taskledger-task-planledger-main-task-0040-20260509T101500Z.tar.gz
|
|
445
520
|
taskledger import ./taskledger-transfer.tar.gz --replace
|
|
446
521
|
taskledger snapshot ./artifacts
|
|
447
522
|
```
|
|
448
523
|
|
|
524
|
+
Default export filenames use this policy:
|
|
525
|
+
|
|
526
|
+
```text
|
|
527
|
+
taskledger-export-{project_slug}-{ledger_ref}-{timestamp}.tar.gz
|
|
528
|
+
taskledger-task-{project_slug}-{ledger_ref}-{task_id}-{timestamp}.tar.gz
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
`project_slug` is derived from `project_name` in `taskledger.toml`. If
|
|
532
|
+
`project_name` is missing, taskledger falls back to the workspace directory name.
|
|
533
|
+
Import safety still relies on `project_uuid`, not the name/slug.
|
|
534
|
+
|
|
535
|
+
`--include-bodies` and `--include-run-artifacts` now change archive content:
|
|
536
|
+
|
|
537
|
+
- `--no-include-bodies` strips record body text (`body` / `context_body`) from exported payloads.
|
|
538
|
+
- `--include-run-artifacts` embeds task and agent-log artifact files under `artifacts/` in the archive.
|
|
539
|
+
|
|
449
540
|
Cross-machine imports preserve durable task/run data, but imported runtime locks
|
|
450
541
|
are quarantined by default. After importing an in-progress implementation,
|
|
451
542
|
run:
|
|
@@ -457,6 +548,21 @@ taskledger implement resume --reason "Continue imported implementation."
|
|
|
457
548
|
|
|
458
549
|
Use `--lock-policy keep` only for diagnostic full-fidelity lock restoration.
|
|
459
550
|
|
|
551
|
+
Single-task transfer from a config-only checkout:
|
|
552
|
+
|
|
553
|
+
```bash
|
|
554
|
+
# fresh checkout on another PC
|
|
555
|
+
taskledger init
|
|
556
|
+
taskledger task create "Fix import edge case" --slug fix-import-edge-case --description "..."
|
|
557
|
+
# ... normal plan / implementation / validation lifecycle ...
|
|
558
|
+
taskledger export task-0040
|
|
559
|
+
|
|
560
|
+
# main dev repo
|
|
561
|
+
taskledger import ./taskledger-task-planledger-main-task-0040-20260509T101500Z.tar.gz
|
|
562
|
+
taskledger task list
|
|
563
|
+
taskledger task show task-0040
|
|
564
|
+
```
|
|
565
|
+
|
|
460
566
|
## Skill packaging
|
|
461
567
|
|
|
462
568
|
Agent workflows work best when the `taskledger` skill is installed in the
|
|
@@ -39,6 +39,53 @@ The supported command surface is organized as:
|
|
|
39
39
|
|
|
40
40
|
- `init`, `status`, `export`, `import`, `snapshot`, `release`
|
|
41
41
|
|
|
42
|
+
### Which read command to use
|
|
43
|
+
|
|
44
|
+
| Need | Command |
|
|
45
|
+
| -------------------------- | --------------------------------------------------- |
|
|
46
|
+
| Next step | `next-action` |
|
|
47
|
+
| Next implementation item | `todo next` |
|
|
48
|
+
| Active task summary | `task show` |
|
|
49
|
+
| Specific task summary | `task show TASK_REF` or `task show --task TASK_REF` |
|
|
50
|
+
| Project/ledger overview | `status`, `tree` |
|
|
51
|
+
| Human dashboard | `serve` |
|
|
52
|
+
| Reviewable markdown report | `task report` |
|
|
53
|
+
| Fresh worker context | `context` or durable `handoff show` |
|
|
54
|
+
| Command audit | `task transcript` |
|
|
55
|
+
|
|
56
|
+
## Planning guidance profiles
|
|
57
|
+
|
|
58
|
+
Taskledger supports project-local advisory planning guidance under
|
|
59
|
+
`[prompt_profiles.planning]` in the active project config file (`taskledger.toml`
|
|
60
|
+
or `.taskledger.toml` when legacy config is still present).
|
|
61
|
+
|
|
62
|
+
```toml
|
|
63
|
+
[prompt_profiles.planning]
|
|
64
|
+
profile = "strict"
|
|
65
|
+
question_policy = "always_before_plan"
|
|
66
|
+
max_required_questions = 3
|
|
67
|
+
min_acceptance_criteria = 2
|
|
68
|
+
todo_granularity = "atomic"
|
|
69
|
+
require_files = true
|
|
70
|
+
require_test_commands = true
|
|
71
|
+
require_expected_outputs = true
|
|
72
|
+
require_validation_hints = true
|
|
73
|
+
plan_body_detail = "detailed"
|
|
74
|
+
required_question_topics = ["scope", "compatibility", "test strategy"]
|
|
75
|
+
extra_guidance = "Every plan must mention docs, tests, and rollback or repair behavior."
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Inspect guidance for the active task:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
taskledger plan guidance
|
|
82
|
+
taskledger --json plan guidance
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
This guidance is advisory and cannot override lifecycle gates, user approval,
|
|
86
|
+
validation requirements, lock rules, or higher-priority harness instructions.
|
|
87
|
+
See `docs/usage.rst` for the full key reference and workflow details.
|
|
88
|
+
|
|
42
89
|
## Install
|
|
43
90
|
|
|
44
91
|
```bash
|
|
@@ -74,6 +121,7 @@ taskledger question answer-many --text $'q-0001: Yes.\nq-0002: No.'
|
|
|
74
121
|
taskledger question status
|
|
75
122
|
taskledger plan template --from-answers --file ./plan.md
|
|
76
123
|
taskledger plan upsert --from-answers --file ./plan.md
|
|
124
|
+
taskledger plan review --version 1
|
|
77
125
|
taskledger plan lint --version 1
|
|
78
126
|
taskledger plan accept --version 1 --note "Ready."
|
|
79
127
|
|
|
@@ -94,6 +142,16 @@ taskledger validate check --criterion ac-0001 --status pass --evidence "pytest -
|
|
|
94
142
|
taskledger validate finish --result passed --summary "Validated the rewrite."
|
|
95
143
|
```
|
|
96
144
|
|
|
145
|
+
To revise a proposed plan, re-enter planning and edit an exported workspace
|
|
146
|
+
copy. Never edit `.taskledger/` files directly:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
taskledger plan revise
|
|
150
|
+
taskledger plan export --version latest --file ./plan.md
|
|
151
|
+
# edit ./plan.md
|
|
152
|
+
taskledger plan upsert --file ./plan.md
|
|
153
|
+
```
|
|
154
|
+
|
|
97
155
|
For manually completed work (e.g., manual testing, operations tasks, or work
|
|
98
156
|
completed outside the task-first lifecycle), use `task record` to create a
|
|
99
157
|
done task directly without acquiring lifecycle locks. **Note**: `task record`
|
|
@@ -105,6 +163,17 @@ taskledger task record "Deploy to production" --summary "Deployed v0.4.1 to prod
|
|
|
105
163
|
taskledger task record "Manual API testing" --summary "Tested new endpoints" --allow-empty-record --reason "Exploratory testing, no formal changes tracked"
|
|
106
164
|
```
|
|
107
165
|
|
|
166
|
+
Archive is a visibility operation: it hides tasks from default list/tree/dashboard
|
|
167
|
+
views without deleting history. Task ids stay monotonic and are never reused.
|
|
168
|
+
Slugs can be reused after archive.
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
taskledger task archive task-0030 --reason "Hide historical task"
|
|
172
|
+
taskledger task list --archived
|
|
173
|
+
taskledger task unarchive task-0030 --reason "Need to continue work" --slug task-0030-reopened
|
|
174
|
+
taskledger tree --include-archived
|
|
175
|
+
```
|
|
176
|
+
|
|
108
177
|
If validation finds an implementation bug, keep the accepted plan and restart
|
|
109
178
|
implementation explicitly:
|
|
110
179
|
|
|
@@ -297,6 +366,7 @@ Use `--json` for machine-readable payloads:
|
|
|
297
366
|
taskledger --json status --full
|
|
298
367
|
taskledger --json task active
|
|
299
368
|
taskledger --json task show
|
|
369
|
+
taskledger --json task show task-0001
|
|
300
370
|
taskledger --json context --for validation --format json
|
|
301
371
|
```
|
|
302
372
|
|
|
@@ -398,11 +468,32 @@ for task-first handoff guidance.
|
|
|
398
468
|
## Export, import, and snapshots
|
|
399
469
|
|
|
400
470
|
```bash
|
|
401
|
-
taskledger
|
|
471
|
+
taskledger init --project-name "Taskledger"
|
|
472
|
+
taskledger export
|
|
473
|
+
taskledger export --task task-0040
|
|
474
|
+
taskledger export task-0040
|
|
475
|
+
taskledger import ./taskledger-transfer.tar.gz --dry-run
|
|
476
|
+
taskledger import ./taskledger-task-planledger-main-task-0040-20260509T101500Z.tar.gz
|
|
402
477
|
taskledger import ./taskledger-transfer.tar.gz --replace
|
|
403
478
|
taskledger snapshot ./artifacts
|
|
404
479
|
```
|
|
405
480
|
|
|
481
|
+
Default export filenames use this policy:
|
|
482
|
+
|
|
483
|
+
```text
|
|
484
|
+
taskledger-export-{project_slug}-{ledger_ref}-{timestamp}.tar.gz
|
|
485
|
+
taskledger-task-{project_slug}-{ledger_ref}-{task_id}-{timestamp}.tar.gz
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
`project_slug` is derived from `project_name` in `taskledger.toml`. If
|
|
489
|
+
`project_name` is missing, taskledger falls back to the workspace directory name.
|
|
490
|
+
Import safety still relies on `project_uuid`, not the name/slug.
|
|
491
|
+
|
|
492
|
+
`--include-bodies` and `--include-run-artifacts` now change archive content:
|
|
493
|
+
|
|
494
|
+
- `--no-include-bodies` strips record body text (`body` / `context_body`) from exported payloads.
|
|
495
|
+
- `--include-run-artifacts` embeds task and agent-log artifact files under `artifacts/` in the archive.
|
|
496
|
+
|
|
406
497
|
Cross-machine imports preserve durable task/run data, but imported runtime locks
|
|
407
498
|
are quarantined by default. After importing an in-progress implementation,
|
|
408
499
|
run:
|
|
@@ -414,6 +505,21 @@ taskledger implement resume --reason "Continue imported implementation."
|
|
|
414
505
|
|
|
415
506
|
Use `--lock-policy keep` only for diagnostic full-fidelity lock restoration.
|
|
416
507
|
|
|
508
|
+
Single-task transfer from a config-only checkout:
|
|
509
|
+
|
|
510
|
+
```bash
|
|
511
|
+
# fresh checkout on another PC
|
|
512
|
+
taskledger init
|
|
513
|
+
taskledger task create "Fix import edge case" --slug fix-import-edge-case --description "..."
|
|
514
|
+
# ... normal plan / implementation / validation lifecycle ...
|
|
515
|
+
taskledger export task-0040
|
|
516
|
+
|
|
517
|
+
# main dev repo
|
|
518
|
+
taskledger import ./taskledger-task-planledger-main-task-0040-20260509T101500Z.tar.gz
|
|
519
|
+
taskledger task list
|
|
520
|
+
taskledger task show task-0040
|
|
521
|
+
```
|
|
522
|
+
|
|
417
523
|
## Skill packaging
|
|
418
524
|
|
|
419
525
|
Agent workflows work best when the `taskledger` skill is installed in the
|
|
@@ -32,6 +32,8 @@ Project API
|
|
|
32
32
|
- ``project_doctor``
|
|
33
33
|
- ``project_export``
|
|
34
34
|
- ``project_import``
|
|
35
|
+
- ``project_export_archive``
|
|
36
|
+
- ``project_import_archive``
|
|
35
37
|
- ``project_snapshot``
|
|
36
38
|
- ``project_tree``
|
|
37
39
|
|
|
@@ -51,7 +53,10 @@ Task API
|
|
|
51
53
|
- ``cancel_task``
|
|
52
54
|
- ``uncancel_task``
|
|
53
55
|
- ``close_task``
|
|
56
|
+
- ``archive_task``
|
|
57
|
+
- ``unarchive_task``
|
|
54
58
|
- ``create_follow_up_task``
|
|
59
|
+
- ``list_archived_task_summaries``
|
|
55
60
|
- ``add_requirement``
|
|
56
61
|
- ``remove_requirement``
|
|
57
62
|
- ``waive_requirement``
|
|
@@ -80,10 +85,16 @@ Plan API
|
|
|
80
85
|
- ``propose_plan``
|
|
81
86
|
- ``plan_template``
|
|
82
87
|
- ``upsert_plan``
|
|
88
|
+
- ``PlanReviewOptions``
|
|
89
|
+
- ``build_plan_review_payload``
|
|
90
|
+
- ``render_plan_review``
|
|
91
|
+
- ``export_plan``
|
|
92
|
+
- ``amend_plan``
|
|
83
93
|
- ``list_plan_versions``
|
|
84
94
|
- ``show_plan``
|
|
85
95
|
- ``diff_plan``
|
|
86
96
|
- ``lint_plan``
|
|
97
|
+
- ``plan_guidance``
|
|
87
98
|
- ``approve_plan``
|
|
88
99
|
- ``reject_plan``
|
|
89
100
|
- ``revise_plan``
|
|
@@ -91,6 +102,15 @@ Plan API
|
|
|
91
102
|
- ``materialize_plan_todos``
|
|
92
103
|
- ``run_planning_command``
|
|
93
104
|
|
|
105
|
+
Planning guidance example:
|
|
106
|
+
|
|
107
|
+
.. code-block:: python
|
|
108
|
+
|
|
109
|
+
from pathlib import Path
|
|
110
|
+
from taskledger.api.plans import plan_guidance
|
|
111
|
+
|
|
112
|
+
payload = plan_guidance(Path.cwd(), "task-0001")
|
|
113
|
+
|
|
94
114
|
Question API
|
|
95
115
|
------------
|
|
96
116
|
|