@hunter-harness/workflow-harness 0.2.8 → 0.2.10
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/workflow-policy.json +3 -3
- package/harness/bundles/general/claude-code/harness-archive/SKILL.md +3 -3
- package/harness/bundles/general/claude-code/harness-archive/reference.md +30 -12
- package/harness/bundles/general/claude-code/harness-archive/templates/render-summary.mjs +5 -1
- package/harness/bundles/general/claude-code/harness-archive/templates/summary-data-template.json +6 -2
- package/harness/bundles/general/claude-code/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-knowledge-ingest/SKILL.md +3 -1
- package/harness/bundles/general/claude-code/harness-knowledge-ingest/reference.md +7 -0
- package/harness/bundles/general/claude-code/harness-knowledge-ingest/scripts/harness_knowledge.py +117 -0
- 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-plan/checklist.md +6 -0
- package/harness/bundles/general/claude-code/harness-review/SKILL.md +3 -3
- package/harness/bundles/general/claude-code/harness-run/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-run/checklist.md +5 -0
- package/harness/bundles/general/claude-code/harness-run/reference.md +33 -1
- package/harness/bundles/general/claude-code/harness-submit/SKILL.md +15 -10
- package/harness/bundles/general/claude-code/harness-submit/checklist.md +40 -76
- package/harness/bundles/general/claude-code/harness-sync/SKILL.md +17 -2
- package/harness/bundles/general/claude-code/harness-sync/reference.md +2 -2
- package/harness/bundles/general/claude-code/harness-test/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-test/checklist.md +9 -0
- package/harness/bundles/general/claude-code/harness-test/pitfalls-java.md +14 -0
- package/harness/bundles/general/claude-code/harness-test/reference.md +38 -0
- package/harness/bundles/general/claude-code/protocols/archive-report-protocol.md +26 -4
- package/harness/bundles/general/claude-code/protocols/ledger-protocol.md +38 -0
- package/harness/bundles/general/claude-code/protocols/powershell-protocol.md +16 -0
- package/harness/bundles/general/claude-code/protocols/report-pipeline-protocol.md +17 -0
- package/harness/bundles/general/claude-code/protocols/state-layout-protocol.md +15 -0
- package/harness/bundles/general/claude-code/scripts/harness_archive.py +1209 -170
- package/harness/bundles/general/claude-code/scripts/harness_change.py +18 -0
- package/harness/bundles/general/claude-code/scripts/harness_deploy.py +1 -44
- package/harness/bundles/general/claude-code/scripts/harness_events.py +174 -25
- package/harness/bundles/general/claude-code/scripts/harness_gate.py +203 -29
- package/harness/bundles/general/claude-code/scripts/harness_integration.py +878 -0
- package/harness/bundles/general/claude-code/scripts/harness_ledger.py +457 -10
- package/harness/bundles/general/claude-code/scripts/harness_paths.py +315 -0
- package/harness/bundles/general/claude-code/scripts/harness_profile.py +45 -0
- package/harness/bundles/general/claude-code/scripts/harness_review.py +326 -0
- package/harness/bundles/general/claude-code/scripts/harness_sync.py +407 -0
- package/harness/bundles/general/claude-code/scripts/harness_test_guard.py +244 -49
- package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/general/codebuddy/contracts/workflow-policy.json +3 -3
- package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +3 -3
- package/harness/bundles/general/codebuddy/harness-archive/reference.md +30 -12
- package/harness/bundles/general/codebuddy/harness-archive/templates/render-summary.mjs +5 -1
- package/harness/bundles/general/codebuddy/harness-archive/templates/summary-data-template.json +6 -2
- package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +3 -1
- package/harness/bundles/general/codebuddy/harness-knowledge-ingest/reference.md +7 -0
- package/harness/bundles/general/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge.py +117 -0
- 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-plan/checklist.md +6 -0
- package/harness/bundles/general/codebuddy/harness-review/SKILL.md +3 -3
- package/harness/bundles/general/codebuddy/harness-run/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-run/checklist.md +5 -0
- package/harness/bundles/general/codebuddy/harness-run/reference.md +33 -1
- package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +15 -10
- package/harness/bundles/general/codebuddy/harness-submit/checklist.md +40 -76
- package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +17 -2
- package/harness/bundles/general/codebuddy/harness-sync/reference.md +2 -2
- package/harness/bundles/general/codebuddy/harness-test/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-test/checklist.md +9 -0
- package/harness/bundles/general/codebuddy/harness-test/pitfalls-java.md +14 -0
- package/harness/bundles/general/codebuddy/harness-test/reference.md +38 -0
- package/harness/bundles/general/codebuddy/protocols/archive-report-protocol.md +26 -4
- package/harness/bundles/general/codebuddy/protocols/ledger-protocol.md +38 -0
- package/harness/bundles/general/codebuddy/protocols/powershell-protocol.md +16 -0
- package/harness/bundles/general/codebuddy/protocols/report-pipeline-protocol.md +17 -0
- package/harness/bundles/general/codebuddy/protocols/state-layout-protocol.md +15 -0
- package/harness/bundles/general/codebuddy/scripts/harness_archive.py +1209 -170
- package/harness/bundles/general/codebuddy/scripts/harness_change.py +18 -0
- package/harness/bundles/general/codebuddy/scripts/harness_deploy.py +1 -44
- package/harness/bundles/general/codebuddy/scripts/harness_events.py +174 -25
- package/harness/bundles/general/codebuddy/scripts/harness_gate.py +203 -29
- package/harness/bundles/general/codebuddy/scripts/harness_integration.py +878 -0
- package/harness/bundles/general/codebuddy/scripts/harness_ledger.py +457 -10
- package/harness/bundles/general/codebuddy/scripts/harness_paths.py +315 -0
- package/harness/bundles/general/codebuddy/scripts/harness_profile.py +45 -0
- package/harness/bundles/general/codebuddy/scripts/harness_review.py +326 -0
- package/harness/bundles/general/codebuddy/scripts/harness_sync.py +407 -0
- package/harness/bundles/general/codebuddy/scripts/harness_test_guard.py +244 -49
- package/harness/bundles/general/codex/.harness-build.json +1 -1
- package/harness/bundles/general/codex/contracts/workflow-policy.json +3 -3
- package/harness/bundles/general/codex/harness-archive/SKILL.md +3 -3
- package/harness/bundles/general/codex/harness-archive/reference.md +30 -12
- package/harness/bundles/general/codex/harness-archive/templates/render-summary.mjs +5 -1
- package/harness/bundles/general/codex/harness-archive/templates/summary-data-template.json +6 -2
- package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +3 -1
- package/harness/bundles/general/codex/harness-knowledge-ingest/reference.md +7 -0
- package/harness/bundles/general/codex/harness-knowledge-ingest/scripts/harness_knowledge.py +117 -0
- 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-plan/checklist.md +6 -0
- 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-run/checklist.md +5 -0
- package/harness/bundles/general/codex/harness-run/reference.md +33 -1
- package/harness/bundles/general/codex/harness-submit/SKILL.md +15 -10
- package/harness/bundles/general/codex/harness-submit/checklist.md +40 -76
- package/harness/bundles/general/codex/harness-sync/SKILL.md +17 -2
- package/harness/bundles/general/codex/harness-sync/reference.md +2 -2
- package/harness/bundles/general/codex/harness-test/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-test/checklist.md +9 -0
- package/harness/bundles/general/codex/harness-test/pitfalls-java.md +14 -0
- package/harness/bundles/general/codex/harness-test/reference.md +38 -0
- package/harness/bundles/general/codex/protocols/archive-report-protocol.md +26 -4
- package/harness/bundles/general/codex/protocols/ledger-protocol.md +38 -0
- package/harness/bundles/general/codex/protocols/powershell-protocol.md +16 -0
- package/harness/bundles/general/codex/protocols/report-pipeline-protocol.md +17 -0
- package/harness/bundles/general/codex/protocols/state-layout-protocol.md +15 -0
- package/harness/bundles/general/codex/scripts/harness_archive.py +1209 -170
- package/harness/bundles/general/codex/scripts/harness_change.py +18 -0
- package/harness/bundles/general/codex/scripts/harness_deploy.py +1 -44
- package/harness/bundles/general/codex/scripts/harness_events.py +174 -25
- package/harness/bundles/general/codex/scripts/harness_gate.py +203 -29
- package/harness/bundles/general/codex/scripts/harness_integration.py +878 -0
- package/harness/bundles/general/codex/scripts/harness_ledger.py +457 -10
- package/harness/bundles/general/codex/scripts/harness_paths.py +315 -0
- package/harness/bundles/general/codex/scripts/harness_profile.py +45 -0
- package/harness/bundles/general/codex/scripts/harness_review.py +326 -0
- package/harness/bundles/general/codex/scripts/harness_sync.py +407 -0
- package/harness/bundles/general/codex/scripts/harness_test_guard.py +244 -49
- package/harness/bundles/general/cursor/.harness-build.json +1 -1
- package/harness/bundles/general/cursor/contracts/workflow-policy.json +3 -3
- package/harness/bundles/general/cursor/harness-archive/SKILL.md +3 -3
- package/harness/bundles/general/cursor/harness-archive/reference.md +30 -12
- package/harness/bundles/general/cursor/harness-archive/templates/render-summary.mjs +5 -1
- package/harness/bundles/general/cursor/harness-archive/templates/summary-data-template.json +6 -2
- package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +3 -1
- package/harness/bundles/general/cursor/harness-knowledge-ingest/reference.md +7 -0
- package/harness/bundles/general/cursor/harness-knowledge-ingest/scripts/harness_knowledge.py +117 -0
- 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-plan/checklist.md +6 -0
- 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-run/checklist.md +5 -0
- package/harness/bundles/general/cursor/harness-run/reference.md +33 -1
- package/harness/bundles/general/cursor/harness-submit/SKILL.md +15 -10
- package/harness/bundles/general/cursor/harness-submit/checklist.md +40 -76
- package/harness/bundles/general/cursor/harness-sync/SKILL.md +17 -2
- package/harness/bundles/general/cursor/harness-sync/reference.md +2 -2
- package/harness/bundles/general/cursor/harness-test/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-test/checklist.md +9 -0
- package/harness/bundles/general/cursor/harness-test/pitfalls-java.md +14 -0
- package/harness/bundles/general/cursor/harness-test/reference.md +38 -0
- package/harness/bundles/general/cursor/protocols/archive-report-protocol.md +26 -4
- package/harness/bundles/general/cursor/protocols/ledger-protocol.md +38 -0
- package/harness/bundles/general/cursor/protocols/powershell-protocol.md +16 -0
- package/harness/bundles/general/cursor/protocols/report-pipeline-protocol.md +17 -0
- package/harness/bundles/general/cursor/protocols/state-layout-protocol.md +15 -0
- package/harness/bundles/general/cursor/scripts/harness_archive.py +1209 -170
- package/harness/bundles/general/cursor/scripts/harness_change.py +18 -0
- package/harness/bundles/general/cursor/scripts/harness_deploy.py +1 -44
- package/harness/bundles/general/cursor/scripts/harness_events.py +174 -25
- package/harness/bundles/general/cursor/scripts/harness_gate.py +203 -29
- package/harness/bundles/general/cursor/scripts/harness_integration.py +878 -0
- package/harness/bundles/general/cursor/scripts/harness_ledger.py +457 -10
- package/harness/bundles/general/cursor/scripts/harness_paths.py +315 -0
- package/harness/bundles/general/cursor/scripts/harness_profile.py +45 -0
- package/harness/bundles/general/cursor/scripts/harness_review.py +326 -0
- package/harness/bundles/general/cursor/scripts/harness_sync.py +407 -0
- package/harness/bundles/general/cursor/scripts/harness_test_guard.py +244 -49
- package/harness/bundles/java/claude-code/.harness-build.json +1 -1
- package/harness/bundles/java/claude-code/contracts/workflow-policy.json +3 -3
- package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-archive/SKILL.md +3 -3
- package/harness/bundles/java/claude-code/harness-archive/reference.md +30 -12
- package/harness/bundles/java/claude-code/harness-archive/templates/render-summary.mjs +5 -1
- package/harness/bundles/java/claude-code/harness-archive/templates/summary-data-template.json +6 -2
- package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +3 -1
- package/harness/bundles/java/claude-code/harness-knowledge-ingest/reference.md +7 -0
- package/harness/bundles/java/claude-code/harness-knowledge-ingest/scripts/harness_knowledge.py +117 -0
- 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-plan/checklist.md +6 -0
- package/harness/bundles/java/claude-code/harness-review/SKILL.md +3 -3
- package/harness/bundles/java/claude-code/harness-run/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-submit/SKILL.md +15 -10
- package/harness/bundles/java/claude-code/harness-submit/checklist.md +40 -76
- package/harness/bundles/java/claude-code/harness-sync/SKILL.md +17 -2
- package/harness/bundles/java/claude-code/harness-sync/reference.md +2 -2
- package/harness/bundles/java/claude-code/harness-test/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/protocols/archive-report-protocol.md +26 -4
- package/harness/bundles/java/claude-code/protocols/ledger-protocol.md +38 -0
- package/harness/bundles/java/claude-code/protocols/powershell-protocol.md +16 -0
- package/harness/bundles/java/claude-code/protocols/report-pipeline-protocol.md +17 -0
- package/harness/bundles/java/claude-code/protocols/state-layout-protocol.md +15 -0
- package/harness/bundles/java/claude-code/scripts/harness_archive.py +1209 -170
- package/harness/bundles/java/claude-code/scripts/harness_change.py +18 -0
- package/harness/bundles/java/claude-code/scripts/harness_deploy.py +1 -44
- package/harness/bundles/java/claude-code/scripts/harness_events.py +174 -25
- package/harness/bundles/java/claude-code/scripts/harness_gate.py +203 -29
- package/harness/bundles/java/claude-code/scripts/harness_integration.py +878 -0
- package/harness/bundles/java/claude-code/scripts/harness_ledger.py +457 -10
- package/harness/bundles/java/claude-code/scripts/harness_paths.py +315 -0
- package/harness/bundles/java/claude-code/scripts/harness_profile.py +45 -0
- package/harness/bundles/java/claude-code/scripts/harness_review.py +326 -0
- package/harness/bundles/java/claude-code/scripts/harness_sync.py +407 -0
- package/harness/bundles/java/claude-code/scripts/harness_test_guard.py +244 -49
- package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/java/codebuddy/contracts/workflow-policy.json +3 -3
- package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +3 -3
- package/harness/bundles/java/codebuddy/harness-archive/reference.md +30 -12
- package/harness/bundles/java/codebuddy/harness-archive/templates/render-summary.mjs +5 -1
- package/harness/bundles/java/codebuddy/harness-archive/templates/summary-data-template.json +6 -2
- package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +3 -1
- package/harness/bundles/java/codebuddy/harness-knowledge-ingest/reference.md +7 -0
- package/harness/bundles/java/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge.py +117 -0
- 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-plan/checklist.md +6 -0
- package/harness/bundles/java/codebuddy/harness-review/SKILL.md +3 -3
- package/harness/bundles/java/codebuddy/harness-run/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +15 -10
- package/harness/bundles/java/codebuddy/harness-submit/checklist.md +40 -76
- package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +17 -2
- package/harness/bundles/java/codebuddy/harness-sync/reference.md +2 -2
- package/harness/bundles/java/codebuddy/harness-test/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/protocols/archive-report-protocol.md +26 -4
- package/harness/bundles/java/codebuddy/protocols/ledger-protocol.md +38 -0
- package/harness/bundles/java/codebuddy/protocols/powershell-protocol.md +16 -0
- package/harness/bundles/java/codebuddy/protocols/report-pipeline-protocol.md +17 -0
- package/harness/bundles/java/codebuddy/protocols/state-layout-protocol.md +15 -0
- package/harness/bundles/java/codebuddy/scripts/harness_archive.py +1209 -170
- package/harness/bundles/java/codebuddy/scripts/harness_change.py +18 -0
- package/harness/bundles/java/codebuddy/scripts/harness_deploy.py +1 -44
- package/harness/bundles/java/codebuddy/scripts/harness_events.py +174 -25
- package/harness/bundles/java/codebuddy/scripts/harness_gate.py +203 -29
- package/harness/bundles/java/codebuddy/scripts/harness_integration.py +878 -0
- package/harness/bundles/java/codebuddy/scripts/harness_ledger.py +457 -10
- package/harness/bundles/java/codebuddy/scripts/harness_paths.py +315 -0
- package/harness/bundles/java/codebuddy/scripts/harness_profile.py +45 -0
- package/harness/bundles/java/codebuddy/scripts/harness_review.py +326 -0
- package/harness/bundles/java/codebuddy/scripts/harness_sync.py +407 -0
- package/harness/bundles/java/codebuddy/scripts/harness_test_guard.py +244 -49
- package/harness/bundles/java/codex/.harness-build.json +1 -1
- package/harness/bundles/java/codex/contracts/workflow-policy.json +3 -3
- package/harness/bundles/java/codex/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-archive/SKILL.md +3 -3
- package/harness/bundles/java/codex/harness-archive/reference.md +30 -12
- package/harness/bundles/java/codex/harness-archive/templates/render-summary.mjs +5 -1
- package/harness/bundles/java/codex/harness-archive/templates/summary-data-template.json +6 -2
- package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +3 -1
- package/harness/bundles/java/codex/harness-knowledge-ingest/reference.md +7 -0
- package/harness/bundles/java/codex/harness-knowledge-ingest/scripts/harness_knowledge.py +117 -0
- 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-plan/checklist.md +6 -0
- 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 +15 -10
- package/harness/bundles/java/codex/harness-submit/checklist.md +40 -76
- package/harness/bundles/java/codex/harness-sync/SKILL.md +17 -2
- package/harness/bundles/java/codex/harness-sync/reference.md +2 -2
- package/harness/bundles/java/codex/harness-test/SKILL.md +1 -1
- package/harness/bundles/java/codex/protocols/archive-report-protocol.md +26 -4
- package/harness/bundles/java/codex/protocols/ledger-protocol.md +38 -0
- package/harness/bundles/java/codex/protocols/powershell-protocol.md +16 -0
- package/harness/bundles/java/codex/protocols/report-pipeline-protocol.md +17 -0
- package/harness/bundles/java/codex/protocols/state-layout-protocol.md +15 -0
- package/harness/bundles/java/codex/scripts/harness_archive.py +1209 -170
- package/harness/bundles/java/codex/scripts/harness_change.py +18 -0
- package/harness/bundles/java/codex/scripts/harness_deploy.py +1 -44
- package/harness/bundles/java/codex/scripts/harness_events.py +174 -25
- package/harness/bundles/java/codex/scripts/harness_gate.py +203 -29
- package/harness/bundles/java/codex/scripts/harness_integration.py +878 -0
- package/harness/bundles/java/codex/scripts/harness_ledger.py +457 -10
- package/harness/bundles/java/codex/scripts/harness_paths.py +315 -0
- package/harness/bundles/java/codex/scripts/harness_profile.py +45 -0
- package/harness/bundles/java/codex/scripts/harness_review.py +326 -0
- package/harness/bundles/java/codex/scripts/harness_sync.py +407 -0
- package/harness/bundles/java/codex/scripts/harness_test_guard.py +244 -49
- package/harness/bundles/java/cursor/.harness-build.json +1 -1
- package/harness/bundles/java/cursor/contracts/workflow-policy.json +3 -3
- package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-archive/SKILL.md +3 -3
- package/harness/bundles/java/cursor/harness-archive/reference.md +30 -12
- package/harness/bundles/java/cursor/harness-archive/templates/render-summary.mjs +5 -1
- package/harness/bundles/java/cursor/harness-archive/templates/summary-data-template.json +6 -2
- package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +3 -1
- package/harness/bundles/java/cursor/harness-knowledge-ingest/reference.md +7 -0
- package/harness/bundles/java/cursor/harness-knowledge-ingest/scripts/harness_knowledge.py +117 -0
- 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-plan/checklist.md +6 -0
- 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 +15 -10
- package/harness/bundles/java/cursor/harness-submit/checklist.md +40 -76
- package/harness/bundles/java/cursor/harness-sync/SKILL.md +17 -2
- package/harness/bundles/java/cursor/harness-sync/reference.md +2 -2
- package/harness/bundles/java/cursor/harness-test/SKILL.md +1 -1
- package/harness/bundles/java/cursor/protocols/archive-report-protocol.md +26 -4
- package/harness/bundles/java/cursor/protocols/ledger-protocol.md +38 -0
- package/harness/bundles/java/cursor/protocols/powershell-protocol.md +16 -0
- package/harness/bundles/java/cursor/protocols/report-pipeline-protocol.md +17 -0
- package/harness/bundles/java/cursor/protocols/state-layout-protocol.md +15 -0
- package/harness/bundles/java/cursor/scripts/harness_archive.py +1209 -170
- package/harness/bundles/java/cursor/scripts/harness_change.py +18 -0
- package/harness/bundles/java/cursor/scripts/harness_deploy.py +1 -44
- package/harness/bundles/java/cursor/scripts/harness_events.py +174 -25
- package/harness/bundles/java/cursor/scripts/harness_gate.py +203 -29
- package/harness/bundles/java/cursor/scripts/harness_integration.py +878 -0
- package/harness/bundles/java/cursor/scripts/harness_ledger.py +457 -10
- package/harness/bundles/java/cursor/scripts/harness_paths.py +315 -0
- package/harness/bundles/java/cursor/scripts/harness_profile.py +45 -0
- package/harness/bundles/java/cursor/scripts/harness_review.py +326 -0
- package/harness/bundles/java/cursor/scripts/harness_sync.py +407 -0
- package/harness/bundles/java/cursor/scripts/harness_test_guard.py +244 -49
- package/harness/manifests/general/claude-code.json +58 -38
- package/harness/manifests/general/codebuddy.json +58 -38
- package/harness/manifests/general/codex.json +58 -38
- package/harness/manifests/general/cursor.json +58 -38
- package/harness/manifests/java/claude-code.json +52 -36
- package/harness/manifests/java/codebuddy.json +52 -36
- package/harness/manifests/java/codex.json +52 -36
- package/harness/manifests/java/cursor.json +52 -36
- package/hunter-workflow-family.json +2 -2
- package/package.json +1 -1
|
@@ -32,6 +32,7 @@ if str(SCRIPTS_DIR) not in sys.path:
|
|
|
32
32
|
import harness_change as hc # noqa: E402
|
|
33
33
|
import harness_events as he # noqa: E402
|
|
34
34
|
import harness_ledger as hl # noqa: E402
|
|
35
|
+
import harness_paths as hp # noqa: E402
|
|
35
36
|
import harness_workflow_policy as hwp # noqa: E402
|
|
36
37
|
import harness_test_guard as htg # noqa: E402
|
|
37
38
|
|
|
@@ -149,7 +150,8 @@ def checkpoint_status(checkpoints: dict[str, Any] | None, checkpoint_id: str) ->
|
|
|
149
150
|
def foundation_gate_blocks(task_number: int | None, change_dir: Path) -> dict[str, Any] | None:
|
|
150
151
|
checkpoints = load_checkpoints(change_dir)
|
|
151
152
|
status = checkpoint_status(checkpoints, "foundation-gate")
|
|
152
|
-
|
|
153
|
+
# missing = checkpoint not enabled for this change (no file / no entry).
|
|
154
|
+
if status in {"approved", "missing"}:
|
|
153
155
|
return None
|
|
154
156
|
if task_number is None:
|
|
155
157
|
return {
|
|
@@ -174,8 +176,25 @@ def foundation_gate_blocks(task_number: int | None, change_dir: Path) -> dict[st
|
|
|
174
176
|
}
|
|
175
177
|
|
|
176
178
|
|
|
177
|
-
def
|
|
179
|
+
def is_degraded_ledger_entry(entry: dict[str, Any]) -> bool:
|
|
180
|
+
"""NOT_RUN + evidence starting with 'DEGRADED: <non-empty reason>'."""
|
|
181
|
+
if entry.get("status") != "NOT_RUN":
|
|
182
|
+
return False
|
|
183
|
+
evidence = str(entry.get("evidence") or "").strip()
|
|
184
|
+
if not evidence.startswith("DEGRADED:"):
|
|
185
|
+
return False
|
|
186
|
+
reason = evidence.split(":", 1)[1].strip()
|
|
187
|
+
return bool(reason)
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
def validate_ledger_entry_v2(entry: dict[str, Any], verification: str) -> tuple[list[str], bool]:
|
|
191
|
+
"""Internal helper for ledger close validation (not a public API).
|
|
192
|
+
|
|
193
|
+
Returns ``(missing_fields, degraded_ok)`` where ``degraded_ok`` is True only when
|
|
194
|
+
the entry is a valid DEGRADED NOT_RUN record with no other missing fields.
|
|
195
|
+
"""
|
|
178
196
|
missing: list[str] = []
|
|
197
|
+
degraded = is_degraded_ledger_entry(entry)
|
|
179
198
|
for field in LEDGER_V2_REQUIRED_ENTRY_FIELDS:
|
|
180
199
|
value = entry.get(field)
|
|
181
200
|
if field == "inputsFiles":
|
|
@@ -184,7 +203,7 @@ def validate_ledger_entry_v2(entry: dict[str, Any], verification: str) -> list[s
|
|
|
184
203
|
elif verification == "unitTestFull" and not value:
|
|
185
204
|
missing.append("inputsFiles(non-empty)")
|
|
186
205
|
elif field == "status":
|
|
187
|
-
if value != "OK":
|
|
206
|
+
if value != "OK" and not degraded:
|
|
188
207
|
missing.append("status=OK")
|
|
189
208
|
elif not (isinstance(value, str) and value.strip()):
|
|
190
209
|
missing.append(field)
|
|
@@ -192,7 +211,7 @@ def validate_ledger_entry_v2(entry: dict[str, Any], verification: str) -> list[s
|
|
|
192
211
|
missing.append("coverage(valid)")
|
|
193
212
|
elif field == "algorithmVersion" and str(value).strip() != hl.LEDGER_VERSION:
|
|
194
213
|
missing.append("algorithmVersion(harness-ledger-2)")
|
|
195
|
-
return missing
|
|
214
|
+
return missing, degraded and not missing
|
|
196
215
|
|
|
197
216
|
|
|
198
217
|
def validate_ledger_for_phase_close(
|
|
@@ -225,6 +244,7 @@ def validate_ledger_for_phase_close(
|
|
|
225
244
|
}
|
|
226
245
|
|
|
227
246
|
problems: list[dict[str, Any]] = []
|
|
247
|
+
degraded: list[str] = []
|
|
228
248
|
for verification in required:
|
|
229
249
|
entry = validations.get(verification)
|
|
230
250
|
if not isinstance(entry, dict):
|
|
@@ -236,7 +256,7 @@ def validate_ledger_for_phase_close(
|
|
|
236
256
|
}
|
|
237
257
|
)
|
|
238
258
|
continue
|
|
239
|
-
missing = validate_ledger_entry_v2(entry, verification)
|
|
259
|
+
missing, is_degraded = validate_ledger_entry_v2(entry, verification)
|
|
240
260
|
if missing:
|
|
241
261
|
code = (
|
|
242
262
|
"MISSING_V2_FIELDS"
|
|
@@ -258,6 +278,8 @@ def validate_ledger_for_phase_close(
|
|
|
258
278
|
"code": code,
|
|
259
279
|
}
|
|
260
280
|
)
|
|
281
|
+
elif is_degraded:
|
|
282
|
+
degraded.append(verification)
|
|
261
283
|
|
|
262
284
|
if problems:
|
|
263
285
|
return {
|
|
@@ -269,6 +291,15 @@ def validate_ledger_for_phase_close(
|
|
|
269
291
|
"ledgerPath": str(ledger_path) if ledger_path else None,
|
|
270
292
|
"detail": "natural-language override is not permitted",
|
|
271
293
|
}
|
|
294
|
+
if degraded:
|
|
295
|
+
return {
|
|
296
|
+
"ok": True,
|
|
297
|
+
"code": "LEDGER_OK_DEGRADED",
|
|
298
|
+
"phase": phase,
|
|
299
|
+
"validated": required,
|
|
300
|
+
"degraded": degraded,
|
|
301
|
+
"ledgerPath": str(ledger_path) if ledger_path else None,
|
|
302
|
+
}
|
|
272
303
|
return {
|
|
273
304
|
"ok": True,
|
|
274
305
|
"code": "LEDGER_OK",
|
|
@@ -417,7 +448,11 @@ def change_code_root(change_dir: Path) -> Path:
|
|
|
417
448
|
return project
|
|
418
449
|
|
|
419
450
|
|
|
420
|
-
def classify_risk(
|
|
451
|
+
def classify_risk(
|
|
452
|
+
change_dir: Path,
|
|
453
|
+
stage: str,
|
|
454
|
+
workflow: dict[str, Any] | None = None,
|
|
455
|
+
) -> dict[str, Any]:
|
|
421
456
|
tier = "full"
|
|
422
457
|
source = "default-full"
|
|
423
458
|
plan_path = change_dir / "plans"
|
|
@@ -484,7 +519,31 @@ def classify_risk(change_dir: Path, stage: str) -> dict[str, Any]:
|
|
|
484
519
|
tier = observed
|
|
485
520
|
source = f"{source}+post-run"
|
|
486
521
|
main_project = change_dir.parents[2]
|
|
487
|
-
workflow
|
|
522
|
+
if workflow is None:
|
|
523
|
+
workflow = _load_workflow_policy(project=main_project)
|
|
524
|
+
tier_policy = workflow["riskTiers"][tier]
|
|
525
|
+
unique_signals = sorted(set(signals))
|
|
526
|
+
payload = {
|
|
527
|
+
"ok": True,
|
|
528
|
+
"code": "CLASSIFIED",
|
|
529
|
+
"stage": stage,
|
|
530
|
+
"tier": tier,
|
|
531
|
+
"source": source,
|
|
532
|
+
"changeId": change_dir.name,
|
|
533
|
+
"signals": unique_signals,
|
|
534
|
+
"defaultPhases": list(tier_policy["defaultPhases"]),
|
|
535
|
+
"requiredValidations": list(tier_policy["requiredValidations"]),
|
|
536
|
+
"conditionalStages": list(tier_policy["conditionalStages"]),
|
|
537
|
+
"stageDecisions": _stage_decisions_for_tier(workflow, tier, unique_signals),
|
|
538
|
+
}
|
|
539
|
+
if stage == "post-run":
|
|
540
|
+
_write_json(change_dir / "meta" / "risk-classification.json", payload)
|
|
541
|
+
return payload
|
|
542
|
+
|
|
543
|
+
|
|
544
|
+
def _stage_decisions_for_tier(
|
|
545
|
+
workflow: dict[str, Any], tier: str, signals: list[str]
|
|
546
|
+
) -> dict[str, dict[str, Any]]:
|
|
488
547
|
tier_policy = workflow["riskTiers"][tier]
|
|
489
548
|
unique_signals = sorted(set(signals))
|
|
490
549
|
stage_decisions: dict[str, dict[str, Any]] = {}
|
|
@@ -501,22 +560,66 @@ def classify_risk(change_dir: Path, stage: str) -> dict[str, Any]:
|
|
|
501
560
|
),
|
|
502
561
|
"matchedSignals": matched,
|
|
503
562
|
}
|
|
504
|
-
|
|
563
|
+
return stage_decisions
|
|
564
|
+
|
|
565
|
+
|
|
566
|
+
def apply_tier_override(
|
|
567
|
+
payload: dict[str, Any],
|
|
568
|
+
workflow: dict[str, Any],
|
|
569
|
+
*,
|
|
570
|
+
tier: str,
|
|
571
|
+
override_by: str,
|
|
572
|
+
) -> dict[str, Any]:
|
|
573
|
+
"""Rebind payload to an explicit tier override (source=override)."""
|
|
574
|
+
tier_policy = workflow["riskTiers"][tier]
|
|
575
|
+
now = hc.now_iso()
|
|
576
|
+
signals = list(payload.get("signals") or [])
|
|
577
|
+
payload = dict(payload)
|
|
578
|
+
payload["tier"] = tier
|
|
579
|
+
payload["source"] = "override"
|
|
580
|
+
payload["defaultPhases"] = list(tier_policy["defaultPhases"])
|
|
581
|
+
payload["requiredValidations"] = list(tier_policy["requiredValidations"])
|
|
582
|
+
payload["conditionalStages"] = list(tier_policy["conditionalStages"])
|
|
583
|
+
payload["stageDecisions"] = _stage_decisions_for_tier(workflow, tier, signals)
|
|
584
|
+
payload["tierOverride"] = {"tier": tier, "by": override_by, "at": now}
|
|
585
|
+
return payload
|
|
586
|
+
|
|
587
|
+
|
|
588
|
+
def gate_policy_document(payload: dict[str, Any]) -> dict[str, Any]:
|
|
589
|
+
"""Cross-change contract: meta/gate-policy.json (schemaVersion=1)."""
|
|
590
|
+
return {
|
|
591
|
+
"schemaVersion": 1,
|
|
592
|
+
"tier": payload["tier"],
|
|
593
|
+
"source": payload["source"],
|
|
594
|
+
"defaultPhases": list(payload.get("defaultPhases") or []),
|
|
595
|
+
"requiredValidations": list(payload.get("requiredValidations") or []),
|
|
596
|
+
"classifiedAt": payload.get("classifiedAt") or hc.now_iso(),
|
|
597
|
+
"tierOverride": payload.get("tierOverride"),
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
|
|
601
|
+
def classify_defaults(
|
|
602
|
+
workflow: dict[str, Any],
|
|
603
|
+
*,
|
|
604
|
+
change_id: str,
|
|
605
|
+
stage: str,
|
|
606
|
+
) -> dict[str, Any]:
|
|
607
|
+
tier = "full"
|
|
608
|
+
source = "default-full"
|
|
609
|
+
tier_policy = workflow["riskTiers"][tier]
|
|
610
|
+
return {
|
|
505
611
|
"ok": True,
|
|
506
612
|
"code": "CLASSIFIED",
|
|
507
613
|
"stage": stage,
|
|
508
614
|
"tier": tier,
|
|
509
615
|
"source": source,
|
|
510
|
-
"changeId":
|
|
511
|
-
"signals":
|
|
616
|
+
"changeId": change_id,
|
|
617
|
+
"signals": [],
|
|
512
618
|
"defaultPhases": list(tier_policy["defaultPhases"]),
|
|
513
619
|
"requiredValidations": list(tier_policy["requiredValidations"]),
|
|
514
620
|
"conditionalStages": list(tier_policy["conditionalStages"]),
|
|
515
|
-
"stageDecisions":
|
|
621
|
+
"stageDecisions": _stage_decisions_for_tier(workflow, tier, []),
|
|
516
622
|
}
|
|
517
|
-
if stage == "post-run":
|
|
518
|
-
_write_json(change_dir / "meta" / "risk-classification.json", payload)
|
|
519
|
-
return payload
|
|
520
623
|
|
|
521
624
|
|
|
522
625
|
def lint_skill_tree(skills_root: Path) -> dict[str, Any]:
|
|
@@ -649,7 +752,7 @@ def append_phase_event(
|
|
|
649
752
|
if key not in event and value is not None:
|
|
650
753
|
event[key] = value
|
|
651
754
|
line = json.dumps(event, ensure_ascii=False, separators=(",", ":"))
|
|
652
|
-
lock_path =
|
|
755
|
+
lock_path = events_file.with_name(events_file.name + ".lock")
|
|
653
756
|
with he.event_file_lock(lock_path):
|
|
654
757
|
he.atomic_append_line(events_file, line)
|
|
655
758
|
rendered = False
|
|
@@ -823,6 +926,14 @@ def cmd_close(args: argparse.Namespace) -> int:
|
|
|
823
926
|
extra={k: v for k, v in ledger_result.items() if k not in {"ok", "message", "code"}},
|
|
824
927
|
)
|
|
825
928
|
|
|
929
|
+
close_status = args.status
|
|
930
|
+
close_code = "PHASE_CLOSED"
|
|
931
|
+
if ledger_result.get("code") == "LEDGER_OK_DEGRADED":
|
|
932
|
+
close_code = "CLOSED_DEGRADED"
|
|
933
|
+
# Degraded close: phase.end status must not exceed WARN (OK → WARN).
|
|
934
|
+
if close_status == "OK":
|
|
935
|
+
close_status = "WARN"
|
|
936
|
+
|
|
826
937
|
guard_result = None
|
|
827
938
|
if args.phase in {"run", "test"}:
|
|
828
939
|
project_root = args.project or str(project)
|
|
@@ -839,7 +950,7 @@ def cmd_close(args: argparse.Namespace) -> int:
|
|
|
839
950
|
change_dir,
|
|
840
951
|
phase=args.phase,
|
|
841
952
|
type_="phase.end",
|
|
842
|
-
status=
|
|
953
|
+
status=close_status,
|
|
843
954
|
note=args.note or "",
|
|
844
955
|
run_id=run_id,
|
|
845
956
|
) if not _phase_event_exists(change_dir, args.phase, "phase.end", run_id) else {
|
|
@@ -862,9 +973,9 @@ def cmd_close(args: argparse.Namespace) -> int:
|
|
|
862
973
|
|
|
863
974
|
payload = {
|
|
864
975
|
"ok": True,
|
|
865
|
-
"code":
|
|
976
|
+
"code": close_code,
|
|
866
977
|
"phase": args.phase,
|
|
867
|
-
"status":
|
|
978
|
+
"status": close_status,
|
|
868
979
|
"changeId": resolved["changeId"],
|
|
869
980
|
"ledger": ledger_result,
|
|
870
981
|
"testGuard": guard_result,
|
|
@@ -878,19 +989,56 @@ def cmd_close(args: argparse.Namespace) -> int:
|
|
|
878
989
|
def cmd_classify(args: argparse.Namespace) -> int:
|
|
879
990
|
as_json = bool(args.json)
|
|
880
991
|
project = hc.resolve_main_project_root()
|
|
992
|
+
try:
|
|
993
|
+
workflow = _load_workflow_policy(project=project)
|
|
994
|
+
except (OSError, ValueError, hwp.PolicyValidationError) as exc:
|
|
995
|
+
return emit_error("POLICY_LOAD_FAILED", str(exc), as_json=as_json)
|
|
996
|
+
|
|
881
997
|
resolved = hc.resolve_change(project, args.change)
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
998
|
+
change_dir: Path | None = None
|
|
999
|
+
change_id = str(args.change or "")
|
|
1000
|
+
if resolved.get("ok"):
|
|
1001
|
+
change_dir = Path(resolved["changeDir"])
|
|
1002
|
+
change_id = str(resolved.get("changeId") or change_dir.name)
|
|
1003
|
+
if not change_dir.is_dir():
|
|
1004
|
+
change_dir = None
|
|
1005
|
+
|
|
1006
|
+
if change_dir is not None:
|
|
1007
|
+
payload = classify_risk(change_dir, args.stage, workflow=workflow)
|
|
1008
|
+
else:
|
|
1009
|
+
payload = classify_defaults(workflow, change_id=change_id or "unknown", stage=args.stage)
|
|
1010
|
+
if not resolved.get("ok"):
|
|
1011
|
+
payload["resolveCode"] = resolved.get("code")
|
|
1012
|
+
|
|
1013
|
+
tier_override = getattr(args, "tier_override", None)
|
|
1014
|
+
if tier_override:
|
|
1015
|
+
payload = apply_tier_override(
|
|
1016
|
+
payload,
|
|
1017
|
+
workflow,
|
|
1018
|
+
tier=str(tier_override),
|
|
1019
|
+
override_by=str(getattr(args, "override_by", None) or "user"),
|
|
888
1020
|
)
|
|
889
|
-
|
|
1021
|
+
else:
|
|
1022
|
+
payload.setdefault("tierOverride", None)
|
|
1023
|
+
|
|
1024
|
+
classified_at = hc.now_iso()
|
|
1025
|
+
payload["classifiedAt"] = classified_at
|
|
1026
|
+
|
|
1027
|
+
if change_dir is not None and change_dir.is_dir():
|
|
1028
|
+
policy_doc = gate_policy_document(payload)
|
|
1029
|
+
policy_path = change_dir / "meta" / "gate-policy.json"
|
|
1030
|
+
_write_json(policy_path, policy_doc)
|
|
1031
|
+
payload["policyPersisted"] = True
|
|
1032
|
+
payload["policyPath"] = str(policy_path)
|
|
1033
|
+
else:
|
|
1034
|
+
payload["policyPersisted"] = False
|
|
1035
|
+
payload["warning"] = (
|
|
1036
|
+
"change directory does not exist; gate-policy.json not written"
|
|
1037
|
+
)
|
|
1038
|
+
|
|
890
1039
|
emit(payload, as_json=as_json)
|
|
891
1040
|
return 0
|
|
892
1041
|
|
|
893
|
-
|
|
894
1042
|
def cmd_checkpoint(args: argparse.Namespace) -> int:
|
|
895
1043
|
as_json = bool(args.json)
|
|
896
1044
|
project = hc.resolve_main_project_root()
|
|
@@ -934,11 +1082,31 @@ def cmd_checkpoint(args: argparse.Namespace) -> int:
|
|
|
934
1082
|
as_json=as_json,
|
|
935
1083
|
)
|
|
936
1084
|
required_report = str(item.get("requiredReport") or "")
|
|
937
|
-
|
|
938
|
-
if
|
|
1085
|
+
report_rel = Path(required_report)
|
|
1086
|
+
if (
|
|
1087
|
+
not required_report
|
|
1088
|
+
or report_rel.is_absolute()
|
|
1089
|
+
or ".." in report_rel.parts
|
|
1090
|
+
):
|
|
1091
|
+
return emit_error(
|
|
1092
|
+
"CHECKPOINT_REPORT_PATH_INVALID",
|
|
1093
|
+
f"required report path is invalid: {required_report or '<unset>'}",
|
|
1094
|
+
as_json=as_json,
|
|
1095
|
+
)
|
|
1096
|
+
state_dir = hp.resolve_state_dir_for_contract(change_dir, project)
|
|
1097
|
+
report_candidates = [state_dir / report_rel]
|
|
1098
|
+
if state_dir != change_dir:
|
|
1099
|
+
# Compatibility fallback for split-v1 changes created before dynamic
|
|
1100
|
+
# reports were routed to the state root.
|
|
1101
|
+
report_candidates.append(change_dir / report_rel)
|
|
1102
|
+
report_path = next(
|
|
1103
|
+
(candidate for candidate in report_candidates if candidate.is_file()),
|
|
1104
|
+
report_candidates[0],
|
|
1105
|
+
)
|
|
1106
|
+
if not report_path.is_file() or report_path.stat().st_size == 0:
|
|
939
1107
|
return emit_error(
|
|
940
1108
|
"CHECKPOINT_REPORT_MISSING",
|
|
941
|
-
f"required report is missing: {required_report
|
|
1109
|
+
f"required report is missing: {required_report}",
|
|
942
1110
|
as_json=as_json,
|
|
943
1111
|
)
|
|
944
1112
|
report_text = report_path.read_text(encoding="utf-8", errors="replace")
|
|
@@ -1012,6 +1180,12 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
1012
1180
|
p_classify = sub.add_parser("classify", parents=[shared])
|
|
1013
1181
|
p_classify.add_argument("--change", default=None)
|
|
1014
1182
|
p_classify.add_argument("--stage", required=True, choices=["plan", "post-run"])
|
|
1183
|
+
p_classify.add_argument(
|
|
1184
|
+
"--tier-override",
|
|
1185
|
+
default=None,
|
|
1186
|
+
choices=["fast", "standard", "full"],
|
|
1187
|
+
)
|
|
1188
|
+
p_classify.add_argument("--override-by", default="user")
|
|
1015
1189
|
p_classify.set_defaults(func=cmd_classify)
|
|
1016
1190
|
|
|
1017
1191
|
p_checkpoint = sub.add_parser("checkpoint", parents=[shared])
|