@hunter-harness/workflow-harness 0.2.43 → 0.2.44
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/contracts/build-profile-v3.schema.json +100 -0
- package/harness/bundles/general/claude-code/contracts/fixtures/managed-execution.json +341 -0
- package/harness/bundles/general/claude-code/contracts/process-identity.schema.json +132 -0
- package/harness/bundles/general/claude-code/contracts/run-session.schema.json +142 -0
- package/harness/bundles/general/claude-code/contracts/service-retirement-receipt.schema.json +85 -0
- package/harness/bundles/general/claude-code/contracts/service-session.schema.json +147 -0
- 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-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-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-submit/checklist.md +12 -0
- 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 +267 -22
- package/harness/bundles/general/claude-code/scripts/harness_change.py +137 -2
- package/harness/bundles/general/claude-code/scripts/harness_efficiency.py +153 -0
- package/harness/bundles/general/claude-code/scripts/harness_environment.py +55 -25
- package/harness/bundles/general/claude-code/scripts/harness_execution_contracts.py +596 -0
- package/harness/bundles/general/claude-code/scripts/harness_integration.py +289 -52
- package/harness/bundles/general/claude-code/scripts/harness_ledger.py +5 -0
- package/harness/bundles/general/claude-code/scripts/harness_orchestration.py +344 -0
- package/harness/bundles/general/claude-code/scripts/harness_process.py +1065 -0
- package/harness/bundles/general/claude-code/scripts/harness_profile.py +244 -4
- package/harness/bundles/general/claude-code/scripts/harness_runtime.py +543 -132
- package/harness/bundles/general/claude-code/scripts/harness_service.py +1469 -194
- package/harness/bundles/general/claude-code/scripts/harness_test_runner.py +107 -117
- package/harness/bundles/general/claude-code/scripts/harness_verification.py +79 -0
- package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/general/codebuddy/contracts/build-profile-v3.schema.json +100 -0
- package/harness/bundles/general/codebuddy/contracts/fixtures/managed-execution.json +341 -0
- package/harness/bundles/general/codebuddy/contracts/process-identity.schema.json +132 -0
- package/harness/bundles/general/codebuddy/contracts/run-session.schema.json +142 -0
- package/harness/bundles/general/codebuddy/contracts/service-retirement-receipt.schema.json +85 -0
- package/harness/bundles/general/codebuddy/contracts/service-session.schema.json +147 -0
- 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-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-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-submit/checklist.md +12 -0
- 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 +267 -22
- package/harness/bundles/general/codebuddy/scripts/harness_change.py +137 -2
- package/harness/bundles/general/codebuddy/scripts/harness_efficiency.py +153 -0
- package/harness/bundles/general/codebuddy/scripts/harness_environment.py +55 -25
- package/harness/bundles/general/codebuddy/scripts/harness_execution_contracts.py +596 -0
- package/harness/bundles/general/codebuddy/scripts/harness_integration.py +289 -52
- package/harness/bundles/general/codebuddy/scripts/harness_ledger.py +5 -0
- package/harness/bundles/general/codebuddy/scripts/harness_orchestration.py +344 -0
- package/harness/bundles/general/codebuddy/scripts/harness_process.py +1065 -0
- package/harness/bundles/general/codebuddy/scripts/harness_profile.py +244 -4
- package/harness/bundles/general/codebuddy/scripts/harness_runtime.py +543 -132
- package/harness/bundles/general/codebuddy/scripts/harness_service.py +1469 -194
- package/harness/bundles/general/codebuddy/scripts/harness_test_runner.py +107 -117
- package/harness/bundles/general/codebuddy/scripts/harness_verification.py +79 -0
- package/harness/bundles/general/codex/.harness-build.json +1 -1
- package/harness/bundles/general/codex/contracts/build-profile-v3.schema.json +100 -0
- package/harness/bundles/general/codex/contracts/fixtures/managed-execution.json +341 -0
- package/harness/bundles/general/codex/contracts/process-identity.schema.json +132 -0
- package/harness/bundles/general/codex/contracts/run-session.schema.json +142 -0
- package/harness/bundles/general/codex/contracts/service-retirement-receipt.schema.json +85 -0
- package/harness/bundles/general/codex/contracts/service-session.schema.json +147 -0
- 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-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-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-submit/checklist.md +12 -0
- 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 +267 -22
- package/harness/bundles/general/codex/scripts/harness_change.py +137 -2
- package/harness/bundles/general/codex/scripts/harness_efficiency.py +153 -0
- package/harness/bundles/general/codex/scripts/harness_environment.py +55 -25
- package/harness/bundles/general/codex/scripts/harness_execution_contracts.py +596 -0
- package/harness/bundles/general/codex/scripts/harness_integration.py +289 -52
- package/harness/bundles/general/codex/scripts/harness_ledger.py +5 -0
- package/harness/bundles/general/codex/scripts/harness_orchestration.py +344 -0
- package/harness/bundles/general/codex/scripts/harness_process.py +1065 -0
- package/harness/bundles/general/codex/scripts/harness_profile.py +244 -4
- package/harness/bundles/general/codex/scripts/harness_runtime.py +543 -132
- package/harness/bundles/general/codex/scripts/harness_service.py +1469 -194
- package/harness/bundles/general/codex/scripts/harness_test_runner.py +107 -117
- package/harness/bundles/general/codex/scripts/harness_verification.py +79 -0
- package/harness/bundles/general/cursor/.harness-build.json +1 -1
- package/harness/bundles/general/cursor/contracts/build-profile-v3.schema.json +100 -0
- package/harness/bundles/general/cursor/contracts/fixtures/managed-execution.json +341 -0
- package/harness/bundles/general/cursor/contracts/process-identity.schema.json +132 -0
- package/harness/bundles/general/cursor/contracts/run-session.schema.json +142 -0
- package/harness/bundles/general/cursor/contracts/service-retirement-receipt.schema.json +85 -0
- package/harness/bundles/general/cursor/contracts/service-session.schema.json +147 -0
- 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-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-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-submit/checklist.md +12 -0
- 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 +267 -22
- package/harness/bundles/general/cursor/scripts/harness_change.py +137 -2
- package/harness/bundles/general/cursor/scripts/harness_efficiency.py +153 -0
- package/harness/bundles/general/cursor/scripts/harness_environment.py +55 -25
- package/harness/bundles/general/cursor/scripts/harness_execution_contracts.py +596 -0
- package/harness/bundles/general/cursor/scripts/harness_integration.py +289 -52
- package/harness/bundles/general/cursor/scripts/harness_ledger.py +5 -0
- package/harness/bundles/general/cursor/scripts/harness_orchestration.py +344 -0
- package/harness/bundles/general/cursor/scripts/harness_process.py +1065 -0
- package/harness/bundles/general/cursor/scripts/harness_profile.py +244 -4
- package/harness/bundles/general/cursor/scripts/harness_runtime.py +543 -132
- package/harness/bundles/general/cursor/scripts/harness_service.py +1469 -194
- package/harness/bundles/general/cursor/scripts/harness_test_runner.py +107 -117
- package/harness/bundles/general/cursor/scripts/harness_verification.py +79 -0
- package/harness/bundles/java/claude-code/.harness-build.json +1 -1
- package/harness/bundles/java/claude-code/contracts/build-profile-v3.schema.json +100 -0
- package/harness/bundles/java/claude-code/contracts/fixtures/managed-execution.json +341 -0
- package/harness/bundles/java/claude-code/contracts/process-identity.schema.json +132 -0
- package/harness/bundles/java/claude-code/contracts/run-session.schema.json +142 -0
- package/harness/bundles/java/claude-code/contracts/service-retirement-receipt.schema.json +85 -0
- package/harness/bundles/java/claude-code/contracts/service-session.schema.json +147 -0
- 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-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-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-submit/checklist.md +12 -0
- 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 +267 -22
- package/harness/bundles/java/claude-code/scripts/harness_change.py +137 -2
- package/harness/bundles/java/claude-code/scripts/harness_efficiency.py +153 -0
- package/harness/bundles/java/claude-code/scripts/harness_environment.py +55 -25
- package/harness/bundles/java/claude-code/scripts/harness_execution_contracts.py +596 -0
- package/harness/bundles/java/claude-code/scripts/harness_integration.py +289 -52
- package/harness/bundles/java/claude-code/scripts/harness_ledger.py +5 -0
- package/harness/bundles/java/claude-code/scripts/harness_orchestration.py +344 -0
- package/harness/bundles/java/claude-code/scripts/harness_process.py +1065 -0
- package/harness/bundles/java/claude-code/scripts/harness_profile.py +244 -4
- package/harness/bundles/java/claude-code/scripts/harness_runtime.py +543 -132
- package/harness/bundles/java/claude-code/scripts/harness_service.py +1469 -194
- package/harness/bundles/java/claude-code/scripts/harness_test_runner.py +107 -117
- package/harness/bundles/java/claude-code/scripts/harness_verification.py +79 -0
- package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/java/codebuddy/contracts/build-profile-v3.schema.json +100 -0
- package/harness/bundles/java/codebuddy/contracts/fixtures/managed-execution.json +341 -0
- package/harness/bundles/java/codebuddy/contracts/process-identity.schema.json +132 -0
- package/harness/bundles/java/codebuddy/contracts/run-session.schema.json +142 -0
- package/harness/bundles/java/codebuddy/contracts/service-retirement-receipt.schema.json +85 -0
- package/harness/bundles/java/codebuddy/contracts/service-session.schema.json +147 -0
- 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-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-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-submit/checklist.md +12 -0
- 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 +267 -22
- package/harness/bundles/java/codebuddy/scripts/harness_change.py +137 -2
- package/harness/bundles/java/codebuddy/scripts/harness_efficiency.py +153 -0
- package/harness/bundles/java/codebuddy/scripts/harness_environment.py +55 -25
- package/harness/bundles/java/codebuddy/scripts/harness_execution_contracts.py +596 -0
- package/harness/bundles/java/codebuddy/scripts/harness_integration.py +289 -52
- package/harness/bundles/java/codebuddy/scripts/harness_ledger.py +5 -0
- package/harness/bundles/java/codebuddy/scripts/harness_orchestration.py +344 -0
- package/harness/bundles/java/codebuddy/scripts/harness_process.py +1065 -0
- package/harness/bundles/java/codebuddy/scripts/harness_profile.py +244 -4
- package/harness/bundles/java/codebuddy/scripts/harness_runtime.py +543 -132
- package/harness/bundles/java/codebuddy/scripts/harness_service.py +1469 -194
- package/harness/bundles/java/codebuddy/scripts/harness_test_runner.py +107 -117
- package/harness/bundles/java/codebuddy/scripts/harness_verification.py +79 -0
- package/harness/bundles/java/codex/.harness-build.json +1 -1
- package/harness/bundles/java/codex/contracts/build-profile-v3.schema.json +100 -0
- package/harness/bundles/java/codex/contracts/fixtures/managed-execution.json +341 -0
- package/harness/bundles/java/codex/contracts/process-identity.schema.json +132 -0
- package/harness/bundles/java/codex/contracts/run-session.schema.json +142 -0
- package/harness/bundles/java/codex/contracts/service-retirement-receipt.schema.json +85 -0
- package/harness/bundles/java/codex/contracts/service-session.schema.json +147 -0
- 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-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-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-submit/checklist.md +12 -0
- 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 +267 -22
- package/harness/bundles/java/codex/scripts/harness_change.py +137 -2
- package/harness/bundles/java/codex/scripts/harness_efficiency.py +153 -0
- package/harness/bundles/java/codex/scripts/harness_environment.py +55 -25
- package/harness/bundles/java/codex/scripts/harness_execution_contracts.py +596 -0
- package/harness/bundles/java/codex/scripts/harness_integration.py +289 -52
- package/harness/bundles/java/codex/scripts/harness_ledger.py +5 -0
- package/harness/bundles/java/codex/scripts/harness_orchestration.py +344 -0
- package/harness/bundles/java/codex/scripts/harness_process.py +1065 -0
- package/harness/bundles/java/codex/scripts/harness_profile.py +244 -4
- package/harness/bundles/java/codex/scripts/harness_runtime.py +543 -132
- package/harness/bundles/java/codex/scripts/harness_service.py +1469 -194
- package/harness/bundles/java/codex/scripts/harness_test_runner.py +107 -117
- package/harness/bundles/java/codex/scripts/harness_verification.py +79 -0
- package/harness/bundles/java/cursor/.harness-build.json +1 -1
- package/harness/bundles/java/cursor/contracts/build-profile-v3.schema.json +100 -0
- package/harness/bundles/java/cursor/contracts/fixtures/managed-execution.json +341 -0
- package/harness/bundles/java/cursor/contracts/process-identity.schema.json +132 -0
- package/harness/bundles/java/cursor/contracts/run-session.schema.json +142 -0
- package/harness/bundles/java/cursor/contracts/service-retirement-receipt.schema.json +85 -0
- package/harness/bundles/java/cursor/contracts/service-session.schema.json +147 -0
- 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-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-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-submit/checklist.md +12 -0
- 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 +267 -22
- package/harness/bundles/java/cursor/scripts/harness_change.py +137 -2
- package/harness/bundles/java/cursor/scripts/harness_efficiency.py +153 -0
- package/harness/bundles/java/cursor/scripts/harness_environment.py +55 -25
- package/harness/bundles/java/cursor/scripts/harness_execution_contracts.py +596 -0
- package/harness/bundles/java/cursor/scripts/harness_integration.py +289 -52
- package/harness/bundles/java/cursor/scripts/harness_ledger.py +5 -0
- package/harness/bundles/java/cursor/scripts/harness_orchestration.py +344 -0
- package/harness/bundles/java/cursor/scripts/harness_process.py +1065 -0
- package/harness/bundles/java/cursor/scripts/harness_profile.py +244 -4
- package/harness/bundles/java/cursor/scripts/harness_runtime.py +543 -132
- package/harness/bundles/java/cursor/scripts/harness_service.py +1469 -194
- package/harness/bundles/java/cursor/scripts/harness_test_runner.py +107 -117
- package/harness/bundles/java/cursor/scripts/harness_verification.py +79 -0
- package/harness/manifests/general/claude-code.json +58 -26
- package/harness/manifests/general/codebuddy.json +58 -26
- package/harness/manifests/general/codex.json +58 -26
- package/harness/manifests/general/cursor.json +58 -26
- package/harness/manifests/java/claude-code.json +60 -28
- package/harness/manifests/java/codebuddy.json +60 -28
- package/harness/manifests/java/codex.json +60 -28
- package/harness/manifests/java/cursor.json +60 -28
- package/hunter-workflow-family.json +4 -4
- package/package.json +1 -1
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://hunter-harness.dev/contracts/run-session.schema.json",
|
|
4
|
+
"title": "Hunter Harness managed run session",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"sessionId",
|
|
10
|
+
"status",
|
|
11
|
+
"reasonCode",
|
|
12
|
+
"exitCode",
|
|
13
|
+
"processIdentity",
|
|
14
|
+
"heartbeat",
|
|
15
|
+
"logs",
|
|
16
|
+
"cleanup",
|
|
17
|
+
"resultDigest"
|
|
18
|
+
],
|
|
19
|
+
"properties": {
|
|
20
|
+
"schemaVersion": { "const": 1 },
|
|
21
|
+
"sessionId": { "type": "string", "minLength": 1 },
|
|
22
|
+
"status": {
|
|
23
|
+
"enum": [
|
|
24
|
+
"PREPARING",
|
|
25
|
+
"STARTING",
|
|
26
|
+
"RUNNING",
|
|
27
|
+
"FINALIZING",
|
|
28
|
+
"OK",
|
|
29
|
+
"FAIL",
|
|
30
|
+
"CANCELLED",
|
|
31
|
+
"INCOMPLETE"
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
"reasonCode": { "$ref": "#/$defs/reasonCode" },
|
|
35
|
+
"exitCode": { "type": ["integer", "null"] },
|
|
36
|
+
"processIdentity": { "type": ["object", "null"] },
|
|
37
|
+
"heartbeat": {
|
|
38
|
+
"oneOf": [
|
|
39
|
+
{ "type": "null" },
|
|
40
|
+
{ "$ref": "#/$defs/heartbeat" }
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
"logs": {
|
|
44
|
+
"type": "object",
|
|
45
|
+
"additionalProperties": false,
|
|
46
|
+
"required": ["stdout", "stderr"],
|
|
47
|
+
"properties": {
|
|
48
|
+
"stdout": { "$ref": "#/$defs/logStream" },
|
|
49
|
+
"stderr": { "$ref": "#/$defs/logStream" }
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"cleanup": {
|
|
53
|
+
"type": "object",
|
|
54
|
+
"additionalProperties": false,
|
|
55
|
+
"required": ["complete", "reasonCode"],
|
|
56
|
+
"properties": {
|
|
57
|
+
"complete": { "type": "boolean" },
|
|
58
|
+
"reasonCode": {
|
|
59
|
+
"oneOf": [
|
|
60
|
+
{ "$ref": "#/$defs/reasonCode" },
|
|
61
|
+
{ "type": "null" }
|
|
62
|
+
]
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"resultDigest": {
|
|
67
|
+
"oneOf": [
|
|
68
|
+
{ "$ref": "#/$defs/digest" },
|
|
69
|
+
{ "type": "null" }
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"allOf": [
|
|
74
|
+
{
|
|
75
|
+
"if": {
|
|
76
|
+
"properties": { "status": { "enum": ["OK", "FAIL"] } },
|
|
77
|
+
"required": ["status"]
|
|
78
|
+
},
|
|
79
|
+
"then": {
|
|
80
|
+
"properties": {
|
|
81
|
+
"exitCode": { "type": "integer" },
|
|
82
|
+
"resultDigest": { "$ref": "#/$defs/digest" }
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"if": {
|
|
88
|
+
"properties": { "status": { "const": "INCOMPLETE" } },
|
|
89
|
+
"required": ["status"]
|
|
90
|
+
},
|
|
91
|
+
"then": {
|
|
92
|
+
"properties": {
|
|
93
|
+
"exitCode": { "type": "null" },
|
|
94
|
+
"resultDigest": { "$ref": "#/$defs/digest" }
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
],
|
|
99
|
+
"$defs": {
|
|
100
|
+
"digest": {
|
|
101
|
+
"type": "string",
|
|
102
|
+
"pattern": "^sha256:[0-9a-f]{64}$"
|
|
103
|
+
},
|
|
104
|
+
"reasonCode": {
|
|
105
|
+
"type": "string",
|
|
106
|
+
"minLength": 1
|
|
107
|
+
},
|
|
108
|
+
"heartbeat": {
|
|
109
|
+
"type": "object",
|
|
110
|
+
"additionalProperties": false,
|
|
111
|
+
"required": [
|
|
112
|
+
"kind",
|
|
113
|
+
"writerIdentity",
|
|
114
|
+
"lastSeenAt",
|
|
115
|
+
"ttlSeconds",
|
|
116
|
+
"staleReason"
|
|
117
|
+
],
|
|
118
|
+
"properties": {
|
|
119
|
+
"kind": { "enum": ["WORKER", "SUPERVISOR", "OBSERVER"] },
|
|
120
|
+
"writerIdentity": { "$ref": "#/$defs/digest" },
|
|
121
|
+
"lastSeenAt": { "type": "string", "minLength": 1 },
|
|
122
|
+
"ttlSeconds": { "type": "integer", "minimum": 1 },
|
|
123
|
+
"staleReason": {
|
|
124
|
+
"oneOf": [
|
|
125
|
+
{ "$ref": "#/$defs/reasonCode" },
|
|
126
|
+
{ "type": "null" }
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
"logStream": {
|
|
132
|
+
"type": "object",
|
|
133
|
+
"additionalProperties": false,
|
|
134
|
+
"required": ["cursor", "rawDigest", "decodeStatus"],
|
|
135
|
+
"properties": {
|
|
136
|
+
"cursor": { "type": "integer", "minimum": 0 },
|
|
137
|
+
"rawDigest": { "$ref": "#/$defs/digest" },
|
|
138
|
+
"decodeStatus": { "enum": ["OK", "LOG_DECODE_DEGRADED"] }
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://hunter-harness.dev/contracts/service-retirement-receipt.schema.json",
|
|
4
|
+
"title": "Hunter Harness service retirement receipt",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"receiptId",
|
|
10
|
+
"operationId",
|
|
11
|
+
"serviceId",
|
|
12
|
+
"oldSessionId",
|
|
13
|
+
"oldGeneration",
|
|
14
|
+
"state",
|
|
15
|
+
"retirementStateCommit",
|
|
16
|
+
"leaseCleanup",
|
|
17
|
+
"cleanupComplete",
|
|
18
|
+
"awaitingSuperseder",
|
|
19
|
+
"supersededBySessionId",
|
|
20
|
+
"receiptDigest"
|
|
21
|
+
],
|
|
22
|
+
"properties": {
|
|
23
|
+
"schemaVersion": { "const": 1 },
|
|
24
|
+
"receiptId": { "type": "string", "minLength": 1 },
|
|
25
|
+
"operationId": { "type": "string", "minLength": 1 },
|
|
26
|
+
"serviceId": { "type": "string", "minLength": 1 },
|
|
27
|
+
"oldSessionId": { "type": "string", "minLength": 1 },
|
|
28
|
+
"oldGeneration": { "type": "integer", "minimum": 1 },
|
|
29
|
+
"state": { "enum": ["PENDING", "FINALIZED"] },
|
|
30
|
+
"retirementStateCommit": {
|
|
31
|
+
"type": "object",
|
|
32
|
+
"additionalProperties": false,
|
|
33
|
+
"required": ["status", "reasonCode"],
|
|
34
|
+
"properties": {
|
|
35
|
+
"status": { "enum": ["PENDING", "COMMITTED", "CONFLICT"] },
|
|
36
|
+
"reasonCode": { "type": "string", "minLength": 1 }
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"leaseCleanup": {
|
|
40
|
+
"type": "object",
|
|
41
|
+
"additionalProperties": false,
|
|
42
|
+
"required": ["status", "reasonCode", "leaseId"],
|
|
43
|
+
"properties": {
|
|
44
|
+
"status": { "enum": ["PENDING", "RELEASED", "RETAINED", "UNVERIFIED"] },
|
|
45
|
+
"reasonCode": { "type": "string", "minLength": 1 },
|
|
46
|
+
"leaseId": { "type": ["string", "null"], "minLength": 1 }
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"cleanupComplete": { "type": "boolean" },
|
|
50
|
+
"awaitingSuperseder": { "type": "boolean" },
|
|
51
|
+
"supersededBySessionId": { "type": ["string", "null"], "minLength": 1 },
|
|
52
|
+
"receiptDigest": {
|
|
53
|
+
"type": "string",
|
|
54
|
+
"pattern": "^sha256:[0-9a-f]{64}$"
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"allOf": [
|
|
58
|
+
{
|
|
59
|
+
"if": {
|
|
60
|
+
"properties": {
|
|
61
|
+
"leaseCleanup": {
|
|
62
|
+
"properties": { "status": { "const": "RELEASED" } },
|
|
63
|
+
"required": ["status"]
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"required": ["leaseCleanup"]
|
|
67
|
+
},
|
|
68
|
+
"then": {
|
|
69
|
+
"properties": { "cleanupComplete": { "const": true } }
|
|
70
|
+
},
|
|
71
|
+
"else": {
|
|
72
|
+
"properties": { "cleanupComplete": { "const": false } }
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"if": {
|
|
77
|
+
"properties": { "awaitingSuperseder": { "const": true } },
|
|
78
|
+
"required": ["awaitingSuperseder"]
|
|
79
|
+
},
|
|
80
|
+
"then": {
|
|
81
|
+
"properties": { "supersededBySessionId": { "type": "null" } }
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://hunter-harness.dev/contracts/service-session.schema.json",
|
|
4
|
+
"title": "Hunter Harness managed service session",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"serviceId",
|
|
10
|
+
"sessionId",
|
|
11
|
+
"status",
|
|
12
|
+
"reasonCode",
|
|
13
|
+
"serviceGeneration",
|
|
14
|
+
"stateRevision",
|
|
15
|
+
"operationId",
|
|
16
|
+
"fingerprint",
|
|
17
|
+
"processIdentity",
|
|
18
|
+
"heartbeat",
|
|
19
|
+
"leaseIdentity",
|
|
20
|
+
"transitionHistory",
|
|
21
|
+
"cleanupComplete",
|
|
22
|
+
"supersedesSessionId"
|
|
23
|
+
],
|
|
24
|
+
"properties": {
|
|
25
|
+
"schemaVersion": { "const": 1 },
|
|
26
|
+
"serviceId": { "type": "string", "minLength": 1 },
|
|
27
|
+
"sessionId": { "type": "string", "minLength": 1 },
|
|
28
|
+
"status": {
|
|
29
|
+
"enum": [
|
|
30
|
+
"STARTING",
|
|
31
|
+
"READY",
|
|
32
|
+
"STOPPING",
|
|
33
|
+
"STOPPED",
|
|
34
|
+
"FAILED",
|
|
35
|
+
"STALE_IDENTITY_MISMATCH",
|
|
36
|
+
"RETIRED"
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
"reasonCode": { "type": "string", "minLength": 1 },
|
|
40
|
+
"serviceGeneration": { "type": "integer", "minimum": 1 },
|
|
41
|
+
"stateRevision": { "type": "integer", "minimum": 1 },
|
|
42
|
+
"operationId": { "type": "string", "minLength": 1 },
|
|
43
|
+
"fingerprint": { "$ref": "#/$defs/digest" },
|
|
44
|
+
"processIdentity": { "type": ["object", "null"] },
|
|
45
|
+
"heartbeat": {
|
|
46
|
+
"oneOf": [
|
|
47
|
+
{ "type": "null" },
|
|
48
|
+
{
|
|
49
|
+
"type": "object",
|
|
50
|
+
"additionalProperties": false,
|
|
51
|
+
"required": [
|
|
52
|
+
"kind",
|
|
53
|
+
"writerIdentity",
|
|
54
|
+
"generation",
|
|
55
|
+
"lastSeenAt",
|
|
56
|
+
"ttlSeconds",
|
|
57
|
+
"staleReason"
|
|
58
|
+
],
|
|
59
|
+
"properties": {
|
|
60
|
+
"kind": { "enum": ["SUPERVISOR", "OBSERVER"] },
|
|
61
|
+
"writerIdentity": { "$ref": "#/$defs/digest" },
|
|
62
|
+
"generation": { "type": "integer", "minimum": 1 },
|
|
63
|
+
"lastSeenAt": { "type": "string", "minLength": 1 },
|
|
64
|
+
"ttlSeconds": { "type": "integer", "minimum": 1 },
|
|
65
|
+
"staleReason": { "type": ["string", "null"] }
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
},
|
|
70
|
+
"leaseIdentity": {
|
|
71
|
+
"oneOf": [
|
|
72
|
+
{ "type": "null" },
|
|
73
|
+
{
|
|
74
|
+
"type": "object",
|
|
75
|
+
"additionalProperties": false,
|
|
76
|
+
"required": [
|
|
77
|
+
"leaseId",
|
|
78
|
+
"changeId",
|
|
79
|
+
"runId",
|
|
80
|
+
"expiresAt",
|
|
81
|
+
"generation"
|
|
82
|
+
],
|
|
83
|
+
"properties": {
|
|
84
|
+
"leaseId": { "type": "string", "minLength": 1 },
|
|
85
|
+
"changeId": { "type": "string", "minLength": 1 },
|
|
86
|
+
"runId": { "type": "string", "minLength": 1 },
|
|
87
|
+
"expiresAt": { "type": "string", "minLength": 1 },
|
|
88
|
+
"generation": { "type": "integer", "minimum": 1 },
|
|
89
|
+
"listenerIdentity": { "type": "object" }
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
"transitionHistory": {
|
|
95
|
+
"type": "array",
|
|
96
|
+
"items": {
|
|
97
|
+
"type": "object",
|
|
98
|
+
"additionalProperties": false,
|
|
99
|
+
"required": ["from", "to", "reasonCode", "revision"],
|
|
100
|
+
"properties": {
|
|
101
|
+
"from": {
|
|
102
|
+
"type": ["string", "null"]
|
|
103
|
+
},
|
|
104
|
+
"to": { "type": "string", "minLength": 1 },
|
|
105
|
+
"reasonCode": { "type": "string", "minLength": 1 },
|
|
106
|
+
"revision": { "type": "integer", "minimum": 1 },
|
|
107
|
+
"operationId": { "type": "string", "minLength": 1 },
|
|
108
|
+
"at": { "type": "string", "minLength": 1 }
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
"cleanupComplete": { "type": "boolean" },
|
|
113
|
+
"supersedesSessionId": { "type": ["string", "null"], "minLength": 1 },
|
|
114
|
+
"pid": { "type": "integer", "minimum": 1 },
|
|
115
|
+
"startedBy": { "type": "string", "minLength": 1 },
|
|
116
|
+
"moduleInputsHash": { "$ref": "#/$defs/digest" },
|
|
117
|
+
"moduleInputsFiles": { "type": "array", "items": { "type": "string" } },
|
|
118
|
+
"profile": { "type": "string", "minLength": 1 },
|
|
119
|
+
"startCommandHash": { "$ref": "#/$defs/digest" },
|
|
120
|
+
"overlayPath": { "type": "string" },
|
|
121
|
+
"startedAt": { "type": "string", "minLength": 1 },
|
|
122
|
+
"command": { "type": "string" },
|
|
123
|
+
"argv": { "type": "array", "items": { "type": "string" } },
|
|
124
|
+
"ownedPorts": {
|
|
125
|
+
"type": "array",
|
|
126
|
+
"items": { "type": "integer", "minimum": 1, "maximum": 65535 }
|
|
127
|
+
},
|
|
128
|
+
"processAttestation": { "type": "object" },
|
|
129
|
+
"ownershipProof": { "type": "object" },
|
|
130
|
+
"servicePid": { "type": "integer", "minimum": 1 },
|
|
131
|
+
"jobId": { "type": "string", "minLength": 1 },
|
|
132
|
+
"leasedPort": { "type": "integer", "minimum": 1, "maximum": 65535 },
|
|
133
|
+
"leaseOwner": { "type": ["string", "null"] },
|
|
134
|
+
"worktreeRoot": { "type": "string", "minLength": 1 },
|
|
135
|
+
"executionRoot": { "type": "string", "minLength": 1 },
|
|
136
|
+
"changeId": { "type": "string", "minLength": 1 },
|
|
137
|
+
"attemptId": { "type": "string", "minLength": 1 },
|
|
138
|
+
"instanceTokenHash": { "$ref": "#/$defs/digest" },
|
|
139
|
+
"identityCompleteness": { "type": "string", "minLength": 1 }
|
|
140
|
+
},
|
|
141
|
+
"$defs": {
|
|
142
|
+
"digest": {
|
|
143
|
+
"type": "string",
|
|
144
|
+
"pattern": "^sha256:[0-9a-f]{64}$"
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
@@ -20,7 +20,7 @@ disallowed-tools:
|
|
|
20
20
|
- Bash(awk *)
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
---
|
|
23
|
-
<!-- generated by harness_deploy.py; core=
|
|
23
|
+
<!-- generated by harness_deploy.py; core=367eb27020f2b966; overlay=none; agent=claude-code; do not edit -->
|
|
24
24
|
# harness-archive — 变更归档
|
|
25
25
|
|
|
26
26
|
## Purpose
|
|
@@ -20,7 +20,7 @@ disallowed-tools:
|
|
|
20
20
|
- Bash(awk *)
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
---
|
|
23
|
-
<!-- generated by harness_deploy.py; core=
|
|
23
|
+
<!-- generated by harness_deploy.py; core=367eb27020f2b966; overlay=none; agent=claude-code; do not edit -->
|
|
24
24
|
# harness-codebase-map — 代码库地图
|
|
25
25
|
|
|
26
26
|
## Purpose
|
|
@@ -20,7 +20,7 @@ disallowed-tools:
|
|
|
20
20
|
- Bash(awk *)
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
---
|
|
23
|
-
<!-- generated by harness_deploy.py; core=
|
|
23
|
+
<!-- generated by harness_deploy.py; core=367eb27020f2b966; overlay=none; agent=claude-code; do not edit -->
|
|
24
24
|
# harness-knowledge-ingest
|
|
25
25
|
|
|
26
26
|
从 `.harness/archive/**/reports/final/summary-data.json` 抽取项目知识,生成并维护本地 `.harness/knowledge/` 索引。
|
|
@@ -20,7 +20,7 @@ disallowed-tools:
|
|
|
20
20
|
- Bash(awk *)
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
---
|
|
23
|
-
<!-- generated by harness_deploy.py; core=
|
|
23
|
+
<!-- generated by harness_deploy.py; core=367eb27020f2b966; overlay=none; agent=claude-code; do not edit -->
|
|
24
24
|
# harness-knowledge-query
|
|
25
25
|
|
|
26
26
|
并行 change 中查询必须传 `--change <change-id>`;成功后以该 change 的 `meta/knowledge-context.json` 为稳定指针。全局 `context-packs/latest.json` 仅向后兼容,不得用于判断多个 active change 的上下文归属。
|
|
@@ -20,7 +20,7 @@ disallowed-tools:
|
|
|
20
20
|
- Bash(awk *)
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
---
|
|
23
|
-
<!-- generated by harness_deploy.py; core=
|
|
23
|
+
<!-- generated by harness_deploy.py; core=367eb27020f2b966; overlay=none; agent=claude-code; do not edit -->
|
|
24
24
|
# harness-plan — 需求规划
|
|
25
25
|
|
|
26
26
|
## Purpose
|
|
@@ -21,7 +21,7 @@ disallowed-tools:
|
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
- Bash(codegraph *)
|
|
23
23
|
---
|
|
24
|
-
<!-- generated by harness_deploy.py; core=
|
|
24
|
+
<!-- generated by harness_deploy.py; core=367eb27020f2b966; overlay=none; agent=claude-code; do not edit -->
|
|
25
25
|
# harness-review — 代码审查
|
|
26
26
|
|
|
27
27
|
## Purpose
|
|
@@ -21,7 +21,7 @@ disallowed-tools:
|
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
- Bash(codegraph *)
|
|
23
23
|
---
|
|
24
|
-
<!-- generated by harness_deploy.py; core=
|
|
24
|
+
<!-- generated by harness_deploy.py; core=367eb27020f2b966; overlay=none; agent=claude-code; do not edit -->
|
|
25
25
|
# harness-run — 需求编码
|
|
26
26
|
|
|
27
27
|
## Purpose
|
|
@@ -20,7 +20,7 @@ disallowed-tools:
|
|
|
20
20
|
- Bash(awk *)
|
|
21
21
|
- Bash(curl *)
|
|
22
22
|
---
|
|
23
|
-
<!-- generated by harness_deploy.py; core=
|
|
23
|
+
<!-- generated by harness_deploy.py; core=367eb27020f2b966; overlay=none; agent=claude-code; do not edit -->
|
|
24
24
|
# harness-submit — 最终提交(含 worktree 合并)
|
|
25
25
|
|
|
26
26
|
## Purpose
|
|
@@ -389,6 +389,18 @@ python harness/scripts/harness_integration.py push --change <change-name> --run-
|
|
|
389
389
|
|
|
390
390
|
远端基线漂移 → `TARGET_MOVED` 结构化失败,不继续。成功后 journal `pushedHead` 即 `mergeFinalHash`。
|
|
391
391
|
|
|
392
|
+
若远端已确认 mergeCommit,但包装事务名与证据所属 Change 不同,导致
|
|
393
|
+
`LEDGER_SYNC_PENDING / LEDGER_MISSING`,必须显式指定真实证据归属后恢复:
|
|
394
|
+
|
|
395
|
+
```powershell
|
|
396
|
+
python harness/scripts/harness_integration.py recover --change <transaction-change> --evidence-change <evidence-change> --run-id <run-id> --feature-branch harness/<transaction-change> --target-branch <主分支> --temp-root <task-temp>
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
该覆盖只允许修复“默认同名台账缺失”的远端已确认事务;一旦 journal 已绑定证据
|
|
400
|
+
Change,后续传入不同值会 fail closed。目标台账的既有三项集成哈希必须精确匹配
|
|
401
|
+
本事务基线(或已匹配本次 mergeCommit),作为前序集成交接身份;禁止为包装事务
|
|
402
|
+
伪造空台账或覆盖其他历史 Change 的集成哈希。
|
|
403
|
+
|
|
392
404
|
### 步骤 M6:cleanup
|
|
393
405
|
|
|
394
406
|
```powershell
|
|
@@ -19,7 +19,7 @@ disallowed-tools:
|
|
|
19
19
|
- Bash(awk *)
|
|
20
20
|
- Bash(curl *)
|
|
21
21
|
---
|
|
22
|
-
<!-- generated by harness_deploy.py; core=
|
|
22
|
+
<!-- generated by harness_deploy.py; core=367eb27020f2b966; overlay=none; agent=claude-code; do not edit -->
|
|
23
23
|
# harness-sync
|
|
24
24
|
|
|
25
25
|
## Purpose
|
|
@@ -22,7 +22,7 @@ disallowed-tools:
|
|
|
22
22
|
- Bash(node *)
|
|
23
23
|
- Bash(codegraph *)
|
|
24
24
|
---
|
|
25
|
-
<!-- generated by harness_deploy.py; core=
|
|
25
|
+
<!-- generated by harness_deploy.py; core=367eb27020f2b966; overlay=none; agent=claude-code; do not edit -->
|
|
26
26
|
# harness-test — 测试执行
|
|
27
27
|
|
|
28
28
|
## Purpose
|