@hunter-harness/workflow-harness 0.4.0 → 0.4.2
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.
- package/harness/bundles/general/claude-code/.harness-build.json +1 -1
- package/harness/bundles/general/claude-code/harness-archive/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-execute/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-plan/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-pull/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-push/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-review/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-run/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-submit/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-sync/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-test/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/scripts/harness_archive.py +29 -6
- package/harness/bundles/general/claude-code/scripts/harness_deploy.py +1 -1
- package/harness/bundles/general/claude-code/scripts/harness_knowledge_candidates.py +398 -0
- package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-execute/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-pull/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-push/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-review/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-run/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-test/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/scripts/harness_archive.py +29 -6
- package/harness/bundles/general/codebuddy/scripts/harness_deploy.py +1 -1
- package/harness/bundles/general/codebuddy/scripts/harness_knowledge_candidates.py +398 -0
- package/harness/bundles/general/codex/.harness-build.json +1 -1
- package/harness/bundles/general/codex/harness-archive/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-execute/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-plan/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-pull/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-push/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-review/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-run/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-submit/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-sync/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-test/SKILL.md +1 -1
- package/harness/bundles/general/codex/scripts/harness_archive.py +29 -6
- package/harness/bundles/general/codex/scripts/harness_deploy.py +1 -1
- package/harness/bundles/general/codex/scripts/harness_knowledge_candidates.py +398 -0
- package/harness/bundles/general/cursor/.harness-build.json +1 -1
- package/harness/bundles/general/cursor/harness-archive/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-execute/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-plan/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-pull/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-push/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-review/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-run/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-submit/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-sync/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-test/SKILL.md +1 -1
- package/harness/bundles/general/cursor/scripts/harness_archive.py +29 -6
- package/harness/bundles/general/cursor/scripts/harness_deploy.py +1 -1
- package/harness/bundles/general/cursor/scripts/harness_knowledge_candidates.py +398 -0
- package/harness/bundles/general/pi/.harness-build.json +6 -0
- package/harness/bundles/general/pi/CONTEXT.md +98 -0
- package/harness/bundles/general/pi/README.md +478 -0
- package/harness/bundles/general/pi/contracts/build-profile-v3.schema.json +302 -0
- package/harness/bundles/general/pi/contracts/ci-metrics.schema.json +36 -0
- package/harness/bundles/general/pi/contracts/doctor-capability.schema.json +43 -0
- package/harness/bundles/general/pi/contracts/external-platform-observation.schema.json +62 -0
- package/harness/bundles/general/pi/contracts/fixtures/managed-execution.json +341 -0
- package/harness/bundles/general/pi/contracts/process-identity.schema.json +132 -0
- package/harness/bundles/general/pi/contracts/run-session.schema.json +142 -0
- package/harness/bundles/general/pi/contracts/service-retirement-receipt.schema.json +85 -0
- package/harness/bundles/general/pi/contracts/service-session.schema.json +147 -0
- package/harness/bundles/general/pi/contracts/workflow-policy.json +574 -0
- package/harness/bundles/general/pi/harness-archive/SKILL.md +322 -0
- package/harness/bundles/general/pi/harness-archive/checklist.md +71 -0
- package/harness/bundles/general/pi/harness-archive/reference.md +150 -0
- package/harness/bundles/general/pi/harness-archive/scripts/gen-manifest.ps1 +31 -0
- package/harness/bundles/general/pi/harness-archive/templates/summary-data-template.json +218 -0
- package/harness/bundles/general/pi/harness-codebase-map/SKILL.md +116 -0
- package/harness/bundles/general/pi/harness-codebase-map/checklist.md +126 -0
- package/harness/bundles/general/pi/harness-codebase-map/reference.md +364 -0
- package/harness/bundles/general/pi/harness-codebase-map/templates/ARCHITECTURE.md +57 -0
- package/harness/bundles/general/pi/harness-codebase-map/templates/CONCERNS.md +49 -0
- package/harness/bundles/general/pi/harness-codebase-map/templates/CONVENTIONS.md +57 -0
- package/harness/bundles/general/pi/harness-codebase-map/templates/INTEGRATIONS.md +52 -0
- package/harness/bundles/general/pi/harness-codebase-map/templates/STACK.md +55 -0
- package/harness/bundles/general/pi/harness-codebase-map/templates/STRUCTURE.md +69 -0
- package/harness/bundles/general/pi/harness-codebase-map/templates/TESTING.md +64 -0
- package/harness/bundles/general/pi/harness-codebase-map/templates/map-manifest.schema.json +73 -0
- package/harness/bundles/general/pi/harness-codebase-map/templates/map-summary.md +64 -0
- package/harness/bundles/general/pi/harness-execute/SKILL.md +170 -0
- package/harness/bundles/general/pi/harness-knowledge-ingest/SKILL.md +103 -0
- package/harness/bundles/general/pi/harness-knowledge-query/SKILL.md +97 -0
- package/harness/bundles/general/pi/harness-plan/SKILL.md +157 -0
- package/harness/bundles/general/pi/harness-plan/checklist.md +243 -0
- package/harness/bundles/general/pi/harness-plan/protocols.md +133 -0
- package/harness/bundles/general/pi/harness-plan/reference.md +468 -0
- package/harness/bundles/general/pi/harness-pull/SKILL.md +55 -0
- package/harness/bundles/general/pi/harness-push/SKILL.md +83 -0
- package/harness/bundles/general/pi/harness-review/SKILL.md +166 -0
- package/harness/bundles/general/pi/harness-review/checklist.md +124 -0
- package/harness/bundles/general/pi/harness-review/protocols.md +69 -0
- package/harness/bundles/general/pi/harness-review/reference.md +114 -0
- package/harness/bundles/general/pi/harness-run/SKILL.md +188 -0
- package/harness/bundles/general/pi/harness-run/checklist.md +279 -0
- package/harness/bundles/general/pi/harness-run/protocols.md +141 -0
- package/harness/bundles/general/pi/harness-run/reference.md +886 -0
- package/harness/bundles/general/pi/harness-submit/SKILL.md +182 -0
- package/harness/bundles/general/pi/harness-submit/checklist.md +452 -0
- package/harness/bundles/general/pi/harness-submit/reference.md +152 -0
- package/harness/bundles/general/pi/harness-sync/SKILL.md +72 -0
- package/harness/bundles/general/pi/harness-sync/reference.md +176 -0
- package/harness/bundles/general/pi/harness-test/SKILL.md +250 -0
- package/harness/bundles/general/pi/harness-test/checklist.md +359 -0
- package/harness/bundles/general/pi/harness-test/pitfalls-java.md +14 -0
- package/harness/bundles/general/pi/harness-test/pitfalls.md +307 -0
- package/harness/bundles/general/pi/harness-test/reference.md +880 -0
- package/harness/bundles/general/pi/harness-test/scripts/runtime-helpers.mjs +216 -0
- package/harness/bundles/general/pi/protocols/archive-report-protocol.md +196 -0
- package/harness/bundles/general/pi/protocols/ci-layering-protocol.md +22 -0
- package/harness/bundles/general/pi/protocols/evidence-based-reporting-protocol.md +134 -0
- package/harness/bundles/general/pi/protocols/execution-session-protocol.md +52 -0
- package/harness/bundles/general/pi/protocols/external-platform-protocol.md +27 -0
- package/harness/bundles/general/pi/protocols/ledger-protocol.md +365 -0
- package/harness/bundles/general/pi/protocols/memory-closeout-protocol.md +21 -0
- package/harness/bundles/general/pi/protocols/model-routing-protocol.md +22 -0
- package/harness/bundles/general/pi/protocols/powershell-protocol.md +238 -0
- package/harness/bundles/general/pi/protocols/registry-governance-protocol.md +31 -0
- package/harness/bundles/general/pi/protocols/report-pipeline-protocol.md +172 -0
- package/harness/bundles/general/pi/protocols/sensitive-info-protocol.md +110 -0
- package/harness/bundles/general/pi/protocols/state-layout-protocol.md +209 -0
- package/harness/bundles/general/pi/protocols/submit-protocol.md +78 -0
- package/harness/bundles/general/pi/protocols/verification-graph-protocol.md +32 -0
- package/harness/bundles/general/pi/scripts/harness_adoption_metrics.py +391 -0
- package/harness/bundles/general/pi/scripts/harness_apidoc.py +53 -0
- package/harness/bundles/general/pi/scripts/harness_archive.py +11345 -0
- package/harness/bundles/general/pi/scripts/harness_change.py +1626 -0
- package/harness/bundles/general/pi/scripts/harness_check_gate.py +113 -0
- package/harness/bundles/general/pi/scripts/harness_context.py +1774 -0
- package/harness/bundles/general/pi/scripts/harness_deploy.py +968 -0
- package/harness/bundles/general/pi/scripts/harness_efficiency.py +443 -0
- package/harness/bundles/general/pi/scripts/harness_environment.py +1690 -0
- package/harness/bundles/general/pi/scripts/harness_events.py +2234 -0
- package/harness/bundles/general/pi/scripts/harness_events_sync.py +1425 -0
- package/harness/bundles/general/pi/scripts/harness_execution_contracts.py +596 -0
- package/harness/bundles/general/pi/scripts/harness_fixback.py +1975 -0
- package/harness/bundles/general/pi/scripts/harness_gate.py +3816 -0
- package/harness/bundles/general/pi/scripts/harness_headless.py +37 -0
- package/harness/bundles/general/pi/scripts/harness_integration.py +2564 -0
- package/harness/bundles/general/pi/scripts/harness_knowledge_candidates.py +796 -0
- package/harness/bundles/general/pi/scripts/harness_ledger.py +3556 -0
- package/harness/bundles/general/pi/scripts/harness_migration_head.py +220 -0
- package/harness/bundles/general/pi/scripts/harness_orchestration.py +344 -0
- package/harness/bundles/general/pi/scripts/harness_paths.py +676 -0
- package/harness/bundles/general/pi/scripts/harness_phase.py +1726 -0
- package/harness/bundles/general/pi/scripts/harness_plan_aggregate.py +249 -0
- package/harness/bundles/general/pi/scripts/harness_plan_finalize.py +1016 -0
- package/harness/bundles/general/pi/scripts/harness_preflight.py +650 -0
- package/harness/bundles/general/pi/scripts/harness_process.py +1065 -0
- package/harness/bundles/general/pi/scripts/harness_profile.py +1817 -0
- package/harness/bundles/general/pi/scripts/harness_report_model.py +442 -0
- package/harness/bundles/general/pi/scripts/harness_retry.py +175 -0
- package/harness/bundles/general/pi/scripts/harness_review.py +631 -0
- package/harness/bundles/general/pi/scripts/harness_runtime.py +2243 -0
- package/harness/bundles/general/pi/scripts/harness_service.py +3355 -0
- package/harness/bundles/general/pi/scripts/harness_state.py +365 -0
- package/harness/bundles/general/pi/scripts/harness_sync.py +407 -0
- package/harness/bundles/general/pi/scripts/harness_test_cleanup.py +175 -0
- package/harness/bundles/general/pi/scripts/harness_test_guard.py +1899 -0
- package/harness/bundles/general/pi/scripts/harness_test_runner.py +1586 -0
- package/harness/bundles/general/pi/scripts/harness_verification.py +593 -0
- package/harness/bundles/general/pi/scripts/harness_workflow_policy.py +266 -0
- package/harness/bundles/java/claude-code/.harness-build.json +1 -1
- package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-archive/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-execute/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-package/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-plan/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-pull/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-push/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-review/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-run/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-submit/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-sync/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-test/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/scripts/harness_archive.py +29 -6
- package/harness/bundles/java/claude-code/scripts/harness_deploy.py +1 -1
- package/harness/bundles/java/claude-code/scripts/harness_knowledge_candidates.py +398 -0
- package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-execute/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-package/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-pull/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-push/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-review/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-run/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-test/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/scripts/harness_archive.py +29 -6
- package/harness/bundles/java/codebuddy/scripts/harness_deploy.py +1 -1
- package/harness/bundles/java/codebuddy/scripts/harness_knowledge_candidates.py +398 -0
- package/harness/bundles/java/codex/.harness-build.json +1 -1
- package/harness/bundles/java/codex/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-archive/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-execute/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-package/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-plan/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-pull/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-push/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-review/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-run/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-submit/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-sync/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-test/SKILL.md +1 -1
- package/harness/bundles/java/codex/scripts/harness_archive.py +29 -6
- package/harness/bundles/java/codex/scripts/harness_deploy.py +1 -1
- package/harness/bundles/java/codex/scripts/harness_knowledge_candidates.py +398 -0
- package/harness/bundles/java/cursor/.harness-build.json +1 -1
- package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-archive/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-execute/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-package/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-plan/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-pull/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-push/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-review/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-run/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-submit/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-sync/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-test/SKILL.md +1 -1
- package/harness/bundles/java/cursor/scripts/harness_archive.py +29 -6
- package/harness/bundles/java/cursor/scripts/harness_deploy.py +1 -1
- package/harness/bundles/java/cursor/scripts/harness_knowledge_candidates.py +398 -0
- package/harness/bundles/java/pi/.harness-build.json +6 -0
- package/harness/bundles/java/pi/CONTEXT.md +98 -0
- package/harness/bundles/java/pi/README.md +478 -0
- package/harness/bundles/java/pi/contracts/build-profile-v3.schema.json +302 -0
- package/harness/bundles/java/pi/contracts/ci-metrics.schema.json +36 -0
- package/harness/bundles/java/pi/contracts/doctor-capability.schema.json +43 -0
- package/harness/bundles/java/pi/contracts/external-platform-observation.schema.json +62 -0
- package/harness/bundles/java/pi/contracts/fixtures/managed-execution.json +341 -0
- package/harness/bundles/java/pi/contracts/process-identity.schema.json +132 -0
- package/harness/bundles/java/pi/contracts/run-session.schema.json +142 -0
- package/harness/bundles/java/pi/contracts/service-retirement-receipt.schema.json +85 -0
- package/harness/bundles/java/pi/contracts/service-session.schema.json +147 -0
- package/harness/bundles/java/pi/contracts/workflow-policy.json +574 -0
- package/harness/bundles/java/pi/harness-apidoc/SKILL.md +97 -0
- package/harness/bundles/java/pi/harness-apidoc/checklist.md +142 -0
- package/harness/bundles/java/pi/harness-apidoc/reference.md +233 -0
- package/harness/bundles/java/pi/harness-archive/SKILL.md +322 -0
- package/harness/bundles/java/pi/harness-archive/checklist.md +71 -0
- package/harness/bundles/java/pi/harness-archive/reference.md +150 -0
- package/harness/bundles/java/pi/harness-archive/scripts/gen-manifest.ps1 +31 -0
- package/harness/bundles/java/pi/harness-archive/templates/summary-data-template.json +218 -0
- package/harness/bundles/java/pi/harness-codebase-map/SKILL.md +116 -0
- package/harness/bundles/java/pi/harness-codebase-map/checklist.md +126 -0
- package/harness/bundles/java/pi/harness-codebase-map/reference.md +364 -0
- package/harness/bundles/java/pi/harness-codebase-map/templates/ARCHITECTURE.md +57 -0
- package/harness/bundles/java/pi/harness-codebase-map/templates/CONCERNS.md +49 -0
- package/harness/bundles/java/pi/harness-codebase-map/templates/CONVENTIONS.md +57 -0
- package/harness/bundles/java/pi/harness-codebase-map/templates/INTEGRATIONS.md +52 -0
- package/harness/bundles/java/pi/harness-codebase-map/templates/STACK.md +55 -0
- package/harness/bundles/java/pi/harness-codebase-map/templates/STRUCTURE.md +69 -0
- package/harness/bundles/java/pi/harness-codebase-map/templates/TESTING.md +64 -0
- package/harness/bundles/java/pi/harness-codebase-map/templates/map-manifest.schema.json +73 -0
- package/harness/bundles/java/pi/harness-codebase-map/templates/map-summary.md +64 -0
- package/harness/bundles/java/pi/harness-execute/SKILL.md +170 -0
- package/harness/bundles/java/pi/harness-knowledge-ingest/SKILL.md +103 -0
- package/harness/bundles/java/pi/harness-knowledge-query/SKILL.md +97 -0
- package/harness/bundles/java/pi/harness-package/SKILL.md +94 -0
- package/harness/bundles/java/pi/harness-package/checklist.md +322 -0
- package/harness/bundles/java/pi/harness-package/reference.md +210 -0
- package/harness/bundles/java/pi/harness-plan/SKILL.md +157 -0
- package/harness/bundles/java/pi/harness-plan/checklist.md +243 -0
- package/harness/bundles/java/pi/harness-plan/protocols.md +133 -0
- package/harness/bundles/java/pi/harness-plan/reference.md +468 -0
- package/harness/bundles/java/pi/harness-pull/SKILL.md +55 -0
- package/harness/bundles/java/pi/harness-push/SKILL.md +83 -0
- package/harness/bundles/java/pi/harness-review/SKILL.md +166 -0
- package/harness/bundles/java/pi/harness-review/checklist.md +124 -0
- package/harness/bundles/java/pi/harness-review/protocols.md +69 -0
- package/harness/bundles/java/pi/harness-review/reference.md +114 -0
- package/harness/bundles/java/pi/harness-run/SKILL.md +206 -0
- package/harness/bundles/java/pi/harness-run/checklist.md +252 -0
- package/harness/bundles/java/pi/harness-run/protocols.md +141 -0
- package/harness/bundles/java/pi/harness-run/reference.md +820 -0
- package/harness/bundles/java/pi/harness-submit/SKILL.md +189 -0
- package/harness/bundles/java/pi/harness-submit/checklist.md +452 -0
- package/harness/bundles/java/pi/harness-submit/reference.md +152 -0
- package/harness/bundles/java/pi/harness-sync/SKILL.md +72 -0
- package/harness/bundles/java/pi/harness-sync/reference.md +176 -0
- package/harness/bundles/java/pi/harness-test/SKILL.md +264 -0
- package/harness/bundles/java/pi/harness-test/checklist.md +320 -0
- package/harness/bundles/java/pi/harness-test/pitfalls-java.md +16 -0
- package/harness/bundles/java/pi/harness-test/pitfalls.md +307 -0
- package/harness/bundles/java/pi/harness-test/reference.md +792 -0
- package/harness/bundles/java/pi/harness-test/scripts/runtime-helpers.mjs +216 -0
- package/harness/bundles/java/pi/protocols/archive-report-protocol.md +196 -0
- package/harness/bundles/java/pi/protocols/ci-layering-protocol.md +22 -0
- package/harness/bundles/java/pi/protocols/evidence-based-reporting-protocol.md +134 -0
- package/harness/bundles/java/pi/protocols/execution-session-protocol.md +52 -0
- package/harness/bundles/java/pi/protocols/external-platform-protocol.md +27 -0
- package/harness/bundles/java/pi/protocols/ledger-protocol.md +365 -0
- package/harness/bundles/java/pi/protocols/memory-closeout-protocol.md +21 -0
- package/harness/bundles/java/pi/protocols/model-routing-protocol.md +22 -0
- package/harness/bundles/java/pi/protocols/powershell-protocol.md +238 -0
- package/harness/bundles/java/pi/protocols/registry-governance-protocol.md +31 -0
- package/harness/bundles/java/pi/protocols/report-pipeline-protocol.md +172 -0
- package/harness/bundles/java/pi/protocols/sensitive-info-protocol.md +110 -0
- package/harness/bundles/java/pi/protocols/state-layout-protocol.md +209 -0
- package/harness/bundles/java/pi/protocols/submit-protocol.md +78 -0
- package/harness/bundles/java/pi/protocols/verification-graph-protocol.md +32 -0
- package/harness/bundles/java/pi/scripts/harness_adoption_metrics.py +391 -0
- package/harness/bundles/java/pi/scripts/harness_apidoc.py +53 -0
- package/harness/bundles/java/pi/scripts/harness_archive.py +11345 -0
- package/harness/bundles/java/pi/scripts/harness_change.py +1626 -0
- package/harness/bundles/java/pi/scripts/harness_check_gate.py +113 -0
- package/harness/bundles/java/pi/scripts/harness_context.py +1774 -0
- package/harness/bundles/java/pi/scripts/harness_deploy.py +968 -0
- package/harness/bundles/java/pi/scripts/harness_efficiency.py +443 -0
- package/harness/bundles/java/pi/scripts/harness_environment.py +1690 -0
- package/harness/bundles/java/pi/scripts/harness_events.py +2234 -0
- package/harness/bundles/java/pi/scripts/harness_events_sync.py +1425 -0
- package/harness/bundles/java/pi/scripts/harness_execution_contracts.py +596 -0
- package/harness/bundles/java/pi/scripts/harness_fixback.py +1975 -0
- package/harness/bundles/java/pi/scripts/harness_gate.py +3816 -0
- package/harness/bundles/java/pi/scripts/harness_headless.py +37 -0
- package/harness/bundles/java/pi/scripts/harness_integration.py +2564 -0
- package/harness/bundles/java/pi/scripts/harness_knowledge_candidates.py +796 -0
- package/harness/bundles/java/pi/scripts/harness_ledger.py +3556 -0
- package/harness/bundles/java/pi/scripts/harness_migration_head.py +220 -0
- package/harness/bundles/java/pi/scripts/harness_orchestration.py +344 -0
- package/harness/bundles/java/pi/scripts/harness_paths.py +676 -0
- package/harness/bundles/java/pi/scripts/harness_phase.py +1726 -0
- package/harness/bundles/java/pi/scripts/harness_plan_aggregate.py +249 -0
- package/harness/bundles/java/pi/scripts/harness_plan_finalize.py +1016 -0
- package/harness/bundles/java/pi/scripts/harness_preflight.py +650 -0
- package/harness/bundles/java/pi/scripts/harness_process.py +1065 -0
- package/harness/bundles/java/pi/scripts/harness_profile.py +1817 -0
- package/harness/bundles/java/pi/scripts/harness_report_model.py +442 -0
- package/harness/bundles/java/pi/scripts/harness_retry.py +175 -0
- package/harness/bundles/java/pi/scripts/harness_review.py +631 -0
- package/harness/bundles/java/pi/scripts/harness_runtime.py +2243 -0
- package/harness/bundles/java/pi/scripts/harness_service.py +3355 -0
- package/harness/bundles/java/pi/scripts/harness_state.py +365 -0
- package/harness/bundles/java/pi/scripts/harness_sync.py +407 -0
- package/harness/bundles/java/pi/scripts/harness_test_cleanup.py +175 -0
- package/harness/bundles/java/pi/scripts/harness_test_guard.py +1899 -0
- package/harness/bundles/java/pi/scripts/harness_test_runner.py +1586 -0
- package/harness/bundles/java/pi/scripts/harness_verification.py +593 -0
- package/harness/bundles/java/pi/scripts/harness_workflow_policy.py +266 -0
- package/harness/manifests/general/claude-code.json +17 -17
- package/harness/manifests/general/codebuddy.json +17 -17
- package/harness/manifests/general/codex.json +17 -17
- package/harness/manifests/general/cursor.json +17 -17
- package/harness/manifests/general/pi.json +475 -0
- package/harness/manifests/java/claude-code.json +19 -19
- package/harness/manifests/java/codebuddy.json +19 -19
- package/harness/manifests/java/codex.json +19 -19
- package/harness/manifests/java/cursor.json +19 -19
- package/harness/manifests/java/pi.json +499 -0
- package/hunter-workflow-family.json +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# 容器仓库容量与生命周期治理协议
|
|
2
|
+
|
|
3
|
+
适用于 TCR、GHCR 及其他按标签或版本计数的容器仓库。平台适配器负责读取真实库存和执行受控删除;通用内核只做容量判断、保护集合闭包与 dry-run 计划。
|
|
4
|
+
|
|
5
|
+
## 构建前容量预检
|
|
6
|
+
|
|
7
|
+
每次候选构建前必须提供当前版本数、计划新增数、配额和告警比例。若计划后超过配额,返回 `REGISTRY_VERSION_QUOTA_FULL` 并在构建前阻断;达到告警水位返回 `REGISTRY_VERSION_QUOTA_WARNING`。
|
|
8
|
+
|
|
9
|
+
禁止先构建镜像、再依赖推送失败发现容量不足。
|
|
10
|
+
|
|
11
|
+
## 保护集合
|
|
12
|
+
|
|
13
|
+
保护标签至少包含:
|
|
14
|
+
|
|
15
|
+
- 当前生产与上一生产;
|
|
16
|
+
- 冻结候选、回滚窗口内候选;
|
|
17
|
+
- release/evidence/TAT/smoke 收据引用的标签或 digest;
|
|
18
|
+
- 运维显式 pin。
|
|
19
|
+
|
|
20
|
+
保护标签解析出的 digest 必须加入保护 digest。共享 digest 被任一保护标签引用时,所有指向该 digest 的标签都进入保护集合,不能仅凭另一个标签较旧就删除。
|
|
21
|
+
|
|
22
|
+
## 清理计划与执行
|
|
23
|
+
|
|
24
|
+
1. 先调用 `planRegistryCleanup` 生成 `dryRun=true` 的结构化计划;
|
|
25
|
+
2. 候选按创建时间与标签稳定排序,仅删除达到目标水位所需的最小数量;
|
|
26
|
+
3. 若保护版本数量已超过目标水位,返回 `PROTECTED_VERSIONS_EXCEED_TARGET`,不扩大删除范围;
|
|
27
|
+
4. 平台适配器执行前重新读取库存并核对计划 identity;
|
|
28
|
+
5. 执行后重新查询版本数、受保护 digest 和剩余容量,写入最终收据;
|
|
29
|
+
6. 通用内核不直接持有平台凭据,也不执行删除 API。
|
|
30
|
+
|
|
31
|
+
通用容量与计划内核由 `@hunter-harness/core` 的 `assessRegistryCapacity` 和 `planRegistryCleanup` 提供。
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 结构化事件、summary-data 生成与校验,以及外部可观测性边界协议(finalize/replay)。
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Report Pipeline Protocol
|
|
6
|
+
|
|
7
|
+
## 核心原则
|
|
8
|
+
|
|
9
|
+
最终报告分三层:
|
|
10
|
+
|
|
11
|
+
1. **Event Layer**:`events.ndjson` 记录结构化执行事实。
|
|
12
|
+
2. **Report Data Layer**:`summary-data.json` 由程序或确定性规则生成。
|
|
13
|
+
3. **Platform View Layer**:Hunter Platform 读取 `summary-data.json` 并展示结果,不在本地保存重复报告。
|
|
14
|
+
|
|
15
|
+
模型可以写维护者结论、风险解释和人工判断,但不得凭印象手写统计数字、通过率、耗时、命令结果或 artifact hash。
|
|
16
|
+
|
|
17
|
+
## 标准命令
|
|
18
|
+
|
|
19
|
+
Skill-bundled 脚本(推荐):
|
|
20
|
+
|
|
21
|
+
```powershell
|
|
22
|
+
python <skills-root>/scripts/harness_archive.py execute --change-dir ".harness/changes/<change-name>" --archive-root ".harness/archive" --intent record-only --closure completed --json
|
|
23
|
+
python <skills-root>/scripts/harness_archive.py replay --archive-dir ".harness/archive/YYYY-MM-DD-<change-name>" --json
|
|
24
|
+
python <skills-root>/scripts/harness_events.py append --change-dir ".harness/changes/<change-name>" --phase "<phase>" --type <type> [--note "..."]
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
归档报告流水线的常规入口是 `execute`。它只采集一次状态并复用给内部 finalize;`collect` 与 `validate` 是 finalize 的内嵌同进程步骤,**不作为独立 CLI 暴露**(不存在 `report collect` / `report validate` 子命令)。`summary-data.json` 只能由 finalize(归档时)或 `replay`(回放时)生成;**禁止 agent 临场手写或拼装等价的 `summary-data.json`**。`harness_archive.py` 不可用时归档失败退出,不得退回手写汇总。
|
|
28
|
+
|
|
29
|
+
## events.ndjson
|
|
30
|
+
|
|
31
|
+
**唯一实时日志源**。Harness skill 只向 `events.ndjson` 追加结构化事件;`logs/execution-log.md` 由 `harness_events.py` 渲染,**禁止手工 Edit**。
|
|
32
|
+
|
|
33
|
+
事件文件位置:
|
|
34
|
+
|
|
35
|
+
- 当前变更:`.harness/changes/<change-name>/events.ndjson`
|
|
36
|
+
- 历史归档:`.harness/archive/<archive-name>/events.ndjson`
|
|
37
|
+
|
|
38
|
+
写入方式:
|
|
39
|
+
|
|
40
|
+
```powershell
|
|
41
|
+
python <skills-root>/scripts/harness_events.py append --change-dir ".harness/changes/<change-name>" --phase "<phase>" --type <type> [--note "..."] ...
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
`append` 写入契约(Task 4 §6.1):普通 append = 加锁 -> 追加一行 -> fsync -> 解锁,**不 load 历史、不渲染**(O(1),跨进程锁 `events.ndjson.lock`,UUID 用完整 `uuid4().hex`);仅 `--type phase.end` append 成功后渲染一次 `logs/execution-log.md`;显式 `harness_events.py render` 随时从完整 events 重建;`harness_archive.py finalize` 在 collect 前强制 render 一次。人类可读摘要(触发指令、降级原因、阶段结论)写入事件的 `note` 字段;阶段开始/结束、命令、验证、artifact、问题、决策各写对应 `type` 事件。旧 archive 缺少 events 可回放兼容;新变更不得以 execution-log 已存在为理由跳过 events。
|
|
45
|
+
|
|
46
|
+
**artifact 硬门禁(H-8)**:`--type artifact` **必须**带非空 `--path`(change 相对路径)。知识探索/预览类说明改用 `--type issue` 或 `--type decision`,禁止再用 `--kind informational` 伪装无 path 的 artifact。
|
|
47
|
+
|
|
48
|
+
基础事件结构(schema_version 3;兼容读取 v1/v2):
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
{
|
|
52
|
+
"schema_version": 3,
|
|
53
|
+
"id": "evt-...",
|
|
54
|
+
"timestamp": "2026-07-02T00:00:00.000Z",
|
|
55
|
+
"phase": "run",
|
|
56
|
+
"type": "command",
|
|
57
|
+
"command": "npm test",
|
|
58
|
+
"exit_code": 0,
|
|
59
|
+
"duration_ms": 42100,
|
|
60
|
+
"run_id": "run-...",
|
|
61
|
+
"attempt": 1,
|
|
62
|
+
"executor_tool": "codex",
|
|
63
|
+
"executor_agent": "main",
|
|
64
|
+
"executor_model": "gpt-5",
|
|
65
|
+
"handoff_from_tool": "claude-code",
|
|
66
|
+
"handoff_reason": "continue implementation",
|
|
67
|
+
"note": "可选:触发指令、降级原因、阶段摘要"
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
最低事件类型:
|
|
72
|
+
|
|
73
|
+
| type | 必填/常用字段 | 用途 |
|
|
74
|
+
|---|---|---|
|
|
75
|
+
| `phase.start` | phase, timestamp | 阶段开始 |
|
|
76
|
+
| `phase.end` | phase, timestamp, status | 阶段结束并记录 `OK/WARN/FAIL/BLOCKED`;计算当前 attempt 耗时 |
|
|
77
|
+
| `phase.prepare.start` | phase, timestamp, attempt, trigger | 开始检查再次执行阶段的前置条件;不计入产品阶段 attempt |
|
|
78
|
+
| `phase.prepare.end` | phase, timestamp, attempt, status | 记录准备已启动或受阻及单独耗时;`BLOCKED` 不改变旧产品轮次 |
|
|
79
|
+
| `command` | command, exit_code, duration_ms | 命令事实 |
|
|
80
|
+
| `verification` | name, status, command | 验证事实 |
|
|
81
|
+
| `artifact` | path, kind | 报告、包、manifest 等产物 |
|
|
82
|
+
| `issue` | code, severity, message | 问题和校验发现 |
|
|
83
|
+
| `decision` | decision, reason | 人工确认、跳过、复用等决策 |
|
|
84
|
+
|
|
85
|
+
## 事件语义与必填字段
|
|
86
|
+
|
|
87
|
+
写入 `events.ndjson` 时按用途选 type;渲染侧会对缺失字段做 note 兜底,但写入侧仍应填齐语义字段。
|
|
88
|
+
|
|
89
|
+
| type | 用途 | 必填 | 常见误用 |
|
|
90
|
+
|------|------|------|----------|
|
|
91
|
+
| `issue` | 需要跟进/影响结论的异常 | severity, message | 把信息性结论记成 issue(应使用 decision) |
|
|
92
|
+
| `decision` | 决策/结论/知识引用 | note 或 decision+reason | - |
|
|
93
|
+
| `verification` | 验证执行结果 | name, status | 漏 name 导致 "(unnamed)" |
|
|
94
|
+
| `artifact` | 产物落盘 | path | 只传 note |
|
|
95
|
+
| `command` | 命令执行 | command, exit_code | - |
|
|
96
|
+
|
|
97
|
+
兼容提示(不失败、exit 0):
|
|
98
|
+
|
|
99
|
+
- `--type issue` 未传 `--severity` → 默认 `info` 并在 stderr 提示
|
|
100
|
+
- `--type verification` 未传 `--name` 或 `--status` → stderr 提示,照常写入
|
|
101
|
+
|
|
102
|
+
## summary-data.json
|
|
103
|
+
|
|
104
|
+
summary-data 必须保留原 archive final report 维度,并增加事件层摘要:
|
|
105
|
+
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"schemaVersion": "2.2",
|
|
109
|
+
"reportPipeline": {
|
|
110
|
+
"schema_version": 1,
|
|
111
|
+
"generated_at": "2026-07-02T00:00:00.000Z",
|
|
112
|
+
"event_count": 0,
|
|
113
|
+
"sources": ["events.ndjson", "evidence/verification-ledger.json"],
|
|
114
|
+
"phases": {},
|
|
115
|
+
"commands": [],
|
|
116
|
+
"verificationChecks": [],
|
|
117
|
+
"artifacts": [],
|
|
118
|
+
"validationIssues": []
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
保留字段:
|
|
124
|
+
|
|
125
|
+
- `businessGoal`
|
|
126
|
+
- `finalStatus`
|
|
127
|
+
- `diffStat`
|
|
128
|
+
- `stageStatus`
|
|
129
|
+
- `durations`
|
|
130
|
+
- `skillCalls`
|
|
131
|
+
- `verification`
|
|
132
|
+
- `timeline`
|
|
133
|
+
- `changedFiles`
|
|
134
|
+
- `artifacts`
|
|
135
|
+
- `reviewSummary`
|
|
136
|
+
- `archiveManifest`
|
|
137
|
+
- `uncommittedTestEvidence`
|
|
138
|
+
- `maintenanceNotes`
|
|
139
|
+
- `knownRisks`
|
|
140
|
+
- `manualActions`
|
|
141
|
+
|
|
142
|
+
新增 `reportPipeline` 不替代这些字段;它负责为这些字段提供可追溯的数据来源和一致性校验结果。
|
|
143
|
+
|
|
144
|
+
## execute 与 finalize 责任边界
|
|
145
|
+
|
|
146
|
+
`execute` 负责一次性状态采集、自动门禁、准备耗时事件和对 finalize 的单次调用。常规调用者不得串行执行 `auto-gate`、`status`、`finalize`。finalize 负责正式归档尝试,并复用 execute 传入的预检结果。
|
|
147
|
+
|
|
148
|
+
| 阶段 | 责任 | 写入 |
|
|
149
|
+
|---|---|---|
|
|
150
|
+
| `collect` | 从 events/ledger/log/manifest/report/git evidence 收集事实 | `summary-data.json` |
|
|
151
|
+
| `validate` | 检查 summary-data 的身份、验证状态与事实是否一致 | issues;不得静默忽略 error |
|
|
152
|
+
|
|
153
|
+
> **已废弃**:独立 `enrich` 步骤与 `harness-report` skill;报告生成并入 finalize,常规归档由 `execute` 调用。回放见 `harness_archive.py replay`。
|
|
154
|
+
|
|
155
|
+
`validate` error 存在时,`harness-archive` 不得删除原 changes 目录。
|
|
156
|
+
|
|
157
|
+
## 历史 archive 回放
|
|
158
|
+
|
|
159
|
+
历史 archive 可能没有 `events.ndjson`。此时:
|
|
160
|
+
|
|
161
|
+
- 不把缺少 events 当失败;
|
|
162
|
+
- 从 `verification-ledger.json`、`execution-log.md`、`archive-manifest-*.json`、旧 `summary-data.json` 回放;
|
|
163
|
+
- 在 `reportPipeline.sources` 中标明实际来源;
|
|
164
|
+
- 对无法恢复的字段写 `unknown` / `not_available`,不得编造。
|
|
165
|
+
|
|
166
|
+
## 外部平台边界
|
|
167
|
+
|
|
168
|
+
当前本地流水线不接入 Langfuse、LangSmith、Temporal。
|
|
169
|
+
|
|
170
|
+
- 可保留 `reportPipeline.externalTraceRefs[]` 等扩展字段。
|
|
171
|
+
- 不得要求外部服务可用才允许 archive 成功。
|
|
172
|
+
- 未来接入也必须以 `events.ndjson` 和 `summary-data.json` 为稳定合同,不改变结构化报告的质量维度。
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: harness 全流程的敏感信息脱敏协议。所有 skill 的输出(控制台、execution-log、报告、commit message、summary-data)按本协议脱敏,禁止明文 token/密码/密钥。由原 harness-plan/sensitive-info.md 迁移。
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Sensitive Info Protocol
|
|
6
|
+
|
|
7
|
+
> 本协议适用于所有 harness-skills 的输出(控制台、execution-log.md、package-report、review-report、summary-data.json、commit message)。
|
|
8
|
+
|
|
9
|
+
## 1. 禁止明文输出的信息类型
|
|
10
|
+
|
|
11
|
+
以下信息**不得以明文形式出现在任何输出中**:
|
|
12
|
+
|
|
13
|
+
| 类型 | 示例 |
|
|
14
|
+
|------|------|
|
|
15
|
+
| Token / JWT | `eyJhbGciOi...`、`access_token=xxx` |
|
|
16
|
+
| Authorization header | `Authorization: Bearer xxx` |
|
|
17
|
+
| Cookie | `Cookie: session_id=xxx` |
|
|
18
|
+
| 缓存凭证(如 Redis 密码) | `redis.password=xxx` |
|
|
19
|
+
| 数据库凭证 | `jdbc:mysql://...?password=xxx` |
|
|
20
|
+
| API key | `api_key=xxx`、`X-API-Key: xxx` |
|
|
21
|
+
| Access key / Secret key | `accessKeyId=xxx`、`secretAccessKey=xxx` |
|
|
22
|
+
| Jasypt 加密密钥 | `jasypt.encryptor.password=xxx` |
|
|
23
|
+
| SSO 登录凭据 | `admin / admin123`(仅在开发环境说明中可用占位符) |
|
|
24
|
+
| 任何含 `password`、`secret`、`token`、`key` 的字段值 | — |
|
|
25
|
+
|
|
26
|
+
## 2. 脱敏替换规则
|
|
27
|
+
|
|
28
|
+
如果用户贴出了敏感信息,后续引用时必须替换为以下占位符:
|
|
29
|
+
|
|
30
|
+
| 原始内容 | 替换为 |
|
|
31
|
+
|----------|--------|
|
|
32
|
+
| Token 值 | `<TOKEN_REDACTED>` |
|
|
33
|
+
| 密码值 | `<PASSWORD_REDACTED>` |
|
|
34
|
+
| 密钥值 | `<SECRET_REDACTED>` |
|
|
35
|
+
| API key 值 | `<API_KEY_REDACTED>` |
|
|
36
|
+
| Authorization header 值 | `<AUTH_HEADER_REDACTED>` |
|
|
37
|
+
| Cookie 值 | `<COOKIE_REDACTED>` |
|
|
38
|
+
|
|
39
|
+
> 示例:
|
|
40
|
+
> - 原始:`Authorization: Bearer eyJhbGciOiJIUzI1NiIs...`
|
|
41
|
+
> - 替换:`Authorization: Bearer <TOKEN_REDACTED>`
|
|
42
|
+
|
|
43
|
+
## 3. 禁止写入持久化文件
|
|
44
|
+
|
|
45
|
+
以下文件中**不得包含任何明文敏感信息**:
|
|
46
|
+
|
|
47
|
+
| 文件类型 | 路径示例 |
|
|
48
|
+
|----------|----------|
|
|
49
|
+
| 执行日志 | `.harness/changes/<change-name>/logs/execution-log.md` |
|
|
50
|
+
| 审查报告 | `.harness/changes/<change-name>/reports/review/review-report-*.md` |
|
|
51
|
+
| 测试报告 | `.harness/changes/<change-name>/reports/test/test-report-*.md` |
|
|
52
|
+
| 最终总结数据 | `.harness/archive/YYYY-MM-DD-<change-name>/reports/final/summary-data.json` |
|
|
53
|
+
| 归档元数据 | `.harness/archive/YYYY-MM-DD-<change-name>/meta/archive-meta.md` |
|
|
54
|
+
| Commit message | git log 中的提交信息 |
|
|
55
|
+
|
|
56
|
+
## 4. 命令示例使用占位符
|
|
57
|
+
|
|
58
|
+
如需要给命令示例,使用占位符,不要复述真实值:
|
|
59
|
+
|
|
60
|
+
```text
|
|
61
|
+
# ❌ 禁止:复述真实 token
|
|
62
|
+
curl -H "Authorization: Bearer eyJhbGciOi..." http://localhost:8083/api/...
|
|
63
|
+
|
|
64
|
+
# ✅ 正确:使用占位符
|
|
65
|
+
curl -H "Authorization: Bearer <TOKEN_REDACTED>" http://localhost:8083/api/...
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
```yaml
|
|
69
|
+
# ❌ 禁止:复述真实密码
|
|
70
|
+
spring:
|
|
71
|
+
datasource:
|
|
72
|
+
password: MySecretPass123
|
|
73
|
+
|
|
74
|
+
# ✅ 正确:使用占位符
|
|
75
|
+
spring:
|
|
76
|
+
datasource:
|
|
77
|
+
password: <PASSWORD_REDACTED>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## 5. 开发环境凭据的特殊处理
|
|
81
|
+
|
|
82
|
+
项目默认凭据(如 `admin / admin123`)仅在以下场景允许出现:
|
|
83
|
+
|
|
84
|
+
- 开发环境配置说明中(标注"仅供开发环境使用")
|
|
85
|
+
- 环境检查报告中的状态描述(标注"⚠️ 使用默认开发凭据")
|
|
86
|
+
|
|
87
|
+
但**不得出现在**:
|
|
88
|
+
- execution-log.md
|
|
89
|
+
- commit message
|
|
90
|
+
- API 测试报告的持久化记录中
|
|
91
|
+
|
|
92
|
+
> 对于 API 测试中获取的 token,在测试执行过程中可临时使用(如 Playwright 请求),但测试报告中必须用 `<TOKEN_REDACTED>` 替换。
|
|
93
|
+
|
|
94
|
+
## 6. profile / 规则 / Markdown 凭据扫描
|
|
95
|
+
|
|
96
|
+
> 本节讲的是**写入时**的内容卫生,与上传门禁是两回事。CLI 的发布扫描
|
|
97
|
+
> (`harness-push` / 归档)默认策略是 `warn`:命中项打印后照常上传,用
|
|
98
|
+
> `HUNTER_HARNESS_SENSITIVE_SCAN=block` 才恢复阻断、`=off` 完全关闭。
|
|
99
|
+
> 门禁放行不等于内容可以带明文凭据——本节的要求始终成立。
|
|
100
|
+
|
|
101
|
+
profile `build-profile.json`、规则文档、Skill Markdown **不得包含凭据明文值**(spec §3.4 凭据边界:配置只含 env key、cache path、角色,不含值)。发布前用 `harness-test/scripts/runtime-helpers.mjs` 的 `findCredentialValues(text)` 扫描:
|
|
102
|
+
|
|
103
|
+
- 命中 `password/token/secret/accessKey/Authorization: Bearer/jdbc password=` 等明文值 → ❌FAIL,必须改为占位符 `<*_REDACTED>` 或 env 引用 `${ENV}` / `$ENV`。
|
|
104
|
+
- 占位符 `<TOKEN_REDACTED>` 与 env 引用 `${TEST_TOKEN}` / `$DB_PASSWORD` 不报(credential 配置允许 env key)。
|
|
105
|
+
|
|
106
|
+
```js
|
|
107
|
+
import { findCredentialValues } from '<skills-root>/harness-test/scripts/runtime-helpers.mjs';
|
|
108
|
+
const findings = findCredentialValues(fs.readFileSync('build-profile.json', 'utf8'));
|
|
109
|
+
if (findings.length > 0) { /* ❌FAIL: 列出 line/code/snippet,改为 env key 或占位符 */ }
|
|
110
|
+
```
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: harness .harness 状态目录分层协议。用于减少根目录散乱、统一 archive 前后结构,并兼容旧路径。
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# State Layout Protocol
|
|
6
|
+
|
|
7
|
+
## 升级与本地状态保护边界
|
|
8
|
+
|
|
9
|
+
`.harness/archive/`、`.harness/changes/` 是 protected local roots。CLI init/configure/refresh/rules 操作前必须:
|
|
10
|
+
|
|
11
|
+
1. 综合 project marker、adapter `.harness-build.json`、managed block、恢复事务和非空 `.harness` 判断 `absent / valid / partial / recovery-required`;
|
|
12
|
+
2. 对 protected roots 记录文件数、目录数、字节数、Merkle root,以及 archive 首末 identity;
|
|
13
|
+
3. 事务 journal 声明每个允许修改的路径;任何未声明的 protected-root mutation 立即回滚;
|
|
14
|
+
4. partial 或 recovery-required 状态 fail closed,输出 sentinels、inventory 与恢复指引,禁止当成空项目自动 init。
|
|
15
|
+
|
|
16
|
+
事务提交前后 protected inventory 必须一致;除非当前命令显式以该 protected root 为操作目标。删除 `project.yaml` 但保留 archive,或删除 `.harness` 但保留 adapter marker,均属于 partial state,不是首次安装。
|
|
17
|
+
|
|
18
|
+
## 目标
|
|
19
|
+
|
|
20
|
+
`.harness/changes/<change-name>/` 是变更状态真相源,但根目录不得继续堆放所有文件。新产物按子目录分层;旧路径保留读取兼容。
|
|
21
|
+
|
|
22
|
+
## 双根布局(split-v1,2026-07 起)
|
|
23
|
+
|
|
24
|
+
新 Change 将**静态合同**与**动态运行状态**分离到两个唯一所有者:
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
.harness/changes/<change-name>/ # contractRoot:静态合同(spec/plans/meta)
|
|
28
|
+
.harness/state/changes/<change-name>/ # stateRoot:动态状态(events/logs/ledger/tracking/reports/runtime)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
- 合同由 `meta/change-context.json` 的 `stateOwnership.contractRoot` / `stateOwnership.runtimeRoot` 声明(schemaVersion 2)。
|
|
32
|
+
- 动态产物(`events.ndjson`、`logs/execution-log.md`、`evidence/verification-ledger.json`、`evidence/test-tracking.json`、reports、runtime)只写 stateRoot。
|
|
33
|
+
- 统一解析入口:`harness_paths.py` —— `resolve_change_layout()` 返回完整双根;`resolve_state_dir_for_contract()` 供 events/ledger/test_guard/gate 内部路由。
|
|
34
|
+
- **legacy-colocated**:未声明 `stateOwnership` 的旧 Change 继续读写共址布局;resolve 只读,**绝不静默搬迁**;显式迁移须 copy → hash verify → atomic pointer switch。
|
|
35
|
+
- 功能分支不得携带共享动态状态副本;checkpoint/archive 的 evidence snapshot 从 stateRoot 生成。
|
|
36
|
+
|
|
37
|
+
## 推荐结构
|
|
38
|
+
|
|
39
|
+
```text
|
|
40
|
+
.harness/changes/<change-name>/
|
|
41
|
+
├── meta/
|
|
42
|
+
│ ├── change-context.json
|
|
43
|
+
│ ├── worktree.json
|
|
44
|
+
│ ├── manifest.json
|
|
45
|
+
│ └── archive-meta.md
|
|
46
|
+
├── logs/
|
|
47
|
+
│ └── execution-log.md
|
|
48
|
+
├── spec/
|
|
49
|
+
├── plans/
|
|
50
|
+
├── evidence/
|
|
51
|
+
│ ├── verification-ledger.json
|
|
52
|
+
│ └── run-task-status.md
|
|
53
|
+
├── reports/
|
|
54
|
+
│ ├── test/
|
|
55
|
+
│ ├── review/
|
|
56
|
+
│ ├── package/
|
|
57
|
+
│ └── final/
|
|
58
|
+
│ └── summary-data.json
|
|
59
|
+
├── sqls/
|
|
60
|
+
├── scripts/
|
|
61
|
+
├── runtime/
|
|
62
|
+
│ ├── service-session.json
|
|
63
|
+
│ ├── run-sessions/<session-id>/
|
|
64
|
+
│ │ ├── session.json
|
|
65
|
+
│ │ ├── stdout.log
|
|
66
|
+
│ │ └── stderr.log
|
|
67
|
+
│ ├── environment-receipts/
|
|
68
|
+
│ ├── invalidations/
|
|
69
|
+
│ └── fixback/batches/
|
|
70
|
+
└── backups/
|
|
71
|
+
└── uncommitted-tests/
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## service-session.json 与 serviceStart 契约
|
|
75
|
+
|
|
76
|
+
`runtime/service-session.json`(由 `harness_service.py ensure` 写入)记录 AI 托管服务会话:`pid`、`startedBy`(`AI`/`User`)、`moduleInputsHash`、`moduleInputsFiles`、`profile`、`startCommandHash`、`overlayPath`、`command`、`startedAt`。
|
|
77
|
+
|
|
78
|
+
服务复用(§5.3)必须**同时**比对 `moduleInputsHash` + `startCommandHash` + `profile` + `overlayPath` + 进程身份(pid 存活 + create time 匹配 `startedAt`)。任一变化 -> AI 自动 restart;身份无法确认 -> `needs-user-decision`;非 AI 用户进程永不自动 kill。
|
|
79
|
+
|
|
80
|
+
`build-profile.json` 的 `serviceStart.inputFiles`(glob 列表,相对 project 展开)是 `moduleInputsHash` 的来源。`harness_service.py ensure` 取 CLI `--files` ∪ `serviceStart.inputFiles` 计算依赖闭包;**空输入被拒绝**(exit 非 0),**不得生成可复用的空指纹**。通用项目 detect 无法猜 module 源,`inputFiles` 默认空数组,须人工配置。
|
|
81
|
+
|
|
82
|
+
过期的 service session 只有在进程身份明确不匹配时才允许由 `retire-stale` 移入
|
|
83
|
+
`runtime/retired-service-sessions/`;该动作保留原始回执且不终止进程。受管命令、
|
|
84
|
+
环境会话和 fixback 的完整合同见 `execution-session-protocol.md`。
|
|
85
|
+
|
|
86
|
+
## 归档上传重试状态(§8)
|
|
87
|
+
|
|
88
|
+
知识 ingest 由 Hunter Platform 在接收归档 ZIP 后执行,本地不再创建 `.harness/knowledge`
|
|
89
|
+
或 maintenance-outbox。尚未被服务端确认持久化的包保存在:
|
|
90
|
+
|
|
91
|
+
```text
|
|
92
|
+
.harness/state/local/archive-packages/
|
|
93
|
+
<change-key>.zip # 确定性核心归档包
|
|
94
|
+
<change-key>.upload.json # 上传/失败收据(如存在)
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
ZIP 只包含 summary、spec、plans、archive-meta、change-context 和包 manifest。上传失败保留;
|
|
98
|
+
每次 finalize 都先生成 ZIP 与对应回执,再按 `credentials.local.yaml` 或
|
|
99
|
+
`project.yaml` 的 `server.url` + `server.token_env` 环境变量解析远端凭据。缺少凭据、
|
|
100
|
+
网络失败、无效收据或知识状态为 `indexing`/`failed` 时均保留这两个按 change 命名的文件,
|
|
101
|
+
因此可枚举 `*.upload.json` 独立重试,不会由后一次归档覆盖前一次。只有 CLI 已核对
|
|
102
|
+
package SHA-256,且服务端同时确认 `archive_status=durable` 与
|
|
103
|
+
`knowledge_status=ready` 时,才清理对应 ZIP 和回执。回执的 `uploadStatus` 为
|
|
104
|
+
`pending|failed|ready`,`reasonCode` 使用 `ARCHIVE_UPLOAD_*` 或
|
|
105
|
+
`ARCHIVE_KNOWLEDGE_*` 稳定错误码;`indexing` 必须映射为 `pending`,不得误报失败。
|
|
106
|
+
远端知识查询失败不得创建本地 fallback。
|
|
107
|
+
|
|
108
|
+
## 读取兼容
|
|
109
|
+
|
|
110
|
+
所有 skill 读取状态时必须先读新路径,再兼容旧路径:
|
|
111
|
+
|
|
112
|
+
| 类型 | 新路径 | 旧路径兼容 |
|
|
113
|
+
|---|---|---|
|
|
114
|
+
| execution log | `logs/execution-log.md` | `execution-log.md` |
|
|
115
|
+
| ledger | `evidence/verification-ledger.json` | `verification-ledger.json` |
|
|
116
|
+
| worktree | `meta/worktree.json` | `worktree.json` |
|
|
117
|
+
| run status | `evidence/run-task-status.md` | `run-task-status.md` |
|
|
118
|
+
| final summary data | `reports/final/summary-data.json` | `summary-data.json` |
|
|
119
|
+
|
|
120
|
+
## 写入规则
|
|
121
|
+
|
|
122
|
+
新版本 skill 默认写新路径。为平滑迁移,允许同时在旧路径写一个简短指针文件,但不得再把大量产物堆在根目录。
|
|
123
|
+
|
|
124
|
+
## change-context.json
|
|
125
|
+
|
|
126
|
+
每个变更目录建议尽早写入:
|
|
127
|
+
|
|
128
|
+
```json
|
|
129
|
+
{
|
|
130
|
+
"changeName": "<change-name>",
|
|
131
|
+
"stateDir": ".harness/changes/<change-name>",
|
|
132
|
+
"logsDir": ".harness/changes/<change-name>/logs",
|
|
133
|
+
"evidenceDir": ".harness/changes/<change-name>/evidence",
|
|
134
|
+
"reportsDir": ".harness/changes/<change-name>/reports",
|
|
135
|
+
"scriptsDir": ".harness/changes/<change-name>/scripts",
|
|
136
|
+
"archiveTarget": ".harness/archive/YYYY-MM-DD-<change-name>"
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
后续阶段应优先从该文件读取路径,避免手拼 change-name 导致路径拼写错误。
|
|
141
|
+
|
|
142
|
+
## state-snapshot.json(cluster 3 §3.6)
|
|
143
|
+
|
|
144
|
+
`meta/state-snapshot.json`(由 `harness_state.py` 写入)集中记录 project/worktree root、不可变 `changeBase`、当前 HEAD,以及 profile/rules/map/knowledge/diff 各段指纹与相关文件。Plan 首次捕获把当时 HEAD 写入 `changeBase`;run/test/review/submit/archive 刷新时只能更新当前 HEAD 和各段指纹。失效时由脚本刷新,**不得仅凭缓存跳过代码或验证门禁,也不得把后续 HEAD 覆盖为变更基线**。
|
|
145
|
+
|
|
146
|
+
schema:
|
|
147
|
+
|
|
148
|
+
```json
|
|
149
|
+
{
|
|
150
|
+
"schemaVersion": 1,
|
|
151
|
+
"generatedAt": "<iso>",
|
|
152
|
+
"changeName": "<change-name>",
|
|
153
|
+
"changeBase": "<首次 Plan 捕获的 sha>",
|
|
154
|
+
"project": {"root": "<abs>"},
|
|
155
|
+
"worktree": {"root": "<abs>"},
|
|
156
|
+
"git": {"base": "<sha>", "head": "<sha>"},
|
|
157
|
+
"segments": {
|
|
158
|
+
"<segment>": {"fingerprint": "sha256:...", "files": ["..."], "capturedAt": "<iso>"}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
各段独立失效:`is_segment_stale(snapshot, segment, current_fingerprint)` 比较单段指纹;段不存在 → stale(需采集)。`refresh_segments(..., segments=["profile"])` 只重采受影响段,其他段保留原 capturedAt/fingerprint(缓存失效只重采受影响段)。`git.base` 是 `changeBase` 的兼容镜像,不是每次 capture 的 HEAD。
|
|
164
|
+
|
|
165
|
+
segment 的文件集由调用方(各 skill)决定:`capture_snapshot(..., segment_files={"profile": [...], "rules": [...]})`。snapshot 只负责采集 + 比对 + 失效,不负责发现文件。git 段记录 base/head;diff 段指纹由调用方按需用 `harness_ledger.compute_diff_hash` 采集后填入 segment_files。
|
|
166
|
+
|
|
167
|
+
## archive 结构
|
|
168
|
+
|
|
169
|
+
archive 后保持同样分层结构,不把 `.bak`、脚本、manifest 或其他生成文件堆在 archive 根目录。
|
|
170
|
+
|
|
171
|
+
未提交但用于验证的测试文件放入:
|
|
172
|
+
|
|
173
|
+
```text
|
|
174
|
+
backups/uncommitted-tests/
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
并在 `summary-data.json.uncommittedTestEvidence[]` 中说明。
|
|
178
|
+
|
|
179
|
+
## 项目配置:`.harness/config/harness.json`
|
|
180
|
+
|
|
181
|
+
Harness skill 读取的项目级配置(不提交 git)。缺失时使用下列默认值,**不得因缺失而阻断流程**——记 `decision` 事件说明使用了默认值。
|
|
182
|
+
|
|
183
|
+
```json
|
|
184
|
+
{
|
|
185
|
+
"defaultWorktree": false,
|
|
186
|
+
"knowledge": {
|
|
187
|
+
"manualReview": false
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
| 字段 | 类型 | 默认 | 用途 |
|
|
193
|
+
|------|------|------|------|
|
|
194
|
+
| `defaultWorktree` | boolean | `false` | plan「设计审批包」中 worktree 推荐的预填值;用户可在审批包内覆盖 |
|
|
195
|
+
| `knowledge.manualReview` | boolean | `false` | `true` 时 knowledge-ingest promote 等高价值操作需人工确认;`false` 时按 skill 默认策略 |
|
|
196
|
+
|
|
197
|
+
读取顺序:`.harness/config/harness.json` → 缺失则默认值。plan 阶段 5 设计审批包须读取 `defaultWorktree` 作为 worktree 选项的推荐值。
|
|
198
|
+
|
|
199
|
+
## 可恢复文件事务
|
|
200
|
+
|
|
201
|
+
schema v3 事务在本地 `transactions/<transaction-id>/` 保存 journal、before snapshot、staged payload、after manifest 和小型 status 投影。journal 固定 project identity、执行器版本、目标 Bundle identity、ownership manifest hash、plan hash 与 snapshot digest。
|
|
202
|
+
|
|
203
|
+
未完成事务同时镜像到用户级恢复根:
|
|
204
|
+
|
|
205
|
+
```text
|
|
206
|
+
${HUNTER_HARNESS_RECOVERY_ROOT:-~/.hunter-harness/recovery}/<project-path-hash>/transactions/<transaction-id>/
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
因此项目内 `.harness` 局部丢失后,`status` 仍可只读发现恢复项。`resume` 仅在 plan/snapshot/staged digest 与已完成操作的当前文件状态全部匹配时继续 pending operations;任一不匹配均 fail closed。`rollback` 在写回 before snapshot 前重新校验 snapshot digest。事务提交或回滚成功后删除用户级镜像;本地 committed 事务仍按保留策略提供显式回滚。
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: harness-submit 的确定性提交协议。用于避免 blocking user confirmation 参数错误、中文 commit message 失败、Co-Authored-By 违规和先 commit 后 amend。
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Submit Protocol
|
|
6
|
+
|
|
7
|
+
## 交互模板固定化
|
|
8
|
+
|
|
9
|
+
提交方式选择必须使用固定选项,不临场拼复杂参数:
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
请选择提交方式:
|
|
13
|
+
1. commit + push 到当前 upstream
|
|
14
|
+
2. 仅本地 commit,不 push
|
|
15
|
+
3. 取消提交
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
commit message 确认必须展示:staged 文件、diff stat、完整 commit message、是否 push。
|
|
19
|
+
用户未明确确认前不得 commit。
|
|
20
|
+
|
|
21
|
+
## commit message 文件流程
|
|
22
|
+
|
|
23
|
+
中文 commit message 永远写入临时文件,再用 `git commit -F`:
|
|
24
|
+
|
|
25
|
+
```powershell
|
|
26
|
+
powershell.exe -NoProfile -Command "git -C '<项目路径>' commit -F '.harness/changes/<change>/runtime/commit-message.txt'"
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
禁止:
|
|
30
|
+
|
|
31
|
+
- 命令行内联长中文 message;
|
|
32
|
+
- 先英文 commit 再 `git commit --amend` 成中文;
|
|
33
|
+
- 使用 `--no-verify` / `--no-gpg-sign`;
|
|
34
|
+
- 生成 `Co-Authored-By`、`Generated by`、`AI generated` 等 footer。
|
|
35
|
+
|
|
36
|
+
## commit message 内容
|
|
37
|
+
|
|
38
|
+
格式:
|
|
39
|
+
|
|
40
|
+
```text
|
|
41
|
+
<type>(<scope>): <中文摘要>
|
|
42
|
+
|
|
43
|
+
- 变更点 1
|
|
44
|
+
- 变更点 2
|
|
45
|
+
|
|
46
|
+
验证:
|
|
47
|
+
- <复用 ledger 或重跑验证摘要>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
footer 默认为空。确需 issue footer 时必须由用户明确要求。
|
|
51
|
+
|
|
52
|
+
## 远端检查
|
|
53
|
+
|
|
54
|
+
push 前必须:
|
|
55
|
+
|
|
56
|
+
```powershell
|
|
57
|
+
powershell.exe -NoProfile -Command "git -C '<项目路径>' fetch"
|
|
58
|
+
powershell.exe -NoProfile -Command "git -C '<项目路径>' log HEAD..@{u} --oneline"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
远端有新提交时,不得直接 push。必须让用户选择:rebase 后重验 / 停止 push。
|
|
62
|
+
|
|
63
|
+
## 提交状态映射
|
|
64
|
+
|
|
65
|
+
submit 阶段的最终状态必须按以下映射落到三态标记,与 `evidence-based-reporting-protocol.md` 的 Git 操作状态对齐。不得用"提交成功"这类模糊表述,必须带状态标记和具体原因。
|
|
66
|
+
|
|
67
|
+
| 提交结果 | 状态标记 | 报告表述 |
|
|
68
|
+
|----------|:--------:|----------|
|
|
69
|
+
| commit 成功且 push 成功(git push 输出含 `To <remote>` + 实际推送范围) | ✅OK | ✅OK 已提交并推送:commit `<hash>`,push 到 `<upstream>` |
|
|
70
|
+
| 远端有新提交需 pull/rebase 后重验,或用户选择仅本地 commit 不 push | 🟡WARN(原因) | 🟡WARN(仅本地 commit,未 push) / 🟡WARN(远端有新提交,需 rebase 后重验) |
|
|
71
|
+
| push 失败 / 被远端拒绝 / commit 失败 / pre-commit hook 拒绝 / exit code 非 0 | ❌FAIL(原因) | ❌FAIL(push 失败:`<原因>`) / ❌FAIL(commit 失败:`<原因>`) / ❌FAIL(hook 拒绝:`<原因>`) |
|
|
72
|
+
|
|
73
|
+
说明:
|
|
74
|
+
|
|
75
|
+
- **✅OK** 必须同时具备 commit 与 push 的成功证据;仅本地 commit 成功不算 ✅OK。
|
|
76
|
+
- **🟡WARN** 是"提交动作完成但未达到完整推送"的中间态:用户主动选择仅本地 commit,或远端领先需 rebase。必须在原因中写明是"用户选择仅本地"还是"远端领先"。
|
|
77
|
+
- **❌FAIL** 涵盖所有硬失败:push 被拒绝(含非 fast-forward 未处理)、commit 命令失败、hook 拒绝。出现时不得宣称"已提交",必须停止并请求用户介入。
|
|
78
|
+
- 与 `evidence-based-reporting-protocol.md` 的 Git 操作状态映射一致:`To <remote>` + 推送范围 → ✅;无输出/状态未知 → ❌;被 hook 拒绝 → ❌。
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# 能力感知验证图协议
|
|
2
|
+
|
|
3
|
+
Build Profile v3 用 `verificationGraph` 取代账本内的固定验证目标清单。项目可以声明后端、前端、浏览器、数据库、性能或发布候选等任意目标,同时保留统一的依赖、覆盖度和证据复用语义。
|
|
4
|
+
|
|
5
|
+
## 目标合同
|
|
6
|
+
|
|
7
|
+
每个目标必须声明:
|
|
8
|
+
|
|
9
|
+
- `commandKey`:指向 `commands` 中的真实命令;
|
|
10
|
+
- `dependsOn`:需要先完成的验证目标;
|
|
11
|
+
- `requiredCoverage`:`incremental/module-am/module`;
|
|
12
|
+
- `candidate`:是否为发布候选门禁;
|
|
13
|
+
- `requiredCapabilities`:执行环境必须具备的能力。
|
|
14
|
+
- `resourceLocks`:目标独占或共享的数据库、端口、浏览器、容器等资源身份;
|
|
15
|
+
- `estimatedDurationSeconds`:供默认串行策略和进度显示使用,不作为虚构 ETA 的依据;
|
|
16
|
+
- `reusePolicy`:允许复用时必须匹配的产品、环境、命令与覆盖身份。
|
|
17
|
+
|
|
18
|
+
`candidateTarget` 必须引用已声明目标。未知目标、未知依赖、循环依赖、命令缺失都 fail closed。
|
|
19
|
+
|
|
20
|
+
## 选择与执行
|
|
21
|
+
|
|
22
|
+
1. 从显式请求目标开始;未显式请求时使用 `candidateTarget`。
|
|
23
|
+
2. 展开完整依赖闭包并按拓扑顺序执行。
|
|
24
|
+
3. 缺失能力不得静默跳过:目标记录 `CAPABILITY_MISSING`,依赖它的目标记录 `DEPENDENCY_BLOCKED`。
|
|
25
|
+
4. 未进入闭包的目标是 `omitted`,与“执行失败”或“因能力阻断”分开报告。
|
|
26
|
+
5. 账本记录目标定义的规范化 identity;依赖、覆盖度或能力声明变化后,旧证据必须失效。
|
|
27
|
+
6. 候选目标即使自身命令可运行,也必须等待所有依赖和能力满足。
|
|
28
|
+
7. ready 目标按 `resourceLocks` 分 wave;锁相交的目标不得并行。预计 ≥60 秒且未声明锁的目标默认归入 `harness:unclassified-heavy` 串行队列。
|
|
29
|
+
8. code freeze 后产品 identity 漂移必须返回 `FROZEN_IDENTITY_DRIFT`;禁止在旧候选上补跑后声称覆盖新候选。
|
|
30
|
+
9. 每个 `RUN / REUSE / SKIP / BLOCKED` 决策都必须带稳定 `reasonCode` 和解释;`REUSE` 还必须绑定现有证据 identity。
|
|
31
|
+
|
|
32
|
+
JSON 合同见 `contracts/build-profile-v3.schema.json`;通用选择器为 `@hunter-harness/core` 的 `selectVerificationTargets`。
|