taskledger 0.4.1__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.5.0/.archledger/archive/records/runtime/al_runtime_0076.md +33 -0
- taskledger-0.5.0/.archledger/archive/records/runtime/al_runtime_0084.md +42 -0
- taskledger-0.5.0/.archledger/profiles/arc42/sections/al_content_0001.md +30 -0
- taskledger-0.5.0/.archledger/profiles/arc42/sections/al_content_0002.md +21 -0
- taskledger-0.5.0/.archledger/profiles/arc42/sections/al_content_0003.md +24 -0
- taskledger-0.5.0/.archledger/profiles/arc42/sections/al_content_0004.md +38 -0
- taskledger-0.5.0/.archledger/profiles/arc42/sections/al_content_0005.md +25 -0
- taskledger-0.5.0/.archledger/profiles/arc42/sections/al_content_0006.md +22 -0
- taskledger-0.5.0/.archledger/profiles/arc42/sections/al_content_0007.md +21 -0
- taskledger-0.5.0/.archledger/profiles/arc42/sections/al_content_0008.md +24 -0
- taskledger-0.5.0/.archledger/profiles/arc42/sections/al_content_0009.md +22 -0
- taskledger-0.5.0/.archledger/profiles/arc42/sections/al_content_0010.md +21 -0
- taskledger-0.5.0/.archledger/profiles/arc42/sections/al_content_0011.md +20 -0
- taskledger-0.5.0/.archledger/profiles/arc42/sections/al_content_0012.md +15 -0
- taskledger-0.5.0/.archledger/records/building_blocks/al_block_0029.md +37 -0
- taskledger-0.5.0/.archledger/records/building_blocks/al_block_0030.md +24 -0
- taskledger-0.5.0/.archledger/records/building_blocks/al_block_0031.md +22 -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_0040.md +18 -0
- taskledger-0.5.0/.archledger/records/concepts/al_concept_0041.md +16 -0
- taskledger-0.5.0/.archledger/records/concepts/al_concept_0042.md +16 -0
- taskledger-0.5.0/.archledger/records/concepts/al_concept_0043.md +16 -0
- taskledger-0.5.0/.archledger/records/concepts/al_concept_0044.md +16 -0
- taskledger-0.5.0/.archledger/records/concepts/al_concept_0045.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.5.0/.archledger/records/constraints/al_constraint_0017.md +17 -0
- taskledger-0.5.0/.archledger/records/constraints/al_constraint_0018.md +17 -0
- taskledger-0.5.0/.archledger/records/constraints/al_constraint_0019.md +17 -0
- taskledger-0.5.0/.archledger/records/contexts/al_context_0020.md +20 -0
- taskledger-0.5.0/.archledger/records/contexts/al_context_0021.md +20 -0
- taskledger-0.5.0/.archledger/records/contexts/al_context_0022.md +20 -0
- taskledger-0.5.0/.archledger/records/contexts/al_context_0023.md +20 -0
- taskledger-0.5.0/.archledger/records/decisions/al_adr_0046.md +45 -0
- taskledger-0.5.0/.archledger/records/decisions/al_adr_0047.md +45 -0
- taskledger-0.5.0/.archledger/records/decisions/al_adr_0048.md +44 -0
- taskledger-0.5.0/.archledger/records/decisions/al_adr_0049.md +44 -0
- taskledger-0.5.0/.archledger/records/decisions/al_adr_0050.md +43 -0
- taskledger-0.5.0/.archledger/records/decisions/al_adr_0051.md +43 -0
- taskledger-0.5.0/.archledger/records/deployment/al_deploy_0039.md +35 -0
- taskledger-0.5.0/.archledger/records/glossary/al_glossary_0061.md +17 -0
- taskledger-0.5.0/.archledger/records/glossary/al_glossary_0062.md +17 -0
- taskledger-0.5.0/.archledger/records/glossary/al_glossary_0063.md +17 -0
- taskledger-0.5.0/.archledger/records/glossary/al_glossary_0064.md +17 -0
- taskledger-0.5.0/.archledger/records/glossary/al_glossary_0065.md +17 -0
- taskledger-0.5.0/.archledger/records/glossary/al_glossary_0066.md +17 -0
- taskledger-0.5.0/.archledger/records/glossary/al_glossary_0067.md +17 -0
- taskledger-0.5.0/.archledger/records/glossary/al_glossary_0068.md +17 -0
- taskledger-0.5.0/.archledger/records/glossary/al_glossary_0069.md +17 -0
- taskledger-0.5.0/.archledger/records/glossary/al_glossary_0070.md +17 -0
- taskledger-0.5.0/.archledger/records/glossary/al_glossary_0071.md +17 -0
- taskledger-0.5.0/.archledger/records/glossary/al_glossary_0072.md +17 -0
- taskledger-0.5.0/.archledger/records/glossary/al_glossary_0073.md +17 -0
- taskledger-0.5.0/.archledger/records/quality_requirements/al_quality_0052.md +27 -0
- taskledger-0.5.0/.archledger/records/quality_requirements/al_quality_0053.md +26 -0
- taskledger-0.5.0/.archledger/records/quality_requirements/al_quality_0054.md +26 -0
- taskledger-0.5.0/.archledger/records/quality_requirements/al_quality_0055.md +27 -0
- taskledger-0.5.0/.archledger/records/quality_requirements/al_quality_0056.md +26 -0
- taskledger-0.5.0/.archledger/records/requirements/al_content_0013.md +26 -0
- taskledger-0.5.0/.archledger/records/requirements/al_content_0014.md +26 -0
- taskledger-0.5.0/.archledger/records/requirements/al_content_0015.md +26 -0
- taskledger-0.5.0/.archledger/records/risks/al_risk_0057.md +18 -0
- taskledger-0.5.0/.archledger/records/risks/al_risk_0058.md +18 -0
- taskledger-0.5.0/.archledger/records/risks/al_risk_0059.md +18 -0
- taskledger-0.5.0/.archledger/records/risks/al_risk_0060.md +18 -0
- taskledger-0.5.0/.archledger/records/runtime/al_runtime_0035.md +33 -0
- taskledger-0.5.0/.archledger/records/runtime/al_runtime_0036.md +36 -0
- taskledger-0.5.0/.archledger/records/runtime/al_runtime_0037.md +28 -0
- taskledger-0.5.0/.archledger/records/runtime/al_runtime_0038.md +30 -0
- taskledger-0.5.0/.archledger/records/runtime/al_runtime_0074.md +30 -0
- taskledger-0.5.0/.archledger/records/runtime/al_runtime_0075.md +32 -0
- taskledger-0.5.0/.archledger/records/runtime/al_runtime_0077.md +32 -0
- taskledger-0.5.0/.archledger/records/runtime/al_runtime_0078.md +31 -0
- taskledger-0.5.0/.archledger/records/stakeholders/al_content_0079.md +15 -0
- taskledger-0.5.0/.archledger/records/stakeholders/al_content_0080.md +15 -0
- taskledger-0.5.0/.archledger/records/strategy/al_strategy_0024.md +26 -0
- taskledger-0.5.0/.archledger/records/strategy/al_strategy_0025.md +26 -0
- taskledger-0.5.0/.archledger/records/strategy/al_strategy_0026.md +26 -0
- taskledger-0.5.0/.archledger/records/strategy/al_strategy_0027.md +26 -0
- taskledger-0.5.0/.archledger/records/strategy/al_strategy_0028.md +26 -0
- taskledger-0.5.0/.archledger/source-state.json +894 -0
- taskledger-0.5.0/.archledger/storage.yaml +5 -0
- taskledger-0.5.0/.archledger.toml +129 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/.codecrate.toml +1 -1
- {taskledger-0.4.1 → taskledger-0.5.0}/.github/workflows/tests.yml +9 -1
- {taskledger-0.4.1 → taskledger-0.5.0}/.gitignore +2 -0
- 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.1 → taskledger-0.5.0}/.taskledger.toml +1 -1
- {taskledger-0.4.1 → taskledger-0.5.0}/AGENTS.md +6 -1
- {taskledger-0.4.1 → taskledger-0.5.0}/API.md +43 -4
- taskledger-0.5.0/ARCHITECTURE.md +754 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/CHANGELOG.md +70 -5
- {taskledger-0.4.1/taskledger.egg-info → taskledger-0.5.0}/PKG-INFO +161 -32
- {taskledger-0.4.1 → taskledger-0.5.0}/README.md +158 -30
- {taskledger-0.4.1 → taskledger-0.5.0}/docs/api.rst +42 -1
- {taskledger-0.4.1 → taskledger-0.5.0}/docs/architecture_taskledger_split.rst +8 -5
- {taskledger-0.4.1 → taskledger-0.5.0}/docs/command_contract.rst +153 -21
- {taskledger-0.4.1 → taskledger-0.5.0}/docs/full_task_cycle.rst +14 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/docs/index.rst +1 -0
- taskledger-0.5.0/docs/public_surface.rst +166 -0
- taskledger-0.5.0/docs/service_boundary_whitelist.rst +120 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/docs/sync.rst +28 -16
- {taskledger-0.4.1 → taskledger-0.5.0}/docs/transfer.rst +3 -2
- {taskledger-0.4.1 → taskledger-0.5.0}/docs/usage.rst +157 -35
- {taskledger-0.4.1 → taskledger-0.5.0}/pyproject.toml +22 -5
- taskledger-0.5.0/scripts/find_code_clones.py +224 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/skills/taskledger/SKILL.md +153 -29
- 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.1 → taskledger-0.5.0}/taskledger/_version.py +3 -3
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/api/__init__.py +2 -0
- taskledger-0.5.0/taskledger/api/config.py +608 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/api/handoff.py +3 -2
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/api/releases.py +0 -2
- taskledger-0.5.0/taskledger/api/reviews.py +11 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/api/storage.py +9 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/api/tasks.py +10 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/cli.py +201 -221
- taskledger-0.5.0/taskledger/cli_archive.py +166 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/cli_common.py +43 -1
- taskledger-0.5.0/taskledger/cli_config.py +195 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/cli_implement.py +16 -16
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/cli_ledger.py +22 -11
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/cli_misc.py +195 -2
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/cli_plan.py +6 -5
- taskledger-0.5.0/taskledger/cli_ref.py +78 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/cli_release.py +0 -71
- taskledger-0.5.0/taskledger/cli_review.py +173 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/cli_sync.py +44 -123
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/cli_task.py +128 -3
- taskledger-0.5.0/taskledger/cli_trace.py +29 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/cli_validate.py +17 -5
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/command_inventory.py +190 -37
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/domain/actor.py +11 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/domain/models.py +3 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/domain/release.py +0 -3
- taskledger-0.5.0/taskledger/domain/review.py +118 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/domain/run.py +19 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/domain/sidecars.py +61 -22
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/domain/states.py +4 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/exchange.py +24 -8
- 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.1 → taskledger-0.5.0}/taskledger/services/actors.py +132 -17
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/change_tracking.py +2 -2
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/check_tracking.py +1 -2
- taskledger-0.5.0/taskledger/services/code_review.py +351 -0
- taskledger-0.5.0/taskledger/services/command_runner.py +43 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/dashboard.py +2 -4
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/doctor.py +40 -1
- taskledger-0.5.0/taskledger/services/event_logging.py +15 -0
- taskledger-0.5.0/taskledger/services/file_links.py +233 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/git_sync.py +56 -83
- taskledger-0.5.0/taskledger/services/git_utils.py +111 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/implementation_flow.py +65 -21
- taskledger-0.5.0/taskledger/services/lock_diagnostics.py +526 -0
- taskledger-0.5.0/taskledger/services/monitor.py +344 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/navigation.py +163 -11
- taskledger-0.5.0/taskledger/services/next_action_payload.py +564 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/plan_hash.py +5 -2
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/plan_materialization.py +3 -3
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/planning_flow.py +5 -5
- taskledger-0.5.0/taskledger/services/ready_work.py +90 -0
- taskledger-0.5.0/taskledger/services/releases.py +201 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/run_store.py +45 -70
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/storage_locations.py +12 -53
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/task_archive.py +38 -3
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/task_collections.py +73 -13
- taskledger-0.5.0/taskledger/services/task_events.py +68 -0
- taskledger-0.5.0/taskledger/services/task_export.py +512 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/task_lifecycle.py +15 -18
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/task_repair.py +3 -4
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/task_reports.py +57 -2
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/tasks.py +82 -559
- taskledger-0.5.0/taskledger/services/trace.py +58 -0
- taskledger-0.5.0/taskledger/services/usage.py +398 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/validation.py +5 -1
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/validation_flow.py +90 -5
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/worker_pipeline.py +11 -2
- taskledger-0.5.0/taskledger/storage/atomic.py +43 -0
- taskledger-0.5.0/taskledger/storage/common.py +111 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/storage/events.py +4 -2
- taskledger-0.5.0/taskledger/storage/frontmatter.py +51 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/storage/indexes.py +8 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/storage/ledger_config.py +65 -12
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/storage/locks.py +15 -15
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/storage/meta.py +3 -11
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/storage/paths.py +4 -6
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/storage/project_config.py +374 -13
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/storage/project_identity.py +6 -17
- 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.1 → taskledger-0.5.0}/taskledger/storage/task_store.py +202 -48
- taskledger-0.5.0/taskledger/storage/toml_edit.py +21 -0
- taskledger-0.5.0/taskledger/storage/yaml_store.py +43 -0
- taskledger-0.5.0/taskledger/timeutils.py +5 -0
- {taskledger-0.4.1 → taskledger-0.5.0/taskledger.egg-info}/PKG-INFO +161 -32
- taskledger-0.5.0/taskledger.egg-info/SOURCES.txt +454 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger.egg-info/requires.txt +2 -1
- taskledger-0.5.0/tests/__init__.py +0 -0
- taskledger-0.5.0/tests/conftest.py +198 -0
- taskledger-0.5.0/tests/support/fake_command_runner.py +17 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_active_task.py +21 -2
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_actor_harness_state.py +61 -0
- taskledger-0.5.0/tests/test_actor_resolution.py +213 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_agent_command_logging.py +60 -5
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_agent_session_protocol.py +110 -77
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_atomic_fast_io.py +6 -2
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_cli_command_contract.py +96 -1
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_cli_import_resilience.py +13 -0
- taskledger-0.5.0/tests/test_code_reviews.py +319 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_command_example_linter.py +6 -1
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_command_inventory.py +100 -14
- taskledger-0.5.0/tests/test_command_runner.py +43 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_compact_mutation_output.py +56 -0
- taskledger-0.5.0/tests/test_config_cli.py +320 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_delta_remaining_contracts.py +203 -170
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_docs_and_skill.py +231 -7
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_doctor.py +67 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_domain_policies.py +142 -0
- taskledger-0.5.0/tests/test_event_logging_config.py +229 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_events.py +6 -0
- taskledger-0.5.0/tests/test_file_link_snapshots.py +271 -0
- taskledger-0.5.0/tests/test_find_code_clones_script.py +101 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_handoff_lifecycle.py +29 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_help_subprocess.py +13 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_implementation_change_scan.py +56 -0
- {taskledger-0.4.1 → 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.1 → 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.1 → taskledger-0.5.0}/tests/test_legacy_cleanup_contracts.py +30 -0
- {taskledger-0.4.1 → 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.1 → taskledger-0.5.0}/tests/test_locks_audit.py +13 -0
- {taskledger-0.4.1 → 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.1 → taskledger-0.5.0}/tests/test_next_action_expired_lock.py +26 -0
- {taskledger-0.4.1 → 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.1 → taskledger-0.5.0}/tests/test_plan_approval_contract.py +44 -2
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_plan_lint.py +58 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_plan_review.py +20 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_plan_revision_workflow.py +51 -1
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_plan_todo_materialization.py +11 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_project_root_config.py +191 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_question_add_many.py +19 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_question_filter_answers.py +33 -25
- {taskledger-0.4.1 → 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.4.1 → taskledger-0.5.0}/tests/test_release_changelog.py +18 -148
- taskledger-0.5.0/tests/test_resource_refs.py +63 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_search.py +6 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_service_boundaries.py +85 -26
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_services_dashboard.py +20 -130
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_sidecar_collections.py +2 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_storage_bundle_layout.py +26 -4
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_storage_common.py +9 -1
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_storage_init.py +6 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_storage_migration.py +84 -1
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_storage_repos.py +24 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_storage_sync.py +69 -0
- taskledger-0.5.0/tests/test_storage_yaml_store.py +87 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_sync_git.py +131 -5
- taskledger-0.5.0/tests/test_task_archive.py +563 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_task_events.py +25 -0
- taskledger-0.5.0/tests/test_task_markdown_export.py +553 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_task_report.py +60 -78
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_taskledger_branch_scoped_ledgers.py +58 -1
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_taskledger_cli_api_parity.py +37 -4
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_taskledger_v2_cli.py +371 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_taskledger_v2_exchange.py +238 -18
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_tasks_service_static.py +11 -0
- {taskledger-0.4.1 → 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.1 → taskledger-0.5.0}/tests/test_tree_command.py +41 -2
- taskledger-0.5.0/tests/test_usage_cli.py +197 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_worker_pipeline_cli.py +129 -26
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_worker_pipeline_config.py +26 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_worker_pipeline_context.py +25 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_worker_pipeline_handoff.py +6 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_worker_pipeline_plan_template.py +41 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_worker_pipeline_todos.py +4 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/test_workflow_guidance.py +12 -0
- taskledger-0.4.1/.archledger.toml +0 -62
- taskledger-0.4.1/docs/public_surface.rst +0 -90
- taskledger-0.4.1/docs/service_boundary_whitelist.rst +0 -57
- taskledger-0.4.1/taskledger/cli_report.py +0 -171
- taskledger-0.4.1/taskledger/ids.py +0 -40
- taskledger-0.4.1/taskledger/services/command_runner.py +0 -22
- taskledger-0.4.1/taskledger/services/html_reports.py +0 -331
- taskledger-0.4.1/taskledger/services/releases.py +0 -571
- taskledger-0.4.1/taskledger/services/serve_read_model.py +0 -929
- taskledger-0.4.1/taskledger/services/web_dashboard.py +0 -239
- taskledger-0.4.1/taskledger/storage/atomic.py +0 -81
- taskledger-0.4.1/taskledger/storage/common.py +0 -90
- taskledger-0.4.1/taskledger/storage/frontmatter.py +0 -57
- taskledger-0.4.1/taskledger/templates/__init__.py +0 -1
- taskledger-0.4.1/taskledger/templates/base.html +0 -64
- taskledger-0.4.1/taskledger/templates/error.html +0 -6
- taskledger-0.4.1/taskledger/templates/site_index.html +0 -42
- taskledger-0.4.1/taskledger/templates/task_report.html +0 -218
- taskledger-0.4.1/taskledger/timeutils.py +0 -7
- taskledger-0.4.1/taskledger.egg-info/SOURCES.txt +0 -236
- taskledger-0.4.1/tests/conftest.py +0 -13
- taskledger-0.4.1/tests/test_html_reports.py +0 -95
- taskledger-0.4.1/tests/test_serve_dashboard.py +0 -188
- taskledger-0.4.1/tests/test_task_archive.py +0 -220
- {taskledger-0.4.1 → taskledger-0.5.0}/.github/workflows/codecov.yml +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/.github/workflows/pre-commit.yml +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/.github/workflows/python-publish.yml +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/.pre-commit-config.yaml +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/.readthedocs.yaml +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/.ruff.toml +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/LICENSE +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/Makefile +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/docs/Makefile +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/docs/build.sh +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/docs/conf.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/docs/multi_repo.rst +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/docs/requirements.txt +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/setup.cfg +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/setup.py +0 -0
- /taskledger-0.4.1/taskledger/py.typed → /taskledger-0.5.0/specs/behavior/evidence/.gitkeep +0 -0
- /taskledger-0.4.1/tests/__init__.py → /taskledger-0.5.0/specs/behavior/features/.gitkeep +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/__init__.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/__main__.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/api/introductions.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/api/locks.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/api/plans.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/api/project.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/api/questions.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/api/search.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/api/sync.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/api/task_runs.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/cli_actor.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/cli_migrate.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/cli_pipeline.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/cli_question.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/cli_storage.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/domain/__init__.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/domain/_model_utils.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/domain/active_state.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/domain/change.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/domain/check.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/domain/event.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/domain/handoff.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/domain/lock.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/domain/plan.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/domain/policies.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/domain/question.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/domain/task.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/errors.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/launcher.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/search.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/__init__.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/agent_logging.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/agent_transcripts.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/doctor_checks/migration_checks.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/doctor_checks/project_scan.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/doctor_checks/task_checks.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/handoff.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/handoff_lifecycle.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/next_action_model.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/phase5_lock_transfer.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/plan_editing.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/plan_lint.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/plan_review.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/task_queries.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/tree.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/worker_context.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/services/workflow_guidance.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/storage/__init__.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/storage/agent_logs.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/storage/init.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/storage/migrations.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/storage/repos.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger/storage/worker_pipeline_config.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger.egg-info/dependency_links.txt +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger.egg-info/entry_points.txt +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/taskledger.egg-info/top_level.txt +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/support/__init__.py +0 -0
- {taskledger-0.4.1 → taskledger-0.5.0}/tests/support/builders.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.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_runtime_0076
|
|
4
|
+
type: runtime_scenario
|
|
5
|
+
title: HTML report and serve dashboard
|
|
6
|
+
status: archived
|
|
7
|
+
section: runtime_view
|
|
8
|
+
order: 70
|
|
9
|
+
date: "2026-05-23"
|
|
10
|
+
participants: []
|
|
11
|
+
trigger: Developer runs taskledger report html or taskledger serve
|
|
12
|
+
result: ""
|
|
13
|
+
body_format: markdown
|
|
14
|
+
created_at: "2026-05-23T19:30:00Z"
|
|
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
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
**Trigger**: Developer runs `taskledger report html` or `taskledger serve`.
|
|
22
|
+
|
|
23
|
+
**Flow**:
|
|
24
|
+
|
|
25
|
+
1. `report html` → Generates a standalone HTML report file from task data using Jinja2 templates
|
|
26
|
+
2. `task report` → Generates a per-task report with configurable sections (summary, plan, changes, command-log)
|
|
27
|
+
3. `serve` → Starts a localhost HTTP server with a read-only web dashboard for browsing tasks, plans, and status
|
|
28
|
+
4. Dashboard renders task trees, status summaries, and plan details in a browser
|
|
29
|
+
5. All report/serve output is read-only — no mutations through the dashboard
|
|
30
|
+
|
|
31
|
+
**Result**: Human-readable HTML reports and a local dashboard for inspecting task state without the CLI. Agents should continue using JSON output and CLI commands.
|
|
32
|
+
|
|
33
|
+
**Key source**: `taskledger/services/html_reports.py`, `taskledger/services/web_dashboard.py`, `taskledger/services/task_reports.py`, `taskledger/cli_report.py`.
|
|
@@ -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.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_content_0001
|
|
4
|
+
type: section
|
|
5
|
+
section: introduction_and_goals
|
|
6
|
+
title: Introduction and Goals
|
|
7
|
+
order: 10
|
|
8
|
+
status: accepted
|
|
9
|
+
date: "2026-05-23"
|
|
10
|
+
body_format: markdown
|
|
11
|
+
created_at: "2026-05-23T12:24:46Z"
|
|
12
|
+
updated_at: "2026-05-23T12:24:46Z"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
taskledger is a task-first durable state layer for staged coding work. It provides a Python CLI and library that manages the full lifecycle of coding tasks: creation, planning, user approval, implementation, validation, and completion.
|
|
16
|
+
|
|
17
|
+
The system is designed for use by both human developers and automated coding agents. Its primary goals are:
|
|
18
|
+
|
|
19
|
+
- **Durable task state**: Every task, plan, todo, and validation check is persisted as Markdown/YAML front matter in the project's `.taskledger/` directory. State survives process restarts, context switches, and handoffs between actors.
|
|
20
|
+
- **Explicit lifecycle gates**: Transitions between stages (draft → planning → plan_review → approved → implementing → implemented → validating → done) are enforced by policy decisions. User approval is required before implementation begins. Validation checks gate completion.
|
|
21
|
+
- **Fresh-context handoffs**: Agents and humans can create, claim, and close handoff records that capture enough context (task state, plan, todos, questions, lock status) for a fresh process to continue work without reading the entire history.
|
|
22
|
+
- **Machine-readable output**: Every CLI command supports `--json` for structured output with a stable envelope shape (`ok`, `command`, `result_type`, `result`, `events`, `warnings`) and deterministic exit codes.
|
|
23
|
+
|
|
24
|
+
The canonical workflow is:
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
task → plan → approval → implement → validate → done
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
This workflow is the product contract, not decoration. Deviations from this flow require explicit user decisions or repair commands.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_content_0002
|
|
4
|
+
type: section
|
|
5
|
+
section: architecture_constraints
|
|
6
|
+
title: Architecture Constraints
|
|
7
|
+
order: 20
|
|
8
|
+
status: accepted
|
|
9
|
+
date: "2026-05-23"
|
|
10
|
+
body_format: markdown
|
|
11
|
+
created_at: "2026-05-23T12:24:46Z"
|
|
12
|
+
updated_at: "2026-05-23T12:24:46Z"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
taskledger operates under several fixed constraints that shape its architecture:
|
|
16
|
+
|
|
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
|
+
- **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
|
+
- **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
|
+
- **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.
|
|
21
|
+
- **Project-local configuration**: Each project has its own `taskledger.toml` and `.taskledger/` directory. There is no global state or central server.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_content_0003
|
|
4
|
+
type: section
|
|
5
|
+
section: context_and_scope
|
|
6
|
+
title: Context and Scope
|
|
7
|
+
order: 30
|
|
8
|
+
status: accepted
|
|
9
|
+
date: "2026-05-23"
|
|
10
|
+
body_format: markdown
|
|
11
|
+
created_at: "2026-05-23T12:24:46Z"
|
|
12
|
+
updated_at: "2026-05-23T12:24:46Z"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
taskledger operates as a self-contained tool within a software development project. It interacts with four categories of external actors:
|
|
16
|
+
|
|
17
|
+
1. **Agent harnesses** (opencode, codex, chatgpt, etc.) invoke taskledger CLI commands to create tasks, propose plans, log implementation changes, run validation checks, and manage handoffs. They consume `--json` output.
|
|
18
|
+
2. **Human developers** use the CLI directly in terminals for task creation, plan review, approval, lock management, and inspection (`status`, `context`, `next-action`, `doctor`).
|
|
19
|
+
3. **CI systems** may invoke taskledger for status checks, validation, or snapshot/export operations.
|
|
20
|
+
4. **Python library consumers** import from `taskledger.api.*` to programmatically manage tasks without the CLI subprocess.
|
|
21
|
+
|
|
22
|
+
The system boundary is the `.taskledger/` directory and the `taskledger.toml` config file at the project root. Everything inside `.taskledger/` is taskledger-owned state. Everything outside is the host project's source code.
|
|
23
|
+
|
|
24
|
+
taskledger does not depend on any external services, databases, or network endpoints. It reads the host project's file system for search/symbol operations but does not modify files outside `.taskledger/`.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_content_0004
|
|
4
|
+
type: section
|
|
5
|
+
section: solution_strategy
|
|
6
|
+
title: Solution Strategy
|
|
7
|
+
order: 40
|
|
8
|
+
status: accepted
|
|
9
|
+
date: "2026-05-23"
|
|
10
|
+
body_format: markdown
|
|
11
|
+
created_at: "2026-05-23T12:24:46Z"
|
|
12
|
+
updated_at: "2026-05-23T12:24:46Z"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
taskledger uses a layered architecture with clear dependency direction: upper layers depend on lower layers, never the reverse.
|
|
16
|
+
|
|
17
|
+
1. **CLI Layer** (`taskledger/cli*.py`) — Typer commands that parse arguments, resolve task references, call service functions, and render output (human text or JSON).
|
|
18
|
+
2. **API Layer** (`taskledger/api/*.py`) — Stable public wrappers that mirror the CLI surface for programmatic use.
|
|
19
|
+
3. **Services Layer** (`taskledger/services/*.py`) — Orchestration logic: lifecycle flows (planning, implementation, validation), handoff rendering, doctor checks, dashboard assembly.
|
|
20
|
+
4. **Domain Layer** (`taskledger/domain/*.py`) — Pure data models, state enums, normalization, and policy decisions. No I/O, no file system access.
|
|
21
|
+
5. **Storage Layer** (`taskledger/storage/*.py`) — File system operations: front matter read/write, atomic writes, lock files, index rebuilds, migrations.
|
|
22
|
+
|
|
23
|
+
Key architectural choices:
|
|
24
|
+
|
|
25
|
+
- **Markdown/YAML front matter as canonical format** — Each record (task, plan, run, lock, handoff, etc.) is stored as a `.md` file with YAML front matter metadata and a Markdown body. This makes state human-readable and Git-friendly.
|
|
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
|
+
- **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
|
+
- **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.
|
|
30
|
+
|
|
31
|
+
## Maintenance
|
|
32
|
+
|
|
33
|
+
`ARCHITECTURE.md` in the repository root is generated from archledger source records. Do not edit it directly.
|
|
34
|
+
|
|
35
|
+
- **Edit**: `.archledger/sections/*.md` for section content, `.archledger/records/**/*.md` for individual records.
|
|
36
|
+
- **Regenerate**: Run `archledger build` (or the configured build command) to regenerate `ARCHITECTURE.md`.
|
|
37
|
+
- **Verify**: Run `pytest tests/test_docs_and_skill.py tests/test_service_boundaries.py` after changes.
|
|
38
|
+
- **Authoritative source**: The archledger records under `.archledger/` are the single source of truth for architecture documentation. `docs/architecture_taskledger_split.rst` is a concise human-maintained summary.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_content_0005
|
|
4
|
+
type: section
|
|
5
|
+
section: building_block_view
|
|
6
|
+
title: Building Block View
|
|
7
|
+
order: 50
|
|
8
|
+
status: accepted
|
|
9
|
+
date: "2026-05-23"
|
|
10
|
+
body_format: markdown
|
|
11
|
+
created_at: "2026-05-23T12:24:46Z"
|
|
12
|
+
updated_at: "2026-05-23T12:24:46Z"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
The top-level building block is the **taskledger system**, decomposed into five black-box components:
|
|
16
|
+
|
|
17
|
+
1. **CLI Layer** — Handles command parsing, task reference resolution, and output rendering.
|
|
18
|
+
2. **API Layer** — Provides stable Python function wrappers around service operations.
|
|
19
|
+
3. **Services Layer** — Orchestrates lifecycle flows, handoffs, and inspection.
|
|
20
|
+
4. **Domain Layer** — Defines models, state machines, and policy decisions.
|
|
21
|
+
5. **Storage Layer** — Manages file system persistence and layout.
|
|
22
|
+
|
|
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
|
+
|
|
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.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_content_0006
|
|
4
|
+
type: section
|
|
5
|
+
section: runtime_view
|
|
6
|
+
title: Runtime View
|
|
7
|
+
order: 60
|
|
8
|
+
status: accepted
|
|
9
|
+
date: "2026-05-23"
|
|
10
|
+
body_format: markdown
|
|
11
|
+
created_at: "2026-05-23T12:24:46Z"
|
|
12
|
+
updated_at: "2026-05-23T12:24:46Z"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
The runtime view traces the main operational scenarios through the system:
|
|
16
|
+
|
|
17
|
+
1. **Task lifecycle** — A task is created in `draft`, moves to `planning` (lock acquired, run started), then `plan_review` after a plan is proposed. The user approves → `approved`. Implementation starts → `implementing`, finishes → `implemented`. Validation starts → `validating`, passes → `done`.
|
|
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
|
+
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
|
+
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.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_content_0007
|
|
4
|
+
type: section
|
|
5
|
+
section: deployment_view
|
|
6
|
+
title: Deployment View
|
|
7
|
+
order: 70
|
|
8
|
+
status: accepted
|
|
9
|
+
date: "2026-05-23"
|
|
10
|
+
body_format: markdown
|
|
11
|
+
created_at: "2026-05-23T12:24:46Z"
|
|
12
|
+
updated_at: "2026-05-23T12:24:46Z"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
taskledger is a single-node, file-system-based tool. Deployment consists of:
|
|
16
|
+
|
|
17
|
+
- **Installation**: `pip install taskledger` (PyPI) or local `pip install -e .`
|
|
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.
|
|
20
|
+
- **CI integration**: taskledger commands can be run in CI pipelines for status checks and validation
|
|
21
|
+
- **Agent integration**: Agent harnesses invoke taskledger CLI commands as subprocess calls
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_content_0008
|
|
4
|
+
type: section
|
|
5
|
+
section: cross_cutting_concepts
|
|
6
|
+
title: Cross-cutting Concepts
|
|
7
|
+
order: 80
|
|
8
|
+
status: accepted
|
|
9
|
+
date: "2026-05-23"
|
|
10
|
+
body_format: markdown
|
|
11
|
+
created_at: "2026-05-23T12:24:46Z"
|
|
12
|
+
updated_at: "2026-05-23T12:24:46Z"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
Cross-cutting concerns that span multiple layers:
|
|
16
|
+
|
|
17
|
+
- **Actor metadata**: Every mutation carries an `ActorRef` (type: agent/user/system, name, role, session, harness). Decisions distinguish user-only actions (approval, waiver) from agent actions.
|
|
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
|
+
- **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
|
+
- **Atomic file writes**: All file writes go through `atomic_write_text` (temp file → `os.replace` → directory fsync) to prevent corruption.
|
|
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
|
+
- **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.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_content_0009
|
|
4
|
+
type: section
|
|
5
|
+
section: architecture_decisions
|
|
6
|
+
title: Architecture Decisions
|
|
7
|
+
order: 90
|
|
8
|
+
status: accepted
|
|
9
|
+
date: "2026-05-23"
|
|
10
|
+
body_format: markdown
|
|
11
|
+
created_at: "2026-05-23T12:24:46Z"
|
|
12
|
+
updated_at: "2026-05-23T12:24:46Z"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
Key architecture decisions documented as ADR records:
|
|
16
|
+
|
|
17
|
+
- **ADR-1**: Markdown/YAML front matter as canonical format (not JSON, not SQLite)
|
|
18
|
+
- **ADR-2**: JSON indexes as derived rebuildable caches (not authoritative)
|
|
19
|
+
- **ADR-3**: Explicit lifecycle gates with policy decisions (not free-form state)
|
|
20
|
+
- **ADR-4**: Typer CLI framework (not argparse, not click directly)
|
|
21
|
+
- **ADR-5**: Task bundle directory layout (not single-file index)
|
|
22
|
+
- **ADR-6**: External skill packaging (skills outside the Python package)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_content_0010
|
|
4
|
+
type: section
|
|
5
|
+
section: quality_requirements
|
|
6
|
+
title: Quality Requirements
|
|
7
|
+
order: 100
|
|
8
|
+
status: accepted
|
|
9
|
+
date: "2026-05-23"
|
|
10
|
+
body_format: markdown
|
|
11
|
+
created_at: "2026-05-23T12:24:46Z"
|
|
12
|
+
updated_at: "2026-05-23T12:24:46Z"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
Quality requirements that gate architectural decisions:
|
|
16
|
+
|
|
17
|
+
- **Data integrity**: Atomic writes and strict front matter validation prevent corrupt state. Partial writes are impossible due to `os.replace` semantics.
|
|
18
|
+
- **CLI exit code contract**: Exit codes are stable and tested. Agents and CI pipelines rely on specific codes for automation.
|
|
19
|
+
- **JSON envelope stability**: The JSON output shape (`ok`, `command`, `result_type`, `result`) is a public API contract. Breaking changes require explicit versioning.
|
|
20
|
+
- **Lifecycle gate correctness**: Every stage transition is validated by policy functions with full test coverage of error paths.
|
|
21
|
+
- **Export/import round-trip**: Archives preserve all state. Import into a fresh workspace reproduces the original taskledger state exactly.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_content_0011
|
|
4
|
+
type: section
|
|
5
|
+
section: risks_and_technical_debt
|
|
6
|
+
title: Risks and Technical Debt
|
|
7
|
+
order: 110
|
|
8
|
+
status: accepted
|
|
9
|
+
date: "2026-05-23"
|
|
10
|
+
body_format: markdown
|
|
11
|
+
created_at: "2026-05-23T12:24:46Z"
|
|
12
|
+
updated_at: "2026-05-23T12:24:46Z"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
Known risks and areas of technical debt:
|
|
16
|
+
|
|
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
|
+
- **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
|
+
- **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**: The dependency set is small (typer, PyYAML, tomli) but new dependencies must be justified by core features, not optional presentations.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_content_0012
|
|
4
|
+
type: section
|
|
5
|
+
section: glossary
|
|
6
|
+
title: Glossary
|
|
7
|
+
order: 120
|
|
8
|
+
status: accepted
|
|
9
|
+
date: "2026-05-23"
|
|
10
|
+
body_format: markdown
|
|
11
|
+
created_at: "2026-05-23T12:24:46Z"
|
|
12
|
+
updated_at: "2026-05-23T12:24:46Z"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
Domain terms used throughout taskledger:
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_block_0029
|
|
4
|
+
type: white_box
|
|
5
|
+
title: "taskledger system"
|
|
6
|
+
status: proposed
|
|
7
|
+
section: building_block_view
|
|
8
|
+
level: 1
|
|
9
|
+
parent: null
|
|
10
|
+
order: 10
|
|
11
|
+
date: "2026-05-23"
|
|
12
|
+
diagram: null
|
|
13
|
+
quality_characteristics: []
|
|
14
|
+
tags: []
|
|
15
|
+
body_format: markdown
|
|
16
|
+
created_at: "2026-05-23T12:30:16Z"
|
|
17
|
+
updated_at: "2026-06-11T21:00:00Z"
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Motivation
|
|
21
|
+
|
|
22
|
+
taskledger decomposes into core layers with downward dependency flow. This isolates persistence, business rules, orchestration, and public interfaces.
|
|
23
|
+
|
|
24
|
+
## Contained building blocks
|
|
25
|
+
|
|
26
|
+
1. **CLI Layer** (`al_block_0030`) — Typer commands, argument parsing, output rendering
|
|
27
|
+
2. **API Layer** (`al_block_0031`) — Stable Python function wrappers
|
|
28
|
+
3. **Services Layer** (`al_block_0032`) — Lifecycle orchestration, handoffs, inspection
|
|
29
|
+
4. **Domain Layer** (`al_block_0033`) — Models, state machines, policies (no I/O)
|
|
30
|
+
5. **Storage Layer** (`al_block_0034`) — File system persistence, atomic writes, layout
|
|
31
|
+
|
|
32
|
+
## Important interfaces
|
|
33
|
+
|
|
34
|
+
- CLI → Services: function calls with `workspace_root` + task references
|
|
35
|
+
- Services → Domain: policy functions take `PolicyContext`, return `Decision`
|
|
36
|
+
- Services → Storage: record CRUD operations via `task_store.py` functions
|
|
37
|
+
- API → Services: direct function calls mirroring CLI behavior
|
|
@@ -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_0031
|
|
4
|
+
type: black_box
|
|
5
|
+
title: "API Layer"
|
|
6
|
+
status: proposed
|
|
7
|
+
section: building_block_view
|
|
8
|
+
level: 1
|
|
9
|
+
parent: al_block_0029
|
|
10
|
+
order: 20
|
|
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:27Z"
|
|
19
|
+
updated_at: "2026-05-23T12:30:27Z"
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
Stable Python function wrappers under `taskledger/api/` that mirror the CLI surface for programmatic use. Each module (tasks, plans, handoff, locks, etc.) exposes functions that accept workspace paths and return dictionaries matching the JSON output shape. The API layer calls Services directly.
|
|
@@ -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,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_concept_0040
|
|
4
|
+
type: concept
|
|
5
|
+
title: "Actor metadata and role semantics"
|
|
6
|
+
status: proposed
|
|
7
|
+
section: cross_cutting_concepts
|
|
8
|
+
order: 10
|
|
9
|
+
date: "2026-05-23"
|
|
10
|
+
applies_to: []
|
|
11
|
+
body_format: markdown
|
|
12
|
+
created_at: "2026-05-23T12:30:59Z"
|
|
13
|
+
updated_at: "2026-05-23T12:30:59Z"
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
Every mutation carries an `ActorRef` (type: agent/user/system, name, role, session ID, harness ID) and optionally a `HarnessRef` (harness identity, kind, capabilities). The system distinguishes user-only actions (plan approval, criterion waivers) from agent actions. Actor metadata is persisted in locks, runs, events, and handoff records for audit trails.
|
|
17
|
+
|
|
18
|
+
Source: `taskledger/domain/actor.py` (`ActorRef`, `HarnessRef`), `taskledger/domain/states.py` (`ActorType`, `ActorRole`, `HarnessKind`).
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: al_concept_0041
|
|
4
|
+
type: concept
|
|
5
|
+
title: "JSON output envelope contract"
|
|
6
|
+
status: proposed
|
|
7
|
+
section: cross_cutting_concepts
|
|
8
|
+
order: 20
|
|
9
|
+
date: "2026-05-23"
|
|
10
|
+
applies_to: []
|
|
11
|
+
body_format: markdown
|
|
12
|
+
created_at: "2026-05-23T12:31:00Z"
|
|
13
|
+
updated_at: "2026-05-23T12:31:00Z"
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
When `--json` is passed, every CLI command emits a JSON envelope: `{"ok": bool, "command": str, "result_type": str, "result": ..., "events": [...], "warnings": [...]}`. On error, the envelope includes `error` with `code`, `message`, `details`, and `remediation`. This shape is a public API contract tested by `test_json_contracts.py`. Exit codes map deterministically to error categories.
|