@danmoisan/drm-copilot-mcp 1.1.17 → 1.1.19
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/out/mcp-server.js +1405 -684
- package/package.json +6 -4
- package/resources/claude-customizations/.claude/agents/atomic-executor.md +11 -0
- package/resources/claude-customizations/.claude/agents/atomic-planner.md +10 -0
- package/resources/claude-customizations/.claude/agents/epic-orchestrator.md +12 -4
- package/resources/claude-customizations/.claude/agents/epic-planner.md +5 -4
- package/resources/claude-customizations/.claude/agents/feature-review.md +16 -5
- package/resources/claude-customizations/.claude/agents/orchestrator.md +21 -7
- package/resources/claude-customizations/.claude/agents/parallel-orchestrator.md +37 -13
- package/resources/claude-customizations/.claude/agents/parallel-planner.md +9 -6
- package/resources/claude-customizations/.claude/agents/pr-author.md +15 -2
- package/resources/claude-customizations/.claude/agents/prd-feature.md +1 -1
- package/resources/claude-customizations/.claude/hooks/check-powershell-test-purity.ps1 +7 -1
- package/resources/claude-customizations/.claude/hooks/check-python-test-purity.ps1 +7 -1
- package/resources/claude-customizations/.claude/hooks/enforce-checkpoint-monotonic.ps1 +7 -1
- package/resources/claude-customizations/.claude/hooks/enforce-completion-consistency.ps1 +111 -46
- package/resources/claude-customizations/.claude/hooks/enforce-completion-helpers.ps1 +105 -0
- package/resources/claude-customizations/.claude/hooks/enforce-discovery-artifact-gate.ps1 +8 -1
- package/resources/claude-customizations/.claude/hooks/enforce-epic-invocation-origin.ps1 +7 -1
- package/resources/claude-customizations/.claude/hooks/enforce-epic-merge-gate-resolution.ps1 +116 -59
- package/resources/claude-customizations/.claude/hooks/enforce-epic-merge-gate.ps1 +55 -23
- package/resources/claude-customizations/.claude/hooks/enforce-epic-wave-barrier.ps1 +74 -75
- package/resources/claude-customizations/.claude/hooks/enforce-epic-worktree-removal-gate-resolution.ps1 +127 -35
- package/resources/claude-customizations/.claude/hooks/enforce-epic-worktree-removal-gate.ps1 +61 -57
- package/resources/claude-customizations/.claude/hooks/enforce-evidence-locations.ps1 +7 -1
- package/resources/claude-customizations/.claude/hooks/enforce-feature-folder-order.ps1 +129 -39
- package/resources/claude-customizations/.claude/hooks/enforce-mermaid-validation.ps1 +7 -1
- package/resources/claude-customizations/.claude/hooks/enforce-model-routing-receipt.ps1 +9 -3
- package/resources/claude-customizations/.claude/hooks/enforce-orchestration-preimplementation-gate-epic-scope.ps1 +39 -51
- package/resources/claude-customizations/.claude/hooks/enforce-orchestration-preimplementation-gate-helpers.ps1 +31 -58
- package/resources/claude-customizations/.claude/hooks/enforce-orchestration-preimplementation-gate-modes.ps1 +63 -47
- package/resources/claude-customizations/.claude/hooks/enforce-orchestration-preimplementation-gate-targets.ps1 +433 -0
- package/resources/claude-customizations/.claude/hooks/enforce-orchestration-preimplementation-gate.ps1 +17 -12
- package/resources/claude-customizations/.claude/hooks/enforce-parallel-abandon-gate.ps1 +9 -3
- package/resources/claude-customizations/.claude/hooks/enforce-parallel-cohort-barrier.ps1 +65 -50
- package/resources/claude-customizations/.claude/hooks/enforce-parallel-drift-gate.ps1 +49 -42
- package/resources/claude-customizations/.claude/hooks/enforce-parallel-worktree-removal-gate.ps1 +54 -72
- package/resources/claude-customizations/.claude/hooks/enforce-powershell-batch-budget.ps1 +8 -2
- package/resources/claude-customizations/.claude/hooks/enforce-pr-author-command-allowlist.ps1 +279 -0
- package/resources/claude-customizations/.claude/hooks/enforce-pr-author-skill-helpers.ps1 +129 -75
- package/resources/claude-customizations/.claude/hooks/enforce-pr-author-skill.artifact-root.ps1 +233 -0
- package/resources/claude-customizations/.claude/hooks/enforce-pr-author-skill.docs-only.ps1 +224 -0
- package/resources/claude-customizations/.claude/hooks/enforce-pr-author-skill.ps1 +69 -24
- package/resources/claude-customizations/.claude/hooks/enforce-prd-feature-before-planner-helpers.ps1 +29 -18
- package/resources/claude-customizations/.claude/hooks/enforce-prd-feature-before-planner.ps1 +10 -4
- package/resources/claude-customizations/.claude/hooks/enforce-promotion-mcp-only.ps1 +14 -5
- package/resources/claude-customizations/.claude/hooks/enforce-python-batch-budget.ps1 +8 -2
- package/resources/claude-customizations/.claude/hooks/feature-folder-resolution.ps1 +373 -0
- package/resources/claude-customizations/.claude/hooks/feature-review-coverage-thresholds.ps1 +85 -0
- package/resources/claude-customizations/.claude/hooks/hook-command-heredoc.ps1 +119 -0
- package/resources/claude-customizations/.claude/hooks/hook-command-invocation-operands.ps1 +198 -0
- package/resources/claude-customizations/.claude/hooks/hook-command-invocation.ps1 +254 -255
- package/resources/claude-customizations/.claude/hooks/hook-command-payload-powershell.ps1 +201 -0
- package/resources/claude-customizations/.claude/hooks/hook-command-payload.ps1 +484 -0
- package/resources/claude-customizations/.claude/hooks/hook-command-scanner.ps1 +27 -110
- package/resources/claude-customizations/.claude/hooks/hook-dependency-guard.ps1 +114 -0
- package/resources/claude-customizations/.claude/hooks/hook-docs-only-diff.ps1 +493 -0
- package/resources/claude-customizations/.claude/hooks/subagentstop-envelope.ps1 +192 -0
- package/resources/claude-customizations/.claude/hooks/validate-bash.ps1 +9 -3
- package/resources/claude-customizations/.claude/hooks/validate-discovery-artifact-gate.ps1 +40 -42
- package/resources/claude-customizations/.claude/hooks/validate-executor-output.ps1 +66 -38
- package/resources/claude-customizations/.claude/hooks/validate-feature-review-coverage-metrics.ps1 +180 -0
- package/resources/claude-customizations/.claude/hooks/validate-feature-review-coverage-rules.ps1 +195 -0
- package/resources/claude-customizations/.claude/hooks/validate-feature-review-coverage.ps1 +141 -395
- package/resources/claude-customizations/.claude/hooks/validate-orchestrator-output-resolution.ps1 +311 -0
- package/resources/claude-customizations/.claude/hooks/validate-orchestrator-output-routing.ps1 +170 -0
- package/resources/claude-customizations/.claude/hooks/validate-orchestrator-output.ps1 +115 -190
- package/resources/claude-customizations/.claude/hooks/validate-planner-output.ps1 +64 -32
- package/resources/claude-customizations/.claude/hooks/validate-pr-author-output.ps1 +39 -44
- package/resources/claude-customizations/.claude/hooks/validate-prd-feature-output.ps1 +43 -14
- package/resources/claude-customizations/.claude/hooks/validate-required-artifact-output.ps1 +66 -36
- package/resources/claude-customizations/.claude/hooks/validate-task-researcher-output.ps1 +31 -34
- package/resources/claude-customizations/.claude/lib/bash/mutate-parallel-run.sh +191 -0
- package/resources/claude-customizations/.claude/lib/bash/parallel-cohorts.sh +13 -3
- package/resources/claude-customizations/.claude/lib/bash/parallel-lane-assertion.sh +4 -2
- package/resources/claude-customizations/.claude/lib/bash/parallel-mutation-cli.sh +152 -0
- package/resources/claude-customizations/.claude/lib/bash/parallel-mutation-ops.sh +193 -0
- package/resources/claude-customizations/.claude/lib/bash/parallel-mutation.sh +322 -0
- package/resources/claude-customizations/.claude/lib/bash/remove-parallel-item.sh +146 -0
- package/resources/claude-customizations/.claude/lib/blast-radius/BlastRadiusExtraction.psm1 +23 -33
- package/resources/claude-customizations/.claude/lib/blast-radius/BlastRadiusTokenShape.psm1 +86 -6
- package/resources/claude-customizations/.claude/lib/ci-gate/Invoke-CiGateParser.ps1 +91 -19
- package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorState.psm1 +6 -13
- package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateEpicWaveBarrier.psm1 +346 -0
- package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateIssueAdoption.psm1 +396 -0
- package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateReceipts.psm1 +22 -15
- package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateRemediationAccounting.psm1 +337 -0
- package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateRoutingContract.psm1 +9 -1
- package/resources/claude-customizations/.claude/lib/worktree-resolution/WorktreeItemResolution.psm1 +79 -2
- package/resources/claude-customizations/.claude/lib/worktree-resolution/WorktreeRunResolution.psm1 +3 -3
- package/resources/claude-customizations/.claude/rules/architecture-boundaries.md +5 -5
- package/resources/claude-customizations/.claude/rules/csharp.md +2 -2
- package/resources/claude-customizations/.claude/rules/general-code-change.md +1 -1
- package/resources/claude-customizations/.claude/rules/general-unit-test.md +3 -2
- package/resources/claude-customizations/.claude/rules/orchestrator-state.md +153 -4
- package/resources/claude-customizations/.claude/rules/parallel-orchestration.md +50 -5
- package/resources/claude-customizations/.claude/rules/plan-acceptance-gates.md +47 -8
- package/resources/claude-customizations/.claude/rules/quality-tiers.md +11 -7
- package/resources/claude-customizations/.claude/rules/shell.md +10 -8
- package/resources/claude-customizations/.claude/rules/typescript.md +1 -1
- package/resources/claude-customizations/.claude/settings.json +3 -4
- package/resources/claude-customizations/.claude/skills/acceptance-criteria-tracking/SKILL.md +9 -1
- package/resources/claude-customizations/.claude/skills/atomic-plan-contract/SKILL.md +7 -1
- package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/SKILL.md +11 -3
- package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup-worktrees.sh +11 -2
- package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup_worktrees_detached_lib.sh +1 -1
- package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup_worktrees_enumerate_lib.sh +171 -5
- package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup_worktrees_preserve_lib.sh +1 -1
- package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup_worktrees_report_records_lib.sh +6 -43
- package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup_worktrees_scan_helper.sh +6 -15
- package/resources/claude-customizations/.claude/skills/epic-orchestrate/SKILL.md +45 -11
- package/resources/claude-customizations/.claude/skills/epic-plan/SKILL.md +1 -1
- package/resources/claude-customizations/.claude/skills/evidence-and-timestamp-conventions/SKILL.md +13 -0
- package/resources/claude-customizations/.claude/skills/feature-promotion-lifecycle/SKILL.md +10 -0
- package/resources/claude-customizations/.claude/skills/feature-review-workflow/SKILL.md +7 -4
- package/resources/claude-customizations/.claude/skills/orchestrate/SKILL.md +42 -16
- package/resources/claude-customizations/.claude/skills/parallel-add/SKILL.md +52 -14
- package/resources/claude-customizations/.claude/skills/parallel-close/SKILL.md +22 -9
- package/resources/claude-customizations/.claude/skills/parallel-orchestrate/SKILL.md +97 -19
- package/resources/claude-customizations/.claude/skills/parallel-plan/SKILL.md +63 -7
- package/resources/claude-customizations/.claude/skills/parallel-remove/SKILL.md +35 -12
- package/resources/claude-customizations/.claude/skills/pr-author/SKILL.md +3 -1
- package/resources/claude-customizations/.claude/skills/quota-throttling/SKILL.md +1 -1
- package/resources/claude-customizations/.claude/skills/remediation-handoff-atomic-planner/SKILL.md +7 -3
- package/resources/claude-customizations/pack-manifests/core.json +25 -0
- package/resources/codex-and-agents-customizations/.agents/skills/acceptance-criteria-tracking/SKILL.md +9 -1
- package/resources/codex-and-agents-customizations/.agents/skills/architecture-boundaries/SKILL.md +5 -5
- package/resources/codex-and-agents-customizations/.agents/skills/atomic-executor/SKILL.md +11 -0
- package/resources/codex-and-agents-customizations/.agents/skills/atomic-plan-contract/SKILL.md +4 -0
- package/resources/codex-and-agents-customizations/.agents/skills/atomic-planner/SKILL.md +10 -0
- package/resources/codex-and-agents-customizations/.agents/skills/csharp/SKILL.md +2 -2
- package/resources/codex-and-agents-customizations/.agents/skills/csharp-qa-gate/SKILL.md +2 -2
- package/resources/codex-and-agents-customizations/.agents/skills/epic-orchestrate/SKILL.md +13 -3
- package/resources/codex-and-agents-customizations/.agents/skills/epic-plan/SKILL.md +17 -1
- package/resources/codex-and-agents-customizations/.agents/skills/epic-run/SKILL.md +2 -1
- package/resources/codex-and-agents-customizations/.agents/skills/evidence-and-timestamp-conventions/SKILL.md +13 -0
- package/resources/codex-and-agents-customizations/.agents/skills/feature-promotion-lifecycle/SKILL.md +1 -1
- package/resources/codex-and-agents-customizations/.agents/skills/feature-review/SKILL.md +30 -6
- package/resources/codex-and-agents-customizations/.agents/skills/feature-review-workflow/SKILL.md +16 -6
- package/resources/codex-and-agents-customizations/.agents/skills/general-code-change/SKILL.md +1 -1
- package/resources/codex-and-agents-customizations/.agents/skills/general-unit-test/SKILL.md +3 -2
- package/resources/codex-and-agents-customizations/.agents/skills/orchestrate/SKILL.md +43 -11
- package/resources/codex-and-agents-customizations/.agents/skills/orchestrator-state/SKILL.md +41 -2
- package/resources/codex-and-agents-customizations/.agents/skills/orchestrator-workflow/SKILL.md +19 -4
- package/resources/codex-and-agents-customizations/.agents/skills/quality-tiers/SKILL.md +11 -7
- package/resources/codex-and-agents-customizations/.agents/skills/remediation-handoff-atomic-planner/SKILL.md +2 -0
- package/resources/codex-and-agents-customizations/.agents/skills/translate-claude-to-codex/SKILL.md +1 -1
- package/resources/codex-and-agents-customizations/.agents-variants/csharp-legacy/skills/csharp/SKILL.md +2 -2
- package/resources/codex-and-agents-customizations/.agents-variants/csharp-legacy/skills/csharp-qa-gate/SKILL.md +2 -2
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c1.toml +11 -0
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c2.toml +11 -0
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c3-elevated.toml +11 -0
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c3.toml +11 -0
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c4.toml +11 -0
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor.toml +11 -0
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c1.toml +10 -0
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c2.toml +10 -0
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c3-elevated.toml +10 -0
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c3.toml +10 -0
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c4.toml +10 -0
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner.toml +10 -0
- package/resources/codex-and-agents-customizations/.codex/agents/epic-orchestrator.toml +2 -1
- package/resources/codex-and-agents-customizations/.codex/agents/feature-review.toml +6 -6
- package/resources/codex-and-agents-customizations/.codex/agents/feature-reviewer-c1.toml +1 -0
- package/resources/codex-and-agents-customizations/.codex/agents/feature-reviewer-c2.toml +1 -0
- package/resources/codex-and-agents-customizations/.codex/agents/feature-reviewer-c3-elevated.toml +1 -0
- package/resources/codex-and-agents-customizations/.codex/agents/feature-reviewer-c3.toml +1 -0
- package/resources/codex-and-agents-customizations/.codex/agents/feature-reviewer-c4.toml +1 -0
- package/resources/codex-and-agents-customizations/.codex/agents/feature-reviewer.toml +1 -0
- package/resources/codex-and-agents-customizations/.codex/agents/orchestrator-c1.toml +3 -3
- package/resources/codex-and-agents-customizations/.codex/agents/orchestrator-c2.toml +3 -3
- package/resources/codex-and-agents-customizations/.codex/agents/orchestrator-c3-elevated.toml +3 -3
- package/resources/codex-and-agents-customizations/.codex/agents/orchestrator-c3.toml +3 -3
- package/resources/codex-and-agents-customizations/.codex/agents/orchestrator-c4.toml +3 -3
- package/resources/codex-and-agents-customizations/.codex/agents/orchestrator.toml +3 -3
- package/resources/codex-and-agents-customizations/.codex/codex-web-setup.sh +318 -273
- package/resources/codex-and-agents-customizations/.codex/config.toml +1 -1
- package/resources/codex-and-agents-customizations/.codex/hooks/check-powershell-test-purity.ps1 +7 -1
- package/resources/codex-and-agents-customizations/.codex/hooks/check-python-test-purity.ps1 +7 -1
- package/resources/codex-and-agents-customizations/.codex/hooks/codex-epic-child-launch-attestation.ps1 +1 -1
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-checkpoint-monotonic.ps1 +7 -1
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-codex-model-routing.ps1 +8 -2
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-completion-consistency.ps1 +97 -44
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-completion-helpers.ps1 +105 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-child-worktree-binding.ps1 +7 -1
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-merge-gate.ps1 +37 -5
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-planning-only.ps1 +6 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-root-invocation.ps1 +7 -1
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-wave-barrier.ps1 +7 -1
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-worktree-removal-gate.ps1 +54 -41
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-evidence-locations.ps1 +7 -1
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate-epic-scope.ps1 +35 -14
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate-helpers.ps1 +31 -58
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate-modes.ps1 +63 -47
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate-targets.ps1 +433 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate.ps1 +24 -11
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-powershell-batch-budget.ps1 +8 -2
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-promotion-mcp-only.ps1 +13 -4
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-python-batch-budget.ps1 +8 -2
- package/resources/codex-and-agents-customizations/.codex/hooks/feature-folder-resolution.ps1 +373 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/feature-review-coverage-thresholds.ps1 +85 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-heredoc.ps1 +119 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-invocation-operands.ps1 +198 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-invocation.ps1 +254 -255
- package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-payload-powershell.ps1 +201 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-payload.ps1 +484 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-scanner.ps1 +27 -110
- package/resources/codex-and-agents-customizations/.codex/hooks/hook-dependency-guard.ps1 +114 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/hook-docs-only-diff.ps1 +493 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/validate-bash.ps1 +8 -2
- package/resources/codex-and-agents-customizations/.codex/hooks/validate-codex-subagent-routing.ps1 +7 -1
- package/resources/codex-and-agents-customizations/.codex/hooks/validate-feature-review-coverage.ps1 +24 -8
- package/resources/codex-and-agents-customizations/pack-manifests/core.json +9 -0
- package/resources/customizations/.github/agents/csharp-typed-engineer.agent.md +2 -2
- package/resources/customizations/.github/instructions/csharp-code-change.instructions.md +4 -4
- package/resources/customizations/.github/instructions/csharp-unit-test.instructions.md +2 -2
- package/resources/customizations/.github/skills/acceptance-criteria-tracking/SKILL.md +9 -1
- package/resources/customizations/.github/skills/atomic-plan-contract/SKILL.md +4 -0
- package/resources/customizations/.github/skills/evidence-and-timestamp-conventions/SKILL.md +13 -0
- package/resources/customizations/.github/skills/feature-review-workflow/SKILL.md +1 -1
- package/resources/powershell/PoshQC/PoshQC.Coverage.psm1 +314 -0
- package/resources/powershell/PoshQC/PoshQC.Testing.psm1 +25 -28
- package/resources/powershell/PoshQC/PoshQC.psm1 +1 -0
- package/resources/powershell/PoshQC/README.md +8 -2
- package/resources/powershell/PoshQC/settings/pester.runsettings.psd1 +2 -315
|
@@ -34,11 +34,11 @@ Write timestamped artifacts into the active feature folder:
|
|
|
34
34
|
- `policy-audit.<timestamp>.md`
|
|
35
35
|
- `code-review.<timestamp>.md`
|
|
36
36
|
- `feature-audit.<timestamp>.md`
|
|
37
|
-
- `remediation-inputs.<timestamp>.md`
|
|
38
|
-
- `remediation-plan.<timestamp>.md` when
|
|
37
|
+
- `remediation-inputs.<timestamp>.md` for every review with at least one blocking finding, including `HALT_NON_REMEDIABLE` and `AWAITING_CI` reviews
|
|
38
|
+
- `remediation-plan.<timestamp>.md` only when the verdict is `REMEDIATION_REQUIRED`
|
|
39
39
|
|
|
40
40
|
The final review report MUST end with these exact single-line fields:
|
|
41
|
-
- `REVIEW_STATUS: PASS` or `REVIEW_STATUS:
|
|
41
|
+
- `REVIEW_STATUS: PASS`, `REVIEW_STATUS: REMEDIATION_REQUIRED`, `REVIEW_STATUS: HALT_NON_REMEDIABLE`, or `REVIEW_STATUS: AWAITING_CI`
|
|
42
42
|
- `FEATURE_FOLDER: <path>`
|
|
43
43
|
- `POLICY_AUDIT: <path>`
|
|
44
44
|
- `CODE_REVIEW: <path>`
|
|
@@ -46,6 +46,28 @@ The final review report MUST end with these exact single-line fields:
|
|
|
46
46
|
- `REMEDIATION_INPUTS: <path-or-NONE>`
|
|
47
47
|
- `REMEDIATION_PLAN: <path-or-NONE>`
|
|
48
48
|
|
|
49
|
+
`HALT_NON_REMEDIABLE` and `AWAITING_CI` require `REMEDIATION_PLAN: NONE`.
|
|
50
|
+
|
|
51
|
+
### Remediability Contract
|
|
52
|
+
|
|
53
|
+
Every blocking finding receives exactly one remediability class (exact, case-sensitive):
|
|
54
|
+
- `autonomous`: repository remediation can resolve the finding without a human decision. This is the default when a finding block carries no remediability line.
|
|
55
|
+
- `external_dependency`: a system, service, runtime, or published artifact outside the repository is unavailable or mismatched.
|
|
56
|
+
- `policy_hold`: proceeding requires a policy decision, exception, or authorization the orchestrator may not grant.
|
|
57
|
+
- `awaiting_ci`: the finding resolves when a CI result that has not completed becomes available.
|
|
58
|
+
- `human_decision_required`: a human must choose between alternatives or approve a direction.
|
|
59
|
+
|
|
60
|
+
A published MCP runtime that lags the repository contract is classified `external_dependency`.
|
|
61
|
+
|
|
62
|
+
The verdict follows from the classes of all blocking findings: no blocking findings is `PASS`; at least one `autonomous` finding is `REMEDIATION_REQUIRED`; otherwise at least one `external_dependency`, `policy_hold`, or `human_decision_required` finding is `HALT_NON_REMEDIABLE`; otherwise every finding is `awaiting_ci` and the verdict is `AWAITING_CI`.
|
|
63
|
+
|
|
64
|
+
The remediation inputs file carries these line formats:
|
|
65
|
+
- one line `Review-Verdict: <VERDICT>` for the review,
|
|
66
|
+
- inside each blocking finding block, one line `Remediability: <class>`,
|
|
67
|
+
- inside each blocking finding block, one line `Remediability-Evidence: <text>` stating why the class applies.
|
|
68
|
+
|
|
69
|
+
These lines, including the evidence text, never contain the substrings the orchestrator counts when it counts blocking findings, so their presence does not change the blocking count.
|
|
70
|
+
|
|
49
71
|
Each required review artifact MUST pass the matching validator command before review can be reported as complete:
|
|
50
72
|
- the `validate_orchestration_artifacts` MCP tool with `artifact_type: "policy-audit"` and `artifact_path: <path>`
|
|
51
73
|
- the `validate_orchestration_artifacts` MCP tool with `artifact_type: "code-review"` and `artifact_path: <path>`
|
|
@@ -63,10 +85,12 @@ Each required review artifact MUST pass the matching validator command before re
|
|
|
63
85
|
5. Create the policy audit, code review, and feature audit.
|
|
64
86
|
- validate each artifact immediately after writing it
|
|
65
87
|
6. Check off passing acceptance criteria in the authoritative requirement sources per `acceptance-criteria-tracking`.
|
|
66
|
-
7. If remediation is required, create remediation inputs first and then hand off plan creation using `remediation-handoff-atomic-planner`.
|
|
88
|
+
7. Classify every blocking finding per the Remediability Contract. Remediation is required only when at least one blocking finding is `autonomous`. If remediation is required, create remediation inputs first and then hand off plan creation using `remediation-handoff-atomic-planner`. When every blocking finding is non-remediable, write the remediation inputs, report `HALT_NON_REMEDIABLE` or `AWAITING_CI` with `REMEDIATION_PLAN: NONE`, create no remediation plan target, and do not hand off to `atomic-planner`.
|
|
67
89
|
8. In the final report:
|
|
68
|
-
- set `REVIEW_STATUS: PASS` only when no
|
|
69
|
-
- set `REVIEW_STATUS: REMEDIATION_REQUIRED` when
|
|
90
|
+
- set `REVIEW_STATUS: PASS` only when no blocking finding exists,
|
|
91
|
+
- set `REVIEW_STATUS: REMEDIATION_REQUIRED` when at least one blocking finding is `autonomous`,
|
|
92
|
+
- set `REVIEW_STATUS: HALT_NON_REMEDIABLE` when no blocking finding is `autonomous` and at least one is `external_dependency`, `policy_hold`, or `human_decision_required`,
|
|
93
|
+
- set `REVIEW_STATUS: AWAITING_CI` when every blocking finding is `awaiting_ci`,
|
|
70
94
|
- include every required artifact-path field exactly once.
|
|
71
95
|
|
|
72
96
|
### Enforced Remediation Handoff Contract
|
package/resources/codex-and-agents-customizations/.agents/skills/feature-review-workflow/SKILL.md
CHANGED
|
@@ -63,6 +63,17 @@ Always apply:
|
|
|
63
63
|
- if the marker is missing or malformed, use `full-feature`
|
|
64
64
|
- if `minor-audit` is selected and `issue.md` lacks `## Acceptance Criteria`, require remediation
|
|
65
65
|
|
|
66
|
+
## Policy Rules
|
|
67
|
+
|
|
68
|
+
### modified-workflow-needs-green-run
|
|
69
|
+
|
|
70
|
+
If the branch diff modifies any path matching `.github/workflows/**`, `scripts/benchmarks/**`, or `.github/actions/**`, the policy audit emits a Blocking finding unless evidence of a green workflow run against the branch head is present in the remediation inputs.
|
|
71
|
+
|
|
72
|
+
- The rule provides a second, independent line of defense for CI-gate-modifying features, separate from and prior to the orchestrator CI Green Gate (S9).
|
|
73
|
+
- "Green workflow run against the branch head" means a run of the affected workflow whose conclusion is success and which satisfies either (a) or (b): (a) its head SHA equals the current branch head; or (b) all three predecessor-head conditions hold: (1) the run's head SHA is an ancestor of, or equal to, the current branch head and contains the latest commit that changes any path outside the active feature folder (`git merge-base --is-ancestor <commit> <run-sha>`); (2) every commit after the run's head SHA changes only paths inside the active feature folder (`git log <run-sha>..HEAD -- . ":!<feature-folder>"` returns no commits); (3) the policy audit states that the orchestrator CI Green Gate (S9) remains responsible for `ci_gate.conclusion == "success"` with `ci_gate.head_sha` equal to the final PR head before DONE. Condition (b) exists because an in-repo evidence artifact cannot name the SHA of the commit that contains it.
|
|
74
|
+
- A green `workflow_dispatch` run against the branch head also satisfies the rule, not only a PR-context run. This mitigates the chicken-and-egg case where a feature must land its CI gate before the gate can run in PR context (see spec.md Risks & Mitigations).
|
|
75
|
+
- When the rule fires and no qualifying green-run evidence is present, record a Blocking finding classified `awaiting_ci` (the remediation inputs carry `Remediability: awaiting_ci` and a `Remediability-Evidence:` line naming the awaited workflow) and route it to the wait path (`AWAITING_CI` when no other class is present) instead of the remediation handoff.
|
|
76
|
+
|
|
66
77
|
## Ordered Procedure
|
|
67
78
|
|
|
68
79
|
1. **Resolve the base branch**
|
|
@@ -97,10 +108,7 @@ Always apply:
|
|
|
97
108
|
- Python: `poetry run pytest --cov` → artifact: `artifacts/python/lcov.info`
|
|
98
109
|
- PowerShell: `mcp__drm-copilot__run_poshqc_test` → artifact: `artifacts/pester/powershell-coverage.xml`
|
|
99
110
|
- C#: `vstest.console.exe <test-assembly-paths> /EnableCodeCoverage` → artifact: `artifacts/csharp/coverage.xml`
|
|
100
|
-
- Coverage thresholds:
|
|
101
|
-
- New code files (added in this feature): line coverage must be >= 90%. Flag as FAIL otherwise.
|
|
102
|
-
- Modified files (changed but previously existing): line coverage must show no regression relative to baseline and must remain >= 80%. Flag as FAIL otherwise.
|
|
103
|
-
- Repo-wide line coverage must remain >= 80% per language. Flag as FAIL otherwise.
|
|
111
|
+
- Coverage thresholds: when the repository's root `CLAUDE.md` states a line or branch coverage threshold, that threshold governs; otherwise the defaults govern (line 85%, branch 75% for branch-capable languages). Each metric falls back independently. New files and modified files must meet the governing line threshold (and the branch threshold where measured); modified files must also show no regression on changed lines. Repo-wide coverage per language must meet the governing thresholds. Flag as FAIL otherwise.
|
|
104
112
|
- If coverage artifacts already exist from the executor run, inspect them instead of re-running.
|
|
105
113
|
- If no coverage artifact exists for a language that has changed files, flag as FAIL — coverage verification is mandatory for all languages with changed files.
|
|
106
114
|
- Run the smallest relevant subset first when the repo policy permits it.
|
|
@@ -134,8 +142,10 @@ Always apply:
|
|
|
134
142
|
- toolchain checks fail
|
|
135
143
|
- the code review contains blockers
|
|
136
144
|
- required acceptance criteria are FAIL or PARTIAL
|
|
137
|
-
- coverage
|
|
145
|
+
- coverage below the governing thresholds defined in step 5 (repo-wide per language, modified files including any regression on changed lines, or new files)
|
|
138
146
|
- coverage artifact absent for any language that has changed files
|
|
147
|
+
- Classify each blocking finding before triggering remediation: every blocking finding receives one `Remediability` class (`autonomous`, `external_dependency`, `policy_hold`, `awaiting_ci`, or `human_decision_required`; `autonomous` when no class is stated).
|
|
148
|
+
- Trigger remediation only for `autonomous` findings. When no blocking finding is `autonomous`, write the remediation inputs, report `HALT_NON_REMEDIABLE` (at least one `external_dependency`, `policy_hold`, or `human_decision_required` finding) or `AWAITING_CI` (every finding `awaiting_ci`) with `REMEDIATION_PLAN: NONE`, create no remediation plan target, and do not hand off to `atomic-planner`.
|
|
139
149
|
- Create `remediation-inputs.<timestamp>.md` first.
|
|
140
150
|
- Create the target remediation plan file from the canonical plan template.
|
|
141
151
|
- Hand off plan creation through `remediation-handoff-atomic-planner`.
|
|
@@ -145,7 +155,7 @@ Always apply:
|
|
|
145
155
|
- Verify every reported artifact exists on disk before reporting completion.
|
|
146
156
|
- Report artifact paths and a concise go/no-go recommendation for PR readiness.
|
|
147
157
|
- End the final report with these exact single-line fields:
|
|
148
|
-
- `REVIEW_STATUS: PASS` or `REVIEW_STATUS:
|
|
158
|
+
- `REVIEW_STATUS: PASS`, `REVIEW_STATUS: REMEDIATION_REQUIRED`, `REVIEW_STATUS: HALT_NON_REMEDIABLE`, or `REVIEW_STATUS: AWAITING_CI`
|
|
149
159
|
- `FEATURE_FOLDER: <path>`
|
|
150
160
|
- `POLICY_AUDIT: <path>`
|
|
151
161
|
- `CODE_REVIEW: <path>`
|
package/resources/codex-and-agents-customizations/.agents/skills/general-code-change/SKILL.md
CHANGED
|
@@ -29,7 +29,7 @@ Apply these priorities in order when designing or changing code:
|
|
|
29
29
|
|
|
30
30
|
## Module Rigor Tiers
|
|
31
31
|
|
|
32
|
-
Module rigor tiers (T1–T4) and the uniform-versus-tier-dependent gate matrix are defined in `.agents/skills/quality-tiers.md
|
|
32
|
+
Module rigor tiers (T1–T4) and the uniform-versus-tier-dependent gate matrix are defined in `.agents/skills/quality-tiers/SKILL.md` and apply only when `quality-tiers.yml` exists at the repository root; in that case every project must be classified in it. A repository without `quality-tiers.yml` has not adopted tiers, and the tier requirements do not apply.
|
|
33
33
|
|
|
34
34
|
## Mandatory Toolchain Loop
|
|
35
35
|
|
|
@@ -23,10 +23,11 @@ Every unit test must satisfy all five of these properties:
|
|
|
23
23
|
|
|
24
24
|
## Coverage Requirements
|
|
25
25
|
|
|
26
|
+
- Threshold precedence: when the repository's root `AGENTS.md` states line or branch coverage thresholds, those thresholds govern; when `AGENTS.md` states none, thresholds stated in the repository's root `CLAUDE.md` govern. The 85% line and 75% branch figures are defaults that apply only when neither root `AGENTS.md` nor root `CLAUDE.md` states thresholds. This precedence applies to every restatement of these figures in other skills, agents, and rule files. Each metric falls back independently: when a root file states only a line threshold or only a branch threshold, that threshold governs its metric and the next source in this order, ending with the default, governs the other.
|
|
26
27
|
- **Line coverage must remain >= 85% across all tiers (T1–T4).**
|
|
27
28
|
- **Branch coverage must remain >= 75% across all tiers (T1–T4) for languages whose coverage tooling measures branch coverage.** PowerShell (Pester) and bash (kcov) are the exceptions: neither tool measures branch coverage in any output format, so only the line threshold applies to them and there is no branch-coverage gate. This is a threshold exemption only; PowerShell and bash production files remain in the coverage denominator under the Coverage Exclusion Policy below.
|
|
28
29
|
- Code changes or refactors must not reduce coverage for the lines that were changed.
|
|
29
|
-
- Tier-specific lower coverage thresholds are not used
|
|
30
|
+
- Tier-specific lower coverage thresholds are not used. See `.agents/skills/quality-tiers/SKILL.md` for the full tier system, which applies only when `quality-tiers.yml` exists at the repository root.
|
|
30
31
|
- Coverage is a supporting metric, not the sole quality gate. Untested critical behavior is not acceptable even if the overall percentage looks good.
|
|
31
32
|
- Configure coverage tooling to exclude test files (e.g., `tests/`) so metrics reflect application code, not tests.
|
|
32
33
|
- Type-only / interface-only modules with no executable behavior may be omitted from coverage measurement. Examples: Python `Protocol`-only modules consumed only under `TYPE_CHECKING`, TypeScript interface/type-only files, and C# interface-only files. Such modules legitimately report 0% executable coverage and may be excluded from measurement. This is a clarification only; it does not lower any coverage threshold.
|
|
@@ -89,7 +90,7 @@ Colocation — placing test files alongside production source files in `src/` or
|
|
|
89
90
|
|
|
90
91
|
## Test Categories
|
|
91
92
|
|
|
92
|
-
The following test categories apply across the repository, with tier-dependent obligations per `.agents/skills/quality-tiers.md
|
|
93
|
+
The following test categories apply across the repository, with tier-dependent obligations per `.agents/skills/quality-tiers/SKILL.md`; those tier-dependent obligations apply only when `quality-tiers.yml` exists at the repository root:
|
|
93
94
|
|
|
94
95
|
- **Unit tests** — required for all tiers (T1–T4). Cover single units of behavior in isolation.
|
|
95
96
|
- **Property-based tests** — required for T1 and T2 modules: at least one property test per pure function. Use `fast-check` (TypeScript) or `hypothesis` (Python) where applicable.
|
|
@@ -128,6 +128,11 @@ route.
|
|
|
128
128
|
`not-applicable`, and `blocked_reason: "none"`.
|
|
129
129
|
- Do not edit production code, execute the plan, author or edit a PR, run feature review, monitor
|
|
130
130
|
CI, set `next_step: "complete"`, record `S12_complete`, or claim feature completion.
|
|
131
|
+
- Premise-falsified halt: use `blocked_reason: "premise_falsified"` when every delegation and
|
|
132
|
+
validator succeeded but evidence gathered during execution falsified the plan's premise. Still
|
|
133
|
+
record the evidence path in free-form checkpoint keys; `blocked_reason` carries only the
|
|
134
|
+
classification. The preparation terminal checkpoint above still sets `blocked_reason: "none"`.
|
|
135
|
+
The full `blocked_reason` vocabulary and its partition are in `.claude/rules/orchestrator-state.md`.
|
|
131
136
|
|
|
132
137
|
Only the literal JSON Boolean `false` in the route configuration disables the CI requirement.
|
|
133
138
|
Missing, malformed, string-valued, or unknown route data fails closed. The preparation mutation
|
|
@@ -290,10 +295,12 @@ skill use. The checkpoint must include:
|
|
|
290
295
|
- `required_mcp_tools`: exactly the selected route's `required_mcp_tools`
|
|
291
296
|
- `delegation_receipts`: one receipt for each required agent
|
|
292
297
|
- `skill_receipts`: one required receipt for each required skill, with evidence
|
|
293
|
-
- `mcp_call_receipts`: one successful receipt for each required MCP tool
|
|
298
|
+
- `mcp_call_receipts`: one successful receipt for each required MCP tool unless a valid `issue_adoption` record waives it
|
|
294
299
|
- `local_execution_overrides`: an empty list at completion
|
|
295
300
|
- `delegation_bypasses`: an empty list at completion
|
|
296
301
|
- `lifecycle_operations`: any lifecycle operation must record `surface: "mcp"`
|
|
302
|
+
- `ci_gate`: the CI result object defined in `## CI Green Gate`, with keys `conclusion`, `head_sha`, and `verified_at`
|
|
303
|
+
- `pr_gate`: the pull-request object defined in `## CI Green Gate`, with keys `pr_number`, `pr_url`, `head_branch`, and `head_sha`
|
|
297
304
|
|
|
298
305
|
If any required handoff, skill receipt, MCP receipt, or empty bypass list is
|
|
299
306
|
missing, `validate_orchestration_artifacts --require-complete` fails and the
|
|
@@ -405,22 +412,32 @@ The review subagent compares against a base branch; uncommitted changes are invi
|
|
|
405
412
|
After each `feature-reviewer` delegation returns:
|
|
406
413
|
|
|
407
414
|
1. Read the exact terminal status lines from the review result.
|
|
408
|
-
2. If the result does not include `REVIEW_STATUS: PASS` or `REVIEW_STATUS:
|
|
409
|
-
3.
|
|
410
|
-
4.
|
|
415
|
+
2. If the result does not include `REVIEW_STATUS: PASS`, `REVIEW_STATUS: REMEDIATION_REQUIRED`, `REVIEW_STATUS: HALT_NON_REMEDIABLE`, or `REVIEW_STATUS: AWAITING_CI`, stop and record blocked state.
|
|
416
|
+
3. When the remediation inputs carry a `Review-Verdict:` line, recompute the verdict from the finding classes (a blocking finding block without a remediability line counts as `autonomous`). A mismatch between the declared and recomputed verdicts is a reviewer contract error: record it under `artifact_errors`, re-request the review once, and halt with `blocked_reason: "delegate_contract_incomplete"` if it persists.
|
|
417
|
+
4. Append a `remediation_loop.review_outcomes[]` entry (`verdict` plus one `findings[]` object with `remediability` per blocking finding) for every review, including `PASS`.
|
|
418
|
+
5. If the result is `REVIEW_STATUS: PASS`, advance to the PR creation gate.
|
|
419
|
+
6. If the result is `REVIEW_STATUS: REMEDIATION_REQUIRED`, require both `REMEDIATION_INPUTS: <path>` and `REMEDIATION_PLAN: <path>` and then enter the remediation loop with the plan scoped to the `autonomous` findings; non-remediable findings carry forward unchanged.
|
|
420
|
+
7. If the result is `REVIEW_STATUS: HALT_NON_REMEDIABLE`, require `REMEDIATION_PLAN: NONE` and halt: set `blocked_reason` to the highest-precedence halt class present, append one `human_interaction.requirements[]` entry with `response: "halt"` for each halt class present (`external_dependency`, `policy_hold`, `human_decision_required`) describing the human action needed, leave `remediation_loop.completed_attempts` unchanged, write no cycle, create no remediation plan, and stop. The precedence is:
|
|
421
|
+
|
|
422
|
+
Halt precedence: human_decision_required > policy_hold > external_dependency
|
|
423
|
+
|
|
424
|
+
8. If the result is `REVIEW_STATUS: AWAITING_CI`, require `REMEDIATION_PLAN: NONE` and wait: set `blocked_reason: "awaiting_ci"`, set `next_step` to the step that re-checks (`S7_feature_review` for a review-time wait, `S9_ci_green` for a CI poll timeout), record no `human_interaction.requirements[]` entry for the wait, write no cycle, and create no remediation plan. Poll within the existing bounded CI interval and timeout; when the bound is exhausted, persist and stop. On resume, set `blocked_reason: "none"` and re-run the named step. For a review-time wait, the awaited workflow is named in the finding's `Remediability-Evidence:` line.
|
|
425
|
+
9. A CI Green Gate poll timeout is recorded as a finding with `Remediability: awaiting_ci` and follows the wait path; a failed check stays `autonomous` and enters the remediation loop.
|
|
411
426
|
|
|
412
427
|
## Remediation Loop (R1–R5)
|
|
413
428
|
|
|
414
|
-
A bounded loop consisting of five steps. The
|
|
429
|
+
A bounded loop consisting of five steps. The attempt count is `remediation_loop.completed_attempts`, and `remediation_pass` equals `remediation_loop.completed_attempts`. The active cycle number is `completed_attempts + 1`; `remediation_loop.current_cycle` is a record position in `cycles[]`, not a count. A halt or wait verdict never opens a cycle, and every cycle opened from a review records `opened_by_review`, the zero-based index of that `review_outcomes[]` entry.
|
|
430
|
+
|
|
431
|
+
Cycle accounting: a remediation attempt is complete when R3 execution finished (`execution_status: "complete"`) and the pre-R4 commit recorded a non-empty change set; only then set `candidate_applied: true` on that cycle and increment `completed_attempts`. A cycle that ends without a candidate (execution not started, execution failed, or an empty staged change set) records `candidate_applied: false` and consumes no number. It is followed by at most one re-plan under the same number when the executor output identifies an autonomous plan defect; otherwise reclassify the blocker (typically `external_dependency`) and halt. Two consecutive no-candidate cycles halt with `step6_status: "blocked_remediation_loop_limit"`.
|
|
415
432
|
|
|
416
433
|
- **R1 — Remediation plan of record:** Use the exact `REMEDIATION_PLAN: <path>` returned by the review as the starting plan of record for the loop.
|
|
417
434
|
- **R2 — Preflight clearance:** Delegate to `atomic-executor` for precondition validation only (no implementation). If the executor does not return `PREFLIGHT: ALL CLEAR`, return to R1 by re-delegating to `atomic-planner` against the same remediation-plan path with the required-changes output from the executor. Only after `PREFLIGHT: ALL CLEAR` may the orchestrator advance to R3.
|
|
418
435
|
- **R3 — Remediation execution:** Delegate to `atomic-executor` with full execution authorization. Each task's toolchain loop (format → lint → type-check → test) is mandatory; no skipping.
|
|
419
436
|
- **Pre-R4 commit:** Stage all changes (`git add -A`), run MCP tool `collect_commit_context`, delegate to `commit_steward` using the resulting artifact, and commit with the generated message. Advance to R4 only after a successful commit.
|
|
420
437
|
- **R4 — Re-audit:** Refresh PR context via MCP tool `collect_pr_context`, then delegate to `feature-reviewer` with the same inputs as the original review (resolved base branch, feature folder, refreshed PR context artifacts, acceptance-criteria source). No scope narrowing. The canonical issue number line must be included.
|
|
421
|
-
- **R5 — Loop-exit decision:**
|
|
438
|
+
- **R5 — Loop-exit decision:** Evaluate the re-audit per Post-Review Outcome Evaluation. If it returns `REVIEW_STATUS: PASS`, exit the loop and advance to the PR creation gate. If it returns `REVIEW_STATUS: HALT_NON_REMEDIABLE` or `REVIEW_STATUS: AWAITING_CI`, follow the halt or wait branch instead of opening the next cycle. Otherwise, record the cycle's `candidate_applied` value and the resulting `completed_attempts` in the checkpoint and return to R1.
|
|
422
439
|
|
|
423
|
-
**Termination guard:**
|
|
440
|
+
**Termination guard:** Halt after three completed attempts: when `remediation_loop.completed_attempts` equals 3 and the latest verdict is not `PASS`, the orchestrator records `step6_status: "blocked_remediation_loop_limit"` in the checkpoint and halts. No further automation is attempted.
|
|
424
441
|
|
|
425
442
|
## Issue Number Consistency
|
|
426
443
|
|
|
@@ -436,9 +453,24 @@ If a subagent artifact references a different issue number, the orchestrator rej
|
|
|
436
453
|
## CI Green Gate
|
|
437
454
|
|
|
438
455
|
Before PR/DONE completion, the orchestrator must observe the live PR head SHA
|
|
439
|
-
and
|
|
440
|
-
head SHA and CI result. DONE is blocked unless
|
|
441
|
-
current PR head SHA.
|
|
456
|
+
and every GitHub check on that head SHA through `gh`. The checkpoint must record
|
|
457
|
+
the checked head SHA and CI result. DONE is blocked unless every check on the
|
|
458
|
+
current PR head SHA passed or was skipped.
|
|
459
|
+
|
|
460
|
+
Gate procedure:
|
|
461
|
+
|
|
462
|
+
1. Resolve the live PR head SHA and the PR base branch with `gh pr view --json headRefOid,baseRefName`.
|
|
463
|
+
2. Invoke `gh pr checks --json bucket,name,state,link,workflow` against that head SHA. The query covers every check on the head SHA for every PR, whether or not branch protection marks the check as required.
|
|
464
|
+
3. Parse the JSON by running `pwsh -NoProfile -File .claude/lib/ci-gate/Invoke-CiGateParser.ps1 -ChecksJson <checks-json> -HeadSha <head-sha>`, appending `-RequireWorkflow CI` when the PR base branch is an `epic/<slug>-integration` branch. The parser derives `ci_gate.conclusion` over every queried check: `success` when every check passed or was skipped, `failure` when any check failed or was cancelled, and `pending` when any check is still in progress.
|
|
465
|
+
4. Epic-child rule: when the PR base branch is an `epic/<slug>-integration` branch, an empty check list is not accepted as green. Every check returned by the unfiltered query counts: a failing or cancelled non-`CI` check fails the gate, and a pending one keeps it pending. With `-RequireWorkflow CI`, the parser never returns `success` until at least one passing `CI` check is observed.
|
|
466
|
+
5. No-checks rule: when `gh pr checks` fails with a `no checks reported` error, that error is never treated as green for any PR. On an epic child, the parser runs with `-ChecksJson '[]'` and `-RequireWorkflow CI`, which returns `pending`; on any other PR the gate stays `pending` within the bounded poll.
|
|
467
|
+
6. Parser-absent rule: when `.claude/lib/ci-gate/Invoke-CiGateParser.ps1` does not exist in the repository, the orchestrator does not derive `success` by hand; it must stop and persist blocked state before PR/DONE completion.
|
|
468
|
+
|
|
469
|
+
The checkpoint records the CI result in a top-level `ci_gate` object with the required keys `conclusion`, `head_sha`, and `verified_at`. `conclusion` is one of `success`, `failure`, or `pending`; `head_sha` is the PR head SHA the queried checks were observed against; `verified_at` is the ISO-8601 time at which this gate (S9) recorded the result. DONE requires `ci_gate.conclusion` equal to `success` and `ci_gate.head_sha` equal to the current PR head SHA. The key set is defined by `CI_GATE_KEYS` in `scripts/dev_tools/validate_orchestrator_state.py`, and the TypeScript MCP validator used by the Codex runtime requires the same keys.
|
|
470
|
+
|
|
471
|
+
The checkpoint records the pull request in a top-level `pr_gate` object with the keys `pr_number`, `pr_url`, `head_branch`, and `head_sha`. The key set is defined by `PR_GATE_KEYS` in `scripts/dev_tools/_orchestrator_state_routing.py`.
|
|
472
|
+
|
|
473
|
+
CI-dependent acceptance criteria are criteria whose verification requires the result of CI on the PR head. The item's own orchestrator run owns their check-off. After `ci_gate.conclusion` is `success`, check off each CI-dependent criterion in the item's own worktree, commit, push to the PR branch, and re-run this gate against the new head SHA, so that `ci_gate.head_sha` equals the final PR head before DONE. A failed re-run enters the Remediation Loop (R1–R5) as a blocking finding; the shared `remediation_loop.completed_attempts` count and its halt after three completed attempts are unchanged. A parent or coordinating session never commits these check-offs from its own root.
|
|
442
474
|
|
|
443
475
|
## PR Creation Gate
|
|
444
476
|
|
|
@@ -450,7 +482,7 @@ The orchestrator must not create a PR, push a branch for PR purposes, or report
|
|
|
450
482
|
2. The AC verification artifact (`p14-acceptance-criteria-checkoff.md` or equivalent) confirms all acceptance criteria pass.
|
|
451
483
|
3. The mandatory toolchain passed in its most recent run on the branch (no linting/type-check/test failures).
|
|
452
484
|
4. The checkpoint `next_step` is `S8_create_pr`.
|
|
453
|
-
5.
|
|
485
|
+
5. Every check on the current PR head SHA passed or was skipped (`ci_gate.conclusion` is `success`).
|
|
454
486
|
|
|
455
487
|
This gate is non-negotiable. Each condition is independently verified before PR creation proceeds.
|
|
456
488
|
|
package/resources/codex-and-agents-customizations/.agents/skills/orchestrator-state/SKILL.md
CHANGED
|
@@ -9,7 +9,7 @@ Source: legacy Claude rule `orchestrator-state`.
|
|
|
9
9
|
|
|
10
10
|
# Orchestrator-State Remediation-Cycle and Human-Interaction Invariants
|
|
11
11
|
|
|
12
|
-
This rule governs remediation-cycle records and the optional `human_interaction` block in the orchestrator-state checkpoint at `artifacts/orchestration/orchestrator-state.json`. It documents
|
|
12
|
+
This rule governs remediation-cycle records and the optional `human_interaction` block in the orchestrator-state checkpoint at `artifacts/orchestration/orchestrator-state.json`. It documents the invariants that must hold for each remediation cycle and for the remediation-loop review outcomes and attempt count, plus three invariants for the `human_interaction` block, so that resume and review workflows do not depend on a structurally invalid checkpoint.
|
|
13
13
|
|
|
14
14
|
## Foreign Schema Warning (do not copy verbatim)
|
|
15
15
|
|
|
@@ -60,7 +60,7 @@ completion authority.
|
|
|
60
60
|
|
|
61
61
|
## Scope and Backward Compatibility
|
|
62
62
|
|
|
63
|
-
These invariants apply only when the checkpoint contains a top-level `remediation_loop
|
|
63
|
+
These invariants apply only when the checkpoint contains a top-level `remediation_loop`; the per-cycle invariants apply when it has a `cycles` array, and the review-outcome and attempt-count invariants apply when their keys are present. A checkpoint with no `remediation_loop` (the existing step-based checkpoint shape) is unaffected: it validates exactly as before and produces no new errors. The invariants are additive.
|
|
64
64
|
|
|
65
65
|
## Invariants (per remediation cycle)
|
|
66
66
|
|
|
@@ -70,6 +70,45 @@ These invariants apply only when the checkpoint contains a top-level `remediatio
|
|
|
70
70
|
|
|
71
71
|
3. **Exit gate requires zero blocking findings.** When a cycle's `exit_condition_met == true`, its `blocking_count` must be `0`. A non-zero `blocking_count` with `exit_condition_met == true` is a malformed cycle (the exit gate was marked satisfied while blocking findings remained).
|
|
72
72
|
|
|
73
|
+
4. **`candidate_applied` is a boolean (R5).** When a cycle object carries `candidate_applied`, its value must be a JSON boolean, and any other value is a malformed cycle.
|
|
74
|
+
|
|
75
|
+
5. **A completed attempt requires completed execution (R6).** A cycle whose `candidate_applied == true` must have `execution_status == "complete"`, and `candidate_applied == true` with any other execution status is a malformed cycle.
|
|
76
|
+
|
|
77
|
+
6. **`opened_by_review` references a remediation review (R11).** When a cycle object carries `opened_by_review`, its value must be a non-negative integer (not a boolean) that indexes an object entry of the `remediation_loop.review_outcomes` list whose `verdict` is `REMEDIATION_REQUIRED`, and a value that is not such an integer, is out of range, or references an outcome with any other verdict is a malformed cycle.
|
|
78
|
+
|
|
79
|
+
7. **`completed_attempts` counts completed attempts (R7).** When `remediation_loop.completed_attempts` is present, it must be a non-negative integer (not a boolean) equal to the number of object cycles whose `candidate_applied` is `true` (zero when `cycles` is absent or not a list), and any other value is a malformed loop.
|
|
80
|
+
|
|
81
|
+
## Invariants (remediation_loop.review_outcomes)
|
|
82
|
+
|
|
83
|
+
These invariants apply only when `remediation_loop` contains a `review_outcomes` key. The orchestrator appends one entry per review, including a `PASS` review, in the shape `{"verdict": <verdict>, "findings": [{"remediability": <class>}, ...]}`, where `findings` lists the review's blocking findings only. A halt or wait verdict records no remediation cycle.
|
|
84
|
+
|
|
85
|
+
Review verdicts (exact, case-sensitive):
|
|
86
|
+
|
|
87
|
+
| Verdict | Condition over the classes of the review's blocking findings |
|
|
88
|
+
|---|---|
|
|
89
|
+
| `PASS` | No blocking findings. |
|
|
90
|
+
| `REMEDIATION_REQUIRED` | At least one `autonomous` finding. |
|
|
91
|
+
| `HALT_NON_REMEDIABLE` | No `autonomous` finding, and at least one `external_dependency`, `policy_hold`, or `human_decision_required` finding. |
|
|
92
|
+
| `AWAITING_CI` | At least one finding, and every finding is `awaiting_ci`. |
|
|
93
|
+
|
|
94
|
+
Remediability classes (exact, case-sensitive) and the `blocked_reason` member (#523) that a halt or wait records for each class:
|
|
95
|
+
|
|
96
|
+
| Class | Meaning | `blocked_reason` member |
|
|
97
|
+
|---|---|---|
|
|
98
|
+
| `autonomous` | Repository remediation can resolve the finding without a human decision. | none (remediation loop) |
|
|
99
|
+
| `external_dependency` | A system, service, runtime, or published artifact outside the repository is unavailable or mismatched. | `external_dependency` |
|
|
100
|
+
| `policy_hold` | Proceeding requires a policy decision, exception, or authorization that the orchestrator may not grant. | `policy_hold` |
|
|
101
|
+
| `awaiting_ci` | The finding resolves when a CI result that has not completed becomes available. | `awaiting_ci` |
|
|
102
|
+
| `human_decision_required` | A human must choose between alternatives or approve a direction. | `human_decision_required` |
|
|
103
|
+
|
|
104
|
+
Derivation order. The verdict is a pure function of the findings' classes, evaluated in this order: no findings yields `PASS`; any `autonomous` finding yields `REMEDIATION_REQUIRED`; any `external_dependency`, `policy_hold`, or `human_decision_required` finding yields `HALT_NON_REMEDIABLE`; otherwise the verdict is `AWAITING_CI`.
|
|
105
|
+
|
|
106
|
+
1. **`review_outcomes` is a list of objects (R8).** `review_outcomes` must be a list, and each entry must be an object. A non-list value or a non-object entry is malformed.
|
|
107
|
+
|
|
108
|
+
2. **Verdict and class membership (R9).** Each outcome's `verdict` must be a string among the four verdicts, its `findings` must be a list (a missing key is not a list), and each finding must be an object whose `remediability` is a string among the five classes. Comparisons are case-sensitive, so a case variant such as `Pass` or `Autonomous` is malformed.
|
|
109
|
+
|
|
110
|
+
3. **Verdict matches its findings (R10).** When an outcome passes the membership checks, its `verdict` must equal the verdict that the derivation order yields for its findings' classes. A mismatch is a malformed outcome.
|
|
111
|
+
|
|
73
112
|
## Human-Interaction Scope and Backward Compatibility
|
|
74
113
|
|
|
75
114
|
These invariants apply only when the checkpoint contains a top-level `human_interaction` block. A checkpoint with no `human_interaction` key (the existing checkpoint shape) is unaffected: it validates exactly as before and produces no new errors. The invariants are additive and support the autonomous-execution mandate documented in `.agents/skills/orchestrate/SKILL.md`.
|
package/resources/codex-and-agents-customizations/.agents/skills/orchestrator-workflow/SKILL.md
CHANGED
|
@@ -157,6 +157,13 @@ Blocked-reason enum:
|
|
|
157
157
|
- `commit_context_missing`
|
|
158
158
|
- `no_staged_changes`
|
|
159
159
|
- `pre_implementation_gate_violation`
|
|
160
|
+
- `premise_falsified` — Every delegation and validator succeeded, but evidence gathered during execution falsified the premise on which the plan was built, so continuing would implement an invalid plan.
|
|
161
|
+
- `external_dependency` — The run cannot proceed because a system, service, runtime, or artifact outside the repository's control is unavailable or mismatched, and no in-repository remediation can resolve it.
|
|
162
|
+
- `policy_hold` — The run is stopped because proceeding requires a policy decision, exception, or authorization that the orchestrator is not permitted to grant autonomously.
|
|
163
|
+
- `awaiting_ci` — The run is waiting for a CI result that has not yet completed, and no remediation is warranted until that result is available.
|
|
164
|
+
- `human_decision_required` — The run requires a human to choose between alternatives or approve a direction before it can continue.
|
|
165
|
+
|
|
166
|
+
Blocked-reason partition: `none` (or JSON `null`) means the run is not blocked. The six validator-enforced members `spawn_agent_unavailable`, `delegation_launch_failed`, `delegate_no_receipt`, `delegate_contract_incomplete`, `validator_failed`, and `user_requested_stop` form the mechanical partition. The five members `premise_falsified`, `external_dependency`, `policy_hold`, `awaiting_ci`, and `human_decision_required` form the non-mechanical partition. The full vocabulary is published in `.claude/rules/orchestrator-state.md`.
|
|
160
167
|
|
|
161
168
|
Pre-implementation violation schema:
|
|
162
169
|
- `pre-implementation-violation` MUST be either `null` or an object with:
|
|
@@ -198,7 +205,8 @@ Completion-state invariants:
|
|
|
198
205
|
- every required skill MUST have a matching required `skill_receipts[].skill`
|
|
199
206
|
with non-empty evidence.
|
|
200
207
|
- every required MCP tool MUST have a successful `mcp_call_receipts[].tool`
|
|
201
|
-
receipt with non-empty evidence
|
|
208
|
+
receipt with non-empty evidence, unless a valid `issue_adoption` record
|
|
209
|
+
waives the tool.
|
|
202
210
|
- `local_execution_overrides` and `delegation_bypasses` MUST be empty lists at
|
|
203
211
|
completion.
|
|
204
212
|
- every recorded `lifecycle_operations[]` item MUST use `surface: "mcp"`.
|
|
@@ -228,6 +236,8 @@ Do not advance on summaries alone when an exact result signal is required.
|
|
|
228
236
|
- feature review result:
|
|
229
237
|
- `REVIEW_STATUS: PASS`
|
|
230
238
|
- `REVIEW_STATUS: REMEDIATION_REQUIRED`
|
|
239
|
+
- `REVIEW_STATUS: HALT_NON_REMEDIABLE`
|
|
240
|
+
- `REVIEW_STATUS: AWAITING_CI`
|
|
231
241
|
- `FEATURE_FOLDER: <path>`
|
|
232
242
|
- `POLICY_AUDIT: <path>`
|
|
233
243
|
- `CODE_REVIEW: <path>`
|
|
@@ -382,18 +392,23 @@ Required behavior:
|
|
|
382
392
|
|
|
383
393
|
Apply this loop after any required review returns `REVIEW_STATUS: REMEDIATION_REQUIRED`.
|
|
384
394
|
|
|
395
|
+
Attempt accounting: `remediation-pass` equals `remediation_loop.completed_attempts`, the number of cycles whose `candidate_applied` is `true`. A cycle records `candidate_applied: true` only when remediation execution completed and the remediation commit recorded a non-empty change set. The active cycle number is `completed_attempts + 1`, and a cycle without a candidate consumes no number. Cap: halt after three completed attempts, that is, when `completed_attempts` equals 3 and the latest review is not `REVIEW_STATUS: PASS`, with `step6_status: "blocked_remediation_loop_limit"`.
|
|
396
|
+
|
|
397
|
+
Halt and wait branches: a review that returns `REVIEW_STATUS: HALT_NON_REMEDIABLE` or `REVIEW_STATUS: AWAITING_CI` never enters or continues this loop and opens no cycle. On `HALT_NON_REMEDIABLE`, set `blocked_reason` to the highest-precedence halt class present (`human_decision_required`, then `policy_hold`, then `external_dependency`), append one `human_interaction.requirements[]` entry with `response: "halt"` per halt class present, and stop. On `AWAITING_CI`, set `blocked_reason: "awaiting_ci"`, set `next_step` to the step that re-checks, persist, and stop; on resume, set `blocked_reason: "none"` and re-run that step.
|
|
398
|
+
|
|
385
399
|
1. Persist `review-status`, `remediation-inputs-path`, `remediation-plan-path`, and `remediation-pass` in the checkpoint.
|
|
386
400
|
2. Delegate `atomic-executor` in validation-only mode against the exact `remediation-plan-path`.
|
|
387
401
|
3. If the executor returns `PREFLIGHT: REVISIONS REQUIRED`, delegate `atomic-planner` to update the same `remediation-plan-path` in place and then repeat preflight clearance.
|
|
388
402
|
4. Only after `PREFLIGHT: ALL CLEAR`, delegate `atomic-executor` to execute the remediation plan exactly as written.
|
|
389
403
|
5. Stage all files with `git add -A`.
|
|
390
404
|
6. If staging is empty after execution, set `blocked_reason` to `no_staged_changes` and stop.
|
|
405
|
+
- Record `candidate_applied: false` for that cycle; it consumes no attempt number.
|
|
391
406
|
7. Use `repo-automation-adapter` to run MCP tool `collect_commit_context`, capture the returned on-disk artifact path as `commit-context-path`, and stop with `blocked_reason: commit_context_missing` if that path is unavailable.
|
|
392
407
|
8. Delegate `commit-steward` using `commit-context-path` as the authoritative staged-change input.
|
|
393
408
|
9. Commit the staged work with the exact message returned by `commit-steward`.
|
|
394
409
|
10. Use `repo-automation-adapter` to refresh PR-context artifacts through MCP tool `collect_pr_context` with the resolved base branch.
|
|
395
410
|
11. Delegate `feature-reviewer` again with the refreshed PR context.
|
|
396
|
-
12. If the new review still returns `REVIEW_STATUS: REMEDIATION_REQUIRED`,
|
|
411
|
+
12. Record `candidate_applied: true` for the cycle and set `remediation_loop.completed_attempts` and `remediation-pass` to the new count. If the new review still returns `REVIEW_STATUS: REMEDIATION_REQUIRED`, repeat the loop under the cap. Exit only when the latest review returns `REVIEW_STATUS: PASS`, or follow the halt or wait branch.
|
|
397
412
|
|
|
398
413
|
## Completion Gates
|
|
399
414
|
|
|
@@ -404,7 +419,7 @@ Do not claim mission completion until all of the following are true:
|
|
|
404
419
|
- small-path implementation has a receipt from the exact language-specific generated
|
|
405
420
|
typed-engineer deployment profile
|
|
406
421
|
- all required skills have `skill_receipts` with evidence
|
|
407
|
-
- all required MCP tools have successful `mcp_call_receipts`
|
|
422
|
+
- all required MCP tools have successful `mcp_call_receipts`, unless a valid `issue_adoption` record waives the tool
|
|
408
423
|
- no local execution override or delegation bypass is recorded
|
|
409
424
|
- the checkpoint is updated with the final state
|
|
410
425
|
- the canonical checkpoint path was used without sidecar replacement or backup substitution
|
|
@@ -421,7 +436,7 @@ Do not claim mission completion until all of the following are true:
|
|
|
421
436
|
- any required remediation loop run also includes a remediation execution receipt, a remediation commit receipt, and a final `REVIEW_STATUS: PASS`
|
|
422
437
|
- validator-backed checks for the approved plan, policy audit, code review, feature audit, and checkpoint state pass
|
|
423
438
|
- the canonical checkpoint passes `validate_orchestration_artifacts` with `artifact_type: "orchestrator-state"`, `require_complete: true`, `require_codex_topology: true`, and `require_codex_model_routing: true`
|
|
424
|
-
-
|
|
439
|
+
- every GitHub check on the current PR head SHA passed or was skipped before PR/DONE completion
|
|
425
440
|
|
|
426
441
|
## Hard Constraints
|
|
427
442
|
|
|
@@ -9,19 +9,21 @@ Source: legacy Claude rule `quality-tiers`.
|
|
|
9
9
|
|
|
10
10
|
# Module Rigor Tiers
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
Applicability: this skill (`.agents/skills/quality-tiers/SKILL.md`) applies only when `quality-tiers.yml` exists at the repository root, which indicates that the repository has adopted module rigor tiers. When that file is absent, there is no tier classification requirement, no `tier-classification` CI stage, and no tier-dependent gate (the escape-hatch limits, property-test density, mutation score, contract-bump rule, determinism retry rate, golden tests, and E2E suite scope in the Tier-dependent table below), and the absence of `quality-tiers.yml` is not a defect. The coverage defaults listed under Uniform across all tiers do not depend on tier adoption; their precedence is stated in that section.
|
|
13
|
+
|
|
14
|
+
When `quality-tiers.yml` exists, this skill defines the T1–T4 module rigor tier system used by the repository's CI gates, and the tier definitions and gate matrix in this document are the tier system's source of truth.
|
|
13
15
|
|
|
14
16
|
## Tiers
|
|
15
17
|
|
|
16
|
-
- **T1 — Critical.** Behavior bugs cause silent data loss, model drift, or security holes. Examples
|
|
17
|
-
- **T2 — Core.** Bugs cause feature regressions but not data loss. Examples:
|
|
18
|
-
- **T3 — Adapters & UI.** Glue around APIs the team does not own. Examples:
|
|
18
|
+
- **T1 — Critical.** Behavior bugs cause silent data loss, model drift, or security holes. Examples: classifier and scoring engines, identifier allocators and hierarchy operations, adapters that write to an external system of record, authentication and token handling, command dispatch.
|
|
19
|
+
- **T2 — Core.** Bugs cause feature regressions but not data loss. Examples: domain and application layers, data-transfer objects, settings store abstractions, schema definitions.
|
|
20
|
+
- **T3 — Adapters & UI.** Glue around APIs the team does not own. Examples: user-interface surfaces, host-platform API wrappers, third-party API and SDK wrappers, persistence I/O.
|
|
19
21
|
- **T4 — Scaffolding.** Examples: DI wiring, bootstrap, build scripts, dev tooling, generated code, manifests.
|
|
20
22
|
|
|
21
23
|
## Source of Truth
|
|
22
24
|
|
|
23
|
-
- `quality-tiers.yml` at
|
|
24
|
-
-
|
|
25
|
+
- When `quality-tiers.yml` exists at the repository root, it maps every project to one tier.
|
|
26
|
+
- In a repository that runs a `tier-classification` CI stage, that stage validates that every project entry has a tier and that no unclassified project exists, and it fails CI for an unclassified project.
|
|
25
27
|
|
|
26
28
|
## Uniform-vs-Tier-Dependent Gate Matrix
|
|
27
29
|
|
|
@@ -29,6 +31,8 @@ Per Authoritative Decision #2, line and branch coverage thresholds are uniform a
|
|
|
29
31
|
|
|
30
32
|
### Uniform across all tiers (T1–T4)
|
|
31
33
|
|
|
34
|
+
Threshold precedence: when the repository's root `AGENTS.md` states line or branch coverage thresholds, those thresholds govern; when `AGENTS.md` states none, thresholds stated in the repository's root `CLAUDE.md` govern. The 85% line and 75% branch figures are defaults that apply only when neither root `AGENTS.md` nor root `CLAUDE.md` states thresholds. This precedence applies to every restatement of these figures in other skills, agents, and rule files. Each metric falls back independently: when a root file states only a line threshold or only a branch threshold, that threshold governs its metric and the next source in this order, ending with the default, governs the other.
|
|
35
|
+
|
|
32
36
|
- Format check: 100% pass.
|
|
33
37
|
- Lint errors: 0.
|
|
34
38
|
- Type errors: 0.
|
|
@@ -51,4 +55,4 @@ Per Authoritative Decision #2, line and branch coverage thresholds are uniform a
|
|
|
51
55
|
|
|
52
56
|
## Rationale (uniform coverage thresholds)
|
|
53
57
|
|
|
54
|
-
High test coverage is a fundamental quality-control design choice that enables autonomous agentic development and trust in the work product. For that reason, line coverage >= 85% applies uniformly across T1–T4 to every coverage language, and branch coverage >= 75% applies uniformly across T1–T4 to every language whose coverage tooling measures branch coverage; tier-specific lower coverage floors are not used
|
|
58
|
+
High test coverage is a fundamental quality-control design choice that enables autonomous agentic development and trust in the work product. For that reason, line coverage >= 85% applies uniformly across T1–T4 to every coverage language, and branch coverage >= 75% applies uniformly across T1–T4 to every language whose coverage tooling measures branch coverage; tier-specific lower coverage floors are not used. These figures are defaults under the threshold precedence stated above: a root `AGENTS.md` or root `CLAUDE.md` that states coverage thresholds overrides them. Each metric falls back independently, so a root file that states only one of the two thresholds overrides only that one. The branch threshold is not applied to PowerShell or bash because Pester and kcov do not measure branch coverage. That exemption is a capability limit on an unevaluable threshold, not a licence to exclude files from measurement: PowerShell and bash production files remain in the coverage denominator under the Coverage Exclusion Policy in `.agents/skills/general-unit-test/SKILL.md`.
|
|
@@ -20,6 +20,8 @@ Trigger remediation when any of these are true:
|
|
|
20
20
|
- Toolchain checks fail.
|
|
21
21
|
- Acceptance criteria are not met.
|
|
22
22
|
|
|
23
|
+
Remediation triggers only on blocking findings classified `autonomous`. Each blocking finding carries one remediability class (`autonomous`, `external_dependency`, `policy_hold`, `awaiting_ci`, or `human_decision_required`). Non-remediable findings halt (`HALT_NON_REMEDIABLE`) or wait (`AWAITING_CI`): they receive remediation inputs but no remediation plan target and no `atomic_planner` handoff.
|
|
24
|
+
|
|
23
25
|
## Required Remediation Inputs
|
|
24
26
|
|
|
25
27
|
Create `remediation/<timestamp>/remediation-inputs.md` (one timestamped `remediation/` folder per cycle; reaudit artifacts from a triggering or exit review live under the sibling `audit/<timestamp>/` folder, per the canonical pattern documented in the Claude-side `remediation-handoff-atomic-planner` skill) with:
|
package/resources/codex-and-agents-customizations/.agents/skills/translate-claude-to-codex/SKILL.md
CHANGED
|
@@ -282,7 +282,7 @@ Every completion response must include:
|
|
|
282
282
|
| `.claude/agents/<name>.md` | `.codex/agents/<name>.toml` | model + sandbox OS-enforced; tools allowlist re-grounded |
|
|
283
283
|
| `.claude/settings.json` `permissions` | `[permissions.<name>]` in `config.toml` | OS-enforced via sandbox; more expressive than Claude |
|
|
284
284
|
| `.claude/hooks/*.ps1` (PreToolUse) | `[hooks] PreToolUse` + script | direct equivalent; exit 2 / permissionDecision deny |
|
|
285
|
-
| `.claude/hooks/*.ps1` (SubagentStop, exit
|
|
285
|
+
| `.claude/hooks/*.ps1` (SubagentStop, exit 2) | `[hooks] SubagentStop` + required CI check | degraded; CI status check is the hard gate |
|
|
286
286
|
| `permissions.deny` (secrets) | `[permissions.<name>.filesystem]` deny | OS-enforced |
|
|
287
287
|
|
|
288
288
|
## Invocation Examples
|
|
@@ -15,8 +15,8 @@ This rule file summarizes the C#-specific policies for this repository.
|
|
|
15
15
|
## Toolchain
|
|
16
16
|
|
|
17
17
|
1. **Formatting — CSharpier**: All C# source files must be formatted with CSharpier. Do not use `dotnet format`. Run `dotnet tool restore` first when the manifest tool has not been restored. Apply formatting with `dotnet tool run csharpier format .` and verify read-only with `dotnet tool run csharpier check .`. Always invoke through `dotnet tool run` so the manifest-pinned CSharpier version is used.
|
|
18
|
-
2. **Linting — .NET Analyzers**: C# code must pass Roslyn/.NET analyzer diagnostics. Command: `msbuild
|
|
19
|
-
3. **Type Checking — Nullable Analysis**: Compiler and nullable-flow diagnostics must pass with warnings as errors. Command: `msbuild
|
|
18
|
+
2. **Linting — .NET Analyzers**: C# code must pass Roslyn/.NET analyzer diagnostics. Command: `msbuild <solution>.sln /t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:EnableNETAnalyzers=true /p:EnforceCodeStyleInBuild=true`. `/t:Rebuild` is intentional for a warm local worktree: `/t:Build` can skip `CoreCompile` through MSBuild incrementality and exit 0 without running analyzers. CI may retain `/t:Build` on a cold checkout.
|
|
19
|
+
3. **Type Checking — Nullable Analysis**: Compiler and nullable-flow diagnostics must pass with warnings as errors. Command: `msbuild <solution>.sln /t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:TreatWarningsAsErrors=true`. `/t:Rebuild` is required locally so compiler and nullable-flow diagnostics actually run. Projects opt into nullable per file with `#nullable enable`; do not pass `/p:Nullable=enable`, which opts every unannotated file in at once.
|
|
20
20
|
4. **Testing — MSTest + Moq + FluentAssertions**: Run tests with: `vstest.console.exe <test-assembly-paths> /EnableCodeCoverage`
|
|
21
21
|
|
|
22
22
|
Run the toolchain in order: format → lint → type-check → test. Restart from step 1 if any step fails or changes files.
|
|
@@ -30,8 +30,8 @@ Before invoking this gate, the agent must have:
|
|
|
30
30
|
Run the full toolchain in this exact order. If any step fails or modifies files, fix the issue and restart from step 1. Do not stop the loop until all four steps complete without errors in a single pass.
|
|
31
31
|
|
|
32
32
|
1. `dotnet tool restore` (when the manifest tool has not been restored), then `dotnet tool run csharpier format .` to apply formatting and `dotnet tool run csharpier check .` to verify read-only.
|
|
33
|
-
2. `msbuild
|
|
34
|
-
3. `msbuild
|
|
33
|
+
2. `msbuild <solution>.sln /t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:EnableNETAnalyzers=true /p:EnforceCodeStyleInBuild=true`
|
|
34
|
+
3. `msbuild <solution>.sln /t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:TreatWarningsAsErrors=true`
|
|
35
35
|
4. `vstest.console.exe <test-assembly-paths> /EnableCodeCoverage`
|
|
36
36
|
|
|
37
37
|
`/t:Rebuild /m` is intentional for the local gate: on a warm worktree `/t:Build` can skip `CoreCompile` through MSBuild incrementality and exit 0 without running analyzers or the compiler. CI may retain `/t:Build` on a cold checkout. Projects opt into nullable per file with `#nullable enable`; do not pass `/p:Nullable=enable`.
|
|
@@ -93,6 +93,17 @@ Use the scoped tool patterns for quality gates:
|
|
|
93
93
|
|
|
94
94
|
Run toolchain in order: format, lint, type-check, test. Restart from step 1 if any step fails or changes files.
|
|
95
95
|
|
|
96
|
+
## Scratch Location
|
|
97
|
+
|
|
98
|
+
Concurrent child runs in one session share one session scratchpad, so every scratch file a run writes lives in a directory unique to the child.
|
|
99
|
+
|
|
100
|
+
- `SCRATCH` resolves to `<session scratchpad>/issue-<issue-num>/`, where `<issue-num>` is the plan's canonical issue number.
|
|
101
|
+
- Every scratch file, helper script, staged copy, and coverage report a plan names lives under `SCRATCH`. Subdirectories such as `SCRATCH/stage/` are permitted.
|
|
102
|
+
- Create `SCRATCH` before the first scratch write. Never write a scratch file to the scratchpad root or to a fixed shared name outside `SCRATCH`.
|
|
103
|
+
- When a plan written before this rule defines `SCRATCH` as the bare session scratchpad, treat that definition as `<session scratchpad>/issue-<issue-num>/`. This is a mechanical micro-action, not replanning.
|
|
104
|
+
- Plans and evidence artifacts record the literal token `SCRATCH`, never a host path.
|
|
105
|
+
- If two runs for the same issue can execute at once, the run-unique form `issue-<issue-num>-<yyyy-MM-ddTHH-mm>` replaces `issue-<issue-num>`.
|
|
106
|
+
|
|
96
107
|
## Preflight Validation
|
|
97
108
|
|
|
98
109
|
When receiving a plan with directive `DIRECTIVE: PREFLIGHT VALIDATION ONLY`, perform validation only and return exactly one of `PREFLIGHT: ALL CLEAR` or `PREFLIGHT: REVISIONS REQUIRED`.
|
|
@@ -93,6 +93,17 @@ Use the scoped tool patterns for quality gates:
|
|
|
93
93
|
|
|
94
94
|
Run toolchain in order: format, lint, type-check, test. Restart from step 1 if any step fails or changes files.
|
|
95
95
|
|
|
96
|
+
## Scratch Location
|
|
97
|
+
|
|
98
|
+
Concurrent child runs in one session share one session scratchpad, so every scratch file a run writes lives in a directory unique to the child.
|
|
99
|
+
|
|
100
|
+
- `SCRATCH` resolves to `<session scratchpad>/issue-<issue-num>/`, where `<issue-num>` is the plan's canonical issue number.
|
|
101
|
+
- Every scratch file, helper script, staged copy, and coverage report a plan names lives under `SCRATCH`. Subdirectories such as `SCRATCH/stage/` are permitted.
|
|
102
|
+
- Create `SCRATCH` before the first scratch write. Never write a scratch file to the scratchpad root or to a fixed shared name outside `SCRATCH`.
|
|
103
|
+
- When a plan written before this rule defines `SCRATCH` as the bare session scratchpad, treat that definition as `<session scratchpad>/issue-<issue-num>/`. This is a mechanical micro-action, not replanning.
|
|
104
|
+
- Plans and evidence artifacts record the literal token `SCRATCH`, never a host path.
|
|
105
|
+
- If two runs for the same issue can execute at once, the run-unique form `issue-<issue-num>-<yyyy-MM-ddTHH-mm>` replaces `issue-<issue-num>`.
|
|
106
|
+
|
|
96
107
|
## Preflight Validation
|
|
97
108
|
|
|
98
109
|
When receiving a plan with directive `DIRECTIVE: PREFLIGHT VALIDATION ONLY`, perform validation only and return exactly one of `PREFLIGHT: ALL CLEAR` or `PREFLIGHT: REVISIONS REQUIRED`.
|
package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c3-elevated.toml
CHANGED
|
@@ -93,6 +93,17 @@ Use the scoped tool patterns for quality gates:
|
|
|
93
93
|
|
|
94
94
|
Run toolchain in order: format, lint, type-check, test. Restart from step 1 if any step fails or changes files.
|
|
95
95
|
|
|
96
|
+
## Scratch Location
|
|
97
|
+
|
|
98
|
+
Concurrent child runs in one session share one session scratchpad, so every scratch file a run writes lives in a directory unique to the child.
|
|
99
|
+
|
|
100
|
+
- `SCRATCH` resolves to `<session scratchpad>/issue-<issue-num>/`, where `<issue-num>` is the plan's canonical issue number.
|
|
101
|
+
- Every scratch file, helper script, staged copy, and coverage report a plan names lives under `SCRATCH`. Subdirectories such as `SCRATCH/stage/` are permitted.
|
|
102
|
+
- Create `SCRATCH` before the first scratch write. Never write a scratch file to the scratchpad root or to a fixed shared name outside `SCRATCH`.
|
|
103
|
+
- When a plan written before this rule defines `SCRATCH` as the bare session scratchpad, treat that definition as `<session scratchpad>/issue-<issue-num>/`. This is a mechanical micro-action, not replanning.
|
|
104
|
+
- Plans and evidence artifacts record the literal token `SCRATCH`, never a host path.
|
|
105
|
+
- If two runs for the same issue can execute at once, the run-unique form `issue-<issue-num>-<yyyy-MM-ddTHH-mm>` replaces `issue-<issue-num>`.
|
|
106
|
+
|
|
96
107
|
## Preflight Validation
|
|
97
108
|
|
|
98
109
|
When receiving a plan with directive `DIRECTIVE: PREFLIGHT VALIDATION ONLY`, perform validation only and return exactly one of `PREFLIGHT: ALL CLEAR` or `PREFLIGHT: REVISIONS REQUIRED`.
|
|
@@ -93,6 +93,17 @@ Use the scoped tool patterns for quality gates:
|
|
|
93
93
|
|
|
94
94
|
Run toolchain in order: format, lint, type-check, test. Restart from step 1 if any step fails or changes files.
|
|
95
95
|
|
|
96
|
+
## Scratch Location
|
|
97
|
+
|
|
98
|
+
Concurrent child runs in one session share one session scratchpad, so every scratch file a run writes lives in a directory unique to the child.
|
|
99
|
+
|
|
100
|
+
- `SCRATCH` resolves to `<session scratchpad>/issue-<issue-num>/`, where `<issue-num>` is the plan's canonical issue number.
|
|
101
|
+
- Every scratch file, helper script, staged copy, and coverage report a plan names lives under `SCRATCH`. Subdirectories such as `SCRATCH/stage/` are permitted.
|
|
102
|
+
- Create `SCRATCH` before the first scratch write. Never write a scratch file to the scratchpad root or to a fixed shared name outside `SCRATCH`.
|
|
103
|
+
- When a plan written before this rule defines `SCRATCH` as the bare session scratchpad, treat that definition as `<session scratchpad>/issue-<issue-num>/`. This is a mechanical micro-action, not replanning.
|
|
104
|
+
- Plans and evidence artifacts record the literal token `SCRATCH`, never a host path.
|
|
105
|
+
- If two runs for the same issue can execute at once, the run-unique form `issue-<issue-num>-<yyyy-MM-ddTHH-mm>` replaces `issue-<issue-num>`.
|
|
106
|
+
|
|
96
107
|
## Preflight Validation
|
|
97
108
|
|
|
98
109
|
When receiving a plan with directive `DIRECTIVE: PREFLIGHT VALIDATION ONLY`, perform validation only and return exactly one of `PREFLIGHT: ALL CLEAR` or `PREFLIGHT: REVISIONS REQUIRED`.
|