taskledger 0.4.0__tar.gz → 0.4.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.4.1/.archledger.toml +62 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/.taskledger.toml +1 -1
- {taskledger-0.4.0 → taskledger-0.4.1}/AGENTS.md +4 -45
- {taskledger-0.4.0 → taskledger-0.4.1}/API.md +7 -2
- {taskledger-0.4.0 → taskledger-0.4.1}/CHANGELOG.md +32 -1
- {taskledger-0.4.0/taskledger.egg-info → taskledger-0.4.1}/PKG-INFO +85 -2
- {taskledger-0.4.0 → taskledger-0.4.1}/README.md +84 -1
- {taskledger-0.4.0 → taskledger-0.4.1}/docs/command_contract.rst +13 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/docs/full_task_cycle.rst +19 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/docs/usage.rst +111 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/skills/taskledger/SKILL.md +13 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/_version.py +3 -3
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/handoff.py +30 -19
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli.py +15 -3
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_misc.py +26 -1
- taskledger-0.4.1/taskledger/cli_pipeline.py +166 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_plan.py +8 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/command_inventory.py +34 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/handoff.py +6 -1
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/sidecars.py +6 -1
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/doctor_checks/task_checks.py +134 -1
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/handoff.py +72 -140
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/navigation.py +55 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/plan_editing.py +2 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/plan_materialization.py +1 -1
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/planning_flow.py +1 -1
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/task_reports.py +2 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/tasks.py +102 -2
- taskledger-0.4.1/taskledger/services/worker_context.py +208 -0
- taskledger-0.4.1/taskledger/services/worker_pipeline.py +216 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/project_config.py +21 -0
- taskledger-0.4.1/taskledger/storage/worker_pipeline_config.py +419 -0
- {taskledger-0.4.0 → taskledger-0.4.1/taskledger.egg-info}/PKG-INFO +85 -2
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger.egg-info/SOURCES.txt +11 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_docs_and_skill.py +18 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_doctor.py +79 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_help_subprocess.py +31 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_json_contracts.py +174 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_service_boundaries.py +10 -4
- taskledger-0.4.1/tests/test_worker_pipeline_cli.py +556 -0
- taskledger-0.4.1/tests/test_worker_pipeline_config.py +279 -0
- taskledger-0.4.1/tests/test_worker_pipeline_context.py +210 -0
- taskledger-0.4.1/tests/test_worker_pipeline_handoff.py +163 -0
- taskledger-0.4.1/tests/test_worker_pipeline_plan_template.py +158 -0
- taskledger-0.4.1/tests/test_worker_pipeline_todos.py +241 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/.codecrate.toml +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/.github/workflows/codecov.yml +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/.github/workflows/pre-commit.yml +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/.github/workflows/python-publish.yml +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/.github/workflows/tests.yml +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/.gitignore +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/.pre-commit-config.yaml +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/.readthedocs.yaml +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/.ruff.toml +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/LICENSE +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/Makefile +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/docs/Makefile +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/docs/api.rst +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/docs/architecture_taskledger_split.rst +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/docs/build.sh +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/docs/conf.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/docs/index.rst +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/docs/multi_repo.rst +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/docs/public_surface.rst +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/docs/requirements.txt +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/docs/service_boundary_whitelist.rst +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/docs/sync.rst +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/docs/transfer.rst +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/pyproject.toml +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/setup.cfg +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/setup.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/__init__.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/__main__.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/__init__.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/introductions.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/locks.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/plans.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/project.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/questions.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/releases.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/search.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/storage.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/sync.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/task_runs.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/api/tasks.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_actor.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_common.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_implement.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_ledger.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_migrate.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_question.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_release.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_report.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_storage.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_sync.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_task.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/cli_validate.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/__init__.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/_model_utils.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/active_state.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/actor.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/change.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/check.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/event.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/lock.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/models.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/plan.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/policies.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/question.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/release.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/run.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/states.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/domain/task.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/errors.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/exchange.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/ids.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/launcher.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/py.typed +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/search.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/__init__.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/actors.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/agent_logging.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/agent_transcripts.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/change_tracking.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/check_tracking.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/command_runner.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/dashboard.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/doctor.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/doctor_checks/migration_checks.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/doctor_checks/project_scan.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/git_sync.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/handoff_lifecycle.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/html_reports.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/implementation_flow.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/next_action_model.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/phase5_lock_transfer.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/plan_hash.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/plan_lint.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/plan_review.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/releases.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/run_store.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/serve_read_model.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/storage_locations.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/task_archive.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/task_collections.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/task_lifecycle.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/task_queries.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/task_repair.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/tree.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/validation.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/validation_flow.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/web_dashboard.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/services/workflow_guidance.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/__init__.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/agent_logs.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/atomic.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/common.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/events.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/frontmatter.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/indexes.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/init.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/ledger_config.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/locks.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/meta.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/migrations.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/paths.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/project_identity.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/repos.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/storage/task_store.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/templates/__init__.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/templates/base.html +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/templates/error.html +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/templates/site_index.html +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/templates/task_report.html +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger/timeutils.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger.egg-info/dependency_links.txt +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger.egg-info/entry_points.txt +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger.egg-info/requires.txt +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/taskledger.egg-info/top_level.txt +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/__init__.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/conftest.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/support/__init__.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/support/builders.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_active_task.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_actor_harness_state.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_agent_command_logging.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_agent_session_protocol.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_atomic_fast_io.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_cli_command_contract.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_cli_import_resilience.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_command_example_linter.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_command_inventory.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_compact_mutation_output.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_delta_remaining_contracts.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_domain_policies.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_events.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_handoff_lifecycle.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_html_reports.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_implementation_change_scan.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_implementation_checks.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_legacy_cleanup_contracts.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_lifecycle_policies.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_locks_audit.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_models_v1_schema.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_next_action_expired_lock.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_no_log_feature.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_plan_approval_contract.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_plan_lint.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_plan_review.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_plan_revision_workflow.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_plan_todo_materialization.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_project_root_config.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_question_add_many.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_question_filter_answers.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_question_plan_regeneration.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_release_changelog.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_search.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_serve_dashboard.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_services_dashboard.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_sidecar_collections.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_storage_bundle_layout.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_storage_common.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_storage_init.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_storage_migration.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_storage_repos.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_storage_sync.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_sync_git.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_task_archive.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_task_events.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_task_report.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_taskledger_branch_scoped_ledgers.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_taskledger_cli_api_parity.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_taskledger_v2_cli.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_taskledger_v2_exchange.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_tasks_service_static.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_todo_implementation_gate.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_tree_command.py +0 -0
- {taskledger-0.4.0 → taskledger-0.4.1}/tests/test_workflow_guidance.py +0 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Project-local archledger configuration.
|
|
2
|
+
# This file lives in the source project root.
|
|
3
|
+
config_version = 5
|
|
4
|
+
archledger_dir = "../archledger-state/taskledger"
|
|
5
|
+
|
|
6
|
+
# Stable project identity. Commit this with your source tree.
|
|
7
|
+
project_uuid = "5d87017e-db40-4c72-90c8-5d3753e13f43"
|
|
8
|
+
project_name = "taskledger"
|
|
9
|
+
|
|
10
|
+
[source]
|
|
11
|
+
format = "markdown"
|
|
12
|
+
front_matter = "yaml"
|
|
13
|
+
section_extension = ".md"
|
|
14
|
+
record_extension = ".md"
|
|
15
|
+
schema_version = 2
|
|
16
|
+
|
|
17
|
+
[build]
|
|
18
|
+
default_format = "markdown"
|
|
19
|
+
default_output_dir = "build"
|
|
20
|
+
include_draft = false
|
|
21
|
+
include_superseded = false
|
|
22
|
+
strict = false
|
|
23
|
+
keep_intermediate = false
|
|
24
|
+
converter = "auto"
|
|
25
|
+
|
|
26
|
+
[arc42]
|
|
27
|
+
template_version = "9.0-EN"
|
|
28
|
+
language = "en"
|
|
29
|
+
title = "Architecture Documentation"
|
|
30
|
+
include_help = false
|
|
31
|
+
|
|
32
|
+
[skill]
|
|
33
|
+
installed = true
|
|
34
|
+
path = "skills/archledger/SKILL.md"
|
|
35
|
+
|
|
36
|
+
[tracking]
|
|
37
|
+
enabled = true
|
|
38
|
+
state_file = "source-state.json"
|
|
39
|
+
scanner = "auto"
|
|
40
|
+
include = [
|
|
41
|
+
"**/*.py",
|
|
42
|
+
"**/*.toml",
|
|
43
|
+
"**/*.md",
|
|
44
|
+
"**/*.adoc",
|
|
45
|
+
"**/*.rst",
|
|
46
|
+
"**/*.j2",
|
|
47
|
+
"**/*.yaml",
|
|
48
|
+
"**/*.yml",
|
|
49
|
+
"**/*.json",
|
|
50
|
+
]
|
|
51
|
+
exclude = [
|
|
52
|
+
".git/**",
|
|
53
|
+
".venv/**",
|
|
54
|
+
"**/__pycache__/**",
|
|
55
|
+
".mypy_cache/**",
|
|
56
|
+
".pytest_cache/**",
|
|
57
|
+
".ruff_cache/**",
|
|
58
|
+
"dist/**",
|
|
59
|
+
"build/**",
|
|
60
|
+
]
|
|
61
|
+
max_file_bytes = 1000000
|
|
62
|
+
hash_algorithm = "sha256"
|
|
@@ -9,7 +9,7 @@ project_uuid = "081c7c05-2d10-42b7-9b37-3d814c2f400a"
|
|
|
9
9
|
# Taskledger branch-scoped state. This block is intentionally safe to commit.
|
|
10
10
|
ledger_ref = "main"
|
|
11
11
|
ledger_parent_ref = ""
|
|
12
|
-
ledger_next_task_number =
|
|
12
|
+
ledger_next_task_number = 90
|
|
13
13
|
ledger_branch_guard = "off"
|
|
14
14
|
|
|
15
15
|
[prompt_profiles.planning]
|
|
@@ -356,10 +356,7 @@ Docs, examples, command inventory, and skill files must agree.
|
|
|
356
356
|
When changing commands or workflow behavior, update as needed:
|
|
357
357
|
|
|
358
358
|
- `README.md`
|
|
359
|
-
- `docs
|
|
360
|
-
- `docs/full_task_cycle.rst`
|
|
361
|
-
- `docs/usage.rst`
|
|
362
|
-
- `docs/public_surface.rst`
|
|
359
|
+
- rst files in `docs/`
|
|
363
360
|
- `API.md`
|
|
364
361
|
- `skills/taskledger/SKILL.md`
|
|
365
362
|
- `taskledger/command_inventory.py`
|
|
@@ -375,23 +372,7 @@ Do not package skills inside `taskledger/`.
|
|
|
375
372
|
|
|
376
373
|
Every non-trivial behavior change needs verification.
|
|
377
374
|
|
|
378
|
-
Prefer the test closest to the changed logic
|
|
379
|
-
|
|
380
|
-
- policy/gate change -> `tests/test_domain_policies.py` or lifecycle tests
|
|
381
|
-
- task lifecycle change -> `tests/test_taskledger_v2_cli.py`, `tests/test_delta_remaining_contracts.py`, or service tests
|
|
382
|
-
- active-task behavior -> `tests/test_active_task.py`
|
|
383
|
-
- CLI grammar -> `tests/test_cli_command_contract.py`, `tests/test_taskledger_cli_api_parity.py`
|
|
384
|
-
- JSON envelope -> `tests/test_json_contracts.py`
|
|
385
|
-
- docs/skill command examples -> `tests/test_docs_and_skill.py`, `tests/test_command_example_linter.py`
|
|
386
|
-
- plan approval -> `tests/test_plan_approval_contract.py`
|
|
387
|
-
- plan todos -> `tests/test_plan_todo_materialization.py`
|
|
388
|
-
- questions/regeneration -> `tests/test_question_filter_answers.py`, `tests/test_question_plan_regeneration.py`
|
|
389
|
-
- todo gates -> `tests/test_todo_implementation_gate.py`
|
|
390
|
-
- locks -> `tests/test_locks_audit.py`, doctor tests
|
|
391
|
-
- storage -> `tests/test_storage_*.py`, `tests/test_storage_bundle_layout.py`, `tests/test_sidecar_collections.py`
|
|
392
|
-
- handoff -> `tests/test_handoff_lifecycle.py`
|
|
393
|
-
- search -> `tests/test_search.py`
|
|
394
|
-
- export/import -> `tests/test_taskledger_v2_exchange.py`
|
|
375
|
+
Prefer the test closest to the changed logic.
|
|
395
376
|
|
|
396
377
|
### 12.2 Regression paths to test
|
|
397
378
|
|
|
@@ -416,33 +397,11 @@ Include error paths when relevant:
|
|
|
416
397
|
|
|
417
398
|
### 12.3 Verification command progression
|
|
418
399
|
|
|
419
|
-
Start narrow. Expand only when needed.
|
|
400
|
+
Start narrow. Expand only when needed. Try to run specific test files first,
|
|
401
|
+
only one example for a single pytest is given, figure it out which test to run.
|
|
420
402
|
|
|
421
403
|
```bash
|
|
422
|
-
python -m pip install -e .
|
|
423
|
-
python -m pip install -e ".[dev]"
|
|
424
|
-
|
|
425
404
|
pytest tests/test_domain_policies.py
|
|
426
|
-
pytest tests/test_active_task.py
|
|
427
|
-
pytest tests/test_taskledger_v2_cli.py
|
|
428
|
-
pytest tests/test_delta_remaining_contracts.py
|
|
429
|
-
pytest tests/test_plan_approval_contract.py
|
|
430
|
-
pytest tests/test_plan_todo_materialization.py
|
|
431
|
-
pytest tests/test_question_filter_answers.py
|
|
432
|
-
pytest tests/test_question_plan_regeneration.py
|
|
433
|
-
pytest tests/test_todo_implementation_gate.py
|
|
434
|
-
pytest tests/test_locks_audit.py
|
|
435
|
-
pytest tests/test_handoff_lifecycle.py
|
|
436
|
-
pytest tests/test_json_contracts.py
|
|
437
|
-
pytest tests/test_docs_and_skill.py
|
|
438
|
-
pytest tests/test_command_example_linter.py
|
|
439
|
-
pytest tests/test_storage_bundle_layout.py
|
|
440
|
-
pytest tests/test_storage_common.py
|
|
441
|
-
pytest tests/test_storage_contexts.py
|
|
442
|
-
pytest tests/test_storage_items.py
|
|
443
|
-
pytest tests/test_storage_memories.py
|
|
444
|
-
pytest tests/test_storage_repos.py
|
|
445
|
-
pytest tests/test_storage_validation.py
|
|
446
405
|
pytest
|
|
447
406
|
|
|
448
407
|
ruff check --config=.ruff.toml .
|
|
@@ -198,6 +198,7 @@ render_handoff(
|
|
|
198
198
|
*,
|
|
199
199
|
mode: str | None = None,
|
|
200
200
|
context_for: str | None = None,
|
|
201
|
+
worker_step_id: str | None = None,
|
|
201
202
|
scope: str | None = None,
|
|
202
203
|
todo_id: str | None = None,
|
|
203
204
|
focus_run_id: str | None = None,
|
|
@@ -208,8 +209,9 @@ create_handoff(
|
|
|
208
209
|
workspace_root: Path,
|
|
209
210
|
task_ref: str,
|
|
210
211
|
*,
|
|
211
|
-
mode: str,
|
|
212
|
+
mode: str | None = None,
|
|
212
213
|
context_for: str | None = None,
|
|
214
|
+
worker_step_id: str | None = None,
|
|
213
215
|
scope: str | None = None,
|
|
214
216
|
todo_id: str | None = None,
|
|
215
217
|
focus_run_id: str | None = None,
|
|
@@ -225,7 +227,10 @@ create_handoff(
|
|
|
225
227
|
|
|
226
228
|
Focused handoffs store the generated Markdown context snapshot in the handoff
|
|
227
229
|
record body and return compact metadata, including `context_hash` and
|
|
228
|
-
`context_path`.
|
|
230
|
+
`context_path`. When `worker_step_id` is supplied, taskledger derives the
|
|
231
|
+
handoff mode and context from the configured worker step, persists
|
|
232
|
+
`worker_step_id` in the handoff record, and includes the resolved worker-step
|
|
233
|
+
details in JSON context payloads.
|
|
229
234
|
|
|
230
235
|
### `taskledger.api.releases`
|
|
231
236
|
|
|
@@ -1,6 +1,37 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## v0.4.
|
|
3
|
+
## v0.4.1 - 2026-05-22
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Added optional configurable worker pipeline overlay: opt-in `[worker_pipeline]` project config, read-only `pipeline show`, `pipeline list`, and `pipeline next` commands, worker-aware `context --worker` and `handoff create --worker` support, and worker-tagged plan todos with materialization and template hints.
|
|
8
|
+
- Added guided worker-pipeline next-action metadata and command hints in `next-action` output for `guided` mode projects.
|
|
9
|
+
- Added worker-pipeline config extraction into `taskledger/storage/worker_pipeline_config.py` and worker-only context rendering into `taskledger/services/worker_context.py`.
|
|
10
|
+
- Added doctor warning diagnostics for stale worker-step todo and handoff references.
|
|
11
|
+
- Added shell completion support: root Typer app now enables completion options, with `--install-completion` and `--show-completion` available.
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- Worker handoff defaults now derive from configured pipeline steps when `--worker` is specified.
|
|
16
|
+
- Worker step metadata is rendered in task reports when present.
|
|
17
|
+
- Review-stage worker routing advances from closed worker handoffs.
|
|
18
|
+
- Plan template and todo parsing preserve `worker_step` metadata across export, regeneration, and materialization.
|
|
19
|
+
- Updated service boundary whitelists for worker-pipeline and doctor scan import sites.
|
|
20
|
+
|
|
21
|
+
### Documentation
|
|
22
|
+
|
|
23
|
+
- Documented worker pipeline configuration, commands, guided workflow, and config fields in README, `docs/usage.rst`, `docs/full_task_cycle.rst`, and `docs/command_contract.rst`.
|
|
24
|
+
- Updated `skills/taskledger/SKILL.md` with optional worker pipeline protocol guidance and guided next-action hints.
|
|
25
|
+
- Updated `API.md` for public handoff API signatures with `worker_step_id`.
|
|
26
|
+
- Added shell completion install and show command documentation in README and `docs/usage.rst`.
|
|
27
|
+
|
|
28
|
+
### Quality
|
|
29
|
+
|
|
30
|
+
- Added regression test modules for worker pipeline config, CLI commands, worker context, worker handoffs, worker todo materialization, guided next-action, and doctor warnings.
|
|
31
|
+
- Expanded command inventory, JSON contract, docs/skill, and service boundary tests for the new surface.
|
|
32
|
+
- Full suite: ruff and mypy clean.
|
|
33
|
+
|
|
34
|
+
## v0.4.0 - 2026-05-19
|
|
4
35
|
|
|
5
36
|
### Added
|
|
6
37
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: taskledger
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.1
|
|
4
4
|
Summary: Durable project-state storage and CLI for coding workflows
|
|
5
5
|
Author: Taskledger Contributors
|
|
6
6
|
Maintainer: Holger Nahrstaedt
|
|
@@ -73,7 +73,7 @@ The supported command surface is organized as:
|
|
|
73
73
|
|
|
74
74
|
**Operations:**
|
|
75
75
|
|
|
76
|
-
- `context`, `next-action`, `can`, `search`, `grep`, `symbols`, `deps`, `actor`, `view`, `serve`, `storage`, `sync`
|
|
76
|
+
- `context`, `pipeline`, `next-action`, `can`, `search`, `grep`, `symbols`, `deps`, `actor`, `view`, `serve`, `storage`, `sync`
|
|
77
77
|
|
|
78
78
|
**Repair and inspection:**
|
|
79
79
|
|
|
@@ -130,6 +130,73 @@ This guidance is advisory and cannot override lifecycle gates, user approval,
|
|
|
130
130
|
validation requirements, lock rules, or higher-priority harness instructions.
|
|
131
131
|
See `docs/usage.rst` for the full key reference and workflow details.
|
|
132
132
|
|
|
133
|
+
## Optional worker pipelines
|
|
134
|
+
|
|
135
|
+
Projects may optionally configure worker pipelines in `taskledger.toml` to guide
|
|
136
|
+
fresh-context handoffs. Worker pipelines are advisory overlays on the existing
|
|
137
|
+
planning, implementation, and validation lifecycle. They can be three steps,
|
|
138
|
+
four steps, five steps, or custom. When no worker pipeline is configured, the
|
|
139
|
+
default taskledger behavior is unchanged.
|
|
140
|
+
|
|
141
|
+
```toml
|
|
142
|
+
[worker_pipeline]
|
|
143
|
+
enabled = true
|
|
144
|
+
name = "tdd-four-context"
|
|
145
|
+
mode = "guided"
|
|
146
|
+
|
|
147
|
+
[[worker_pipeline.steps]]
|
|
148
|
+
id = "planner"
|
|
149
|
+
lifecycle_stage = "planning"
|
|
150
|
+
base_context = "planner"
|
|
151
|
+
|
|
152
|
+
[[worker_pipeline.steps]]
|
|
153
|
+
id = "tester"
|
|
154
|
+
label = "Test Writer"
|
|
155
|
+
lifecycle_stage = "implementation"
|
|
156
|
+
base_context = "implementer"
|
|
157
|
+
actor_role = "implementer"
|
|
158
|
+
kind = "check"
|
|
159
|
+
description = "Add or update failing tests before code changes."
|
|
160
|
+
required_output = ["New or updated failing tests with a short summary."]
|
|
161
|
+
must_not = ["Do not change production code in this step."]
|
|
162
|
+
todo_tag = "tests"
|
|
163
|
+
test_command_policy = "may_fail"
|
|
164
|
+
|
|
165
|
+
[[worker_pipeline.steps]]
|
|
166
|
+
id = "coder"
|
|
167
|
+
lifecycle_stage = "implementation"
|
|
168
|
+
base_context = "implementer"
|
|
169
|
+
kind = "todo"
|
|
170
|
+
description = "Implement the approved change and make the tests pass."
|
|
171
|
+
required_output = ["Code changes plus passing targeted checks."]
|
|
172
|
+
must_not = ["Do not skip required validation evidence."]
|
|
173
|
+
todo_tag = "implementation"
|
|
174
|
+
test_command_policy = "must_pass"
|
|
175
|
+
|
|
176
|
+
[[worker_pipeline.steps]]
|
|
177
|
+
id = "reviewer"
|
|
178
|
+
lifecycle_stage = "review"
|
|
179
|
+
base_context = "code-reviewer"
|
|
180
|
+
kind = "review"
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Supported top-level keys are `enabled`, `name`, `mode`, and `steps`. Supported
|
|
184
|
+
step keys are `id`, `label`, `lifecycle_stage`, `base_context`, `actor_role`,
|
|
185
|
+
`kind`, `description`, `required_output`, `must_not`, `todo_tag`, and
|
|
186
|
+
`test_command_policy`. `mode = "guided"` does not add lifecycle gates; it adds
|
|
187
|
+
worker-step hints to `taskledger next-action`, including the pending step id plus
|
|
188
|
+
ready-to-run worker context and handoff commands.
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
taskledger pipeline show
|
|
192
|
+
taskledger pipeline next
|
|
193
|
+
taskledger next-action
|
|
194
|
+
taskledger context --worker tester
|
|
195
|
+
taskledger pipeline context tester
|
|
196
|
+
taskledger handoff create --worker tester --summary "Add failing tests only."
|
|
197
|
+
taskledger plan template --with-worker-pipeline --file ./plan.md
|
|
198
|
+
```
|
|
199
|
+
|
|
133
200
|
## Install
|
|
134
201
|
|
|
135
202
|
```bash
|
|
@@ -137,6 +204,22 @@ python -m pip install -e .
|
|
|
137
204
|
python -m pip install -e ".[dev]"
|
|
138
205
|
```
|
|
139
206
|
|
|
207
|
+
### Shell completion
|
|
208
|
+
|
|
209
|
+
After installing `taskledger`, install completion for your current shell:
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
taskledger --install-completion
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
To inspect the generated completion script instead of installing it:
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
taskledger --show-completion
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Restart your shell session after installation.
|
|
222
|
+
|
|
140
223
|
## Quick start
|
|
141
224
|
|
|
142
225
|
Initialize durable state in the current workspace:
|
|
@@ -29,7 +29,7 @@ The supported command surface is organized as:
|
|
|
29
29
|
|
|
30
30
|
**Operations:**
|
|
31
31
|
|
|
32
|
-
- `context`, `next-action`, `can`, `search`, `grep`, `symbols`, `deps`, `actor`, `view`, `serve`, `storage`, `sync`
|
|
32
|
+
- `context`, `pipeline`, `next-action`, `can`, `search`, `grep`, `symbols`, `deps`, `actor`, `view`, `serve`, `storage`, `sync`
|
|
33
33
|
|
|
34
34
|
**Repair and inspection:**
|
|
35
35
|
|
|
@@ -86,6 +86,73 @@ This guidance is advisory and cannot override lifecycle gates, user approval,
|
|
|
86
86
|
validation requirements, lock rules, or higher-priority harness instructions.
|
|
87
87
|
See `docs/usage.rst` for the full key reference and workflow details.
|
|
88
88
|
|
|
89
|
+
## Optional worker pipelines
|
|
90
|
+
|
|
91
|
+
Projects may optionally configure worker pipelines in `taskledger.toml` to guide
|
|
92
|
+
fresh-context handoffs. Worker pipelines are advisory overlays on the existing
|
|
93
|
+
planning, implementation, and validation lifecycle. They can be three steps,
|
|
94
|
+
four steps, five steps, or custom. When no worker pipeline is configured, the
|
|
95
|
+
default taskledger behavior is unchanged.
|
|
96
|
+
|
|
97
|
+
```toml
|
|
98
|
+
[worker_pipeline]
|
|
99
|
+
enabled = true
|
|
100
|
+
name = "tdd-four-context"
|
|
101
|
+
mode = "guided"
|
|
102
|
+
|
|
103
|
+
[[worker_pipeline.steps]]
|
|
104
|
+
id = "planner"
|
|
105
|
+
lifecycle_stage = "planning"
|
|
106
|
+
base_context = "planner"
|
|
107
|
+
|
|
108
|
+
[[worker_pipeline.steps]]
|
|
109
|
+
id = "tester"
|
|
110
|
+
label = "Test Writer"
|
|
111
|
+
lifecycle_stage = "implementation"
|
|
112
|
+
base_context = "implementer"
|
|
113
|
+
actor_role = "implementer"
|
|
114
|
+
kind = "check"
|
|
115
|
+
description = "Add or update failing tests before code changes."
|
|
116
|
+
required_output = ["New or updated failing tests with a short summary."]
|
|
117
|
+
must_not = ["Do not change production code in this step."]
|
|
118
|
+
todo_tag = "tests"
|
|
119
|
+
test_command_policy = "may_fail"
|
|
120
|
+
|
|
121
|
+
[[worker_pipeline.steps]]
|
|
122
|
+
id = "coder"
|
|
123
|
+
lifecycle_stage = "implementation"
|
|
124
|
+
base_context = "implementer"
|
|
125
|
+
kind = "todo"
|
|
126
|
+
description = "Implement the approved change and make the tests pass."
|
|
127
|
+
required_output = ["Code changes plus passing targeted checks."]
|
|
128
|
+
must_not = ["Do not skip required validation evidence."]
|
|
129
|
+
todo_tag = "implementation"
|
|
130
|
+
test_command_policy = "must_pass"
|
|
131
|
+
|
|
132
|
+
[[worker_pipeline.steps]]
|
|
133
|
+
id = "reviewer"
|
|
134
|
+
lifecycle_stage = "review"
|
|
135
|
+
base_context = "code-reviewer"
|
|
136
|
+
kind = "review"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Supported top-level keys are `enabled`, `name`, `mode`, and `steps`. Supported
|
|
140
|
+
step keys are `id`, `label`, `lifecycle_stage`, `base_context`, `actor_role`,
|
|
141
|
+
`kind`, `description`, `required_output`, `must_not`, `todo_tag`, and
|
|
142
|
+
`test_command_policy`. `mode = "guided"` does not add lifecycle gates; it adds
|
|
143
|
+
worker-step hints to `taskledger next-action`, including the pending step id plus
|
|
144
|
+
ready-to-run worker context and handoff commands.
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
taskledger pipeline show
|
|
148
|
+
taskledger pipeline next
|
|
149
|
+
taskledger next-action
|
|
150
|
+
taskledger context --worker tester
|
|
151
|
+
taskledger pipeline context tester
|
|
152
|
+
taskledger handoff create --worker tester --summary "Add failing tests only."
|
|
153
|
+
taskledger plan template --with-worker-pipeline --file ./plan.md
|
|
154
|
+
```
|
|
155
|
+
|
|
89
156
|
## Install
|
|
90
157
|
|
|
91
158
|
```bash
|
|
@@ -93,6 +160,22 @@ python -m pip install -e .
|
|
|
93
160
|
python -m pip install -e ".[dev]"
|
|
94
161
|
```
|
|
95
162
|
|
|
163
|
+
### Shell completion
|
|
164
|
+
|
|
165
|
+
After installing `taskledger`, install completion for your current shell:
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
taskledger --install-completion
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
To inspect the generated completion script instead of installing it:
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
taskledger --show-completion
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Restart your shell session after installation.
|
|
178
|
+
|
|
96
179
|
## Quick start
|
|
97
180
|
|
|
98
181
|
Initialize durable state in the current workspace:
|
|
@@ -276,6 +276,9 @@ Human output should stay concise but actionable:
|
|
|
276
276
|
todo-work: Implementation is in progress; 1 todos remain.
|
|
277
277
|
Next todo: todo-0001 -- Update next-action JSON payload.
|
|
278
278
|
Command: taskledger todo show todo-0001
|
|
279
|
+
Worker step: tester
|
|
280
|
+
Worker context: taskledger pipeline context tester
|
|
281
|
+
Worker handoff: taskledger handoff create --worker tester --summary "..."
|
|
279
282
|
Mark todo done after evidence exists: taskledger todo done todo-0001 --evidence "..."
|
|
280
283
|
Progress: 0/1 todos done
|
|
281
284
|
|
|
@@ -295,6 +298,9 @@ and may also include:
|
|
|
295
298
|
* ``next_item`` for the concrete target
|
|
296
299
|
* ``commands`` for ordered command hints with one primary command
|
|
297
300
|
* ``progress`` for question, todo, or validation queues
|
|
301
|
+
* ``worker_pipeline`` when an enabled ``guided`` worker pipeline has a pending
|
|
302
|
+
step; this object includes ``enabled``, ``mode``, ``next_step``,
|
|
303
|
+
``context_command``, and ``handoff_command``
|
|
298
304
|
* ``template_command`` plus ``required_plan_fields`` and
|
|
299
305
|
``recommended_plan_fields`` when the next step is regenerating a plan from
|
|
300
306
|
answered questions
|
|
@@ -431,6 +437,8 @@ Focused worker contexts keep lifecycle ``mode`` separate from worker-role
|
|
|
431
437
|
|
|
432
438
|
taskledger context --for planner|implementer|validator|spec-reviewer|code-reviewer|reviewer|full [--scope task|todo|run] [--todo TODO_ID] [--run RUN_ID] [--format markdown|json|text] [--task TASK_REF]
|
|
433
439
|
taskledger handoff create --mode planning|implementation|validation|review|full [--for planner|implementer|validator|spec-reviewer|code-reviewer|reviewer|full] [--scope task|todo|run] [--todo TODO_ID] [--run RUN_ID] [--task TASK_REF]
|
|
440
|
+
taskledger handoff create --worker STEP_ID [--scope task|todo|run] [--todo TODO_ID] [--run RUN_ID] [--task TASK_REF]
|
|
441
|
+
taskledger pipeline context STEP_ID [--scope task|todo|run] [--todo TODO_ID] [--run RUN_ID] [--format markdown|json|text] [--task TASK_REF]
|
|
434
442
|
taskledger handoff show HANDOFF_ID --format text|markdown|json [--task TASK_REF]
|
|
435
443
|
|
|
436
444
|
Rules:
|
|
@@ -441,6 +449,11 @@ Rules:
|
|
|
441
449
|
* ``--scope run`` requires ``--run``.
|
|
442
450
|
* ``--for implementation|validation|planning|review|full`` remain accepted as
|
|
443
451
|
compatibility aliases.
|
|
452
|
+
* ``handoff create --worker`` derives mode and context from the configured
|
|
453
|
+
worker step and stores ``worker_step_id`` in the handoff record.
|
|
454
|
+
* ``pipeline context STEP_ID`` is equivalent to ``context --worker STEP_ID``.
|
|
455
|
+
* ``spec-reviewer`` and ``code-reviewer`` worker contexts require ``--run`` or
|
|
456
|
+
explicit ``--scope task`` when they are not bound to a validation/review run.
|
|
444
457
|
* ``handoff show --format markdown`` prints the stored snapshot body.
|
|
445
458
|
|
|
446
459
|
Removed Pre-Release Aliases
|
|
@@ -149,6 +149,25 @@ may also materialize structured plan todos:
|
|
|
149
149
|
Mandatory todos gate implementation completion. Optional todos remain visible but
|
|
150
150
|
do not block ``implement finish``.
|
|
151
151
|
|
|
152
|
+
If the project has an enabled worker pipeline, plan todos may optionally target
|
|
153
|
+
configured worker steps. This is an advisory overlay, not a new lifecycle stage:
|
|
154
|
+
|
|
155
|
+
.. code-block:: yaml
|
|
156
|
+
|
|
157
|
+
todos:
|
|
158
|
+
- id: plan-todo-0001
|
|
159
|
+
text: "Add failing regression tests."
|
|
160
|
+
worker_step: "tester"
|
|
161
|
+
validation_hint: "pytest tests/test_parser.py -q"
|
|
162
|
+
|
|
163
|
+
Use the worker overlay explicitly:
|
|
164
|
+
|
|
165
|
+
.. code-block:: bash
|
|
166
|
+
|
|
167
|
+
taskledger pipeline next
|
|
168
|
+
taskledger context --worker tester
|
|
169
|
+
taskledger handoff create --worker tester --summary "Add failing tests only."
|
|
170
|
+
|
|
152
171
|
All approval escape hatches require ``--reason``:
|
|
153
172
|
|
|
154
173
|
- ``--allow-empty-criteria --reason "..."``
|
|
@@ -9,6 +9,23 @@ Installation
|
|
|
9
9
|
python -m pip install -e .
|
|
10
10
|
python -m pip install -e ".[dev]"
|
|
11
11
|
|
|
12
|
+
Shell completion
|
|
13
|
+
----------------
|
|
14
|
+
|
|
15
|
+
After installing ``taskledger``, install completion for the current shell:
|
|
16
|
+
|
|
17
|
+
.. code-block:: bash
|
|
18
|
+
|
|
19
|
+
taskledger --install-completion
|
|
20
|
+
|
|
21
|
+
To print the generated completion script without installing it:
|
|
22
|
+
|
|
23
|
+
.. code-block:: bash
|
|
24
|
+
|
|
25
|
+
taskledger --show-completion
|
|
26
|
+
|
|
27
|
+
Restart your shell session after installation.
|
|
28
|
+
|
|
12
29
|
Agent workflows work best when the ``taskledger`` skill is installed in the
|
|
13
30
|
coding harness. The CLI uses a task-first lifecycle with explicit planning,
|
|
14
31
|
approval, implementation, validation, locks, and handoff gates; without the
|
|
@@ -139,6 +156,100 @@ enforce plan fields by itself. It cannot override lifecycle gates, plan approval
|
|
|
139
156
|
validation requirements, lock rules, required user answers, or higher-priority
|
|
140
157
|
harness instructions.
|
|
141
158
|
|
|
159
|
+
Optional worker pipelines
|
|
160
|
+
-------------------------
|
|
161
|
+
|
|
162
|
+
Projects may optionally configure worker pipelines in ``taskledger.toml`` to
|
|
163
|
+
guide fresh-context handoffs without changing the underlying task lifecycle.
|
|
164
|
+
Worker pipelines are advisory overlays on the existing planning,
|
|
165
|
+
implementation, and validation lifecycle. They can be three steps, four steps,
|
|
166
|
+
five steps, or custom. When no worker pipeline is configured, taskledger
|
|
167
|
+
behavior is unchanged.
|
|
168
|
+
|
|
169
|
+
Example configuration:
|
|
170
|
+
|
|
171
|
+
.. code-block:: toml
|
|
172
|
+
|
|
173
|
+
[worker_pipeline]
|
|
174
|
+
enabled = true
|
|
175
|
+
name = "api-contract-first"
|
|
176
|
+
mode = "guided"
|
|
177
|
+
|
|
178
|
+
[[worker_pipeline.steps]]
|
|
179
|
+
id = "planner"
|
|
180
|
+
lifecycle_stage = "planning"
|
|
181
|
+
base_context = "planner"
|
|
182
|
+
|
|
183
|
+
[[worker_pipeline.steps]]
|
|
184
|
+
id = "tester"
|
|
185
|
+
label = "Test Writer"
|
|
186
|
+
lifecycle_stage = "implementation"
|
|
187
|
+
base_context = "implementer"
|
|
188
|
+
actor_role = "implementer"
|
|
189
|
+
kind = "check"
|
|
190
|
+
description = "Add or update failing tests before code changes."
|
|
191
|
+
required_output = ["New or updated failing tests with a short summary."]
|
|
192
|
+
must_not = ["Do not change production code in this step."]
|
|
193
|
+
todo_tag = "tests"
|
|
194
|
+
test_command_policy = "may_fail"
|
|
195
|
+
|
|
196
|
+
[[worker_pipeline.steps]]
|
|
197
|
+
id = "coder"
|
|
198
|
+
lifecycle_stage = "implementation"
|
|
199
|
+
base_context = "implementer"
|
|
200
|
+
kind = "todo"
|
|
201
|
+
description = "Implement the approved change and make the tests pass."
|
|
202
|
+
required_output = ["Code changes plus passing targeted checks."]
|
|
203
|
+
must_not = ["Do not skip required validation evidence."]
|
|
204
|
+
todo_tag = "implementation"
|
|
205
|
+
test_command_policy = "must_pass"
|
|
206
|
+
|
|
207
|
+
[[worker_pipeline.steps]]
|
|
208
|
+
id = "domain-reviewer"
|
|
209
|
+
lifecycle_stage = "review"
|
|
210
|
+
base_context = "spec-reviewer"
|
|
211
|
+
kind = "review"
|
|
212
|
+
|
|
213
|
+
Supported top-level keys are ``enabled``, ``name``, ``mode``, and ``steps``.
|
|
214
|
+
Supported step keys are ``id``, ``label``, ``lifecycle_stage``,
|
|
215
|
+
``base_context``, ``actor_role``, ``kind``, ``description``,
|
|
216
|
+
``required_output``, ``must_not``, ``todo_tag``, and
|
|
217
|
+
``test_command_policy``. ``guided`` mode remains advisory: it does not add
|
|
218
|
+
new planning, implementation, or validation gates. Instead it augments
|
|
219
|
+
``taskledger next-action`` with worker-step metadata plus ready-to-run worker
|
|
220
|
+
context and handoff commands for the pending step.
|
|
221
|
+
|
|
222
|
+
Inspect and use the configured overlay explicitly:
|
|
223
|
+
|
|
224
|
+
.. code-block:: bash
|
|
225
|
+
|
|
226
|
+
taskledger pipeline show
|
|
227
|
+
taskledger pipeline list
|
|
228
|
+
taskledger pipeline next
|
|
229
|
+
taskledger next-action
|
|
230
|
+
taskledger pipeline context tester
|
|
231
|
+
taskledger context --worker tester
|
|
232
|
+
taskledger handoff create --worker tester --summary "Add failing tests only."
|
|
233
|
+
taskledger handoff create --worker domain-reviewer --scope task --summary "Review the implementation."
|
|
234
|
+
|
|
235
|
+
To include worker-step todo hints in a plan template, enable a worker pipeline
|
|
236
|
+
with ``mode = "template"`` or ``mode = "guided"`` and opt in per task:
|
|
237
|
+
|
|
238
|
+
.. code-block:: bash
|
|
239
|
+
|
|
240
|
+
taskledger plan template --with-worker-pipeline --file ./plan.md
|
|
241
|
+
|
|
242
|
+
Use ``worker_step`` only on plan todos for projects that have an enabled worker
|
|
243
|
+
pipeline:
|
|
244
|
+
|
|
245
|
+
.. code-block:: yaml
|
|
246
|
+
|
|
247
|
+
todos:
|
|
248
|
+
- id: plan-todo-0001
|
|
249
|
+
text: "Add failing regression tests."
|
|
250
|
+
worker_step: "tester"
|
|
251
|
+
validation_hint: "pytest -q tests/test_parser.py"
|
|
252
|
+
|
|
142
253
|
Release tagging and changelog context
|
|
143
254
|
-------------------------------------
|
|
144
255
|
|
|
@@ -89,6 +89,18 @@ If any `taskledger ...` command fails with a Python traceback before taskledger
|
|
|
89
89
|
`taskledger ledger adopt --from REF TASK_REF` when branch-local task history
|
|
90
90
|
should be copied into the current ledger.
|
|
91
91
|
|
|
92
|
+
## Optional worker pipeline overlay
|
|
93
|
+
|
|
94
|
+
- Worker pipelines are optional project-local overlays, not mandatory lifecycle stages.
|
|
95
|
+
- No `[worker_pipeline]` config means no workflow change.
|
|
96
|
+
- Use `taskledger pipeline show`, `taskledger pipeline list`, and `taskledger pipeline next` to inspect the configured overlay.
|
|
97
|
+
- Use `taskledger context --worker STEP_ID` or `taskledger pipeline context STEP_ID` to render a worker-specific context on top of the existing base context.
|
|
98
|
+
- Use `taskledger handoff create --worker STEP_ID` to derive handoff mode and context from a configured worker step.
|
|
99
|
+
- In `guided` mode, inspect `taskledger next-action` for `worker_pipeline.next_step`, `context_command`, and `handoff_command` hints. These are advisory only; they do not add new lifecycle gates.
|
|
100
|
+
- Reviewer worker steps (`spec-reviewer`, `code-reviewer`) may require `--scope task` when no focused run is available.
|
|
101
|
+
- Use `taskledger plan template --with-worker-pipeline --file ./plan.md` only when the project has an enabled worker pipeline and the task should use worker-tagged plan todos.
|
|
102
|
+
- `worker_step` on plan todos is valid only when the project has an enabled worker pipeline.
|
|
103
|
+
|
|
92
104
|
## Planning protocol
|
|
93
105
|
|
|
94
106
|
1. `taskledger task create "Short task request" --slug <slug>` when creating a fresh task.
|
|
@@ -105,6 +117,7 @@ If any `taskledger ...` command fails with a Python traceback before taskledger
|
|
|
105
117
|
10. When the user answers in chat, record the answers yourself with `taskledger question answer-many` or `taskledger question answer`.
|
|
106
118
|
11. Run `taskledger question status` and review all answered questions with `taskledger question answers` before writing the plan.
|
|
107
119
|
12. Before reading source files to discover plan format, run `taskledger plan template --from-answers --file ./plan.md` when answered questions exist, or `taskledger plan template --file ./plan.md` for a fresh plan skeleton.
|
|
120
|
+
- If the project has an enabled worker pipeline and this task should use worker-tagged todos, add `--with-worker-pipeline`.
|
|
108
121
|
13. If answered questions exist, write the next plan with `taskledger plan upsert --from-answers --file ./plan.md`.
|
|
109
122
|
14. Use `taskledger plan upsert --file ./plan.md` for plans that are not based on newly answered questions.
|
|
110
123
|
15. Never edit `.taskledger/` files directly. Treat `.taskledger/` as Taskledger private durable state.
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.4.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 4,
|
|
21
|
+
__version__ = version = '0.4.1'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 4, 1)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'gde39c5f9d'
|