taskledger 0.3.1__tar.gz → 0.4.0__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.3.1 → taskledger-0.4.0}/.taskledger.toml +3 -3
- {taskledger-0.3.1 → taskledger-0.4.0}/API.md +11 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/CHANGELOG.md +38 -0
- {taskledger-0.3.1/taskledger.egg-info → taskledger-0.4.0}/PKG-INFO +66 -20
- {taskledger-0.3.1 → taskledger-0.4.0}/README.md +64 -19
- {taskledger-0.3.1 → taskledger-0.4.0}/docs/command_contract.rst +59 -4
- {taskledger-0.3.1 → taskledger-0.4.0}/docs/index.rst +1 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/docs/public_surface.rst +8 -0
- taskledger-0.4.0/docs/sync.rst +166 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/docs/transfer.rst +3 -1
- {taskledger-0.3.1 → taskledger-0.4.0}/docs/usage.rst +28 -10
- {taskledger-0.3.1 → taskledger-0.4.0}/pyproject.toml +2 -2
- {taskledger-0.3.1 → taskledger-0.4.0}/skills/taskledger/SKILL.md +23 -13
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/_version.py +3 -3
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/api/__init__.py +1 -0
- taskledger-0.4.0/taskledger/api/storage.py +44 -0
- taskledger-0.4.0/taskledger/api/sync.py +300 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/cli.py +60 -5
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/cli_implement.py +1 -1
- taskledger-0.4.0/taskledger/cli_report.py +171 -0
- taskledger-0.4.0/taskledger/cli_storage.py +115 -0
- taskledger-0.4.0/taskledger/cli_sync.py +926 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/command_inventory.py +220 -0
- taskledger-0.4.0/taskledger/services/git_sync.py +1018 -0
- taskledger-0.4.0/taskledger/services/html_reports.py +331 -0
- taskledger-0.4.0/taskledger/services/storage_locations.py +482 -0
- taskledger-0.4.0/taskledger/services/web_dashboard.py +239 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/storage/project_config.py +170 -0
- taskledger-0.4.0/taskledger/templates/__init__.py +1 -0
- taskledger-0.4.0/taskledger/templates/base.html +64 -0
- taskledger-0.4.0/taskledger/templates/error.html +6 -0
- taskledger-0.4.0/taskledger/templates/site_index.html +42 -0
- taskledger-0.4.0/taskledger/templates/task_report.html +218 -0
- {taskledger-0.3.1 → taskledger-0.4.0/taskledger.egg-info}/PKG-INFO +66 -20
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger.egg-info/SOURCES.txt +17 -3
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger.egg-info/requires.txt +1 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_cli_command_contract.py +19 -4
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_command_inventory.py +47 -11
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_docs_and_skill.py +15 -0
- taskledger-0.4.0/tests/test_html_reports.py +95 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_project_root_config.py +48 -0
- taskledger-0.4.0/tests/test_serve_dashboard.py +188 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_service_boundaries.py +10 -7
- taskledger-0.4.0/tests/test_storage_sync.py +311 -0
- taskledger-0.4.0/tests/test_sync_git.py +372 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_task_report.py +78 -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.0}/.codecrate.toml +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/.github/workflows/codecov.yml +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/.github/workflows/pre-commit.yml +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/.github/workflows/python-publish.yml +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/.github/workflows/tests.yml +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/.gitignore +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/.pre-commit-config.yaml +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/.readthedocs.yaml +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/.ruff.toml +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/AGENTS.md +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/LICENSE +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/Makefile +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/docs/Makefile +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/docs/api.rst +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/docs/architecture_taskledger_split.rst +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/docs/build.sh +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/docs/conf.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/docs/full_task_cycle.rst +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/docs/multi_repo.rst +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/docs/requirements.txt +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/docs/service_boundary_whitelist.rst +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/setup.cfg +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/setup.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/__init__.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/__main__.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/api/handoff.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/api/introductions.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/api/locks.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/api/plans.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/api/project.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/api/questions.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/api/releases.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/api/search.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/api/task_runs.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/api/tasks.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/cli_actor.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/cli_common.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/cli_ledger.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/cli_migrate.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/cli_misc.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/cli_plan.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/cli_question.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/cli_release.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/cli_task.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/cli_validate.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/domain/__init__.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/domain/_model_utils.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/domain/active_state.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/domain/actor.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/domain/change.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/domain/check.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/domain/event.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/domain/handoff.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/domain/lock.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/domain/models.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/domain/plan.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/domain/policies.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/domain/question.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/domain/release.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/domain/run.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/domain/sidecars.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/domain/states.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/domain/task.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/errors.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/exchange.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/ids.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/launcher.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/py.typed +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/search.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/__init__.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/actors.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/agent_logging.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/agent_transcripts.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/change_tracking.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/check_tracking.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/command_runner.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/dashboard.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/doctor.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/doctor_checks/migration_checks.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/doctor_checks/project_scan.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/doctor_checks/task_checks.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/handoff.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/handoff_lifecycle.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/implementation_flow.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/navigation.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/next_action_model.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/phase5_lock_transfer.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/plan_editing.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/plan_hash.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/plan_lint.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/plan_materialization.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/plan_review.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/planning_flow.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/releases.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/run_store.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/serve_read_model.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/task_archive.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/task_collections.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/task_lifecycle.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/task_queries.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/task_repair.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/task_reports.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/tasks.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/tree.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/validation.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/validation_flow.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/services/workflow_guidance.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/storage/__init__.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/storage/agent_logs.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/storage/atomic.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/storage/common.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/storage/events.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/storage/frontmatter.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/storage/indexes.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/storage/init.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/storage/ledger_config.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/storage/locks.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/storage/meta.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/storage/migrations.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/storage/paths.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/storage/project_identity.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/storage/repos.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/storage/task_store.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger/timeutils.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger.egg-info/dependency_links.txt +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger.egg-info/entry_points.txt +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/taskledger.egg-info/top_level.txt +0 -0
- {taskledger-0.3.1/taskledger/web_assets → taskledger-0.4.0/tests}/__init__.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/conftest.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/support/__init__.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/support/builders.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_active_task.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_actor_harness_state.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_agent_command_logging.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_agent_session_protocol.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_atomic_fast_io.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_cli_import_resilience.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_command_example_linter.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_compact_mutation_output.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_delta_remaining_contracts.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_doctor.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_domain_policies.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_events.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_handoff_lifecycle.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_help_subprocess.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_implementation_change_scan.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_implementation_checks.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_json_contracts.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_legacy_cleanup_contracts.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_lifecycle_policies.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_locks_audit.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_models_v1_schema.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_next_action_expired_lock.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_no_log_feature.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_plan_approval_contract.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_plan_lint.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_plan_review.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_plan_revision_workflow.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_plan_todo_materialization.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_question_add_many.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_question_filter_answers.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_question_plan_regeneration.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_release_changelog.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_search.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_services_dashboard.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_sidecar_collections.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_storage_bundle_layout.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_storage_common.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_storage_init.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_storage_migration.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_storage_repos.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_task_archive.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_task_events.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_taskledger_branch_scoped_ledgers.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_taskledger_cli_api_parity.py +1 -1
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_taskledger_v2_cli.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_taskledger_v2_exchange.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_tasks_service_static.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_todo_implementation_gate.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_tree_command.py +0 -0
- {taskledger-0.3.1 → taskledger-0.4.0}/tests/test_workflow_guidance.py +0 -0
|
@@ -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 = 87
|
|
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
|
|
@@ -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
|
|
@@ -233,6 +234,14 @@ record body and return compact metadata, including `context_hash` and
|
|
|
233
234
|
- `show_release`
|
|
234
235
|
- `tag_release`
|
|
235
236
|
|
|
237
|
+
### `taskledger.api.storage`
|
|
238
|
+
|
|
239
|
+
- `storage_where`
|
|
240
|
+
- `storage_move`
|
|
241
|
+
- `sync_preflight`
|
|
242
|
+
- `sync_status`
|
|
243
|
+
- `sync_commit`
|
|
244
|
+
|
|
236
245
|
### `taskledger.api.search`
|
|
237
246
|
|
|
238
247
|
- `search_workspace`
|
|
@@ -256,6 +265,8 @@ The public task-first CLI surface is organized around these command groups:
|
|
|
256
265
|
- `require`
|
|
257
266
|
- `release`
|
|
258
267
|
- `lock`
|
|
268
|
+
- `storage`
|
|
269
|
+
- `sync`
|
|
259
270
|
- `context`
|
|
260
271
|
- `handoff`
|
|
261
272
|
- `repair`
|
|
@@ -1,5 +1,43 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.4.0 - 2026-05-18
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- 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.
|
|
8
|
+
- 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.
|
|
9
|
+
- 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.
|
|
10
|
+
- Added `taskledger sync preflight` read-only check combining doctor health, active-lock warnings, tracked in-repo state warnings, and local Git status.
|
|
11
|
+
- Added `taskledger sync status` and `taskledger sync commit` local Git helper commands for committing taskledger state without network operations.
|
|
12
|
+
- Added `taskledger sync export` and `taskledger sync import` as aliases for the existing archive transfer commands.
|
|
13
|
+
- 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.
|
|
14
|
+
- Added project-scoped `sync git status` that separates current-project changes from outside-project changes in JSON payloads, safe with dirty sibling directories.
|
|
15
|
+
- Added `sync git cd` helper returning the configured sync repo path for shell use.
|
|
16
|
+
- Added `sync git commit` for committing only the configured project path while ignoring dirty sibling paths.
|
|
17
|
+
- Added `[sync.git]` project config section with strict validation and documented defaults.
|
|
18
|
+
- Added `taskledger/services/storage_locations.py` for storage reporting, migration, and sync helper services.
|
|
19
|
+
- Added `taskledger/services/git_sync.py` for git sync orchestration.
|
|
20
|
+
- Added `taskledger/cli_sync.py` as a dedicated sync CLI group.
|
|
21
|
+
- Added `taskledger/api/sync.py` with public sync API wrappers.
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- 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.
|
|
26
|
+
- 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`.
|
|
27
|
+
- Fixed stale config filename references so docs no longer claim init writes `.taskledger.toml` when `taskledger.toml` is canonical.
|
|
28
|
+
- Updated external storage examples to use the current `ledgers/<ledger_ref>/...` layout.
|
|
29
|
+
|
|
30
|
+
### Documentation
|
|
31
|
+
|
|
32
|
+
- Added `docs/sync.rst` with cross-PC sync workflow, daily protocol, and multi-writer conflict avoidance guidance.
|
|
33
|
+
- 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.
|
|
34
|
+
|
|
35
|
+
### Quality
|
|
36
|
+
|
|
37
|
+
- 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.
|
|
38
|
+
- Expanded command inventory, CLI contract, and docs/skill tests for the new command surface.
|
|
39
|
+
- Full suite: 897 tests passing, ruff and mypy clean.
|
|
40
|
+
|
|
3
41
|
## v0.3.1 - 2026-05-12
|
|
4
42
|
|
|
5
43
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: taskledger
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
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`, `next-action`, `can`, `search`, `grep`, `symbols`, `deps`, `actor`, `view`, `serve`, `storage`, `sync`
|
|
76
77
|
|
|
77
78
|
**Repair and inspection:**
|
|
78
79
|
|
|
@@ -321,16 +322,18 @@ Rules for agents:
|
|
|
321
322
|
|
|
322
323
|
## Human monitoring UI
|
|
323
324
|
|
|
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.
|
|
325
|
+
`taskledger serve` starts a read-only local server-rendered HTML dashboard for
|
|
326
|
+
human monitoring. It emphasizes the active task, next action, progress, and
|
|
327
|
+
task browsing while staying local-only and read-only.
|
|
329
328
|
|
|
330
329
|
```bash
|
|
331
|
-
taskledger
|
|
330
|
+
taskledger report html task-0040 --output task-0040.html
|
|
331
|
+
taskledger report html --active --output active-task.html
|
|
332
|
+
taskledger report site --output .taskledger-report/
|
|
333
|
+
|
|
334
|
+
taskledger serve --refresh-seconds 2
|
|
332
335
|
taskledger serve --open
|
|
333
|
-
taskledger serve --task
|
|
336
|
+
taskledger serve --task task-0040 --refresh-seconds 2
|
|
334
337
|
```
|
|
335
338
|
|
|
336
339
|
Agents should keep using `taskledger next-action`, `taskledger todo next`, and
|
|
@@ -341,12 +344,13 @@ fresh-context transfer.
|
|
|
341
344
|
## Storage layout
|
|
342
345
|
|
|
343
346
|
`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
|
|
347
|
+
records under the configured storage root. The checked-in `taskledger.toml`
|
|
348
|
+
stores project identity plus the current branch-scoped ledger pointer and next
|
|
349
|
+
task number. Operational task state remains ignored under
|
|
350
|
+
`.taskledger/ledgers/<ledger_ref>/`:
|
|
347
351
|
|
|
348
352
|
```text
|
|
349
|
-
|
|
353
|
+
taskledger.toml
|
|
350
354
|
.taskledger/
|
|
351
355
|
storage.yaml
|
|
352
356
|
ledgers/
|
|
@@ -364,7 +368,7 @@ optional derived caches or registries and are not required for task correctness.
|
|
|
364
368
|
|
|
365
369
|
### Branch-scoped ledgers
|
|
366
370
|
|
|
367
|
-
`.taskledger/` stays ignored and local.
|
|
371
|
+
`.taskledger/` stays ignored and local. `taskledger.toml` is safe to commit and
|
|
368
372
|
contains the current `ledger_ref`, optional parent ref, and the next logical task
|
|
369
373
|
number for the checked-out source branch.
|
|
370
374
|
|
|
@@ -374,10 +378,10 @@ the Git branch:
|
|
|
374
378
|
```bash
|
|
375
379
|
git checkout -b feature-a
|
|
376
380
|
taskledger ledger fork feature-a
|
|
377
|
-
git add
|
|
381
|
+
git add taskledger.toml
|
|
378
382
|
```
|
|
379
383
|
|
|
380
|
-
Returning to a branch whose
|
|
384
|
+
Returning to a branch whose `taskledger.toml` points back to `main` hides the
|
|
381
385
|
feature branch's active task and task list. Two ledgers may both contain a logical
|
|
382
386
|
`task-0030`; this is expected because task IDs are scoped by `ledger_ref`. Use
|
|
383
387
|
`taskledger ledger adopt --from REF TASK_REF` when branch-local task history
|
|
@@ -392,15 +396,56 @@ taskledger init --taskledger-dir /mnt/cloud/taskledger/project-a
|
|
|
392
396
|
```text
|
|
393
397
|
/home/me/src/project-a/taskledger.toml
|
|
394
398
|
/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/
|
|
399
|
+
/mnt/cloud/taskledger/project-a/ledgers/main/releases/
|
|
400
|
+
/mnt/cloud/taskledger/project-a/ledgers/main/tasks/
|
|
401
|
+
/mnt/cloud/taskledger/project-a/ledgers/main/events/
|
|
402
|
+
/mnt/cloud/taskledger/project-a/ledgers/main/indexes/
|
|
399
403
|
```
|
|
400
404
|
|
|
401
405
|
Use one `taskledger_dir` per source project. Do not share one storage directory
|
|
402
406
|
across unrelated repositories.
|
|
403
407
|
|
|
408
|
+
### Sync across PCs without committing `.taskledger/`
|
|
409
|
+
|
|
410
|
+
Use a sibling private Git repository for the external storage root instead of
|
|
411
|
+
committing `.taskledger/` into the source repository:
|
|
412
|
+
|
|
413
|
+
```toml
|
|
414
|
+
# /home/me/src/project-a/taskledger.toml
|
|
415
|
+
taskledger_dir = "../taskledger-state/project-a"
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
```text
|
|
419
|
+
/home/me/src/project-a/ # source repo
|
|
420
|
+
/home/me/src/taskledger-state/ # private state repo
|
|
421
|
+
/home/me/src/taskledger-state/project-a/ # taskledger_dir
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
Keep one active writer at a time. Before starting on a PC, pull the private
|
|
425
|
+
state repo, then run `taskledger doctor` and `taskledger next-action`. After
|
|
426
|
+
stopping at a clean lifecycle boundary, commit and push the state repo. If work
|
|
427
|
+
must move mid-run, prefer `taskledger export TASK_REF` / `taskledger import ARCHIVE` because imported runtime locks are quarantined by default.
|
|
428
|
+
|
|
429
|
+
Helpful local commands:
|
|
430
|
+
|
|
431
|
+
```bash
|
|
432
|
+
taskledger storage where
|
|
433
|
+
taskledger sync preflight
|
|
434
|
+
taskledger sync status
|
|
435
|
+
taskledger sync commit --message "Sync project-a taskledger state"
|
|
436
|
+
taskledger sync export --output ./taskledger-transfer.tar.gz
|
|
437
|
+
taskledger sync import ./taskledger-transfer.tar.gz --dry-run
|
|
438
|
+
taskledger sync git init --repo ../taskledger-state --project-path project-a
|
|
439
|
+
taskledger sync git status
|
|
440
|
+
taskledger sync git commit --message "Sync project-a taskledger state"
|
|
441
|
+
cd "$(taskledger sync git cd)"
|
|
442
|
+
git pull --ff-only
|
|
443
|
+
git push
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
See `docs/sync.rst` for the full second-PC bootstrap, daily sync protocol, and
|
|
447
|
+
Syncthing/rclone caveats.
|
|
448
|
+
|
|
404
449
|
## JSON output
|
|
405
450
|
|
|
406
451
|
Use `--json` for machine-readable payloads:
|
|
@@ -451,6 +496,7 @@ taskledger context --for implementation --format markdown
|
|
|
451
496
|
taskledger context --for validation --format json
|
|
452
497
|
taskledger task dossier --format markdown
|
|
453
498
|
taskledger task report --task task-0030 -o task30.md
|
|
499
|
+
taskledger report html task-0030 --output task30.html
|
|
454
500
|
taskledger handoff create --mode implementation --intended-actor agent --intended-harness codex
|
|
455
501
|
taskledger handoff claim handoff-0001
|
|
456
502
|
taskledger handoff close handoff-0001 --reason "Implementation started."
|
|
@@ -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`
|
|
32
|
+
- `context`, `next-action`, `can`, `search`, `grep`, `symbols`, `deps`, `actor`, `view`, `serve`, `storage`, `sync`
|
|
33
33
|
|
|
34
34
|
**Repair and inspection:**
|
|
35
35
|
|
|
@@ -278,16 +278,18 @@ Rules for agents:
|
|
|
278
278
|
|
|
279
279
|
## Human monitoring UI
|
|
280
280
|
|
|
281
|
-
`taskledger serve` starts a read-only local dashboard for
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
The MVP still binds to localhost only, refreshes with read-only JSON polling,
|
|
285
|
-
and exposes no browser mutation endpoints.
|
|
281
|
+
`taskledger serve` starts a read-only local server-rendered HTML dashboard for
|
|
282
|
+
human monitoring. It emphasizes the active task, next action, progress, and
|
|
283
|
+
task browsing while staying local-only and read-only.
|
|
286
284
|
|
|
287
285
|
```bash
|
|
288
|
-
taskledger
|
|
286
|
+
taskledger report html task-0040 --output task-0040.html
|
|
287
|
+
taskledger report html --active --output active-task.html
|
|
288
|
+
taskledger report site --output .taskledger-report/
|
|
289
|
+
|
|
290
|
+
taskledger serve --refresh-seconds 2
|
|
289
291
|
taskledger serve --open
|
|
290
|
-
taskledger serve --task
|
|
292
|
+
taskledger serve --task task-0040 --refresh-seconds 2
|
|
291
293
|
```
|
|
292
294
|
|
|
293
295
|
Agents should keep using `taskledger next-action`, `taskledger todo next`, and
|
|
@@ -298,12 +300,13 @@ fresh-context transfer.
|
|
|
298
300
|
## Storage layout
|
|
299
301
|
|
|
300
302
|
`taskledger` keeps project-local configuration in the workspace root and durable
|
|
301
|
-
records under the configured storage root. The checked-in
|
|
302
|
-
stores
|
|
303
|
-
state remains ignored under
|
|
303
|
+
records under the configured storage root. The checked-in `taskledger.toml`
|
|
304
|
+
stores project identity plus the current branch-scoped ledger pointer and next
|
|
305
|
+
task number. Operational task state remains ignored under
|
|
306
|
+
`.taskledger/ledgers/<ledger_ref>/`:
|
|
304
307
|
|
|
305
308
|
```text
|
|
306
|
-
|
|
309
|
+
taskledger.toml
|
|
307
310
|
.taskledger/
|
|
308
311
|
storage.yaml
|
|
309
312
|
ledgers/
|
|
@@ -321,7 +324,7 @@ optional derived caches or registries and are not required for task correctness.
|
|
|
321
324
|
|
|
322
325
|
### Branch-scoped ledgers
|
|
323
326
|
|
|
324
|
-
`.taskledger/` stays ignored and local.
|
|
327
|
+
`.taskledger/` stays ignored and local. `taskledger.toml` is safe to commit and
|
|
325
328
|
contains the current `ledger_ref`, optional parent ref, and the next logical task
|
|
326
329
|
number for the checked-out source branch.
|
|
327
330
|
|
|
@@ -331,10 +334,10 @@ the Git branch:
|
|
|
331
334
|
```bash
|
|
332
335
|
git checkout -b feature-a
|
|
333
336
|
taskledger ledger fork feature-a
|
|
334
|
-
git add
|
|
337
|
+
git add taskledger.toml
|
|
335
338
|
```
|
|
336
339
|
|
|
337
|
-
Returning to a branch whose
|
|
340
|
+
Returning to a branch whose `taskledger.toml` points back to `main` hides the
|
|
338
341
|
feature branch's active task and task list. Two ledgers may both contain a logical
|
|
339
342
|
`task-0030`; this is expected because task IDs are scoped by `ledger_ref`. Use
|
|
340
343
|
`taskledger ledger adopt --from REF TASK_REF` when branch-local task history
|
|
@@ -349,15 +352,56 @@ taskledger init --taskledger-dir /mnt/cloud/taskledger/project-a
|
|
|
349
352
|
```text
|
|
350
353
|
/home/me/src/project-a/taskledger.toml
|
|
351
354
|
/mnt/cloud/taskledger/project-a/storage.yaml
|
|
352
|
-
/mnt/cloud/taskledger/project-a/releases/
|
|
353
|
-
/mnt/cloud/taskledger/project-a/tasks/
|
|
354
|
-
/mnt/cloud/taskledger/project-a/events/
|
|
355
|
-
/mnt/cloud/taskledger/project-a/indexes/
|
|
355
|
+
/mnt/cloud/taskledger/project-a/ledgers/main/releases/
|
|
356
|
+
/mnt/cloud/taskledger/project-a/ledgers/main/tasks/
|
|
357
|
+
/mnt/cloud/taskledger/project-a/ledgers/main/events/
|
|
358
|
+
/mnt/cloud/taskledger/project-a/ledgers/main/indexes/
|
|
356
359
|
```
|
|
357
360
|
|
|
358
361
|
Use one `taskledger_dir` per source project. Do not share one storage directory
|
|
359
362
|
across unrelated repositories.
|
|
360
363
|
|
|
364
|
+
### Sync across PCs without committing `.taskledger/`
|
|
365
|
+
|
|
366
|
+
Use a sibling private Git repository for the external storage root instead of
|
|
367
|
+
committing `.taskledger/` into the source repository:
|
|
368
|
+
|
|
369
|
+
```toml
|
|
370
|
+
# /home/me/src/project-a/taskledger.toml
|
|
371
|
+
taskledger_dir = "../taskledger-state/project-a"
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
```text
|
|
375
|
+
/home/me/src/project-a/ # source repo
|
|
376
|
+
/home/me/src/taskledger-state/ # private state repo
|
|
377
|
+
/home/me/src/taskledger-state/project-a/ # taskledger_dir
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
Keep one active writer at a time. Before starting on a PC, pull the private
|
|
381
|
+
state repo, then run `taskledger doctor` and `taskledger next-action`. After
|
|
382
|
+
stopping at a clean lifecycle boundary, commit and push the state repo. If work
|
|
383
|
+
must move mid-run, prefer `taskledger export TASK_REF` / `taskledger import ARCHIVE` because imported runtime locks are quarantined by default.
|
|
384
|
+
|
|
385
|
+
Helpful local commands:
|
|
386
|
+
|
|
387
|
+
```bash
|
|
388
|
+
taskledger storage where
|
|
389
|
+
taskledger sync preflight
|
|
390
|
+
taskledger sync status
|
|
391
|
+
taskledger sync commit --message "Sync project-a taskledger state"
|
|
392
|
+
taskledger sync export --output ./taskledger-transfer.tar.gz
|
|
393
|
+
taskledger sync import ./taskledger-transfer.tar.gz --dry-run
|
|
394
|
+
taskledger sync git init --repo ../taskledger-state --project-path project-a
|
|
395
|
+
taskledger sync git status
|
|
396
|
+
taskledger sync git commit --message "Sync project-a taskledger state"
|
|
397
|
+
cd "$(taskledger sync git cd)"
|
|
398
|
+
git pull --ff-only
|
|
399
|
+
git push
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
See `docs/sync.rst` for the full second-PC bootstrap, daily sync protocol, and
|
|
403
|
+
Syncthing/rclone caveats.
|
|
404
|
+
|
|
361
405
|
## JSON output
|
|
362
406
|
|
|
363
407
|
Use `--json` for machine-readable payloads:
|
|
@@ -408,6 +452,7 @@ taskledger context --for implementation --format markdown
|
|
|
408
452
|
taskledger context --for validation --format json
|
|
409
453
|
taskledger task dossier --format markdown
|
|
410
454
|
taskledger task report --task task-0030 -o task30.md
|
|
455
|
+
taskledger report html task-0030 --output task30.html
|
|
411
456
|
taskledger handoff create --mode implementation --intended-actor agent --intended-harness codex
|
|
412
457
|
taskledger handoff claim handoff-0001
|
|
413
458
|
taskledger handoff close handoff-0001 --reason "Implementation started."
|
|
@@ -42,6 +42,21 @@ Task-resource commands accept the task as their direct positional resource:
|
|
|
42
42
|
taskledger task unarchive task-0001 --reason "Restore task"
|
|
43
43
|
taskledger task report task-0001
|
|
44
44
|
|
|
45
|
+
Root reporting commands render standalone HTML:
|
|
46
|
+
|
|
47
|
+
.. code-block:: bash
|
|
48
|
+
|
|
49
|
+
taskledger report html task-0040 --output task-0040.html
|
|
50
|
+
taskledger report html --active --output active-task.html
|
|
51
|
+
taskledger report site --output .taskledger-report/
|
|
52
|
+
|
|
53
|
+
Serve supports optional positional task selection and refresh in seconds:
|
|
54
|
+
|
|
55
|
+
.. code-block:: bash
|
|
56
|
+
|
|
57
|
+
taskledger serve --refresh-seconds 2
|
|
58
|
+
taskledger serve --task task-0040 --refresh-seconds 2
|
|
59
|
+
|
|
45
60
|
Optional positional task refs are not supported for workflow commands.
|
|
46
61
|
|
|
47
62
|
Plan guidance command
|
|
@@ -191,7 +206,7 @@ Ledger commands
|
|
|
191
206
|
---------------
|
|
192
207
|
|
|
193
208
|
Branch-scoped ledgers isolate ignored local task state by the checked-in
|
|
194
|
-
``ledger_ref`` stored in
|
|
209
|
+
``ledger_ref`` stored in ``taskledger.toml``:
|
|
195
210
|
|
|
196
211
|
.. code-block:: bash
|
|
197
212
|
|
|
@@ -204,9 +219,49 @@ Branch-scoped ledgers isolate ignored local task state by the checked-in
|
|
|
204
219
|
|
|
205
220
|
``ledger fork`` creates a new local namespace under
|
|
206
221
|
``.taskledger/ledgers/<ref>/`` and updates only Taskledger-owned ledger keys in
|
|
207
|
-
|
|
222
|
+
``taskledger.toml``. ``ledger switch`` changes the checked-in pointer to an
|
|
208
223
|
existing local ledger. ``ledger adopt`` copies a task from another local ledger
|
|
209
224
|
into the current ledger and renumbers on collision.
|
|
225
|
+
|
|
226
|
+
Storage and sync helper commands
|
|
227
|
+
--------------------------------
|
|
228
|
+
|
|
229
|
+
Taskledger also exposes local storage discovery and sync helpers:
|
|
230
|
+
|
|
231
|
+
.. code-block:: bash
|
|
232
|
+
|
|
233
|
+
taskledger storage where
|
|
234
|
+
taskledger storage move --to ../taskledger-state/project-a --mode copy|move [--adopt-existing] [--force]
|
|
235
|
+
taskledger sync preflight
|
|
236
|
+
taskledger sync status
|
|
237
|
+
taskledger sync commit --message "Sync project-a taskledger state"
|
|
238
|
+
taskledger sync export --output ./taskledger-transfer.tar.gz
|
|
239
|
+
taskledger sync import ./taskledger-transfer.tar.gz --dry-run
|
|
240
|
+
taskledger sync git status
|
|
241
|
+
taskledger sync git init --repo ../taskledger-state --project-path project-a
|
|
242
|
+
taskledger sync git commit --message "Sync project-a taskledger state"
|
|
243
|
+
cd "$(taskledger sync git cd)"
|
|
244
|
+
git pull --ff-only
|
|
245
|
+
git push
|
|
246
|
+
taskledger sync git hooks install
|
|
247
|
+
taskledger sync git hooks status
|
|
248
|
+
taskledger sync git hooks uninstall
|
|
249
|
+
|
|
250
|
+
Rules:
|
|
251
|
+
|
|
252
|
+
* ``storage where`` is read-only and reports the resolved workspace root,
|
|
253
|
+
config path, ``taskledger_dir``, project identity, ledger ref, Git detection,
|
|
254
|
+
and active lock count.
|
|
255
|
+
* ``storage move`` updates ``taskledger.toml`` atomically after the target has
|
|
256
|
+
been copied or explicitly adopted.
|
|
257
|
+
* ``sync preflight`` performs only local checks. It must not perform network
|
|
258
|
+
push/pull operations.
|
|
259
|
+
* ``sync status`` and ``sync commit`` operate only on the Git repository that
|
|
260
|
+
contains the resolved ``taskledger_dir``.
|
|
261
|
+
* ``sync export`` and ``sync import`` are archive aliases for the root
|
|
262
|
+
``export``/``import`` commands.
|
|
263
|
+
* ``sync git`` commands operate on a private external Git repository that stores
|
|
264
|
+
full project taskledger state under ``<repo>/<project_path>``.
|
|
210
265
|
``next-action`` result contract
|
|
211
266
|
-------------------------------
|
|
212
267
|
|
|
@@ -356,12 +411,12 @@ Human monitoring UI
|
|
|
356
411
|
|
|
357
412
|
.. code-block:: bash
|
|
358
413
|
|
|
359
|
-
taskledger serve [--host 127.0.0.1] [--port 8765] [--
|
|
414
|
+
taskledger serve [TASK_REF] [--host 127.0.0.1] [--port 8765] [--refresh-seconds 2] [--open/--no-open]
|
|
360
415
|
|
|
361
416
|
Rules:
|
|
362
417
|
|
|
363
418
|
* the MVP binds only to localhost;
|
|
364
|
-
* it serves read-only
|
|
419
|
+
* it serves read-only server-rendered HTML pages;
|
|
365
420
|
* browser actions are not part of the MVP;
|
|
366
421
|
* agents should continue to use ``next-action``, ``context``, ``view``, and
|
|
367
422
|
``--json`` commands as the canonical automation interface.
|
|
@@ -12,6 +12,7 @@ Supported CLI groups
|
|
|
12
12
|
|
|
13
13
|
- ``task``, ``plan``, ``question``, ``implement``, ``validate``, ``todo``
|
|
14
14
|
- ``intro``, ``file``, ``link``, ``require``, ``release``, ``lock``, ``handoff``
|
|
15
|
+
- ``storage``, ``sync``
|
|
15
16
|
- ``doctor``, ``repair``, ``next-action``, ``can``, ``reindex``
|
|
16
17
|
- ``init``, ``status``, ``export``, ``import``, ``snapshot``
|
|
17
18
|
- ``context``, ``view``, ``serve``, ``search``, ``grep``, ``symbols``, ``deps``
|
|
@@ -54,6 +55,12 @@ todo subcommands
|
|
|
54
55
|
- ``todo add``, ``todo list``, ``todo done``, ``todo show``, ``todo status``, ``todo next``
|
|
55
56
|
- Todo source is inferred from active lock: ``implementer`` during implementation, ``planner`` during planning, ``user`` otherwise.
|
|
56
57
|
|
|
58
|
+
storage and sync subcommands
|
|
59
|
+
----------------------------
|
|
60
|
+
|
|
61
|
+
- ``storage where``, ``storage move --to PATH --mode copy|move [--adopt-existing] [--force]``
|
|
62
|
+
- ``sync preflight``, ``sync status``, ``sync commit --message "..."``
|
|
63
|
+
|
|
57
64
|
Supported Python API modules
|
|
58
65
|
----------------------------
|
|
59
66
|
|
|
@@ -66,6 +73,7 @@ Supported Python API modules
|
|
|
66
73
|
- ``taskledger.api.locks``
|
|
67
74
|
- ``taskledger.api.handoff``
|
|
68
75
|
- ``taskledger.api.releases``
|
|
76
|
+
- ``taskledger.api.storage``
|
|
69
77
|
- ``taskledger.api.search``
|
|
70
78
|
|
|
71
79
|
``taskledger.api.task_runs`` includes the public lifecycle helpers
|