taskledger 0.4.2__tar.gz → 0.5.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.5.0/.archledger/archive/records/building_blocks/al_block_0083.md +41 -0
- taskledger-0.5.0/.archledger/archive/records/concepts/al_concept_0081.md +32 -0
- {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/archive}/records/runtime/al_runtime_0076.md +7 -4
- taskledger-0.5.0/.archledger/archive/records/runtime/al_runtime_0084.md +42 -0
- {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0002.md +1 -1
- {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0004.md +1 -0
- {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0005.md +1 -1
- {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0006.md +2 -0
- {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0007.md +1 -1
- {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0008.md +3 -1
- {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0011.md +1 -1
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/building_blocks/al_block_0029.md +2 -2
- taskledger-0.5.0/.archledger/records/building_blocks/al_block_0030.md +24 -0
- taskledger-0.5.0/.archledger/records/building_blocks/al_block_0032.md +22 -0
- taskledger-0.5.0/.archledger/records/building_blocks/al_block_0033.md +22 -0
- taskledger-0.5.0/.archledger/records/building_blocks/al_block_0034.md +22 -0
- taskledger-0.5.0/.archledger/records/concepts/al_concept_0044.md +16 -0
- taskledger-0.5.0/.archledger/records/concepts/al_concept_0082.md +25 -0
- taskledger-0.5.0/.archledger/records/constraints/al_constraint_0016.md +17 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/decisions/al_adr_0046.md +10 -3
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/decisions/al_adr_0047.md +10 -3
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/decisions/al_adr_0048.md +10 -3
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/decisions/al_adr_0049.md +10 -3
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/decisions/al_adr_0050.md +12 -5
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/decisions/al_adr_0051.md +10 -3
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/deployment/al_deploy_0039.md +2 -2
- taskledger-0.5.0/.archledger/records/risks/al_risk_0060.md +18 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/stakeholders/al_content_0080.md +2 -2
- taskledger-0.5.0/.archledger/source-state.json +894 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/storage.yaml +1 -1
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger.toml +24 -1
- {taskledger-0.4.2 → taskledger-0.5.0}/.codecrate.toml +1 -1
- {taskledger-0.4.2 → taskledger-0.5.0}/.github/workflows/tests.yml +9 -1
- taskledger-0.5.0/.planledger.toml +6 -0
- taskledger-0.5.0/.releaseledger.toml +42 -0
- taskledger-0.5.0/.specweave.toml +44 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.taskledger.toml +1 -1
- {taskledger-0.4.2 → taskledger-0.5.0}/AGENTS.md +6 -1
- {taskledger-0.4.2 → taskledger-0.5.0}/API.md +16 -4
- {taskledger-0.4.2 → taskledger-0.5.0}/ARCHITECTURE.md +40 -45
- {taskledger-0.4.2 → taskledger-0.5.0}/CHANGELOG.md +70 -5
- {taskledger-0.4.2/taskledger.egg-info → taskledger-0.5.0}/PKG-INFO +96 -32
- {taskledger-0.4.2 → taskledger-0.5.0}/README.md +94 -29
- {taskledger-0.4.2 → taskledger-0.5.0}/docs/api.rst +5 -1
- {taskledger-0.4.2 → taskledger-0.5.0}/docs/command_contract.rst +94 -20
- {taskledger-0.4.2 → taskledger-0.5.0}/docs/full_task_cycle.rst +14 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/docs/public_surface.rst +21 -7
- {taskledger-0.4.2 → taskledger-0.5.0}/docs/service_boundary_whitelist.rst +6 -8
- {taskledger-0.4.2 → taskledger-0.5.0}/docs/sync.rst +14 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/docs/usage.rst +121 -28
- {taskledger-0.4.2 → taskledger-0.5.0}/pyproject.toml +2 -3
- {taskledger-0.4.2 → taskledger-0.5.0}/skills/taskledger/SKILL.md +100 -52
- taskledger-0.5.0/specs/behavior/README.md +1639 -0
- taskledger-0.5.0/specs/behavior/UNMAPPED_TESTS.md +65 -0
- taskledger-0.5.0/specs/behavior/evidence/taskledger-test-feature-coverage.json +2452 -0
- taskledger-0.5.0/specs/behavior/features/active_task/active-task.feature +59 -0
- taskledger-0.5.0/specs/behavior/features/actor_harness_state/actor-harness-state.feature +214 -0
- taskledger-0.5.0/specs/behavior/features/actor_resolution/actor-resolution.feature +112 -0
- taskledger-0.5.0/specs/behavior/features/agent_command_logging/agent-command-logging.feature +121 -0
- taskledger-0.5.0/specs/behavior/features/agent_session_protocol/agent-session-protocol.feature +116 -0
- taskledger-0.5.0/specs/behavior/features/atomic_fast_io/atomic-fast-io.feature +13 -0
- taskledger-0.5.0/specs/behavior/features/bdd_cli/bdd-cli.feature +156 -0
- taskledger-0.5.0/specs/behavior/features/bdd_gherkin/bdd-gherkin.feature +68 -0
- taskledger-0.5.0/specs/behavior/features/bdd_models/bdd-models.feature +85 -0
- taskledger-0.5.0/specs/behavior/features/bdd_report_import/bdd-report-import.feature +40 -0
- taskledger-0.5.0/specs/behavior/features/bdd_storage/bdd-storage.feature +58 -0
- taskledger-0.5.0/specs/behavior/features/bdd_validation_integration/bdd-validation-integration.feature +40 -0
- taskledger-0.5.0/specs/behavior/features/cli_command_contract/cli-command-contract.feature +59 -0
- taskledger-0.5.0/specs/behavior/features/cli_import_resilience/cli-import-resilience.feature +31 -0
- taskledger-0.5.0/specs/behavior/features/code_reviews/code-reviews.feature +69 -0
- taskledger-0.5.0/specs/behavior/features/command_example_linter/command-example-linter.feature +26 -0
- taskledger-0.5.0/specs/behavior/features/command_inventory/command-inventory.feature +97 -0
- taskledger-0.5.0/specs/behavior/features/command_runner/command-runner.feature +23 -0
- taskledger-0.5.0/specs/behavior/features/compact_mutation_output/compact-mutation-output.feature +68 -0
- taskledger-0.5.0/specs/behavior/features/config_cli/config-cli.feature +79 -0
- taskledger-0.5.0/specs/behavior/features/delta_remaining_contracts/delta-remaining-contracts.feature +155 -0
- taskledger-0.5.0/specs/behavior/features/docs_and_skill/docs-and-skill.feature +199 -0
- taskledger-0.5.0/specs/behavior/features/doctor/doctor.feature +192 -0
- taskledger-0.5.0/specs/behavior/features/domain_policies/domain-policies.feature +435 -0
- taskledger-0.5.0/specs/behavior/features/event_logging_config/event-logging-config.feature +44 -0
- taskledger-0.5.0/specs/behavior/features/events/events.feature +25 -0
- taskledger-0.5.0/specs/behavior/features/file_link_snapshots/file-link-snapshots.feature +67 -0
- taskledger-0.5.0/specs/behavior/features/find_code_clones_script/find-code-clones-script.feature +13 -0
- taskledger-0.5.0/specs/behavior/features/handoff_lifecycle/handoff-lifecycle.feature +93 -0
- taskledger-0.5.0/specs/behavior/features/help_subprocess/help-subprocess.feature +28 -0
- taskledger-0.5.0/specs/behavior/features/implementation_change_scan/implementation-change-scan.feature +41 -0
- taskledger-0.5.0/specs/behavior/features/implementation_checks/implementation-checks.feature +60 -0
- taskledger-0.5.0/specs/behavior/features/json_contracts/json-contracts.feature +75 -0
- taskledger-0.5.0/specs/behavior/features/legacy_cleanup_contracts/legacy-cleanup-contracts.feature +25 -0
- taskledger-0.5.0/specs/behavior/features/lifecycle_policies/lifecycle-policies.feature +19 -0
- taskledger-0.5.0/specs/behavior/features/lock_diagnostics/lock-diagnostics.feature +161 -0
- taskledger-0.5.0/specs/behavior/features/locks_audit/locks-audit.feature +20 -0
- taskledger-0.5.0/specs/behavior/features/models_v1_schema/models-v1-schema.feature +38 -0
- taskledger-0.5.0/specs/behavior/features/monitor/monitor.feature +81 -0
- taskledger-0.5.0/specs/behavior/features/next_action_expired_lock/next-action-expired-lock.feature +28 -0
- taskledger-0.5.0/specs/behavior/features/no_log_feature/no-log-feature.feature +169 -0
- taskledger-0.5.0/specs/behavior/features/plan_approval_contract/plan-approval-contract.feature +70 -0
- taskledger-0.5.0/specs/behavior/features/plan_lint/plan-lint.feature +189 -0
- taskledger-0.5.0/specs/behavior/features/plan_review/plan-review.feature +89 -0
- taskledger-0.5.0/specs/behavior/features/plan_revision_workflow/plan-revision-workflow.feature +64 -0
- taskledger-0.5.0/specs/behavior/features/plan_todo_materialization/plan-todo-materialization.feature +13 -0
- taskledger-0.5.0/specs/behavior/features/project_root_config/project-root-config.feature +200 -0
- taskledger-0.5.0/specs/behavior/features/question_add_many/question-add-many.feature +35 -0
- taskledger-0.5.0/specs/behavior/features/question_filter_answers/question-filter-answers.feature +53 -0
- taskledger-0.5.0/specs/behavior/features/question_plan_regeneration/question-plan-regeneration.feature +92 -0
- taskledger-0.5.0/specs/behavior/features/ready_work/ready-work.feature +26 -0
- taskledger-0.5.0/specs/behavior/features/release_changelog/release-changelog.feature +107 -0
- taskledger-0.5.0/specs/behavior/features/search/search.feature +33 -0
- taskledger-0.5.0/specs/behavior/features/service_boundaries/service-boundaries.feature +55 -0
- taskledger-0.5.0/specs/behavior/features/services_dashboard/services-dashboard.feature +101 -0
- taskledger-0.5.0/specs/behavior/features/sidecar_collections/sidecar-collections.feature +23 -0
- taskledger-0.5.0/specs/behavior/features/storage_bundle_layout/storage-bundle-layout.feature +71 -0
- taskledger-0.5.0/specs/behavior/features/storage_common/storage-common.feature +32 -0
- taskledger-0.5.0/specs/behavior/features/storage_init/storage-init.feature +27 -0
- taskledger-0.5.0/specs/behavior/features/storage_migration/storage-migration.feature +243 -0
- taskledger-0.5.0/specs/behavior/features/storage_repos/storage-repos.feature +80 -0
- taskledger-0.5.0/specs/behavior/features/storage_sync/storage-sync.feature +83 -0
- taskledger-0.5.0/specs/behavior/features/sync_git/sync-git.feature +88 -0
- taskledger-0.5.0/specs/behavior/features/task_archive/archive.feature +48 -0
- taskledger-0.5.0/specs/behavior/features/task_events/events.feature +50 -0
- taskledger-0.5.0/specs/behavior/features/task_markdown_export/markdown-export.feature +157 -0
- taskledger-0.5.0/specs/behavior/features/task_report/report.feature +154 -0
- taskledger-0.5.0/specs/behavior/features/taskledger_branch_scoped_ledgers/taskledger-branch-scoped-ledgers.feature +57 -0
- taskledger-0.5.0/specs/behavior/features/taskledger_cli_api_parity/taskledger-cli-api-parity.feature +36 -0
- taskledger-0.5.0/specs/behavior/features/taskledger_v2_cli/taskledger-v2-cli.feature +333 -0
- taskledger-0.5.0/specs/behavior/features/taskledger_v2_exchange/taskledger-v2-exchange.feature +191 -0
- taskledger-0.5.0/specs/behavior/features/tasks_service_static/tasks-service-static.feature +13 -0
- taskledger-0.5.0/specs/behavior/features/todo_implementation_gate/todo-implementation-gate.feature +181 -0
- taskledger-0.5.0/specs/behavior/features/trace/trace.feature +13 -0
- taskledger-0.5.0/specs/behavior/features/tree_command/tree-command.feature +161 -0
- taskledger-0.5.0/specs/behavior/features/usage_cli/usage-cli.feature +45 -0
- taskledger-0.5.0/specs/behavior/features/worker_pipeline_cli/worker-pipeline-cli.feature +88 -0
- taskledger-0.5.0/specs/behavior/features/worker_pipeline_config/worker-pipeline-config.feature +49 -0
- taskledger-0.5.0/specs/behavior/features/worker_pipeline_context/worker-pipeline-context.feature +48 -0
- taskledger-0.5.0/specs/behavior/features/worker_pipeline_handoff/worker-pipeline-handoff.feature +29 -0
- taskledger-0.5.0/specs/behavior/features/worker_pipeline_plan_template/worker-pipeline-plan-template.feature +40 -0
- taskledger-0.5.0/specs/behavior/features/worker_pipeline_todos/worker-pipeline-todos.feature +20 -0
- taskledger-0.5.0/specs/behavior/features/workflow_guidance/workflow-guidance.feature +55 -0
- taskledger-0.5.0/specs/behavior/manifest.json +13836 -0
- taskledger-0.5.0/specs/behavior/mappings/.gitkeep +0 -0
- taskledger-0.5.0/specs/behavior/reports/specweave/.gitkeep +0 -0
- taskledger-0.5.0/specs/behavior/reports/specweave/coverage-gaps.md +330 -0
- taskledger-0.5.0/specs/behavior/reports/specweave/coverage.json +99522 -0
- taskledger-0.5.0/specs/behavior/reports/specweave/mappings.json +7352 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/_version.py +3 -3
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/handoff.py +3 -2
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/releases.py +0 -2
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/tasks.py +4 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli.py +150 -108
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_common.py +24 -3
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_implement.py +11 -12
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_ledger.py +22 -11
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_misc.py +195 -2
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_plan.py +1 -0
- taskledger-0.5.0/taskledger/cli_ref.py +78 -0
- taskledger-0.5.0/taskledger/cli_release.py +91 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_task.py +52 -3
- taskledger-0.5.0/taskledger/cli_trace.py +29 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_validate.py +12 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/command_inventory.py +59 -28
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/actor.py +11 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/models.py +2 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/release.py +0 -3
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/run.py +19 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/sidecars.py +17 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/states.py +2 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/exchange.py +2 -0
- taskledger-0.5.0/taskledger/ids.py +82 -0
- taskledger-0.5.0/taskledger/py.typed +0 -0
- taskledger-0.5.0/taskledger/refs.py +81 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/actors.py +132 -17
- taskledger-0.5.0/taskledger/services/command_runner.py +43 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/dashboard.py +2 -4
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/doctor.py +40 -1
- taskledger-0.5.0/taskledger/services/file_links.py +233 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/git_utils.py +49 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/implementation_flow.py +58 -14
- taskledger-0.5.0/taskledger/services/lock_diagnostics.py +526 -0
- taskledger-0.5.0/taskledger/services/monitor.py +344 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/navigation.py +142 -8
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/next_action_payload.py +3 -3
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/plan_hash.py +5 -2
- taskledger-0.5.0/taskledger/services/ready_work.py +90 -0
- taskledger-0.5.0/taskledger/services/releases.py +201 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/run_store.py +34 -3
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/task_archive.py +36 -1
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/task_collections.py +69 -9
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/task_events.py +2 -7
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/task_reports.py +5 -1
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/tasks.py +52 -13
- taskledger-0.5.0/taskledger/services/trace.py +58 -0
- taskledger-0.5.0/taskledger/services/usage.py +398 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/validation.py +5 -1
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/validation_flow.py +88 -3
- taskledger-0.5.0/taskledger/storage/atomic.py +43 -0
- taskledger-0.5.0/taskledger/storage/common.py +111 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/events.py +4 -2
- taskledger-0.5.0/taskledger/storage/frontmatter.py +51 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/indexes.py +8 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/ledger_config.py +64 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/locks.py +15 -15
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/meta.py +3 -11
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/paths.py +4 -6
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/project_config.py +47 -4
- taskledger-0.5.0/taskledger/storage/sidecar_index.py +369 -0
- taskledger-0.5.0/taskledger/storage/task_index.py +356 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/task_store.py +158 -49
- taskledger-0.5.0/taskledger/storage/yaml_store.py +43 -0
- taskledger-0.5.0/taskledger/timeutils.py +5 -0
- {taskledger-0.4.2 → taskledger-0.5.0/taskledger.egg-info}/PKG-INFO +96 -32
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger.egg-info/SOURCES.txt +139 -25
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger.egg-info/requires.txt +1 -2
- taskledger-0.5.0/tests/__init__.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/conftest.py +74 -1
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_active_task.py +16 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_actor_harness_state.py +58 -0
- taskledger-0.5.0/tests/test_actor_resolution.py +213 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_agent_command_logging.py +56 -3
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_agent_session_protocol.py +87 -9
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_atomic_fast_io.py +6 -2
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_cli_command_contract.py +96 -1
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_cli_import_resilience.py +13 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_code_reviews.py +16 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_command_example_linter.py +6 -1
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_command_inventory.py +33 -9
- taskledger-0.5.0/tests/test_command_runner.py +43 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_compact_mutation_output.py +56 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_config_cli.py +20 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_delta_remaining_contracts.py +181 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_docs_and_skill.py +130 -5
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_doctor.py +67 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_domain_policies.py +142 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_event_logging_config.py +58 -81
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_events.py +6 -0
- taskledger-0.5.0/tests/test_file_link_snapshots.py +271 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_find_code_clones_script.py +2 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_handoff_lifecycle.py +29 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_help_subprocess.py +11 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_implementation_change_scan.py +48 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_implementation_checks.py +16 -0
- taskledger-0.5.0/tests/test_import_boundaries.py +115 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_json_contracts.py +26 -0
- taskledger-0.5.0/tests/test_ledgercore_dependency.py +33 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_legacy_cleanup_contracts.py +30 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_lifecycle_policies.py +11 -0
- taskledger-0.5.0/tests/test_lock_diagnostics.py +568 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_locks_audit.py +4 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_models_v1_schema.py +11 -1
- taskledger-0.5.0/tests/test_monitor.py +365 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_next_action_expired_lock.py +26 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_no_log_feature.py +48 -0
- taskledger-0.5.0/tests/test_performance_caching.py +158 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_plan_approval_contract.py +39 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_plan_lint.py +58 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_plan_review.py +20 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_plan_revision_workflow.py +37 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_plan_todo_materialization.py +11 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_project_root_config.py +141 -6
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_question_add_many.py +19 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_question_filter_answers.py +14 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_question_plan_regeneration.py +115 -0
- taskledger-0.5.0/tests/test_ready_work.py +134 -0
- taskledger-0.5.0/tests/test_release_changelog.py +273 -0
- taskledger-0.5.0/tests/test_resource_refs.py +63 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_search.py +6 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_service_boundaries.py +77 -22
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_services_dashboard.py +20 -130
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_sidecar_collections.py +2 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_storage_bundle_layout.py +21 -2
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_storage_common.py +9 -1
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_storage_init.py +6 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_storage_migration.py +84 -1
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_storage_repos.py +24 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_storage_sync.py +20 -0
- taskledger-0.5.0/tests/test_storage_yaml_store.py +87 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_sync_git.py +19 -1
- taskledger-0.5.0/tests/test_task_archive.py +563 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_task_events.py +12 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_task_markdown_export.py +74 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_task_report.py +34 -78
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_taskledger_branch_scoped_ledgers.py +58 -1
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_taskledger_cli_api_parity.py +37 -4
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_taskledger_v2_cli.py +371 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_taskledger_v2_exchange.py +71 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_tasks_service_static.py +11 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_todo_implementation_gate.py +185 -0
- taskledger-0.5.0/tests/test_trace.py +42 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_tree_command.py +36 -0
- taskledger-0.5.0/tests/test_usage_cli.py +197 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_worker_pipeline_cli.py +32 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_worker_pipeline_config.py +26 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_worker_pipeline_context.py +25 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_worker_pipeline_handoff.py +6 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_worker_pipeline_plan_template.py +41 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_worker_pipeline_todos.py +4 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/test_workflow_guidance.py +12 -0
- taskledger-0.4.2/.archledger/records/building_blocks/al_block_0030.md +0 -24
- taskledger-0.4.2/.archledger/records/building_blocks/al_block_0032.md +0 -22
- taskledger-0.4.2/.archledger/records/building_blocks/al_block_0033.md +0 -22
- taskledger-0.4.2/.archledger/records/building_blocks/al_block_0034.md +0 -22
- taskledger-0.4.2/.archledger/records/concepts/al_concept_0044.md +0 -16
- taskledger-0.4.2/.archledger/records/constraints/al_constraint_0016.md +0 -17
- taskledger-0.4.2/.archledger/records/risks/al_risk_0060.md +0 -18
- taskledger-0.4.2/.archledger/source-state.json +0 -754
- taskledger-0.4.2/taskledger/cli_release.py +0 -192
- taskledger-0.4.2/taskledger/cli_report.py +0 -171
- taskledger-0.4.2/taskledger/ids.py +0 -40
- taskledger-0.4.2/taskledger/services/command_runner.py +0 -22
- taskledger-0.4.2/taskledger/services/html_reports.py +0 -300
- taskledger-0.4.2/taskledger/services/markdown_html.py +0 -67
- taskledger-0.4.2/taskledger/services/releases.py +0 -712
- taskledger-0.4.2/taskledger/services/serve_read_model.py +0 -929
- taskledger-0.4.2/taskledger/services/web_dashboard.py +0 -239
- taskledger-0.4.2/taskledger/storage/atomic.py +0 -81
- taskledger-0.4.2/taskledger/storage/common.py +0 -90
- taskledger-0.4.2/taskledger/storage/frontmatter.py +0 -57
- taskledger-0.4.2/taskledger/templates/__init__.py +0 -1
- taskledger-0.4.2/taskledger/templates/base.html +0 -64
- taskledger-0.4.2/taskledger/templates/error.html +0 -6
- taskledger-0.4.2/taskledger/templates/site_index.html +0 -42
- taskledger-0.4.2/taskledger/templates/task_report.html +0 -37
- taskledger-0.4.2/taskledger/timeutils.py +0 -7
- taskledger-0.4.2/tests/test_html_reports.py +0 -182
- taskledger-0.4.2/tests/test_release_changelog.py +0 -684
- taskledger-0.4.2/tests/test_serve_dashboard.py +0 -204
- taskledger-0.4.2/tests/test_task_archive.py +0 -220
- {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0001.md +0 -0
- {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0003.md +0 -0
- {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0009.md +0 -0
- {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0010.md +0 -0
- {taskledger-0.4.2/.archledger → taskledger-0.5.0/.archledger/profiles/arc42}/sections/al_content_0012.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/building_blocks/al_block_0031.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/concepts/al_concept_0040.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/concepts/al_concept_0041.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/concepts/al_concept_0042.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/concepts/al_concept_0043.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/concepts/al_concept_0045.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/constraints/al_constraint_0017.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/constraints/al_constraint_0018.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/constraints/al_constraint_0019.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/contexts/al_context_0020.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/contexts/al_context_0021.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/contexts/al_context_0022.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/contexts/al_context_0023.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0061.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0062.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0063.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0064.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0065.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0066.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0067.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0068.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0069.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0070.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0071.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0072.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/glossary/al_glossary_0073.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/quality_requirements/al_quality_0052.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/quality_requirements/al_quality_0053.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/quality_requirements/al_quality_0054.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/quality_requirements/al_quality_0055.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/quality_requirements/al_quality_0056.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/requirements/al_content_0013.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/requirements/al_content_0014.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/requirements/al_content_0015.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/risks/al_risk_0057.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/risks/al_risk_0058.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/risks/al_risk_0059.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/runtime/al_runtime_0035.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/runtime/al_runtime_0036.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/runtime/al_runtime_0037.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/runtime/al_runtime_0038.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/runtime/al_runtime_0074.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/runtime/al_runtime_0075.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/runtime/al_runtime_0077.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/runtime/al_runtime_0078.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/stakeholders/al_content_0079.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/strategy/al_strategy_0024.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/strategy/al_strategy_0025.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/strategy/al_strategy_0026.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/strategy/al_strategy_0027.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.archledger/records/strategy/al_strategy_0028.md +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.github/workflows/codecov.yml +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.github/workflows/pre-commit.yml +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.github/workflows/python-publish.yml +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.gitignore +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.pre-commit-config.yaml +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.readthedocs.yaml +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/.ruff.toml +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/LICENSE +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/Makefile +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/docs/Makefile +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/docs/architecture_taskledger_split.rst +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/docs/build.sh +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/docs/conf.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/docs/index.rst +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/docs/multi_repo.rst +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/docs/requirements.txt +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/docs/transfer.rst +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/scripts/find_code_clones.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/setup.cfg +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/setup.py +0 -0
- /taskledger-0.4.2/taskledger/py.typed → /taskledger-0.5.0/specs/behavior/evidence/.gitkeep +0 -0
- /taskledger-0.4.2/tests/__init__.py → /taskledger-0.5.0/specs/behavior/features/.gitkeep +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/__init__.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/__main__.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/__init__.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/config.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/introductions.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/locks.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/plans.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/project.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/questions.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/reviews.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/search.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/storage.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/sync.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/api/task_runs.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_actor.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_archive.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_config.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_migrate.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_pipeline.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_question.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_review.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_storage.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/cli_sync.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/__init__.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/_model_utils.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/active_state.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/change.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/check.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/event.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/handoff.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/lock.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/plan.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/policies.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/question.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/review.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/domain/task.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/errors.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/launcher.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/search.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/__init__.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/agent_logging.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/agent_transcripts.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/change_tracking.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/check_tracking.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/code_review.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/doctor_checks/migration_checks.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/doctor_checks/project_scan.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/doctor_checks/task_checks.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/event_logging.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/git_sync.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/handoff.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/handoff_lifecycle.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/next_action_model.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/phase5_lock_transfer.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/plan_editing.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/plan_lint.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/plan_materialization.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/plan_review.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/planning_flow.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/storage_locations.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/task_export.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/task_lifecycle.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/task_queries.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/task_repair.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/tree.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/worker_context.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/worker_pipeline.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/services/workflow_guidance.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/__init__.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/agent_logs.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/init.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/migrations.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/project_identity.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/repos.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/toml_edit.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger/storage/worker_pipeline_config.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger.egg-info/dependency_links.txt +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger.egg-info/entry_points.txt +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/taskledger.egg-info/top_level.txt +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/support/__init__.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/support/builders.py +0 -0
- {taskledger-0.4.2 → taskledger-0.5.0}/tests/support/fake_command_runner.py +0 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_block_0083
|
|
4
|
+
type: black_box
|
|
5
|
+
title: Human Presentation Layer
|
|
6
|
+
status: archived
|
|
7
|
+
section: building_block_view
|
|
8
|
+
level: 1
|
|
9
|
+
parent: al_block_0029
|
|
10
|
+
order: 60
|
|
11
|
+
date: "2026-06-07"
|
|
12
|
+
interfaces:
|
|
13
|
+
- Service read models -> terminal TUI
|
|
14
|
+
- Dashboard/report payloads -> HTML or Markdown
|
|
15
|
+
location:
|
|
16
|
+
- taskledger/tui/
|
|
17
|
+
- taskledger/services/tui_read_model.py
|
|
18
|
+
- taskledger/services/dashboard.py
|
|
19
|
+
- taskledger/services/task_reports.py
|
|
20
|
+
fulfilled_requirements: []
|
|
21
|
+
risks: []
|
|
22
|
+
tags: []
|
|
23
|
+
body_format: markdown
|
|
24
|
+
created_at: "2026-06-07T11:49:59Z"
|
|
25
|
+
updated_at: "2026-06-11T20:53:29Z"
|
|
26
|
+
source_refs:
|
|
27
|
+
- path: taskledger/tui/
|
|
28
|
+
role: implements
|
|
29
|
+
- path: taskledger/services/tui_read_model.py
|
|
30
|
+
role: implements
|
|
31
|
+
test_refs:
|
|
32
|
+
- tests/test_tui_cli.py
|
|
33
|
+
- tests/test_tui_read_model.py
|
|
34
|
+
archived_at: "2026-06-11T20:53:29Z"
|
|
35
|
+
archived_reason: TUI and HTML dashboard removed from taskledger; task-0126 ledger-isolation
|
|
36
|
+
archived_from: records/building_blocks/al_block_0083.md
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
Optional human-facing views over the same durable task records used by CLI and API operations. The Textual TUI presents task lists, plan review, todos, implementation, code reviews, validation, files, events, and raw reports. HTML dashboard and Markdown report services provide related inspection and sharing views.
|
|
40
|
+
|
|
41
|
+
This layer is read-only with respect to lifecycle state. Users invoke explicit CLI commands for mutations, preserving approval, lock, todo, and validation gates.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_concept_0081
|
|
4
|
+
type: concept
|
|
5
|
+
title: BDD traceability and report evidence
|
|
6
|
+
status: archived
|
|
7
|
+
section: cross_cutting_concepts
|
|
8
|
+
order: 70
|
|
9
|
+
date: "2026-06-07"
|
|
10
|
+
applies_to: []
|
|
11
|
+
body_format: markdown
|
|
12
|
+
created_at: "2026-06-07T11:49:58Z"
|
|
13
|
+
updated_at: "2026-06-11T20:53:29Z"
|
|
14
|
+
source_refs:
|
|
15
|
+
- path: taskledger/domain/bdd.py
|
|
16
|
+
role: implements
|
|
17
|
+
- path: taskledger/services/bdd_gherkin.py
|
|
18
|
+
role: implements
|
|
19
|
+
- path: taskledger/services/bdd_reports.py
|
|
20
|
+
role: implements
|
|
21
|
+
test_refs:
|
|
22
|
+
- tests/test_bdd_gherkin.py
|
|
23
|
+
- tests/test_bdd_report_import.py
|
|
24
|
+
- tests/test_bdd_validation_integration.py
|
|
25
|
+
archived_at: "2026-06-11T20:53:29Z"
|
|
26
|
+
archived_reason: BDD traceability removed from taskledger; task-0126 ledger-isolation
|
|
27
|
+
archived_from: records/concepts/al_concept_0081.md
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
BDD is an optional traceability overlay on a managed task. Features contain rules and Given/When/Then examples. Examples can reference canonical acceptance-criterion IDs and Archledger record IDs.
|
|
31
|
+
|
|
32
|
+
Gherkin export is an exchange artifact, not canonical state. Stable tags preserve task, example, criterion, and architecture identities. Imported Cucumber JSON or JUnit XML is matched back to examples and persisted as report evidence that can contribute validation checks. Normal lifecycle and validation gates remain authoritative.
|
|
@@ -2,17 +2,20 @@
|
|
|
2
2
|
schema_version: 2
|
|
3
3
|
id: al_runtime_0076
|
|
4
4
|
type: runtime_scenario
|
|
5
|
-
title:
|
|
6
|
-
status:
|
|
5
|
+
title: HTML report and serve dashboard
|
|
6
|
+
status: archived
|
|
7
7
|
section: runtime_view
|
|
8
8
|
order: 70
|
|
9
9
|
date: "2026-05-23"
|
|
10
10
|
participants: []
|
|
11
|
-
trigger:
|
|
11
|
+
trigger: Developer runs taskledger report html or taskledger serve
|
|
12
12
|
result: ""
|
|
13
13
|
body_format: markdown
|
|
14
14
|
created_at: "2026-05-23T19:30:00Z"
|
|
15
|
-
updated_at: "2026-
|
|
15
|
+
updated_at: "2026-06-11T20:54:44Z"
|
|
16
|
+
archived_at: "2026-06-11T20:54:44Z"
|
|
17
|
+
archived_reason: HTML report and serve dashboard removed; task-0126 ledger-isolation
|
|
18
|
+
archived_from: records/runtime/al_runtime_0076.md
|
|
16
19
|
---
|
|
17
20
|
|
|
18
21
|
**Trigger**: Developer runs `taskledger report html` or `taskledger serve`.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_runtime_0084
|
|
4
|
+
type: runtime_scenario
|
|
5
|
+
title: BDD example to validation evidence
|
|
6
|
+
status: archived
|
|
7
|
+
section: runtime_view
|
|
8
|
+
order: 100
|
|
9
|
+
date: "2026-06-07"
|
|
10
|
+
participants:
|
|
11
|
+
- coding agent
|
|
12
|
+
- taskledger CLI
|
|
13
|
+
- BDD services
|
|
14
|
+
- task storage
|
|
15
|
+
trigger: An actor wants executable examples linked to task acceptance criteria.
|
|
16
|
+
result: External automation results are persisted as traceable validation evidence.
|
|
17
|
+
body_format: markdown
|
|
18
|
+
created_at: "2026-06-07T11:50:18Z"
|
|
19
|
+
updated_at: "2026-06-11T20:53:29Z"
|
|
20
|
+
source_refs:
|
|
21
|
+
- path: taskledger/cli_bdd.py
|
|
22
|
+
role: implements
|
|
23
|
+
- path: taskledger/services/bdd_gherkin.py
|
|
24
|
+
role: implements
|
|
25
|
+
- path: taskledger/services/bdd_reports.py
|
|
26
|
+
role: implements
|
|
27
|
+
test_refs:
|
|
28
|
+
- tests/test_bdd_cli.py
|
|
29
|
+
- tests/test_bdd_validation_integration.py
|
|
30
|
+
archived_at: "2026-06-11T20:53:29Z"
|
|
31
|
+
archived_reason: BDD example scenario removed from taskledger; task-0126 ledger-isolation
|
|
32
|
+
archived_from: records/runtime/al_runtime_0084.md
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
1. An actor initializes task-local BDD/example records for a managed task.
|
|
36
|
+
2. Each example links to acceptance-criterion IDs and may link to Archledger records.
|
|
37
|
+
3. Canonical behavior specs live outside Taskledger under `specs/behavior/features/<area>/<feature>.feature`, owned by SpecWeave.
|
|
38
|
+
4. Plain pytest files under `tests/test_<area>_<feature>.py` enforce the behavior and may emit JUnit XML under `reports/behavior/`.
|
|
39
|
+
5. `bdd example link-automation` records metadata that links a task-local example to the external feature file, scenario tag/title, and pytest node id.
|
|
40
|
+
6. `validate import-bdd-report` imports JUnit XML or Cucumber-compatible JSON evidence and matches it back to task-local examples.
|
|
41
|
+
7. Matched results become validation evidence through normal validation checks; normal latest-check-wins and mandatory-criterion gates still decide completion.
|
|
42
|
+
8. `bdd gherkin-export` remains a derived exchange/export command. It must not be presented as the canonical source of executable behavior.
|
|
@@ -14,7 +14,7 @@ updated_at: "2026-05-23T12:24:46Z"
|
|
|
14
14
|
|
|
15
15
|
taskledger operates under several fixed constraints that shape its architecture:
|
|
16
16
|
|
|
17
|
-
- **Python 3.10+ with minimal dependencies**: The runtime depends only on `typer`, `PyYAML`,
|
|
17
|
+
- **Python 3.10+ with minimal dependencies**: The runtime depends only on `typer`, `PyYAML`, and `tomli` (for Python <3.11). No database, no network server, no external service is required.
|
|
18
18
|
- **File-system canonical storage**: All durable state lives in the project's `.taskledger/` directory as Markdown files with YAML front matter. This makes state inspectable, diffable, and version-controllable alongside source code.
|
|
19
19
|
- **CLI-first with machine-readable JSON output**: The primary interface is the `taskledger` CLI command. Every command supports `--json` for structured output. The JSON envelope shape and exit codes are part of the public contract.
|
|
20
20
|
- **Skills outside the package**: Agent skill files (e.g., `skills/taskledger/SKILL.md`) live outside the Python package and are never packaged as Python package data. The package provides the CLI/library; skill distribution is separate.
|
|
@@ -26,6 +26,7 @@ Key architectural choices:
|
|
|
26
26
|
- **JSON indexes as derived caches** — Index files under `.taskledger/indexes/` are rebuilt from canonical records by `taskledger reindex`. They are never the source of truth.
|
|
27
27
|
- **Policy-based gate decisions** — All lifecycle transitions go through functions in `taskledger/domain/policies.py` that return `Decision` objects with `allowed`, `code`, `message`, and `exit_code`. This keeps gate logic testable and separate from I/O.
|
|
28
28
|
- **Atomic file writes** — All writes use `atomic_write_text` (write to temp, `os.replace`) to prevent partial writes on crash.
|
|
29
|
+
- **Evidence as sidecars** — Code-review records extend traceability without introducing new lifecycle stages or weakening validation gates.
|
|
29
30
|
|
|
30
31
|
## Maintenance
|
|
31
32
|
|
|
@@ -22,4 +22,4 @@ The top-level building block is the **taskledger system**, decomposed into five
|
|
|
22
22
|
|
|
23
23
|
Data flows strictly downward: CLI → Services → Domain + Storage. The API layer calls Services directly. The Domain layer has no dependencies on Storage or Services.
|
|
24
24
|
|
|
25
|
-
Each task is stored as a **task bundle directory** under `.taskledger/ledgers/<ledger_ref>/` containing the task record (Markdown) and sidecar collections for plans, runs, locks, todos, questions, changes, checks, handoffs, and links.
|
|
25
|
+
Each task is stored as a **task bundle directory** under `.taskledger/ledgers/<ledger_ref>/` containing the task record (Markdown) and sidecar collections for plans, runs, locks, todos, questions, changes, checks, handoffs, and links. Mutations append immutable `TaskEvent` records to the ledger-level `events/` directory. Action/event logging is enabled by default; set `[event_logging] enabled = false` in `taskledger.toml` to disable new event records. Existing records remain readable regardless.
|
|
@@ -18,3 +18,5 @@ The runtime view traces the main operational scenarios through the system:
|
|
|
18
18
|
2. **Lock lifecycle** — Starting a stage (planning/implementation/validation) acquires a lock and creates a run. Locks have lease timers and heartbeats. Stale locks require explicit break flow with audit trail.
|
|
19
19
|
3. **Handoff flow** — A worker creates a handoff with generated context (task state, plan, todos, questions, lock info). Another worker claims it, optionally transferring the lock. The handoff is closed when the receiving worker completes.
|
|
20
20
|
4. **Doctor checks** — Inspects lock/run consistency, front matter integrity, index staleness, and storage layout version. Reports diagnostics with severity, code, and repair hints.
|
|
21
|
+
5. **Validation evidence flow** — Acceptance criteria from the accepted plan are checked during the validation stage. Evidence is recorded per criterion with pass/fail/warn status. Latest-check-wins semantics apply; mandatory criteria gate completion.
|
|
22
|
+
6. **Code-review evidence** — A reviewer records append-only review evidence against an implementation run, handoff, worker step, working tree, or commit. This is evidence attached to the task, not a new lifecycle stage.
|
|
@@ -16,6 +16,6 @@ taskledger is a single-node, file-system-based tool. Deployment consists of:
|
|
|
16
16
|
|
|
17
17
|
- **Installation**: `pip install taskledger` (PyPI) or local `pip install -e .`
|
|
18
18
|
- **Project initialization**: `taskledger init` creates `taskledger.toml` and `.taskledger/` in the project root
|
|
19
|
-
- **Runtime**: The CLI runs as a Python process, reading and writing the project's `.taskledger/` directory. No daemon, no server
|
|
19
|
+
- **Runtime**: The CLI runs as a Python process, reading and writing the project's `.taskledger/` directory. No daemon, no server.
|
|
20
20
|
- **CI integration**: taskledger commands can be run in CI pipelines for status checks and validation
|
|
21
21
|
- **Agent integration**: Agent harnesses invoke taskledger CLI commands as subprocess calls
|
|
@@ -18,5 +18,7 @@ Cross-cutting concerns that span multiple layers:
|
|
|
18
18
|
- **JSON output envelope**: All CLI commands emit a consistent JSON envelope with `ok`, `command`, `result_type`, `result`, `events`, and `warnings` fields when `--json` is passed.
|
|
19
19
|
- **YAML front matter serialization**: All canonical records use YAML front matter (`---` delimited) for metadata and Markdown for body. Serialization/deserialization is in `taskledger/storage/frontmatter.py`.
|
|
20
20
|
- **Atomic file writes**: All file writes go through `atomic_write_text` (temp file → `os.replace` → directory fsync) to prevent corruption.
|
|
21
|
-
- **
|
|
21
|
+
- **Action/event logging (default-on)**: Mutations append immutable `TaskEvent` records to the ledger-level `events/` directory under `.taskledger/ledgers/<ledger_ref>/`. Action/event logging is enabled by default; set `[event_logging] enabled = false` to disable new records. Existing records remain readable. Events track who did what, when, and why. Source: `taskledger/storage/events.py`, `taskledger/services/task_events.py`.
|
|
22
22
|
- **Exit code taxonomy**: Errors map to stable exit codes (0=success, 1=generic, 2=bad input, 3=workflow rejection, 4=lock conflict, 5=missing, 6=storage, 7=validation failed).
|
|
23
|
+
- **Opaque cross-ledger references**: Links and file references remain opaque strings. Taskledger does not interpret archledger IDs, SpecWeave feature paths, or other external system references.
|
|
24
|
+
- **Read-model reuse**: `view` and `status` commands consume service-level read models. These presentations are read-only and do not bypass lifecycle services.
|
|
@@ -17,4 +17,4 @@ Known risks and areas of technical debt:
|
|
|
17
17
|
- **Storage scaling with many tasks**: Each task is a directory with multiple sidecar files. Very large projects (hundreds of tasks) may see slowdowns in list/query operations since indexes are rebuilt from file scans.
|
|
18
18
|
- **Migration surface between storage versions**: The storage layout has evolved (currently v3). Migration code in `taskledger/storage/migrations.py` adds complexity. Future format changes must maintain backward compatibility.
|
|
19
19
|
- **Service boundary erosion**: Some service modules (notably `tasks.py`) have grown large. The service layer has no formal interface contracts — boundaries are enforced by convention and tests (`test_service_boundaries.py`).
|
|
20
|
-
- **Growing dependency count**:
|
|
20
|
+
- **Growing dependency count**: The dependency set is small (typer, PyYAML, tomli) but new dependencies must be justified by core features, not optional presentations.
|
|
@@ -14,12 +14,12 @@ quality_characteristics: []
|
|
|
14
14
|
tags: []
|
|
15
15
|
body_format: markdown
|
|
16
16
|
created_at: "2026-05-23T12:30:16Z"
|
|
17
|
-
updated_at: "2026-
|
|
17
|
+
updated_at: "2026-06-11T21:00:00Z"
|
|
18
18
|
---
|
|
19
19
|
|
|
20
20
|
## Motivation
|
|
21
21
|
|
|
22
|
-
taskledger decomposes into
|
|
22
|
+
taskledger decomposes into core layers with downward dependency flow. This isolates persistence, business rules, orchestration, and public interfaces.
|
|
23
23
|
|
|
24
24
|
## Contained building blocks
|
|
25
25
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_block_0030
|
|
4
|
+
type: black_box
|
|
5
|
+
title: "CLI Layer"
|
|
6
|
+
status: accepted
|
|
7
|
+
section: building_block_view
|
|
8
|
+
level: 1
|
|
9
|
+
parent: al_block_0029
|
|
10
|
+
order: 10
|
|
11
|
+
date: "2026-05-23"
|
|
12
|
+
interfaces: []
|
|
13
|
+
location: []
|
|
14
|
+
fulfilled_requirements: []
|
|
15
|
+
risks: []
|
|
16
|
+
tags: []
|
|
17
|
+
body_format: markdown
|
|
18
|
+
created_at: "2026-05-23T12:30:23Z"
|
|
19
|
+
updated_at: "2026-06-11T21:00:00Z"
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
Handles command parsing via Typer, task reference resolution (`--task` option, active task default), and output rendering (human text or JSON envelope via `cli_common.py`). Command families include the canonical lifecycle plus `review`, `config`, task archive operations, transfer/sync, diagnostics, and the `monitor` observer.
|
|
23
|
+
|
|
24
|
+
Source refs: `taskledger/cli.py`, `taskledger/cli_common.py`, `taskledger/command_inventory.py`, and the focused `taskledger/cli_*.py` registration modules.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_block_0032
|
|
4
|
+
type: black_box
|
|
5
|
+
title: "Services Layer"
|
|
6
|
+
status: proposed
|
|
7
|
+
section: building_block_view
|
|
8
|
+
level: 1
|
|
9
|
+
parent: al_block_0029
|
|
10
|
+
order: 30
|
|
11
|
+
date: "2026-05-23"
|
|
12
|
+
interfaces: []
|
|
13
|
+
location: []
|
|
14
|
+
fulfilled_requirements: []
|
|
15
|
+
risks: []
|
|
16
|
+
tags: []
|
|
17
|
+
body_format: markdown
|
|
18
|
+
created_at: "2026-05-23T12:30:29Z"
|
|
19
|
+
updated_at: "2026-06-11T21:00:00Z"
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
Orchestrates lifecycle flows by coordinating Domain policies and records with Storage. Focused services own planning, implementation, validation, handoffs, doctor checks, navigation, worker pipelines, archival, code-review evidence, event logging, exports, dashboard assembly, and ready-work inspection. `tasks.py` remains the compatibility-oriented lifecycle facade while ownership is progressively extracted into focused modules.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_block_0033
|
|
4
|
+
type: black_box
|
|
5
|
+
title: "Domain Layer"
|
|
6
|
+
status: proposed
|
|
7
|
+
section: building_block_view
|
|
8
|
+
level: 1
|
|
9
|
+
parent: al_block_0029
|
|
10
|
+
order: 40
|
|
11
|
+
date: "2026-05-23"
|
|
12
|
+
interfaces: []
|
|
13
|
+
location: []
|
|
14
|
+
fulfilled_requirements: []
|
|
15
|
+
risks: []
|
|
16
|
+
tags: []
|
|
17
|
+
body_format: markdown
|
|
18
|
+
created_at: "2026-05-23T12:30:29Z"
|
|
19
|
+
updated_at: "2026-06-11T21:00:00Z"
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
Data models, state enums, normalization, and policy decisions without storage I/O. Besides lifecycle and sidecar records, the domain defines append-only code-review records. State transitions remain in `states.py`; policy decisions in `policies.py` return structured `Decision` objects.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_block_0034
|
|
4
|
+
type: black_box
|
|
5
|
+
title: "Storage Layer"
|
|
6
|
+
status: proposed
|
|
7
|
+
section: building_block_view
|
|
8
|
+
level: 1
|
|
9
|
+
parent: al_block_0029
|
|
10
|
+
order: 50
|
|
11
|
+
date: "2026-05-23"
|
|
12
|
+
interfaces: []
|
|
13
|
+
location: []
|
|
14
|
+
fulfilled_requirements: []
|
|
15
|
+
risks: []
|
|
16
|
+
tags: []
|
|
17
|
+
body_format: markdown
|
|
18
|
+
created_at: "2026-05-23T12:30:29Z"
|
|
19
|
+
updated_at: "2026-06-11T21:00:00Z"
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
File system persistence for canonical records. Storage layout keeps each task in `.taskledger/ledgers/<ledger_ref>/tasks/<task-id>/`, with independently addressable sidecars including plans, runs, locks, todos, questions, changes, checks, handoffs, links, and code reviews. Ledger-level collections hold events, introductions, releases, and rebuildable indexes. Action/event logging is enabled by default and can be disabled in project config. Project config edits use structured TOML handling rather than ad hoc text replacement.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_concept_0044
|
|
4
|
+
type: concept
|
|
5
|
+
title: "Append-only event log"
|
|
6
|
+
status: proposed
|
|
7
|
+
section: cross_cutting_concepts
|
|
8
|
+
order: 50
|
|
9
|
+
date: "2026-05-23"
|
|
10
|
+
applies_to: []
|
|
11
|
+
body_format: markdown
|
|
12
|
+
created_at: "2026-05-23T12:31:01Z"
|
|
13
|
+
updated_at: "2026-05-23T12:31:01Z"
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
Mutations append an immutable `TaskEvent` record to the ledger-level `events/` directory under `.taskledger/ledgers/<ledger_ref>/`. Action/event logging is enabled by default; set `[event_logging] enabled = false` in `taskledger.toml` to disable new event records. Existing records remain readable regardless of the setting. Events are never modified or deleted. Each event has a deterministic ID, name (e.g., `task.created`, `plan.approved`, `lock.acquired`, `validation.check.logged`, `code_review.recorded`), timestamp, and actor metadata. Events support audit trails, monitor activity, handoff context, and `task transcript` output. Duplicate event detection prevents re-appending on retry. Source: `taskledger/storage/events.py`, `taskledger/services/task_events.py`, `taskledger/domain/event.py`.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_concept_0082
|
|
4
|
+
type: concept
|
|
5
|
+
title: "Durable code-review evidence"
|
|
6
|
+
status: proposed
|
|
7
|
+
section: cross_cutting_concepts
|
|
8
|
+
order: 80
|
|
9
|
+
date: "2026-06-07"
|
|
10
|
+
applies_to: []
|
|
11
|
+
body_format: markdown
|
|
12
|
+
created_at: "2026-06-07T11:49:59Z"
|
|
13
|
+
updated_at: "2026-06-07T11:49:59Z"
|
|
14
|
+
source_refs:
|
|
15
|
+
- path: taskledger/domain/review.py
|
|
16
|
+
role: implements
|
|
17
|
+
- path: taskledger/services/code_review.py
|
|
18
|
+
role: implements
|
|
19
|
+
test_refs:
|
|
20
|
+
- tests/test_code_reviews.py
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
Code review is durable evidence attached to a task. A record captures result, summary/body, reviewer and harness, implementation run, worker step, handoff, and optional Git working-tree or commit metadata.
|
|
24
|
+
|
|
25
|
+
Review records are append-only and may be recorded after a task reaches `done`. They do not create a lifecycle stage, reopen completed work, replace acceptance criteria, or weaken validation completion rules.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_constraint_0016
|
|
4
|
+
type: constraint
|
|
5
|
+
title: "Python 3.10+ with minimal dependencies"
|
|
6
|
+
status: proposed
|
|
7
|
+
section: architecture_constraints
|
|
8
|
+
order: 10
|
|
9
|
+
date: "2026-05-23"
|
|
10
|
+
category: technical
|
|
11
|
+
impact: "Limits runtime to Python 3.10+ with three dependencies; no database or native extensions."
|
|
12
|
+
body_format: markdown
|
|
13
|
+
created_at: "2026-05-23T12:29:53Z"
|
|
14
|
+
updated_at: "2026-06-11T21:00:00Z"
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
Runtime dependencies are limited to `typer`, `PyYAML`, and `tomli` (Python <3.11 only). This constraint ensures easy installation in constrained environments (CI, containers, Termux) and avoids dependency conflicts with host projects. The trade-off is that features like full-text search use pure-Python implementations rather than native libraries.
|
|
@@ -2,18 +2,25 @@
|
|
|
2
2
|
schema_version: 2
|
|
3
3
|
id: al_adr_0046
|
|
4
4
|
type: adr
|
|
5
|
-
title:
|
|
5
|
+
title: Markdown/YAML front matter as canonical format
|
|
6
6
|
status: accepted
|
|
7
7
|
section: architecture_decisions
|
|
8
8
|
order: 10
|
|
9
9
|
date: "2026-05-23"
|
|
10
|
-
deciders:
|
|
10
|
+
deciders:
|
|
11
|
+
- taskledger maintainers
|
|
11
12
|
supersedes: []
|
|
12
13
|
related: []
|
|
13
14
|
tags: []
|
|
14
15
|
body_format: markdown
|
|
15
16
|
created_at: "2026-05-23T12:31:02Z"
|
|
16
|
-
updated_at: "2026-
|
|
17
|
+
updated_at: "2026-06-07T11:50:15Z"
|
|
18
|
+
source_refs:
|
|
19
|
+
- path: taskledger/storage/frontmatter.py
|
|
20
|
+
role: implements
|
|
21
|
+
reason: Canonical Markdown/YAML serialization
|
|
22
|
+
test_refs:
|
|
23
|
+
- tests/test_storage_bundle_layout.py
|
|
17
24
|
---
|
|
18
25
|
|
|
19
26
|
## Context
|
|
@@ -2,18 +2,25 @@
|
|
|
2
2
|
schema_version: 2
|
|
3
3
|
id: al_adr_0047
|
|
4
4
|
type: adr
|
|
5
|
-
title:
|
|
5
|
+
title: JSON indexes as derived rebuildable caches
|
|
6
6
|
status: accepted
|
|
7
7
|
section: architecture_decisions
|
|
8
8
|
order: 20
|
|
9
9
|
date: "2026-05-23"
|
|
10
|
-
deciders:
|
|
10
|
+
deciders:
|
|
11
|
+
- taskledger maintainers
|
|
11
12
|
supersedes: []
|
|
12
13
|
related: []
|
|
13
14
|
tags: []
|
|
14
15
|
body_format: markdown
|
|
15
16
|
created_at: "2026-05-23T12:31:02Z"
|
|
16
|
-
updated_at: "2026-
|
|
17
|
+
updated_at: "2026-06-07T11:50:16Z"
|
|
18
|
+
source_refs:
|
|
19
|
+
- path: taskledger/storage/task_store.py
|
|
20
|
+
role: implements
|
|
21
|
+
reason: Derived index paths and rebuildable cache contract
|
|
22
|
+
test_refs:
|
|
23
|
+
- tests/test_storage_sync.py
|
|
17
24
|
---
|
|
18
25
|
|
|
19
26
|
## Context
|
|
@@ -2,18 +2,25 @@
|
|
|
2
2
|
schema_version: 2
|
|
3
3
|
id: al_adr_0048
|
|
4
4
|
type: adr
|
|
5
|
-
title:
|
|
5
|
+
title: Explicit lifecycle gates with policy decisions
|
|
6
6
|
status: accepted
|
|
7
7
|
section: architecture_decisions
|
|
8
8
|
order: 30
|
|
9
9
|
date: "2026-05-23"
|
|
10
|
-
deciders:
|
|
10
|
+
deciders:
|
|
11
|
+
- taskledger maintainers
|
|
11
12
|
supersedes: []
|
|
12
13
|
related: []
|
|
13
14
|
tags: []
|
|
14
15
|
body_format: markdown
|
|
15
16
|
created_at: "2026-05-23T12:31:02Z"
|
|
16
|
-
updated_at: "2026-
|
|
17
|
+
updated_at: "2026-06-07T11:50:16Z"
|
|
18
|
+
source_refs:
|
|
19
|
+
- path: taskledger/domain/policies.py
|
|
20
|
+
role: implements
|
|
21
|
+
reason: Lifecycle gate decisions
|
|
22
|
+
test_refs:
|
|
23
|
+
- tests/test_domain_policies.py
|
|
17
24
|
---
|
|
18
25
|
|
|
19
26
|
## Context
|
|
@@ -2,18 +2,25 @@
|
|
|
2
2
|
schema_version: 2
|
|
3
3
|
id: al_adr_0049
|
|
4
4
|
type: adr
|
|
5
|
-
title:
|
|
5
|
+
title: Typer CLI framework
|
|
6
6
|
status: accepted
|
|
7
7
|
section: architecture_decisions
|
|
8
8
|
order: 40
|
|
9
9
|
date: "2026-05-23"
|
|
10
|
-
deciders:
|
|
10
|
+
deciders:
|
|
11
|
+
- taskledger maintainers
|
|
11
12
|
supersedes: []
|
|
12
13
|
related: []
|
|
13
14
|
tags: []
|
|
14
15
|
body_format: markdown
|
|
15
16
|
created_at: "2026-05-23T12:31:03Z"
|
|
16
|
-
updated_at: "2026-
|
|
17
|
+
updated_at: "2026-06-07T11:50:17Z"
|
|
18
|
+
source_refs:
|
|
19
|
+
- path: taskledger/cli.py
|
|
20
|
+
role: implements
|
|
21
|
+
reason: Root Typer application and command registration
|
|
22
|
+
test_refs:
|
|
23
|
+
- tests/test_help_subprocess.py
|
|
17
24
|
---
|
|
18
25
|
|
|
19
26
|
## Context
|
|
@@ -2,27 +2,34 @@
|
|
|
2
2
|
schema_version: 2
|
|
3
3
|
id: al_adr_0050
|
|
4
4
|
type: adr
|
|
5
|
-
title:
|
|
5
|
+
title: Task bundle directory layout
|
|
6
6
|
status: accepted
|
|
7
7
|
section: architecture_decisions
|
|
8
8
|
order: 50
|
|
9
9
|
date: "2026-05-23"
|
|
10
|
-
deciders:
|
|
10
|
+
deciders:
|
|
11
|
+
- taskledger maintainers
|
|
11
12
|
supersedes: []
|
|
12
13
|
related: []
|
|
13
14
|
tags: []
|
|
14
15
|
body_format: markdown
|
|
15
16
|
created_at: "2026-05-23T12:31:03Z"
|
|
16
|
-
updated_at: "2026-
|
|
17
|
+
updated_at: "2026-06-07T11:50:17Z"
|
|
18
|
+
source_refs:
|
|
19
|
+
- path: taskledger/storage/task_store.py
|
|
20
|
+
role: implements
|
|
21
|
+
reason: Task bundle layout v3
|
|
22
|
+
test_refs:
|
|
23
|
+
- tests/test_storage_bundle_layout.py
|
|
17
24
|
---
|
|
18
25
|
|
|
19
26
|
## Context
|
|
20
27
|
|
|
21
|
-
Need a storage layout that scales to many sidecar collections per task (plans, runs, locks, todos, questions, changes, checks, handoffs, links) while keeping each record individually addressable. Events are stored at ledger level, not per-task, and are
|
|
28
|
+
Need a storage layout that scales to many sidecar collections per task (plans, runs, locks, todos, questions, changes, checks, handoffs, links) while keeping each record individually addressable. Events are stored at ledger level, not per-task, and are enabled by default.
|
|
22
29
|
|
|
23
30
|
## Decision
|
|
24
31
|
|
|
25
|
-
Use a directory-per-task layout (v2 bundle) under `.taskledger/ledgers/<ledger_ref>/`. Each task gets a directory containing the task record (Markdown) and subdirectories for sidecar collections. JSON indexes are derived caches at the ledger level. Event records are stored in the ledger-level `events/` directory (not per-task) and are
|
|
32
|
+
Use a directory-per-task layout (v2 bundle) under `.taskledger/ledgers/<ledger_ref>/`. Each task gets a directory containing the task record (Markdown) and subdirectories for sidecar collections. JSON indexes are derived caches at the ledger level. Event records are stored in the ledger-level `events/` directory (not per-task) and are written by default; set `[event_logging] enabled = false` to disable.
|
|
26
33
|
|
|
27
34
|
## Consequences
|
|
28
35
|
|
|
@@ -2,18 +2,25 @@
|
|
|
2
2
|
schema_version: 2
|
|
3
3
|
id: al_adr_0051
|
|
4
4
|
type: adr
|
|
5
|
-
title:
|
|
5
|
+
title: External skill packaging
|
|
6
6
|
status: accepted
|
|
7
7
|
section: architecture_decisions
|
|
8
8
|
order: 60
|
|
9
9
|
date: "2026-05-23"
|
|
10
|
-
deciders:
|
|
10
|
+
deciders:
|
|
11
|
+
- taskledger maintainers
|
|
11
12
|
supersedes: []
|
|
12
13
|
related: []
|
|
13
14
|
tags: []
|
|
14
15
|
body_format: markdown
|
|
15
16
|
created_at: "2026-05-23T12:31:04Z"
|
|
16
|
-
updated_at: "2026-
|
|
17
|
+
updated_at: "2026-06-07T11:50:18Z"
|
|
18
|
+
source_refs:
|
|
19
|
+
- path: pyproject.toml
|
|
20
|
+
role: implements
|
|
21
|
+
reason: Package-data boundary excludes skills
|
|
22
|
+
test_refs:
|
|
23
|
+
- tests/test_docs_and_skill.py
|
|
17
24
|
---
|
|
18
25
|
|
|
19
26
|
## Context
|
|
@@ -13,7 +13,7 @@ environment: "development"
|
|
|
13
13
|
maps_building_blocks: []
|
|
14
14
|
body_format: markdown
|
|
15
15
|
created_at: "2026-05-23T12:30:52Z"
|
|
16
|
-
updated_at: "2026-
|
|
16
|
+
updated_at: "2026-06-11T21:00:00Z"
|
|
17
17
|
---
|
|
18
18
|
|
|
19
19
|
**Node**: Developer workstation or CI runner
|
|
@@ -30,6 +30,6 @@ updated_at: "2026-05-23T12:30:52Z"
|
|
|
30
30
|
- JSON index caches under `.taskledger/indexes/`
|
|
31
31
|
- Project config at `taskledger.toml`
|
|
32
32
|
|
|
33
|
-
**Network**: None required.
|
|
33
|
+
**Network**: None required.
|
|
34
34
|
|
|
35
35
|
**Installation**: `pip install taskledger` or `pip install -e .` from source. Single entry point: `taskledger` CLI.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_risk_0060
|
|
4
|
+
type: risk
|
|
5
|
+
title: "Growing dependency count"
|
|
6
|
+
status: proposed
|
|
7
|
+
section: risks_and_technical_debt
|
|
8
|
+
order: 40
|
|
9
|
+
date: "2026-05-23"
|
|
10
|
+
severity: medium
|
|
11
|
+
probability: medium
|
|
12
|
+
mitigation: "Small dependency set (typer, PyYAML, tomli); each justified by a core feature."
|
|
13
|
+
body_format: markdown
|
|
14
|
+
created_at: "2026-05-23T12:31:20Z"
|
|
15
|
+
updated_at: "2026-06-11T21:00:00Z"
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
The dependency set is small (typer, PyYAML, tomli) and each is justified by a core feature. Risk is low as long as new dependencies are not introduced without explicit justification.
|
|
@@ -9,7 +9,7 @@ status: accepted
|
|
|
9
9
|
date: "2026-05-25"
|
|
10
10
|
body_format: markdown
|
|
11
11
|
created_at: "2026-05-25T00:00:00Z"
|
|
12
|
-
updated_at: "2026-
|
|
12
|
+
updated_at: "2026-06-11T21:00:00Z"
|
|
13
13
|
---
|
|
14
14
|
|
|
15
|
-
Human developers use taskledger through the CLI for task-first project management. They approve plans, waive acceptance criteria, create follow-up tasks, and inspect task state. They rely on concise human-readable output and the `
|
|
15
|
+
Human developers use taskledger through the CLI for task-first project management. They approve plans, waive acceptance criteria, create follow-up tasks, and inspect task state. They rely on concise human-readable output and the `monitor` observer for project overview.
|