project-loop-harness 0.2.3__tar.gz → 0.2.4__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.
- {project_loop_harness-0.2.3/src/project_loop_harness.egg-info → project_loop_harness-0.2.4}/PKG-INFO +3 -1
- project_loop_harness-0.2.4/agent-tasks/0102-source-drift-health-warning.md +62 -0
- project_loop_harness-0.2.4/agent-tasks/0103-security-policy-v02x.md +46 -0
- project_loop_harness-0.2.4/agent-tasks/0104-python-ci-matrix.md +44 -0
- project_loop_harness-0.2.4/agent-tasks/0105-evidence-copy-observability.md +51 -0
- project_loop_harness-0.2.4/agent-tasks/0106-release-checklist.md +21 -0
- project_loop_harness-0.2.4/agent-tasks/0107-agent-tasks-backlog-index.md +20 -0
- project_loop_harness-0.2.4/agent-tasks/README.md +35 -0
- project_loop_harness-0.2.4/docs/growth-plan-v0.2.4-v0.5.md +197 -0
- project_loop_harness-0.2.4/docs/release-checklist.md +66 -0
- project_loop_harness-0.2.4/docs/release-notes/v0.2.4.md +57 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/pyproject.toml +4 -2
- project_loop_harness-0.2.4/src/pcl/__init__.py +1 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/evidence.py +18 -3
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/validators.py +2 -1
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4/src/project_loop_harness.egg-info}/PKG-INFO +3 -1
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/project_loop_harness.egg-info/SOURCES.txt +10 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/project_loop_harness.egg-info/requires.txt +2 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_evidence_add.py +184 -10
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_verification_feedback.py +1 -1
- project_loop_harness-0.2.3/src/pcl/__init__.py +0 -1
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/LICENSE +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/MANIFEST.in +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/Makefile +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/README.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0001-hardening-cli.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0002-db-migrations.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0003-workflow-runner.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0004-dashboard-renderer.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0005-agent-integration.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0006-codex-plugin.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0007-mcp-server.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0008-loop-lifecycle.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0009-defect-lifecycle.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0010-reporting-evidence.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0011-validation-invariants.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0012-audit-log-integrity.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0013-validation-diagnostics.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0014-escalation-lifecycle.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0015-decision-lifecycle.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0016-escalation-decision-linkage.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0017-next-action-guided-loop.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0018-readme-golden-path.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0019-recovery-playbook.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0020-example-project-refresh.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0021-agent-adapter-contract.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0022-agent-output-validation.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0023-codex-exec-adapter-hardening.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0024-claude-manual-adapter-hardening.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0025-generic-shell-adapter.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0026-agent-job-evidence-ingestion.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0027-dashboard-data-contract.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0028-dashboard-evidence-navigation.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0029-dashboard-risk-and-blockers.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0030-distribution-readiness.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0031-workflow-proposal-mode.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0032-workflow-proposal-review.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0033-workflow-verifier.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0034-limited-execution-sandbox.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0035-automatic-workflow-executor.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0036-executor-dogfood-workflow.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0037-executor-retry-resume.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0038-story-test-lifecycle.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0039-workflow-yaml-rule-expressions.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0040-test-case-evidence-validation.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0041-feature-inspection-commands.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0042-report-coverage-context.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0043-feature-report.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0044-complete-csv-export.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0045-filtered-job-inspection.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0046-feature-status-lifecycle.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0047-feature-coverage-next-action.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0048-migration-status-command.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0049-render-json-artifact-paths.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0050-codex-plugin-package-inventory.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0051-mcp-render-artifact-paths.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0052-lifecycle-failure-job-cleanup.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0053-prompt-job-json-handoff.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0054-human-queue-linkage-cli.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0055-workflow-proposal-list-filter.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0056-sandbox-noop-execution-guard.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0057-executor-no-executable-step-guard.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0058-dogfood-usability-hardening.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0059-checkpoint-review-guidance.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0060-pypi-trusted-publishing.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0061-context-pack-v1.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0062-task-backlog-entity.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0063-structured-verification-rubric.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0064-task-loop-integration.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0065-dashboard-human-decisions.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0066-agent-registry-lease.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0067-context-pack-improvements.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0068-trust-hardening.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0069-explainable-code-context-v0.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0070-human-decision-cockpit.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0071-dogfood-impact-precision.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0072-sensitive-omission.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0073-code-context-module-split.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0074-search-snapshot-consistency.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0075-diff-source-modes.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0076-schema-version-integrity.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0077-index-output-budget-and-impact-noise.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0078-context-pack-code-context-bridge.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0079-receipt-human-summary.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0080-retrieval-eval-gate.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0081-diff-modes-completion.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0082-receipt-relevance-and-age.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0083-required-section-invariant.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0084-source-commands-honesty.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0085-distribution-source-completeness.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0086-command-surface-alignment.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0087-verification-suggestion-ids.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0088-verification-feedback.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0089-dogfood-fixture-propose.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0090-eval-baseline-record-compare.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0091-refresh-command-scope-fidelity.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0092-idempotent-status-transitions.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0093-evidence-add-command.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0094-job-completion-evidence.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0095-supporting-evidence-health.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0096-evidence-add-path-guards.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0097-evidence-durability-design.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0098-field-feedback-next-weight-and-run-report-scope.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0099-evidence-copy-mode.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0100-evidence-task-linking.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/agent-tasks/0101-evidence-id-allocation-race.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/adoption-guide.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/adr/0001-hybrid-state.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/adr/0002-cli-is-the-runtime.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/adr/0003-static-workflows-before-dynamic-workflows.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/agent-adapter-contract.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/agent-output-template.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/agent-roles.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/architecture.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/code-context.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/context-pack.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/dashboard-data-contract.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/dashboard-design.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/data-model.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/distribution.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/evidence-durability-design.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/evidence-entry-paths-design.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/feedback/2026-07-06-ax1-moc1-agent-feedback.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/golden-path.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/implementation-plan.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/master-trace-handoff.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/plh_v0_1_11_review_agenda.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/plh_v0_1_12_review_agenda.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/pypi-publishing.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/recovery-playbook.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/safety-permissions.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/v0.2.0-plan.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/verification-feedback-design.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/verification-feedback.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/verification-rubric.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/docs/workflow-contract.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/scripts/run_advisory_retrieval_eval.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/scripts/verify_sdist_contracts.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/setup.cfg +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/__main__.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/agents.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/checkpoints.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/cli.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/code_context/__init__.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/code_context/diff.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/code_context/eval.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/code_context/impact.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/code_context/receipts.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/code_context/scan.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/code_context/search.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/code_context/store.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/code_context/summary.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/code_context/symbols.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/code_context/test_hints.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/code_index.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/commands.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/context.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/db/migrations/001_initial.sql +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/db/migrations/002_tasks.sql +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/db/migrations/003_agent_registry.sql +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/db/migrations/004_code_index.sql +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/db/migrations/005_verification_feedback.sql +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/db/migrations/006_evidence_task_link.sql +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/db/schema.sql +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/db.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/decisions.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/dispatch.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/errors.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/escalations.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/events.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/exporters.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/guards.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/ids.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/init_project.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/lifecycle.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/links.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/locales.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/mcp_server.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/migrations.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/paths.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/receipt_show.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/registry.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/renderer.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/reports.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/resources.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/rubric.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/stories.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/tasks.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/templates/dashboard/dashboard.html +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/templates/project/AGENTS.block.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/templates/project/CLAUDE.block.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/templates/project/gitignore.fragment +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/templates/project/pcl.yaml +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/templates/skills/project-control-loop/SKILL.md +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/templates/workflows/defect_repair.yaml +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/templates/workflows/executor_smoke.yaml +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/templates/workflows/feature_coverage.yaml +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/templates/workflows/regression_loop.yaml +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/timeutil.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/token_estimation.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/update_check.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/verification_feedback.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/verifications.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/workflow_executor.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/workflow_proposal_validation.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/workflow_proposals.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/workflow_sandbox.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/workflow_verifier.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/workflow_yaml.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/pcl/workflows.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/project_loop_harness.egg-info/dependency_links.txt +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/project_loop_harness.egg-info/entry_points.txt +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/src/project_loop_harness.egg-info/top_level.txt +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/fixtures/code_context_summary_v0.json +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/fixtures/context_receipt_v0.json +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/fixtures/context_receipt_v0_legacy_string_suggestions.json +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/fixtures/retrieval_adversarial_v0.json +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/fixtures/retrieval_real_history_v0.json +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/fixtures/retrieval_v0.json +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_advisory_retrieval_eval_script.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_agent_adapter_contract.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_agent_output_validation.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_agents.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_audit_log_integrity.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_checkpoints.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_claude_manual_adapter.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_cli_init.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_code_context_summary.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_code_index.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_codex_exec_adapter.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_codex_plugin.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_context.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_dashboard.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_dashboard_data_contract.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_decisions.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_defects.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_dispatch.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_distribution.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_escalations.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_examples.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_features.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_generic_shell_adapter.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_golden_path.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_lifecycle.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_mcp_server.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_migrations.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_next_actions.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_pypi_publishing.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_receipt_show.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_recovery_playbook.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_registry.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_reports.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_rubric.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_stories.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_tasks.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_update_check.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_validation.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_validation_diagnostics.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_workflow_executor.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_workflow_proposals.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_workflow_sandbox.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_workflow_verifier.py +0 -0
- {project_loop_harness-0.2.3 → project_loop_harness-0.2.4}/tests/test_workflows.py +0 -0
{project_loop_harness-0.2.3/src/project_loop_harness.egg-info → project_loop_harness-0.2.4}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: project-loop-harness
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.4
|
|
4
4
|
Summary: Local control plane for agentic project development loops
|
|
5
5
|
Author: Project Loop Harness Contributors
|
|
6
6
|
License: MIT
|
|
@@ -26,6 +26,8 @@ License-File: LICENSE
|
|
|
26
26
|
Provides-Extra: dev
|
|
27
27
|
Requires-Dist: pytest>=8; extra == "dev"
|
|
28
28
|
Requires-Dist: ruff>=0.6; extra == "dev"
|
|
29
|
+
Requires-Dist: setuptools>=69; extra == "dev"
|
|
30
|
+
Requires-Dist: wheel; extra == "dev"
|
|
29
31
|
Dynamic: license-file
|
|
30
32
|
|
|
31
33
|
# Project Loop Harness
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# 0102: Source drift must surface as evidence health warning
|
|
2
|
+
|
|
3
|
+
Milestone: v0.2.4 Trust Patch
|
|
4
|
+
Priority: P1
|
|
5
|
+
Area: evidence
|
|
6
|
+
Origin: docs/project-loop-harness-v0.2.3-third-party-review.md P1-1 (verified against main)
|
|
7
|
+
|
|
8
|
+
## Problem
|
|
9
|
+
|
|
10
|
+
`_collect_copied_member_findings` in `src/pcl/evidence.py` emits `source_drifted`
|
|
11
|
+
findings (detail `missing` or `size_mismatch`) when the original source of a
|
|
12
|
+
copied evidence member has drifted. But `source_drifted` is not in
|
|
13
|
+
`ADHOC_WARNING_FINDING_CODES` (evidence.py:36), so `_adhoc_assessment` returns
|
|
14
|
+
`health: "ok"` when the only findings are `source_drifted`. Agents and humans
|
|
15
|
+
read "ok" and miss the provenance/freshness problem.
|
|
16
|
+
|
|
17
|
+
## Scope
|
|
18
|
+
|
|
19
|
+
1. Add `"source_drifted"` to `ADHOC_WARNING_FINDING_CODES` in
|
|
20
|
+
`src/pcl/evidence.py`.
|
|
21
|
+
2. Confirm the rendering path in `src/pcl/validators.py` (the
|
|
22
|
+
`elif code == "source_drifted":` branch around line 977) stays consistent
|
|
23
|
+
with the new classification — the finding text must keep re-rendering
|
|
24
|
+
identically through the shared `assess_adhoc_evidence` path (0095 pattern).
|
|
25
|
+
3. Tests that pin the semantics:
|
|
26
|
+
- copied artifact intact + source file deleted → `health: "warning"` with a
|
|
27
|
+
`source_drifted` finding, `detail: "missing"`.
|
|
28
|
+
- copied artifact intact + source size mismatch → `health: "warning"` with
|
|
29
|
+
`detail: "size_mismatch"`.
|
|
30
|
+
- copied artifact intact + source intact → `health: "ok"` (no regression).
|
|
31
|
+
- copied artifact corrupted (`copy_hash_mismatch`) + source drifted →
|
|
32
|
+
still `warning` (both findings present, no double-count crash).
|
|
33
|
+
4. `pcl validate --strict --json` must treat `source_drifted` as a warning that
|
|
34
|
+
remains a warning under strict (extend the existing
|
|
35
|
+
`_strict_warning_remains_warning` coverage), not an error, and must stay
|
|
36
|
+
green overall.
|
|
37
|
+
|
|
38
|
+
## Invariants (what to protect, on the normal paths)
|
|
39
|
+
|
|
40
|
+
- The copied artifact stays usable: no finding may remove or rewrite copied
|
|
41
|
+
files under `.project-loop/evidence/adhoc-files/`; assessment is read-only.
|
|
42
|
+
- The findings array shape is additive-only: existing finding codes, their
|
|
43
|
+
`path`/`detail` fields, and their ordering semantics are unchanged.
|
|
44
|
+
- Health values remain the existing three-level `ok | warning | error`; do not
|
|
45
|
+
introduce `artifact_health` / `source_health` split fields (explicitly
|
|
46
|
+
deferred by approval 2026-07-08).
|
|
47
|
+
|
|
48
|
+
## Non-scope
|
|
49
|
+
|
|
50
|
+
- artifact_health / source_health separation (deferred until dogfood
|
|
51
|
+
source_drift_rate data exists).
|
|
52
|
+
- Schema or migration changes.
|
|
53
|
+
- Context pack / dashboard surfacing changes beyond what the shared
|
|
54
|
+
assessment already propagates.
|
|
55
|
+
|
|
56
|
+
## Acceptance
|
|
57
|
+
|
|
58
|
+
- All tests above green; full `pytest` green.
|
|
59
|
+
- Live smoke: create copied evidence in a scratch project, delete the source,
|
|
60
|
+
run `pcl validate --strict --json` → evidence health shows `warning`,
|
|
61
|
+
strict stays `ok: true`.
|
|
62
|
+
- Release note entry describing the semantic change.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# 0103: SECURITY.md v0.2.x update and copied-evidence policy
|
|
2
|
+
|
|
3
|
+
Milestone: v0.2.4 Trust Patch
|
|
4
|
+
Priority: P1
|
|
5
|
+
Area: docs/security
|
|
6
|
+
Origin: docs/project-loop-harness-v0.2.3-third-party-review.md P1-2 (verified: SECURITY.md still says `0.1.x` while the released line is 0.2.x)
|
|
7
|
+
|
|
8
|
+
## Problem
|
|
9
|
+
|
|
10
|
+
SECURITY.md states the current public release line is `0.1.x`, contradicting
|
|
11
|
+
the v0.2.3 release. Additionally, v0.2.3 introduced `pcl evidence add --copy`,
|
|
12
|
+
which retains copies of source files under
|
|
13
|
+
`.project-loop/evidence/adhoc-files/` — a new secret-retention surface that the
|
|
14
|
+
security policy does not mention.
|
|
15
|
+
|
|
16
|
+
## Scope
|
|
17
|
+
|
|
18
|
+
Update `SECURITY.md` only (no code changes):
|
|
19
|
+
|
|
20
|
+
1. Supported versions table: `0.2.x` = supported, `<0.2` = not supported.
|
|
21
|
+
2. Add a "Copied evidence" section stating:
|
|
22
|
+
- `.project-loop/evidence/adhoc-files/` may contain copied sensitive source
|
|
23
|
+
files when `--copy` is used.
|
|
24
|
+
- Copied evidence must not be committed unless intentionally curated;
|
|
25
|
+
`.project-loop/` is gitignored by default and should stay so.
|
|
26
|
+
- Redaction is caller responsibility; `pcl` performs path-shape sensitive
|
|
27
|
+
guards (0096) but is not a secret scanner (established v0.1.11 decision —
|
|
28
|
+
keep this wording).
|
|
29
|
+
- MCP / read-only exposure must not reveal raw evidence contents by
|
|
30
|
+
default.
|
|
31
|
+
- Dashboard HTML is a human view, not a machine context source.
|
|
32
|
+
3. Note that the release checklist (0106) will include a SECURITY.md
|
|
33
|
+
supported-versions check per release.
|
|
34
|
+
|
|
35
|
+
## Invariants
|
|
36
|
+
|
|
37
|
+
- Do not weaken any existing statement in SECURITY.md; changes are additive or
|
|
38
|
+
version-string corrections.
|
|
39
|
+
- Keep the established epistemic vocabulary (claims-not-facts; no "scanned /
|
|
40
|
+
guaranteed secret-free" style assertions).
|
|
41
|
+
|
|
42
|
+
## Acceptance
|
|
43
|
+
|
|
44
|
+
- SECURITY.md shows `0.2.x` as the supported line.
|
|
45
|
+
- Copied evidence risks and commit policy are stated.
|
|
46
|
+
- `pytest` green (docs-only change; no test changes expected).
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# 0104: Python 3.10–3.13 CI matrix
|
|
2
|
+
|
|
3
|
+
Milestone: v0.2.4 Trust Patch
|
|
4
|
+
Priority: P2
|
|
5
|
+
Area: ci
|
|
6
|
+
Origin: docs/project-loop-harness-v0.2.3-third-party-review.md P2-1 (verified: ci.yml pins `python-version: '3.11'` while pyproject classifiers list 3.10/3.11/3.12/3.13)
|
|
7
|
+
|
|
8
|
+
## Problem
|
|
9
|
+
|
|
10
|
+
`pyproject.toml` declares `requires-python = ">=3.10"` and classifiers for
|
|
11
|
+
3.10–3.13, but CI runs a single Python 3.11. The advertised support range is
|
|
12
|
+
not continuously verified.
|
|
13
|
+
|
|
14
|
+
## Scope
|
|
15
|
+
|
|
16
|
+
Update `.github/workflows/ci.yml`:
|
|
17
|
+
|
|
18
|
+
1. Run lint + tests + smoke on a matrix of `["3.10", "3.11", "3.12", "3.13"]`:
|
|
19
|
+
- `ruff check .`
|
|
20
|
+
- `pytest`
|
|
21
|
+
- smoke: `pcl --version`; then in a fresh temp directory `pcl init`
|
|
22
|
+
(note: `pcl init` takes no positional argument, run it inside the temp
|
|
23
|
+
cwd), `pcl validate --strict --json`, `pcl render --json`.
|
|
24
|
+
2. Keep build / twine check / sdist contract steps on a single canonical
|
|
25
|
+
version (3.12).
|
|
26
|
+
3. Keep total CI time reasonable — matrix jobs run in parallel; do not add
|
|
27
|
+
new workflow files unless the existing one cannot express it.
|
|
28
|
+
|
|
29
|
+
## Invariants
|
|
30
|
+
|
|
31
|
+
- Existing CI steps (including the advisory retrieval eval step from 0080)
|
|
32
|
+
keep their current blocking/advisory semantics; the matrix must not turn an
|
|
33
|
+
advisory step into a blocking one or vice versa.
|
|
34
|
+
- No changes to pyproject metadata, package code, or tests are expected. If a
|
|
35
|
+
Python-version-specific test failure surfaces, report it in the task output
|
|
36
|
+
rather than papering over it with skips — that finding is the point of this
|
|
37
|
+
task.
|
|
38
|
+
|
|
39
|
+
## Acceptance
|
|
40
|
+
|
|
41
|
+
- CI green on all four Python versions (verify with a branch push / PR run or
|
|
42
|
+
`gh run watch` after pushing the branch).
|
|
43
|
+
- Classifiers and CI matrix agree.
|
|
44
|
+
- Release note mentions the matrix result.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# 0105: Evidence copy observability
|
|
2
|
+
|
|
3
|
+
Milestone: v0.2.4 Trust Patch
|
|
4
|
+
Priority: P2
|
|
5
|
+
Area: evidence
|
|
6
|
+
Origin: docs/project-loop-harness-v0.2.3-third-party-review.md P2-2
|
|
7
|
+
Depends on: 0102 (both touch src/pcl/evidence.py — start after 0102 merges)
|
|
8
|
+
|
|
9
|
+
## Problem
|
|
10
|
+
|
|
11
|
+
v0.2.3 serialized evidence ID allocation to fix a concurrency race. When
|
|
12
|
+
`evidence add --copy` copies large files, the copy work may extend the time a
|
|
13
|
+
SQLite write transaction/lock is held. We have no measurements, so we cannot
|
|
14
|
+
judge whether reserved-row or counter designs are ever needed. Observability
|
|
15
|
+
first, redesign only if data demands it.
|
|
16
|
+
|
|
17
|
+
## Scope
|
|
18
|
+
|
|
19
|
+
1. Measure and record, for `pcl evidence add --copy` invocations:
|
|
20
|
+
- `copy_duration_ms` (wall time of the file-copy phase)
|
|
21
|
+
- `copied_total_bytes`
|
|
22
|
+
- `member_count`
|
|
23
|
+
These go into the `evidence_added` event payload (additive fields) via the
|
|
24
|
+
standard `append_event` path (both stores, per the 0089 lesson — no
|
|
25
|
+
JSONL-only or SQLite-only side channels).
|
|
26
|
+
2. Where measurable without redesign, record lock-related diagnostics (e.g.
|
|
27
|
+
time spent inside the write transaction) as an additive payload field; if
|
|
28
|
+
it is not cleanly measurable, state so in the task output instead of
|
|
29
|
+
adding invasive instrumentation.
|
|
30
|
+
3. Add a concurrent copy stress test: N parallel `evidence add --copy`
|
|
31
|
+
processes against one project must all succeed deterministically with
|
|
32
|
+
unique IDs (extend the existing 0101 race-test pattern).
|
|
33
|
+
|
|
34
|
+
## Invariants
|
|
35
|
+
|
|
36
|
+
- Timestamps/durations must not break determinism guarantees of existing
|
|
37
|
+
contracts: duration fields live only in event payloads, not in receipts,
|
|
38
|
+
context packs, manifests, or anything byte-compared by tests.
|
|
39
|
+
- ID allocation semantics are unchanged (serialized allocation from 0101 is
|
|
40
|
+
kept as-is).
|
|
41
|
+
- Non-`--copy` `evidence add` behavior and payload shape are unchanged
|
|
42
|
+
except for fields explicitly listed above being absent.
|
|
43
|
+
- No new tables, no migration.
|
|
44
|
+
|
|
45
|
+
## Acceptance
|
|
46
|
+
|
|
47
|
+
- `evidence add --copy --json` emits an event whose payload includes the three
|
|
48
|
+
metrics; existing consumers/tests unaffected (additive-only).
|
|
49
|
+
- Concurrent stress test green and deterministic across repeated runs.
|
|
50
|
+
- Full `pytest` green; `pcl validate --strict --json` green after live copy
|
|
51
|
+
operations in a scratch project.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# 0106: Release checklist contract
|
|
2
|
+
|
|
3
|
+
Milestone: v0.2.4 Trust Patch
|
|
4
|
+
Priority: P2
|
|
5
|
+
Area: docs/release
|
|
6
|
+
Origin: docs/project-loop-harness-v0.2.3-third-party-review.md PLH-0108
|
|
7
|
+
Implementation: orchestrator-authored — deliverable is `docs/release-checklist.md`
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
Make every release reproducible by contract, capturing the steps and traps
|
|
12
|
+
already proven across v0.1.7–v0.2.3 releases.
|
|
13
|
+
|
|
14
|
+
## Acceptance
|
|
15
|
+
|
|
16
|
+
- `docs/release-checklist.md` exists and covers: version bump, release note,
|
|
17
|
+
ruff, pytest (matrix), editable-install sanity, build, twine check, sdist
|
|
18
|
+
contract verification, fresh-venv wheel smoke, `pcl validate --strict
|
|
19
|
+
--json`, `pcl render --json`, SECURITY.md supported-versions check, tag →
|
|
20
|
+
GitHub Release → trusted publishing → PyPI verification, local pipx update.
|
|
21
|
+
- The v0.2.4 release is executed against this checklist.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# 0107: agent-tasks backlog index
|
|
2
|
+
|
|
3
|
+
Milestone: v0.2.4 Trust Patch
|
|
4
|
+
Priority: P3
|
|
5
|
+
Area: docs/backlog
|
|
6
|
+
Origin: docs/project-loop-harness-v0.2.3-third-party-review.md PLH-0109
|
|
7
|
+
Implementation: orchestrator-authored — deliverable is `agent-tasks/README.md`
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
Make the `agent-tasks/` directory navigable: distinguish active backlog from
|
|
12
|
+
completed design history without duplicating `TASKS.md` (which stays the
|
|
13
|
+
canonical ordered index).
|
|
14
|
+
|
|
15
|
+
## Acceptance
|
|
16
|
+
|
|
17
|
+
- `agent-tasks/README.md` exists: explains the spec-first workflow, points to
|
|
18
|
+
`TASKS.md` for the full history, and lists the active backlog with
|
|
19
|
+
milestone/priority/status.
|
|
20
|
+
- New contributors and agents can find the next task from it.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# agent-tasks
|
|
2
|
+
|
|
3
|
+
Spec-first backlog and design history for Project Loop Harness.
|
|
4
|
+
|
|
5
|
+
Each file is one task spec: problem, scope, invariants ("what to protect",
|
|
6
|
+
stated against the normal paths), non-scope, and acceptance criteria. Specs
|
|
7
|
+
are committed to `main` **before** any worker starts implementing — workers
|
|
8
|
+
implement from the spec file, not from prompt summaries.
|
|
9
|
+
|
|
10
|
+
- **Canonical ordered index (all tasks, oldest first):** [`../TASKS.md`](../TASKS.md)
|
|
11
|
+
- **Roadmap and milestone rationale:** [`../docs/growth-plan-v0.2.4-v0.5.md`](../docs/growth-plan-v0.2.4-v0.5.md)
|
|
12
|
+
|
|
13
|
+
## Active backlog
|
|
14
|
+
|
|
15
|
+
| ID | Title | Milestone | Priority | Status |
|
|
16
|
+
|---|---|---|---|---|
|
|
17
|
+
| 0102 | Source drift health warning | v0.2.4 Trust Patch | P1 | done |
|
|
18
|
+
| 0103 | SECURITY.md v0.2.x + copied-evidence policy | v0.2.4 Trust Patch | P1 | done |
|
|
19
|
+
| 0104 | Python 3.10–3.13 CI matrix | v0.2.4 Trust Patch | P2 | done |
|
|
20
|
+
| 0105 | Evidence copy observability | v0.2.4 Trust Patch | P2 | done |
|
|
21
|
+
| 0106 | Release checklist contract | v0.2.4 Trust Patch | P2 | done (`docs/release-checklist.md`) |
|
|
22
|
+
| 0107 | agent-tasks backlog index | v0.2.4 Trust Patch | P3 | done (this file) |
|
|
23
|
+
|
|
24
|
+
## Planned next (see growth plan for scope)
|
|
25
|
+
|
|
26
|
+
| Milestone | Theme |
|
|
27
|
+
|---|---|
|
|
28
|
+
| v0.3.0 | Target-bound code context receipts (`impact --for-task/--for-job`, `--require-bound-receipt`) |
|
|
29
|
+
| v0.3.1 | Operator experience: `pcl finish` (F7), human-gate ja copy (F5), feature_coverage no-op (F4) |
|
|
30
|
+
| v0.3.2 | Master trace / intent-index v0 contract formalization |
|
|
31
|
+
| v0.4.0 | Dogfood operations + cost KPI measurement |
|
|
32
|
+
| v0.5.0 | Adoption: README split, contract stability policy |
|
|
33
|
+
|
|
34
|
+
Everything with an ID below 0102 is completed design history; see `TASKS.md`
|
|
35
|
+
for the one-line summary of each.
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# Project Loop Harness 成長計画 v0.2.4 → v0.5.0
|
|
2
|
+
|
|
3
|
+
**作成日:** 2026-07-08
|
|
4
|
+
**作成者:** Fable 5(orchestrator)
|
|
5
|
+
**入力:** docs/project-loop-harness-v0.2.3-third-party-review.md(第三者レビュー提言書)+ 実コード検証 + ax1-moc1 実使用フィードバック + 引き継ぎ履歴
|
|
6
|
+
**ステータス:** DRAFT — 坂本承認待ち
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 0. 第三者レビューの精査結果
|
|
11
|
+
|
|
12
|
+
レビューは「ローカル clone・テスト実行なし」と明記しているため、事実主張を実コード(v0.2.3 = main HEAD 0a6c1c2)で検証した。
|
|
13
|
+
|
|
14
|
+
| レビュー主張 | 検証結果 |
|
|
15
|
+
|---|---|
|
|
16
|
+
| P1-1: `source_drifted` が warning codes に含まれず health が `ok` のまま | **事実**。`src/pcl/evidence.py:36` の `ADHOC_WARNING_FINDING_CODES` に `source_drifted` がない。findings は生成される(evidence.py:577-597)が `_adhoc_assessment` は ok を返す |
|
|
17
|
+
| P1-2: SECURITY.md が `0.1.x` のまま | **事実**。SECURITY.md:8 |
|
|
18
|
+
| P2-1: CI が Python 3.11 単独 vs classifiers 3.10–3.13 | **事実**。ci.yml:14 vs pyproject.toml:22-25 |
|
|
19
|
+
| P2-3: code context receipt が target-bound でない | **事実**(0078 実装は latest receipt 解決。binding metadata なし) |
|
|
20
|
+
| 提案タスク採番 PLH-0101〜0110 | **衝突**。agent-tasks/0100・0101 は既に使用済み → 本計画では 0102〜 に再採番 |
|
|
21
|
+
|
|
22
|
+
レビューの方向性判断(local control plane 特化、hosted/telemetry/LLM-in-core の回避、Trust Patch 最優先)は、既存の承認済み方針(2026-07-04 方向性決定、0097 設計、epistemic 語彙規律)と整合しており採用する。
|
|
23
|
+
|
|
24
|
+
**採用しない/修正する点:**
|
|
25
|
+
|
|
26
|
+
1. **ユーザー満足度の軸が弱い。** レビューは trust / context binding に集中しており、実ユーザー(ax1-moc1)から出た摩擦 F4/F5/F7、坂本の「人間判断の日本語化・わかりやすい escalation」要望(Milestone 13)に触れていない。本計画では Operator Experience リリースを Master Trace 形式化より前に挿入する。
|
|
27
|
+
2. **Master Trace は「新規構想」ではない。** docs/master-trace-handoff.md(M0)が既に存在し、既存コマンドだけで動く。v0.3.x での作業は発明ではなく契約の形式化 + context pack への optional section 追加に縮小できる。
|
|
28
|
+
3. **コスト計測の解像度。** レビューの成功指標(§13)にコスト軸を追加する(後述 §5)。charclass/v1 token 推定器・0090 の token_cost_estimate という既存資産を handoff 経済の計測に転用する。
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 1. 戦略テーゼ — なぜこの製品が「これからの世界」で効くか
|
|
33
|
+
|
|
34
|
+
前提とする世界観: **モデル性能は上がり続け、コスト管理は厳しくなり続ける。**
|
|
35
|
+
|
|
36
|
+
### テーゼ1: 生成はコモディティ化し、信頼が希少資源になる
|
|
37
|
+
|
|
38
|
+
モデルが賢くなるほど、agent が生み出す「主張」の量は増える。ボトルネックは生成ではなく **検証・監査・引き継ぎの信頼** に移る。PLH は生成の側に立たず(core は LLM を呼ばない)、claims-not-facts・evidence・receipt という検証の側に立つ。この設計はモデル進化に対して中立であり、worker が賢くなるほど pull-context 方式の効率が上がる — つまり **モデル性能向上がそのまま PLH の価値を増幅する**。
|
|
39
|
+
|
|
40
|
+
### テーゼ2: output token が最も高価な世界では、push 型長文指示書が最大の浪費
|
|
41
|
+
|
|
42
|
+
高性能 master agent に長文指示書を書かせるのは、最も高価な token(高性能モデルの output)の最も低付加価値な使い方である。PLH の pull 型 handoff(master transcript → evidence → intent-index → context pack → worker が pull)は、この支出を構造的に消す。さらに PLH 自体の限界トークンコストはゼロ(local / deterministic / dependency-light)。**コスト厳格化が進むほど、この差別化は強くなる。**
|
|
43
|
+
|
|
44
|
+
### テーゼ3: 検証支出にも予算規律が要る
|
|
45
|
+
|
|
46
|
+
「全部を毎回検証する」は賢いモデルの世界でもコスト的に成立しない。migration 005 の verification feedback loop(execution_rate / executed_pass_rate)は「どの検証提案が実行され、何が通ったか」を計測する基盤であり、検証支出の配分最適化に直結する。dogfood でこの数値を貯めることが v0.4 の本丸。
|
|
47
|
+
|
|
48
|
+
### テーゼ4: ユーザー満足度は「境界の賢さ」と「摩擦の少なさ」で決まる
|
|
49
|
+
|
|
50
|
+
実ユーザーの声が既にある: human gate(requires_human)は称賛され、epistemic 境界を弱める要望はゼロだった。一方で摩擦は「終端処理の認知負荷が実装より重い」(F7)、human-gate handoff 文面(F5)、オール英語表記。**満足度の最短経路は境界を緩めることではなく、境界の手前と後ろの体験を磨くこと**である。
|
|
51
|
+
|
|
52
|
+
### ターゲットペインの再確認
|
|
53
|
+
|
|
54
|
+
理想ユーザー = 複数 AI エージェントを指揮する AI 開発パワーユーザー / AI プロダクトオーナー(坂本さん自身)。ペインは:
|
|
55
|
+
|
|
56
|
+
```text
|
|
57
|
+
忘却 — agent が文脈・決定・却下案を忘れる / 拾い間違える
|
|
58
|
+
暴走 — 承認なき破壊的操作、スコープ逸脱
|
|
59
|
+
証拠不足 — 「done」の根拠が辿れない、レビュー不能
|
|
60
|
+
高コスト — master の長文指示書、無駄な再検証、handoff やり直し
|
|
61
|
+
終端負荷 — 完了処理・引き継ぎ処理の認知コストが人間に残る
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
PLH の一文: **AI coding agent に、忘れず・暴走せず・証拠を残して・次にやることを判断させるための local control plane。** — この定義(レビュー §4.1)を README / PyPI / 冒頭ピッチの正とする。
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 2. 品質 × コスト × 満足度のマッピング
|
|
69
|
+
|
|
70
|
+
| リリース | 品質 | コスト | 満足度 |
|
|
71
|
+
|---|---|---|---|
|
|
72
|
+
| v0.2.4 Trust Patch | evidence 意味論の正しさ、CI 実証範囲 | copy lock 観測(並列 agent の待ち時間削減の前提データ) | 「表示が嘘をつかない」信頼 |
|
|
73
|
+
| v0.3.0 Target-Bound Context | 誤 receipt による誤修正の防止 | handoff やり直しの削減 | worker への引き継ぎ不安の解消 |
|
|
74
|
+
| v0.3.1 Operator Experience | human gate 判断品質(why_blocked の ja 化) | 終端処理の master token 削減(F7) | **本丸**: F5/F7/ja、坂本の願いに直結 |
|
|
75
|
+
| v0.3.2 Master Trace 形式化 | intent-index の claims-not-facts 契約 | **本丸**: master output token の構造的削減 | 長文指示書からの解放 |
|
|
76
|
+
| v0.4.0 Dogfood Operations | 実測に基づく信頼性実証 | コスト KPI の実測値(テーゼの証明) | 実運用 runbook |
|
|
77
|
+
| v0.5.0 Adoption | 契約安定性ポリシー | — | 初見 3 分で価値理解 |
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 3. ロードマップ
|
|
82
|
+
|
|
83
|
+
レビュー §8 を土台に、順序を 1 箇所変更(Operator Experience を Master Trace 形式化より前に挿入)し、実リポジトリの採番・既存資産に合わせて調整した。
|
|
84
|
+
|
|
85
|
+
### v0.2.4 Trust Patch(最優先・小粒)
|
|
86
|
+
|
|
87
|
+
目的: v0.2.3 の evidence durability を「表示が嘘をつかない」状態に固める。
|
|
88
|
+
|
|
89
|
+
| タスク | 内容 | 由来 | サイズ |
|
|
90
|
+
|---|---|---|---|
|
|
91
|
+
| 0102 | `source_drifted` health 修正 — 短期は `ADHOC_WARNING_FINDING_CODES` への追加 + missing / size_mismatch テスト固定。artifact_health / source_health 分離は論点として温存(§6 論点2) | レビュー P1-1(検証済み事実) | S |
|
|
92
|
+
| 0103 | SECURITY.md v0.2.x 更新 + copied evidence 機密リスク・commit policy・MCP exposure 明記 + release checklist に version check 追加 | レビュー P1-2(検証済み事実) | S |
|
|
93
|
+
| 0104 | Python 3.10–3.13 CI matrix(pytest + smoke: `pcl --version` / `init` / `validate --strict --json` / `render --json`。build/twine は 3.12 単独) | レビュー P2-1(検証済み事実) | S |
|
|
94
|
+
| 0105 | evidence copy observability — copy duration / copied bytes / member count を event metadata に、concurrent copy stress test。reserved-row / counter 方式への変更はしない(観測が先) | レビュー P2-2 | S-M |
|
|
95
|
+
| 0106 | `docs/release-checklist.md` — 既存リリース手順(trusted publishing / fresh venv smoke / sdist contract / editable 指し先確認の罠を含む)を契約化 | レビュー PLH-0108 | S |
|
|
96
|
+
| 0107 | `agent-tasks/README.md` — ID / status / milestone / priority の backlog index(orchestrator 執筆で可) | レビュー PLH-0109 | S |
|
|
97
|
+
|
|
98
|
+
成功条件: source drift が warning 表示 / SECURITY.md 整合 / 3.10–3.13 matrix green / checklist に沿って v0.2.4 をリリース。
|
|
99
|
+
|
|
100
|
+
### v0.3.0 Target-Bound Context
|
|
101
|
+
|
|
102
|
+
目的: context pack を agent handoff の信頼できる契約に進化させる。「便利な CLI」から「handoff の制御層」への転換点。
|
|
103
|
+
|
|
104
|
+
| タスク | 内容 | サイズ |
|
|
105
|
+
|---|---|---|
|
|
106
|
+
| 0108 | target-bound code context receipts — `pcl impact --diff --for-task T-XXXX / --for-job J-XXXX`、receipt に binding metadata(target_type / target_id / binding_strength)、`context pack --require-bound-receipt`、unbound latest fallback は warning | M-L |
|
|
107
|
+
|
|
108
|
+
設計上の注意: receipt 契約は `code-context-summary/v0` 絶縁層(0078 承認済み設計)を崩さず additive に拡張する。staleness(working_tree_changed_since_receipt / receipt_age_seconds)は 0082 の relevance / receipt_age 資産を再利用。
|
|
109
|
+
|
|
110
|
+
### v0.3.1 Operator Experience(レビューにない追加リリース)
|
|
111
|
+
|
|
112
|
+
目的: 実ユーザーが表明した摩擦と坂本の願い(人間に判りやすい escalation)を潰す。満足度の本丸であり、F7 は master token 削減というコスト施策でもある。
|
|
113
|
+
|
|
114
|
+
| タスク | 内容 | 由来 | サイズ |
|
|
115
|
+
|---|---|---|---|
|
|
116
|
+
| 0109 | `pcl finish` 集約コマンド — 終端処理(test pass --evidence → task 遷移 → jobs complete → report)の一括化。冪等(0092 資産)前提 | ax1-moc1 F7(最重要摩擦) | M-L |
|
|
117
|
+
| 0110 | human-gate handoff 文面改善 + ja ローカライズ拡張 — `pcl next` の requires_human 出力に why_blocked / options / risk_if_run(0070 資産)を ja で | ax1-moc1 F5 + Milestone 13 + 坂本要望 | M |
|
|
118
|
+
| 0111 | feature_coverage 既存カバレッジ検出で no-op | ax1-moc1 F4 | M |
|
|
119
|
+
|
|
120
|
+
### v0.3.2 Master Trace / Intent Index v0 形式化
|
|
121
|
+
|
|
122
|
+
目的: 既存の M0 dogfood ワークフロー(docs/master-trace-handoff.md)を契約に昇格し、pull 型 handoff のコスト優位を製品機能にする。
|
|
123
|
+
|
|
124
|
+
| タスク | 内容 | サイズ |
|
|
125
|
+
|---|---|---|
|
|
126
|
+
| 0112 | `master-trace/v0` + `intent-index/v0` 契約 docs + context pack への optional `master_trace_context` section(trace_evidence_id / intent_index_evidence_id / trust_model: claims-not-facts / raw_transcript_inlined: false / source_paths)。LLM 呼び出しは core に入れない。raw transcript の inline 禁止 | M |
|
|
127
|
+
|
|
128
|
+
first-class trace entity 化は v0.4 dogfood の結果を見てから判断(レビュー論点4 と同意見 — 早すぎる抽象化を避ける)。
|
|
129
|
+
|
|
130
|
+
### v0.4.0 Dogfood Operations
|
|
131
|
+
|
|
132
|
+
目的: テーゼ 2・3 を実測で証明する。機能追加より計測を優先。
|
|
133
|
+
|
|
134
|
+
- PLH 自身 + 外部 repo(ax1-moc1 継続 or 新規)の 2 repo dogfood report(`docs/dogfood-report-v0.4.md`)
|
|
135
|
+
- **コスト KPI の実測**: master_brief_tokens_saved(pull 型 vs push 型の比較実測)、average_context_pack_tokens、finish による終端 round-trip 削減数
|
|
136
|
+
- verification feedback の実データ: execution_rate / executed_pass_rate / feedback_coverage_rate
|
|
137
|
+
- handoff KPI: worker_handoff_success_rate / handoff_confusion_count / bound_receipt_coverage
|
|
138
|
+
- Codex / Claude Code handoff runbook
|
|
139
|
+
|
|
140
|
+
### v0.5.0 Adoption / Distribution
|
|
141
|
+
|
|
142
|
+
- 0113: README split(レビュー PLH-0107 準拠: 30 秒ピッチ + 3 分 quickstart + docs/operator-manual.md / contracts.md / agent-handoff.md / internals.md へ分離)
|
|
143
|
+
- JSON contract stability policy(論点3 の決定を文書化)
|
|
144
|
+
- examples/ + Codex / Claude Code quickstart + `.project-loop` commit policy
|
|
145
|
+
- **v0.4 の実測数値を README の訴求に使う**(「master の指示書 token を X% 削減」— 実測が最強のマーケティング)
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## 4. やらないこと(レビュー §3.4 を承認済み方針として再確認)
|
|
150
|
+
|
|
151
|
+
hosted backend / cloud sync / marketplace / telemetry / multi-user collaboration / 複雑な自動 scheduler / dashboard の過剰リッチ化 / core からの LLM API 呼び出し。
|
|
152
|
+
|
|
153
|
+
追加: semantic search / embeddings の昇格は既存ゲート(eval fixture で lexical チューニング後も missing-critical-context が改善しない場合のみ)を維持。
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 5. 成功指標
|
|
158
|
+
|
|
159
|
+
レビュー §13 の 4 分類(handoff / evidence 信頼性 / context pack 品質 / release 品質)を採用し、コスト軸を追加する。
|
|
160
|
+
|
|
161
|
+
| コスト指標 | 意味 | 計測手段 |
|
|
162
|
+
|---|---|---|
|
|
163
|
+
| master_brief_tokens_saved | pull 型 handoff で master が書かずに済んだ output token | charclass/v1 推定器で transcript vs 従来指示書を比較 |
|
|
164
|
+
| average_context_pack_tokens | handoff 1 回あたりの入力コスト | pack の token 推定(既存) |
|
|
165
|
+
| finish_roundtrips_saved | `pcl finish` による終端コマンド往復削減数 | dogfood 実測 |
|
|
166
|
+
| verification_spend_efficiency | executed_pass_rate × execution_rate(実行された検証が意味を持った割合) | migration 005 stats |
|
|
167
|
+
| bound_receipt_coverage | 誤 context による手戻り(最も高価な失敗)の予防率 | v0.3.0 以降の pack 統計 |
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## 6. 坂本の決定が必要な論点
|
|
172
|
+
|
|
173
|
+
1. **ロードマップ順序**: Operator Experience(v0.3.1)を Master Trace 形式化(v0.3.2)より前に挿入する変更を承認するか。(推奨: 承認。F7 は実ユーザー最重要摩擦かつ M0 ワークフローは形式化前でも dogfood 可能)
|
|
174
|
+
2. **evidence health の形**: 短期は `source_drifted` を warning codes に追加(0102)。中期の artifact_health / source_health 分離は additive contract 変更として v0.3.x で再検討。(推奨: 短期案のみ先行、分離は dogfood の source_drift_rate 実測後)
|
|
175
|
+
3. **ID gap 許容**(レビュー論点2): 現状維持し、0105 の観測データで判断。(推奨: 現状維持)
|
|
176
|
+
4. **`.project-loop` commit policy**(レビュー論点5): evidence/adhoc-files は commit しない現状を SECURITY.md(0103)に明文化。project.db / events.jsonl の扱いは v0.5.0 までに決定。
|
|
177
|
+
5. **v0.2.4 リリース範囲**: 0102–0107 の 6 本で切るか。
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## 7. 実行計画(Cockpit 委譲)
|
|
182
|
+
|
|
183
|
+
実装は従来どおり codex worker(cockpit task、worktree 分離)へ委譲し、Fable が spec 起票と独立検収を行う。
|
|
184
|
+
|
|
185
|
+
```text
|
|
186
|
+
順序:
|
|
187
|
+
0103 + 0104 + 0107 並行可(互いに独立、S サイズ)
|
|
188
|
+
0102 → 0105 evidence.py を触るため直列
|
|
189
|
+
0106 リリース直前に Fable 執筆でも可
|
|
190
|
+
検収規律(確立済み):
|
|
191
|
+
- spec は worker 着手前に main へコミット(0078 の教訓)
|
|
192
|
+
- 不変条件は「何を守るか」を正規経路・対象スコープ付きで書く(0087/0089/0090 の教訓)
|
|
193
|
+
- 検収は PYTHONPATH=worktree/src、終了後 canonical repo で pip install -e '.[dev]' 復元
|
|
194
|
+
- worker task complete 前に editable の指し先確認(v0.2.1 の罠)
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
v0.2.4 は全タスク S〜S-M のため、承認後 1〜2 セッションでリリース可能な見込み。
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Release Checklist
|
|
2
|
+
|
|
3
|
+
Contract for every `project-loop-harness` release. Follow it in order; record
|
|
4
|
+
the outcome of each step in the release note. Steps marked **(trap)** encode
|
|
5
|
+
failures that actually happened in past releases — do not skip them.
|
|
6
|
+
|
|
7
|
+
## 1. Pre-flight
|
|
8
|
+
|
|
9
|
+
- [ ] All tasks for the milestone are merged to `main` and pushed; CI is green.
|
|
10
|
+
- [ ] **(trap)** Editable install points at the canonical repo, not a deleted
|
|
11
|
+
worker worktree: `pip show project-loop-harness | grep Location` must
|
|
12
|
+
resolve under `~/Dev/project-loop-harness`. If not:
|
|
13
|
+
`pip install -e '.[dev]'` from the canonical repo. Symptom otherwise:
|
|
14
|
+
previously-green `main` suddenly fails ~6 executor/sandbox subprocess
|
|
15
|
+
tests with exit 1.
|
|
16
|
+
- [ ] `SECURITY.md` supported-versions table matches the release line being
|
|
17
|
+
published.
|
|
18
|
+
- [ ] `TASKS.md` lists every shipped `agent-tasks/` spec for this release.
|
|
19
|
+
|
|
20
|
+
## 2. Version bump
|
|
21
|
+
|
|
22
|
+
- [ ] Bump `version` in `pyproject.toml`.
|
|
23
|
+
- [ ] `tests` do not hardcode the version string (`test_cli_version` reads
|
|
24
|
+
`pcl.__version__`); grep for the old version to catch strays:
|
|
25
|
+
`grep -rn "<old-version>" src/ tests/ pyproject.toml`.
|
|
26
|
+
- [ ] Write the release note: scope, task IDs, semantic changes (e.g. evidence
|
|
27
|
+
health semantics), CI matrix result, verification evidence.
|
|
28
|
+
|
|
29
|
+
## 3. Local verification
|
|
30
|
+
|
|
31
|
+
- [ ] `ruff check .`
|
|
32
|
+
- [ ] `pytest` (full suite) from the canonical repo.
|
|
33
|
+
- [ ] `pcl validate --strict --json` → `ok: true` on a scratch project
|
|
34
|
+
(`pcl init` in a temp dir; note `pcl init` takes no positional argument).
|
|
35
|
+
- [ ] `pcl render --json` succeeds on the scratch project.
|
|
36
|
+
|
|
37
|
+
## 4. Build and packaging contracts
|
|
38
|
+
|
|
39
|
+
- [ ] `python -m build` (sdist + wheel).
|
|
40
|
+
- [ ] `twine check dist/*`.
|
|
41
|
+
- [ ] sdist contract: unpack the sdist and confirm `docs/` and `agent-tasks/`
|
|
42
|
+
are included; `test_agent_adapter_docs_match_contract` passes from the
|
|
43
|
+
unpacked sdist. **(trap)** Inside the sdist, the 3 `test_distribution`
|
|
44
|
+
cases that depend on `.github/` / wheel build are expected to fail —
|
|
45
|
+
that is outside the contract and normal.
|
|
46
|
+
- [ ] Fresh-venv wheel smoke: new venv → `pip install dist/*.whl` →
|
|
47
|
+
`pcl --version` → `pcl init` in a temp dir → `pcl validate --strict
|
|
48
|
+
--json` reports the expected schema version and `consistent: true`.
|
|
49
|
+
**(trap)** Run this smoke in a clean environment; a polluted
|
|
50
|
+
`PYTHONPATH` makes wheel-install tests fail spuriously.
|
|
51
|
+
|
|
52
|
+
## 5. Publish
|
|
53
|
+
|
|
54
|
+
- [ ] Tag `vX.Y.Z` on the release commit; push the tag.
|
|
55
|
+
- [ ] Create the GitHub Release (not draft) with the release note.
|
|
56
|
+
- [ ] Trusted publishing workflow publishes to PyPI — wait for completion.
|
|
57
|
+
|
|
58
|
+
## 6. Post-publish verification
|
|
59
|
+
|
|
60
|
+
- [ ] PyPI shows the new version as latest, with both wheel and sdist.
|
|
61
|
+
- [ ] Fresh venv: `pip install project-loop-harness==X.Y.Z` →
|
|
62
|
+
`pcl --version` → init/validate smoke.
|
|
63
|
+
- [ ] Update local pipx: `pipx upgrade project-loop-harness` (or install).
|
|
64
|
+
**(trap)** A stale pipx `pcl` shadows the editable install and has
|
|
65
|
+
caused old-schema `pcl migrate` runs against live DBs in the past.
|
|
66
|
+
- [ ] Update the handoff memory / session log with the release record.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# v0.2.4 - Trust Patch
|
|
2
|
+
|
|
3
|
+
Project Loop Harness v0.2.4 tightens the evidence trust surface from the
|
|
4
|
+
v0.2.3 evidence durability release.
|
|
5
|
+
|
|
6
|
+
Highlights:
|
|
7
|
+
- `source_drifted` copied-evidence findings now surface as evidence health
|
|
8
|
+
warnings, so deleted or size-changed source files no longer render as
|
|
9
|
+
healthy provenance.
|
|
10
|
+
- `SECURITY.md` now tracks the `0.2.x` release line and documents copied
|
|
11
|
+
evidence handling, commit policy, and read-only exposure expectations.
|
|
12
|
+
- CI now runs the full suite across Python 3.10, 3.11, 3.12, and 3.13; the
|
|
13
|
+
Python 3.12 lane also builds distributions, runs `twine check`, and verifies
|
|
14
|
+
the sdist contract.
|
|
15
|
+
- `pcl evidence add --copy` records additive copy observability metrics in the
|
|
16
|
+
evidence event payload: `copy_duration_ms`, `copied_total_bytes`,
|
|
17
|
+
`member_count`, and `write_transaction_pre_event_duration_ms`.
|
|
18
|
+
- `agent-tasks/README.md` now reflects the v0.2.4 Trust Patch backlog status,
|
|
19
|
+
and `docs/release-checklist.md` is the release contract for future releases.
|
|
20
|
+
|
|
21
|
+
Compatibility:
|
|
22
|
+
- Schema migration: none.
|
|
23
|
+
- No new runtime dependencies.
|
|
24
|
+
|
|
25
|
+
Verification:
|
|
26
|
+
- `python -m pip install -e '.[dev]'` installed
|
|
27
|
+
`project-loop-harness==0.2.4` from
|
|
28
|
+
`/Users/mocchalera/Dev/project-loop-harness`.
|
|
29
|
+
- `python -m pcl --version` returned `pcl 0.2.4`.
|
|
30
|
+
- `ruff check .` passed.
|
|
31
|
+
- `python -m pytest` passed: 459 tests.
|
|
32
|
+
- `PYTHONPATH=src python -m pcl validate --strict --json` returned `ok: true`
|
|
33
|
+
on the canonical repo state, with pre-existing local evidence warnings for
|
|
34
|
+
`E-0018` and `E-0025`.
|
|
35
|
+
- Scratch project smoke passed: `pcl init`, `pcl validate --strict --json`,
|
|
36
|
+
and `pcl render --json`.
|
|
37
|
+
- Latest `main` CI for `0df9bcb` passed across Python 3.10, 3.11, 3.12, and
|
|
38
|
+
3.13:
|
|
39
|
+
https://github.com/mocchalera/project-loop-harness/actions/runs/28929819418
|
|
40
|
+
- Built sdist/wheel under `release-dist/v0.2.4`.
|
|
41
|
+
- `python -m twine check release-dist/v0.2.4/*` passed.
|
|
42
|
+
- `python scripts/verify_sdist_contracts.py --dist-dir release-dist/v0.2.4`
|
|
43
|
+
passed.
|
|
44
|
+
- Fresh wheel venv smoke installed `project-loop-harness==0.2.4` and ran
|
|
45
|
+
`pcl --version`, `pcl init`, `pcl validate --strict --json`, and
|
|
46
|
+
`pcl render --json`.
|
|
47
|
+
|
|
48
|
+
Release checklist status:
|
|
49
|
+
- Pre-flight: complete for the current `main` commit. 0102-0107 are merged to
|
|
50
|
+
`main`, latest `main` CI is green, `SECURITY.md` tracks `0.2.x`, and
|
|
51
|
+
`TASKS.md` lists every shipped spec.
|
|
52
|
+
- Version bump: complete locally. Version files are bumped to `0.2.4`; Python
|
|
53
|
+
source/tests have no remaining `0.2.3` version literals.
|
|
54
|
+
- Local verification: complete.
|
|
55
|
+
- Build and packaging contracts: complete.
|
|
56
|
+
- Publish: pending human approval for tag, GitHub Release, and PyPI publish.
|
|
57
|
+
- Post-publish verification: pending.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "project-loop-harness"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.4"
|
|
8
8
|
description = "Local control plane for agentic project development loops"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -35,7 +35,9 @@ Documentation = "https://github.com/mocchalera/project-loop-harness/tree/main/do
|
|
|
35
35
|
[project.optional-dependencies]
|
|
36
36
|
dev = [
|
|
37
37
|
"pytest>=8",
|
|
38
|
-
"ruff>=0.6"
|
|
38
|
+
"ruff>=0.6",
|
|
39
|
+
"setuptools>=69",
|
|
40
|
+
"wheel"
|
|
39
41
|
]
|
|
40
42
|
|
|
41
43
|
[project.scripts]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.2.4"
|