taskledger 0.3.1__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.3.1 → taskledger-0.4.1}/.taskledger.toml +3 -3
- {taskledger-0.3.1 → taskledger-0.4.1}/AGENTS.md +4 -45
- {taskledger-0.3.1 → taskledger-0.4.1}/API.md +18 -2
- {taskledger-0.3.1 → taskledger-0.4.1}/CHANGELOG.md +69 -0
- {taskledger-0.3.1/taskledger.egg-info → taskledger-0.4.1}/PKG-INFO +149 -20
- {taskledger-0.3.1 → taskledger-0.4.1}/README.md +147 -19
- {taskledger-0.3.1 → taskledger-0.4.1}/docs/command_contract.rst +72 -4
- {taskledger-0.3.1 → taskledger-0.4.1}/docs/full_task_cycle.rst +19 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/docs/index.rst +1 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/docs/public_surface.rst +8 -0
- taskledger-0.4.1/docs/sync.rst +166 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/docs/transfer.rst +3 -1
- {taskledger-0.3.1 → taskledger-0.4.1}/docs/usage.rst +139 -10
- {taskledger-0.3.1 → taskledger-0.4.1}/pyproject.toml +2 -2
- {taskledger-0.3.1 → taskledger-0.4.1}/skills/taskledger/SKILL.md +36 -13
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/_version.py +3 -3
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/api/__init__.py +1 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/api/handoff.py +30 -19
- taskledger-0.4.1/taskledger/api/storage.py +44 -0
- taskledger-0.4.1/taskledger/api/sync.py +300 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/cli.py +75 -8
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/cli_implement.py +1 -1
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/cli_misc.py +26 -1
- taskledger-0.4.1/taskledger/cli_pipeline.py +166 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/cli_plan.py +8 -0
- taskledger-0.4.1/taskledger/cli_report.py +171 -0
- taskledger-0.4.1/taskledger/cli_storage.py +115 -0
- taskledger-0.4.1/taskledger/cli_sync.py +926 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/command_inventory.py +254 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/domain/handoff.py +6 -1
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/domain/sidecars.py +6 -1
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/doctor_checks/task_checks.py +134 -1
- taskledger-0.4.1/taskledger/services/git_sync.py +1018 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/handoff.py +72 -140
- taskledger-0.4.1/taskledger/services/html_reports.py +331 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/navigation.py +55 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/plan_editing.py +2 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/plan_materialization.py +1 -1
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/planning_flow.py +1 -1
- taskledger-0.4.1/taskledger/services/storage_locations.py +482 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/task_reports.py +2 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/tasks.py +102 -2
- taskledger-0.4.1/taskledger/services/web_dashboard.py +239 -0
- taskledger-0.4.1/taskledger/services/worker_context.py +208 -0
- taskledger-0.4.1/taskledger/services/worker_pipeline.py +216 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/storage/project_config.py +191 -0
- taskledger-0.4.1/taskledger/storage/worker_pipeline_config.py +419 -0
- taskledger-0.4.1/taskledger/templates/__init__.py +1 -0
- taskledger-0.4.1/taskledger/templates/base.html +64 -0
- taskledger-0.4.1/taskledger/templates/error.html +6 -0
- taskledger-0.4.1/taskledger/templates/site_index.html +42 -0
- taskledger-0.4.1/taskledger/templates/task_report.html +218 -0
- {taskledger-0.3.1 → taskledger-0.4.1/taskledger.egg-info}/PKG-INFO +149 -20
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger.egg-info/SOURCES.txt +28 -3
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger.egg-info/requires.txt +1 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_cli_command_contract.py +19 -4
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_command_inventory.py +47 -11
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_docs_and_skill.py +33 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_doctor.py +79 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_help_subprocess.py +31 -0
- taskledger-0.4.1/tests/test_html_reports.py +95 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_json_contracts.py +174 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_project_root_config.py +48 -0
- taskledger-0.4.1/tests/test_serve_dashboard.py +188 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_service_boundaries.py +17 -8
- taskledger-0.4.1/tests/test_storage_sync.py +311 -0
- taskledger-0.4.1/tests/test_sync_git.py +372 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_task_report.py +78 -0
- 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.3.1/taskledger/services/web_dashboard.py +0 -529
- taskledger-0.3.1/taskledger/web_assets/dashboard.css +0 -491
- taskledger-0.3.1/taskledger/web_assets/dashboard.js +0 -1448
- taskledger-0.3.1/tests/__init__.py +0 -0
- taskledger-0.3.1/tests/test_serve_dashboard.py +0 -626
- {taskledger-0.3.1 → taskledger-0.4.1}/.codecrate.toml +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/.github/workflows/codecov.yml +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/.github/workflows/pre-commit.yml +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/.github/workflows/python-publish.yml +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/.github/workflows/tests.yml +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/.gitignore +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/.pre-commit-config.yaml +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/.readthedocs.yaml +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/.ruff.toml +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/LICENSE +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/Makefile +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/docs/Makefile +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/docs/api.rst +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/docs/architecture_taskledger_split.rst +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/docs/build.sh +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/docs/conf.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/docs/multi_repo.rst +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/docs/requirements.txt +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/docs/service_boundary_whitelist.rst +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/setup.cfg +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/setup.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/__init__.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/__main__.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/api/introductions.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/api/locks.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/api/plans.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/api/project.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/api/questions.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/api/releases.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/api/search.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/api/task_runs.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/api/tasks.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/cli_actor.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/cli_common.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/cli_ledger.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/cli_migrate.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/cli_question.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/cli_release.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/cli_task.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/cli_validate.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/domain/__init__.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/domain/_model_utils.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/domain/active_state.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/domain/actor.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/domain/change.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/domain/check.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/domain/event.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/domain/lock.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/domain/models.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/domain/plan.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/domain/policies.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/domain/question.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/domain/release.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/domain/run.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/domain/states.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/domain/task.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/errors.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/exchange.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/ids.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/launcher.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/py.typed +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/search.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/__init__.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/actors.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/agent_logging.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/agent_transcripts.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/change_tracking.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/check_tracking.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/command_runner.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/dashboard.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/doctor.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/doctor_checks/migration_checks.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/doctor_checks/project_scan.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/handoff_lifecycle.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/implementation_flow.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/next_action_model.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/phase5_lock_transfer.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/plan_hash.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/plan_lint.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/plan_review.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/releases.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/run_store.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/serve_read_model.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/task_archive.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/task_collections.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/task_lifecycle.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/task_queries.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/task_repair.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/tree.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/validation.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/validation_flow.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/services/workflow_guidance.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/storage/__init__.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/storage/agent_logs.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/storage/atomic.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/storage/common.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/storage/events.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/storage/frontmatter.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/storage/indexes.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/storage/init.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/storage/ledger_config.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/storage/locks.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/storage/meta.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/storage/migrations.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/storage/paths.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/storage/project_identity.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/storage/repos.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/storage/task_store.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger/timeutils.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger.egg-info/dependency_links.txt +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger.egg-info/entry_points.txt +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/taskledger.egg-info/top_level.txt +0 -0
- {taskledger-0.3.1/taskledger/web_assets → taskledger-0.4.1/tests}/__init__.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/conftest.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/support/__init__.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/support/builders.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_active_task.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_actor_harness_state.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_agent_command_logging.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_agent_session_protocol.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_atomic_fast_io.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_cli_import_resilience.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_command_example_linter.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_compact_mutation_output.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_delta_remaining_contracts.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_domain_policies.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_events.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_handoff_lifecycle.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_implementation_change_scan.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_implementation_checks.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_legacy_cleanup_contracts.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_lifecycle_policies.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_locks_audit.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_models_v1_schema.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_next_action_expired_lock.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_no_log_feature.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_plan_approval_contract.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_plan_lint.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_plan_review.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_plan_revision_workflow.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_plan_todo_materialization.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_question_add_many.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_question_filter_answers.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_question_plan_regeneration.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_release_changelog.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_search.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_services_dashboard.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_sidecar_collections.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_storage_bundle_layout.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_storage_common.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_storage_init.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_storage_migration.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_storage_repos.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_task_archive.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_task_events.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_taskledger_branch_scoped_ledgers.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_taskledger_cli_api_parity.py +1 -1
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_taskledger_v2_cli.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_taskledger_v2_exchange.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_tasks_service_static.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_todo_implementation_gate.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.1}/tests/test_tree_command.py +0 -0
- {taskledger-0.3.1 → 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"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Project-local taskledger configuration.
|
|
2
2
|
# This file lives in the source project root.
|
|
3
3
|
config_version = 2
|
|
4
|
-
taskledger_dir = '
|
|
4
|
+
taskledger_dir = '../taskledger-state/taskledger'
|
|
5
5
|
|
|
6
6
|
# Stable project identity. Commit this with your source tree.
|
|
7
7
|
project_uuid = "081c7c05-2d10-42b7-9b37-3d814c2f400a"
|
|
@@ -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]
|
|
@@ -27,4 +27,4 @@ required_question_topics = []
|
|
|
27
27
|
extra_guidance = ""
|
|
28
28
|
|
|
29
29
|
[agent_logging]
|
|
30
|
-
enabled =
|
|
30
|
+
enabled = false
|
|
@@ -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 .
|
|
@@ -12,6 +12,7 @@ This repository exposes a task-first public API. The supported modules are:
|
|
|
12
12
|
- `taskledger.api.locks`
|
|
13
13
|
- `taskledger.api.handoff`
|
|
14
14
|
- `taskledger.api.releases`
|
|
15
|
+
- `taskledger.api.storage`
|
|
15
16
|
- `taskledger.api.search`
|
|
16
17
|
|
|
17
18
|
## Import boundary
|
|
@@ -197,6 +198,7 @@ render_handoff(
|
|
|
197
198
|
*,
|
|
198
199
|
mode: str | None = None,
|
|
199
200
|
context_for: str | None = None,
|
|
201
|
+
worker_step_id: str | None = None,
|
|
200
202
|
scope: str | None = None,
|
|
201
203
|
todo_id: str | None = None,
|
|
202
204
|
focus_run_id: str | None = None,
|
|
@@ -207,8 +209,9 @@ create_handoff(
|
|
|
207
209
|
workspace_root: Path,
|
|
208
210
|
task_ref: str,
|
|
209
211
|
*,
|
|
210
|
-
mode: str,
|
|
212
|
+
mode: str | None = None,
|
|
211
213
|
context_for: str | None = None,
|
|
214
|
+
worker_step_id: str | None = None,
|
|
212
215
|
scope: str | None = None,
|
|
213
216
|
todo_id: str | None = None,
|
|
214
217
|
focus_run_id: str | None = None,
|
|
@@ -224,7 +227,10 @@ create_handoff(
|
|
|
224
227
|
|
|
225
228
|
Focused handoffs store the generated Markdown context snapshot in the handoff
|
|
226
229
|
record body and return compact metadata, including `context_hash` and
|
|
227
|
-
`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.
|
|
228
234
|
|
|
229
235
|
### `taskledger.api.releases`
|
|
230
236
|
|
|
@@ -233,6 +239,14 @@ record body and return compact metadata, including `context_hash` and
|
|
|
233
239
|
- `show_release`
|
|
234
240
|
- `tag_release`
|
|
235
241
|
|
|
242
|
+
### `taskledger.api.storage`
|
|
243
|
+
|
|
244
|
+
- `storage_where`
|
|
245
|
+
- `storage_move`
|
|
246
|
+
- `sync_preflight`
|
|
247
|
+
- `sync_status`
|
|
248
|
+
- `sync_commit`
|
|
249
|
+
|
|
236
250
|
### `taskledger.api.search`
|
|
237
251
|
|
|
238
252
|
- `search_workspace`
|
|
@@ -256,6 +270,8 @@ The public task-first CLI surface is organized around these command groups:
|
|
|
256
270
|
- `require`
|
|
257
271
|
- `release`
|
|
258
272
|
- `lock`
|
|
273
|
+
- `storage`
|
|
274
|
+
- `sync`
|
|
259
275
|
- `context`
|
|
260
276
|
- `handoff`
|
|
261
277
|
- `repair`
|
|
@@ -1,5 +1,74 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
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
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
|
|
38
|
+
- Added storage sync documentation (`docs/sync.rst`) explaining how to keep taskledger state outside the source repo, sync across PCs with a private Git repo, bootstrap a second machine, follow a daily sync protocol, and avoid active multi-writer conflicts.
|
|
39
|
+
- Added `taskledger storage where` command reporting resolved project and storage location details in human and JSON output, including whether storage lives inside the workspace, is a Git repo, or has active locks.
|
|
40
|
+
- Added `taskledger storage move` for safely migrating storage to a new `taskledger_dir` with atomic config updates, unsafe-target refusal, and follow-up command hints.
|
|
41
|
+
- Added `taskledger sync preflight` read-only check combining doctor health, active-lock warnings, tracked in-repo state warnings, and local Git status.
|
|
42
|
+
- Added `taskledger sync status` and `taskledger sync commit` local Git helper commands for committing taskledger state without network operations.
|
|
43
|
+
- Added `taskledger sync export` and `taskledger sync import` as aliases for the existing archive transfer commands.
|
|
44
|
+
- Added `taskledger sync git` command group for live external-state synchronization: `init`, `status`, `commit`, `cd`, `import-local`, `export-local`, `pull`, `push`, `sync`, and `hooks` subcommands with conservative lock/dirty checks.
|
|
45
|
+
- Added project-scoped `sync git status` that separates current-project changes from outside-project changes in JSON payloads, safe with dirty sibling directories.
|
|
46
|
+
- Added `sync git cd` helper returning the configured sync repo path for shell use.
|
|
47
|
+
- Added `sync git commit` for committing only the configured project path while ignoring dirty sibling paths.
|
|
48
|
+
- Added `[sync.git]` project config section with strict validation and documented defaults.
|
|
49
|
+
- Added `taskledger/services/storage_locations.py` for storage reporting, migration, and sync helper services.
|
|
50
|
+
- Added `taskledger/services/git_sync.py` for git sync orchestration.
|
|
51
|
+
- Added `taskledger/cli_sync.py` as a dedicated sync CLI group.
|
|
52
|
+
- Added `taskledger/api/sync.py` with public sync API wrappers.
|
|
53
|
+
|
|
54
|
+
### Changed
|
|
55
|
+
|
|
56
|
+
- Demoted whole-repo `sync git pull`, `push`, `sync`, and unsafe hook installation from recommended workflow to advanced/deprecated status in help, docs, and skill guidance.
|
|
57
|
+
- Reframed docs, README, and skill around the project-scoped local helper workflow: `sync git status`, `sync git commit`, then manual Git via `sync git cd`.
|
|
58
|
+
- Fixed stale config filename references so docs no longer claim init writes `.taskledger.toml` when `taskledger.toml` is canonical.
|
|
59
|
+
- Updated external storage examples to use the current `ledgers/<ledger_ref>/...` layout.
|
|
60
|
+
|
|
61
|
+
### Documentation
|
|
62
|
+
|
|
63
|
+
- Added `docs/sync.rst` with cross-PC sync workflow, daily protocol, and multi-writer conflict avoidance guidance.
|
|
64
|
+
- Updated README, `docs/usage.rst`, `docs/transfer.rst`, `docs/command_contract.rst`, `docs/public_surface.rst`, `API.md`, and `skills/taskledger/SKILL.md` for the new storage and sync command surface.
|
|
65
|
+
|
|
66
|
+
### Quality
|
|
67
|
+
|
|
68
|
+
- Added `tests/test_storage_sync.py` and `tests/test_sync_git.py` covering storage migration, sync commands, git sync workflows, shared dirty state, project-scoped commits, and JSON result kinds.
|
|
69
|
+
- Expanded command inventory, CLI contract, and docs/skill tests for the new command surface.
|
|
70
|
+
- Full suite: 897 tests passing, ruff and mypy clean.
|
|
71
|
+
|
|
3
72
|
## v0.3.1 - 2026-05-12
|
|
4
73
|
|
|
5
74
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: taskledger
|
|
3
|
-
Version: 0.
|
|
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
|
|
@@ -28,6 +28,7 @@ Description-Content-Type: text/markdown
|
|
|
28
28
|
License-File: LICENSE
|
|
29
29
|
Requires-Dist: typer
|
|
30
30
|
Requires-Dist: PyYAML
|
|
31
|
+
Requires-Dist: Jinja2>=3.1
|
|
31
32
|
Requires-Dist: tomli; python_version < "3.11"
|
|
32
33
|
Provides-Extra: dev
|
|
33
34
|
Requires-Dist: build; extra == "dev"
|
|
@@ -72,7 +73,7 @@ The supported command surface is organized as:
|
|
|
72
73
|
|
|
73
74
|
**Operations:**
|
|
74
75
|
|
|
75
|
-
- `context`, `next-action`, `can`, `search`, `grep`, `symbols`, `deps`, `actor`, `view`, `serve`
|
|
76
|
+
- `context`, `pipeline`, `next-action`, `can`, `search`, `grep`, `symbols`, `deps`, `actor`, `view`, `serve`, `storage`, `sync`
|
|
76
77
|
|
|
77
78
|
**Repair and inspection:**
|
|
78
79
|
|
|
@@ -129,6 +130,73 @@ This guidance is advisory and cannot override lifecycle gates, user approval,
|
|
|
129
130
|
validation requirements, lock rules, or higher-priority harness instructions.
|
|
130
131
|
See `docs/usage.rst` for the full key reference and workflow details.
|
|
131
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
|
+
|
|
132
200
|
## Install
|
|
133
201
|
|
|
134
202
|
```bash
|
|
@@ -136,6 +204,22 @@ python -m pip install -e .
|
|
|
136
204
|
python -m pip install -e ".[dev]"
|
|
137
205
|
```
|
|
138
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
|
+
|
|
139
223
|
## Quick start
|
|
140
224
|
|
|
141
225
|
Initialize durable state in the current workspace:
|
|
@@ -321,16 +405,18 @@ Rules for agents:
|
|
|
321
405
|
|
|
322
406
|
## Human monitoring UI
|
|
323
407
|
|
|
324
|
-
`taskledger serve` starts a read-only local dashboard for
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
The MVP still binds to localhost only, refreshes with read-only JSON polling,
|
|
328
|
-
and exposes no browser mutation endpoints.
|
|
408
|
+
`taskledger serve` starts a read-only local server-rendered HTML dashboard for
|
|
409
|
+
human monitoring. It emphasizes the active task, next action, progress, and
|
|
410
|
+
task browsing while staying local-only and read-only.
|
|
329
411
|
|
|
330
412
|
```bash
|
|
331
|
-
taskledger
|
|
413
|
+
taskledger report html task-0040 --output task-0040.html
|
|
414
|
+
taskledger report html --active --output active-task.html
|
|
415
|
+
taskledger report site --output .taskledger-report/
|
|
416
|
+
|
|
417
|
+
taskledger serve --refresh-seconds 2
|
|
332
418
|
taskledger serve --open
|
|
333
|
-
taskledger serve --task
|
|
419
|
+
taskledger serve --task task-0040 --refresh-seconds 2
|
|
334
420
|
```
|
|
335
421
|
|
|
336
422
|
Agents should keep using `taskledger next-action`, `taskledger todo next`, and
|
|
@@ -341,12 +427,13 @@ fresh-context transfer.
|
|
|
341
427
|
## Storage layout
|
|
342
428
|
|
|
343
429
|
`taskledger` keeps project-local configuration in the workspace root and durable
|
|
344
|
-
records under the configured storage root. The checked-in
|
|
345
|
-
stores
|
|
346
|
-
state remains ignored under
|
|
430
|
+
records under the configured storage root. The checked-in `taskledger.toml`
|
|
431
|
+
stores project identity plus the current branch-scoped ledger pointer and next
|
|
432
|
+
task number. Operational task state remains ignored under
|
|
433
|
+
`.taskledger/ledgers/<ledger_ref>/`:
|
|
347
434
|
|
|
348
435
|
```text
|
|
349
|
-
|
|
436
|
+
taskledger.toml
|
|
350
437
|
.taskledger/
|
|
351
438
|
storage.yaml
|
|
352
439
|
ledgers/
|
|
@@ -364,7 +451,7 @@ optional derived caches or registries and are not required for task correctness.
|
|
|
364
451
|
|
|
365
452
|
### Branch-scoped ledgers
|
|
366
453
|
|
|
367
|
-
`.taskledger/` stays ignored and local.
|
|
454
|
+
`.taskledger/` stays ignored and local. `taskledger.toml` is safe to commit and
|
|
368
455
|
contains the current `ledger_ref`, optional parent ref, and the next logical task
|
|
369
456
|
number for the checked-out source branch.
|
|
370
457
|
|
|
@@ -374,10 +461,10 @@ the Git branch:
|
|
|
374
461
|
```bash
|
|
375
462
|
git checkout -b feature-a
|
|
376
463
|
taskledger ledger fork feature-a
|
|
377
|
-
git add
|
|
464
|
+
git add taskledger.toml
|
|
378
465
|
```
|
|
379
466
|
|
|
380
|
-
Returning to a branch whose
|
|
467
|
+
Returning to a branch whose `taskledger.toml` points back to `main` hides the
|
|
381
468
|
feature branch's active task and task list. Two ledgers may both contain a logical
|
|
382
469
|
`task-0030`; this is expected because task IDs are scoped by `ledger_ref`. Use
|
|
383
470
|
`taskledger ledger adopt --from REF TASK_REF` when branch-local task history
|
|
@@ -392,15 +479,56 @@ taskledger init --taskledger-dir /mnt/cloud/taskledger/project-a
|
|
|
392
479
|
```text
|
|
393
480
|
/home/me/src/project-a/taskledger.toml
|
|
394
481
|
/mnt/cloud/taskledger/project-a/storage.yaml
|
|
395
|
-
/mnt/cloud/taskledger/project-a/releases/
|
|
396
|
-
/mnt/cloud/taskledger/project-a/tasks/
|
|
397
|
-
/mnt/cloud/taskledger/project-a/events/
|
|
398
|
-
/mnt/cloud/taskledger/project-a/indexes/
|
|
482
|
+
/mnt/cloud/taskledger/project-a/ledgers/main/releases/
|
|
483
|
+
/mnt/cloud/taskledger/project-a/ledgers/main/tasks/
|
|
484
|
+
/mnt/cloud/taskledger/project-a/ledgers/main/events/
|
|
485
|
+
/mnt/cloud/taskledger/project-a/ledgers/main/indexes/
|
|
399
486
|
```
|
|
400
487
|
|
|
401
488
|
Use one `taskledger_dir` per source project. Do not share one storage directory
|
|
402
489
|
across unrelated repositories.
|
|
403
490
|
|
|
491
|
+
### Sync across PCs without committing `.taskledger/`
|
|
492
|
+
|
|
493
|
+
Use a sibling private Git repository for the external storage root instead of
|
|
494
|
+
committing `.taskledger/` into the source repository:
|
|
495
|
+
|
|
496
|
+
```toml
|
|
497
|
+
# /home/me/src/project-a/taskledger.toml
|
|
498
|
+
taskledger_dir = "../taskledger-state/project-a"
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
```text
|
|
502
|
+
/home/me/src/project-a/ # source repo
|
|
503
|
+
/home/me/src/taskledger-state/ # private state repo
|
|
504
|
+
/home/me/src/taskledger-state/project-a/ # taskledger_dir
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
Keep one active writer at a time. Before starting on a PC, pull the private
|
|
508
|
+
state repo, then run `taskledger doctor` and `taskledger next-action`. After
|
|
509
|
+
stopping at a clean lifecycle boundary, commit and push the state repo. If work
|
|
510
|
+
must move mid-run, prefer `taskledger export TASK_REF` / `taskledger import ARCHIVE` because imported runtime locks are quarantined by default.
|
|
511
|
+
|
|
512
|
+
Helpful local commands:
|
|
513
|
+
|
|
514
|
+
```bash
|
|
515
|
+
taskledger storage where
|
|
516
|
+
taskledger sync preflight
|
|
517
|
+
taskledger sync status
|
|
518
|
+
taskledger sync commit --message "Sync project-a taskledger state"
|
|
519
|
+
taskledger sync export --output ./taskledger-transfer.tar.gz
|
|
520
|
+
taskledger sync import ./taskledger-transfer.tar.gz --dry-run
|
|
521
|
+
taskledger sync git init --repo ../taskledger-state --project-path project-a
|
|
522
|
+
taskledger sync git status
|
|
523
|
+
taskledger sync git commit --message "Sync project-a taskledger state"
|
|
524
|
+
cd "$(taskledger sync git cd)"
|
|
525
|
+
git pull --ff-only
|
|
526
|
+
git push
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
See `docs/sync.rst` for the full second-PC bootstrap, daily sync protocol, and
|
|
530
|
+
Syncthing/rclone caveats.
|
|
531
|
+
|
|
404
532
|
## JSON output
|
|
405
533
|
|
|
406
534
|
Use `--json` for machine-readable payloads:
|
|
@@ -451,6 +579,7 @@ taskledger context --for implementation --format markdown
|
|
|
451
579
|
taskledger context --for validation --format json
|
|
452
580
|
taskledger task dossier --format markdown
|
|
453
581
|
taskledger task report --task task-0030 -o task30.md
|
|
582
|
+
taskledger report html task-0030 --output task30.html
|
|
454
583
|
taskledger handoff create --mode implementation --intended-actor agent --intended-harness codex
|
|
455
584
|
taskledger handoff claim handoff-0001
|
|
456
585
|
taskledger handoff close handoff-0001 --reason "Implementation started."
|