@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
|
@@ -42,6 +42,11 @@ identical forms.
|
|
|
42
42
|
- **Promotion.** Unpromoted items are promoted by their own preparation-mode child, not by the
|
|
43
43
|
planner. The `preparation` route already carries the promotion MCP tools (`new_potential_entry`,
|
|
44
44
|
`potential_to_issue`, `new_active_feature_folder`).
|
|
45
|
+
- **Issue adoption.** Issue-number items are adopted, not promoted. The item's GitHub issue
|
|
46
|
+
already exists, so its preparation child verifies the issue read-only and records a top-level
|
|
47
|
+
`issue_adoption` object in its checkpoint instead of calling `potential_to_issue` or the
|
|
48
|
+
promotion-entry tool. The delegation prompt carries that instruction as the issue-adoption line
|
|
49
|
+
under `## Preparation Fan-Out`.
|
|
45
50
|
- **`issue_num` resolution.** `issue_num` is the primary key for every item reference. It is known
|
|
46
51
|
at intake for issue-number items. For potential-entry items, record negative placeholders in
|
|
47
52
|
intake order (`-1`, `-2`, ...) and back-fill the real number from each child's promotion receipt
|
|
@@ -102,11 +107,13 @@ invocations after the initial plan. Use `/parallel-plan` for intake and `/parall
|
|
|
102
107
|
admit an item into a run that is already in flight.
|
|
103
108
|
|
|
104
109
|
Each delegation prompt includes this literal kickoff line, followed by the model-budget marker
|
|
105
|
-
line:
|
|
110
|
+
line and, for an issue-number item only, the issue-adoption line:
|
|
106
111
|
|
|
107
112
|
> `Preparation mode: true. route_id: preparation. parallel_slug: <slug>. Perform promotion, research, feature documents (spec.md, user-story.md), atomic planning, and preflight clearance only. Atomic execution, PR authoring, and CI monitoring are out of scope for this run and are executed later by parallel-orchestrator. After the atomic-executor preflight returns PREFLIGHT: ALL CLEAR, commit the feature folder and plan to the current branch, push the current branch to origin, set out-of-scope step statuses to not-applicable, set next_step to S5_atomic_execution, and stop, reporting the plan-path and preflight status.`
|
|
108
113
|
>
|
|
109
114
|
> `model_budget.fable_policy: <disabled|available|preferred>.`
|
|
115
|
+
>
|
|
116
|
+
> `Issue adoption: this item's GitHub issue already exists. Verify it read-only (gh issue view), do not call potential_to_issue or the promotion-entry tool, and record a top-level issue_adoption object in the checkpoint per .claude/rules/orchestrator-state.md with origin filed_before_orchestration (or transferred when the issue was transferred), waiving potential_to_issue and the promotion-entry tool for the checkpoint's promotion-type. When a lifecycle record for the item exists under docs/features/potential/promoted/, cite it as potential_record.`
|
|
110
117
|
|
|
111
118
|
Properties of that line, each individually load-bearing:
|
|
112
119
|
|
|
@@ -128,6 +135,13 @@ does not apply to preparation. It contains no `Parallel mode: true`, so F7's fut
|
|
|
128
135
|
hook, which matches that marker, will not gate preparation either. Both omissions are intentional
|
|
129
136
|
and must be preserved verbatim when the line is emitted.
|
|
130
137
|
|
|
138
|
+
**Issue-adoption line.** The issue-adoption line is emitted only for an issue-number item, after
|
|
139
|
+
the model-budget marker line, and is omitted for a potential-entry item, whose child promotes it.
|
|
140
|
+
The line carries no mode marker, no digits, and no active feature-folder path, so hook target
|
|
141
|
+
resolution and mode classification are unchanged. The preparation checkpoint does not carry over
|
|
142
|
+
to execution, so the execution child records its own adoption (see
|
|
143
|
+
`.claude/skills/parallel-orchestrate/SKILL.md`, kickoff element 4).
|
|
144
|
+
|
|
131
145
|
**No edit to shared surfaces.** No edit is made to `.claude/skills/orchestrate/SKILL.md` or to
|
|
132
146
|
`config/orchestration-routing.json`, including the `preparation` route. The route mechanism is
|
|
133
147
|
marker-driven; the child contract's "commit ... to the current branch" wording is satisfied by a
|
|
@@ -135,8 +149,9 @@ branch created off `origin/main`; and `routes.preparation` declares no epic-spec
|
|
|
135
149
|
agent, skill, or MCP tool.
|
|
136
150
|
|
|
137
151
|
**Collected per child at termination:** `plan-path`, preflight status, the promotion receipt (the
|
|
138
|
-
`issue_num` back-fill source
|
|
139
|
-
|
|
152
|
+
`issue_num` back-fill source for a potential-entry item) or, for an issue-number item, the
|
|
153
|
+
`issue_adoption` record from the child checkpoint, the model-routing receipt with
|
|
154
|
+
`agent: "orchestrator"`, the topology receipt, `branch_name`, and `worktree_path`. There is no fan-in merge step: the planner
|
|
140
155
|
fetches and records each pushed item branch, back-fills `issue_num` into the manifest on
|
|
141
156
|
`parallel/<slug>-plan`, and updates the checkpoint.
|
|
142
157
|
|
|
@@ -276,6 +291,44 @@ concurrently.
|
|
|
276
291
|
Derivation, the V1-V3 rules, and the contention relation are implemented upstream. This skill calls
|
|
277
292
|
them; it defines none of them.
|
|
278
293
|
|
|
294
|
+
## Complexity Assessment
|
|
295
|
+
|
|
296
|
+
**Assessment point.** Assess each item's complexity band after the item is `prepared` — its
|
|
297
|
+
preflight status is `PREFLIGHT: ALL CLEAR` and its `declared` radius is V1/V2-clear — and before
|
|
298
|
+
cohort seeding, which consumes the band through the scheduling entry point. The parallel parent
|
|
299
|
+
reads the same band to choose the `model` of that item's `Agent(orchestrator)` spawn, so an item
|
|
300
|
+
without a band cannot be routed.
|
|
301
|
+
|
|
302
|
+
**Signals and scale.** Read the signal catalog and the band scale from `model_policy` in
|
|
303
|
+
`config/orchestration-routing.json`. Record every signal the item's approved plan and spec exhibit
|
|
304
|
+
in `signals_present`, then choose a band from the scale.
|
|
305
|
+
|
|
306
|
+
**Floor.** Compute the floor with `Get-ComplexityFloor -SignalsPresent <signals>` from
|
|
307
|
+
`.claude/lib/model-routing/ModelRouting.psm1` in PowerShell, or `compute_complexity_floor(signals)`
|
|
308
|
+
in Python. The chosen band must be at or above the floor; the floor is a lower bound only.
|
|
309
|
+
|
|
310
|
+
**Model resolution.** Resolve the child model with
|
|
311
|
+
`Resolve-DelegationModel -Agent orchestrator -Band <band> -FablePolicy <fable_policy>` from the same
|
|
312
|
+
module, or `resolve_delegation_model("orchestrator", band, fable_policy)` in Python, using the
|
|
313
|
+
run's `model_budget.fable_policy`.
|
|
314
|
+
|
|
315
|
+
**Per-item record.** Write three fields on the item:
|
|
316
|
+
|
|
317
|
+
- `complexity_band` — one of `C1`, `C2`, `C3`, `C4`.
|
|
318
|
+
- `complexity_assessment` — `{ band, floor, signals_present, rationale, assessed_at }`, where `band`
|
|
319
|
+
equals `complexity_band`, `floor` is the computed floor, `rationale` is a non-empty string, and
|
|
320
|
+
`assessed_at` is a non-empty ISO-8601 string.
|
|
321
|
+
- `model_routing_receipt` — `{ agent: "orchestrator", phase, complexity_band, fable_policy,
|
|
322
|
+
table_model, clamped_from, model }`, copied from the resolver output, with `complexity_band`
|
|
323
|
+
equal to the item's band.
|
|
324
|
+
|
|
325
|
+
The kickoff artifact's `## Item Summary` `complexity` cell for the item equals its
|
|
326
|
+
`complexity_band`.
|
|
327
|
+
|
|
328
|
+
**Routing input, not a verdict.** The band is a routing input for model selection and edge
|
|
329
|
+
derivation. It is distinct from the deliberately absent worthiness verdict: assessing a band never
|
|
330
|
+
admits, rejects, or reorders an item.
|
|
331
|
+
|
|
279
332
|
## Cohort Seeding
|
|
280
333
|
|
|
281
334
|
Reach cohort computation through the **destination-runtime bash entry point** under
|
|
@@ -448,7 +501,8 @@ Top-level fields: `objective`, `parallel_slug`, `parallel_manifest_path`, `mode`
|
|
|
448
501
|
`last_updated`. F3's landed required-key set (planner invariant P1) is a strict subset of this
|
|
449
502
|
list, and `plan_home_branch` is a permitted additional field.
|
|
450
503
|
|
|
451
|
-
Per item: `issue_num`, `feature_folder`, `kind`, `state`, `complexity_band`, `
|
|
504
|
+
Per item: `issue_num`, `feature_folder`, `kind`, `state`, `complexity_band`, `complexity_assessment`,
|
|
505
|
+
`preparation_status`,
|
|
452
506
|
`research_path`, `plan_path`, `preflight_status`, `branch_name`, `worktree_path`, `blast_radius`
|
|
453
507
|
(with `source: "declared"`), `radius_validation` (the `v1`, `v2`, and `v3` results with their
|
|
454
508
|
severities), `model_routing_receipt`, and `topology_receipt`.
|
|
@@ -461,8 +515,10 @@ blast-radius overlap.
|
|
|
461
515
|
`require_ready_for_execution` gate: at least two items (invariant P6); every item
|
|
462
516
|
`preparation_status: prepared` with `preflight_status` exactly `PREFLIGHT: ALL CLEAR`, non-empty
|
|
463
517
|
`research_path` and `plan_path`, and `blast_radius.source == "declared"` (P7); `next_step` exactly
|
|
464
|
-
the ready sentinel `PARALLEL_EXECUTION_READY` (P8);
|
|
465
|
-
`artifacts/orchestration/parallel-kickoff-<slug>.md` (P9)
|
|
518
|
+
the ready sentinel `PARALLEL_EXECUTION_READY` (P8); `kickoff_prompt_path` exactly
|
|
519
|
+
`artifacts/orchestration/parallel-kickoff-<slug>.md` (P9); and every item carries a valid
|
|
520
|
+
`complexity_band`, a `complexity_assessment`, and a `model_routing_receipt` with
|
|
521
|
+
`agent: "orchestrator"` that agree with the band (P10).
|
|
466
522
|
|
|
467
523
|
**Git integrity is F4-owned.** F3's `require_ready_for_execution` gate is structural only, so
|
|
468
524
|
verifying that each item's committed plan blob exists on that item's pushed branch ref — and that
|
|
@@ -595,7 +651,7 @@ With no ready feature checkpoint, the exemption admits two attribution-trailer f
|
|
|
595
651
|
- The trailer option: `git commit -m 'docs: plan' --trailer 'Co-Authored-By: Name <email>' --trailer 'Claude-Session: <url>' -- <exempt paths>`. The separate-value form and the `--trailer=<value>` form are both admitted, any number of times, on `git commit` only; `git add --trailer` and a trailer option with no value are denied. Git writes every trailer value into one trailer block.
|
|
596
652
|
- The one-paragraph multi-message form: the subject in the first `-m` and every trailer in one single-quoted second `-m` value, separated by a literal newline. Each `-m` value becomes its own paragraph and git parses only the last paragraph as the trailer block, so trailers split across separate `-m` values do not form one trailer block.
|
|
597
653
|
|
|
598
|
-
Quoting rules: `$` and backtick are literal and admitted inside single quotes, and denied outside quotes and inside double quotes, where the shell expands them. `<` and `>` are admitted inside single or double quotes and denied outside quotes. An unquoted `#` is denied anywhere, because it starts a shell comment that the exemption does not model; a `#` inside quotes is admitted. A typographic quote character (U+2018 to U+201E) anywhere in the command line is denied, because a PowerShell host reads it as a quote.
|
|
654
|
+
Quoting rules: `$` and backtick are literal and admitted inside single quotes, and denied outside quotes and inside double quotes, where the shell expands them. `<` and `>` are admitted inside single or double quotes and denied outside quotes. An unquoted `#` is denied anywhere, because it starts a shell comment that the exemption does not model; a `#` inside quotes is admitted. A typographic quote character (U+2018 to U+201E) anywhere in the command line is denied, because a PowerShell host reads it as a quote. Because the executing shell is undetermined (issue #735), a shape whose meaning differs between a POSIX shell and PowerShell is denied: a backslash anywhere in the command line is denied, and `{`, `}`, `,`, `(`, `)`, and `@` are denied outside quotes. Every staging operand must be a plain forward-slash repository-relative path that uses only the characters `A-Z a-z 0-9 . _ / -`.
|
|
599
655
|
|
|
600
656
|
Not admitted: heredoc-fed messages, including `git commit -m "$(cat <<'EOF' ... EOF)"` and `git commit -F - <<'EOF'`, and message files supplied through `-F <file>` or `--file=<file>`. Use one of the two forms above instead.
|
|
601
657
|
|
|
@@ -73,17 +73,28 @@ Do not record a partial removal, and do not record the rejection itself in `muta
|
|
|
73
73
|
|
|
74
74
|
1. Re-derive durable state as above and resolve the item key against `items[]`.
|
|
75
75
|
|
|
76
|
-
2. Decide the removal
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
2. Decide the removal through the bundled entry point:
|
|
77
|
+
|
|
78
|
+
```shell
|
|
79
|
+
bash .claude/lib/bash/remove-parallel-item.sh decide --item <key> --state <state> --removal-disposition <detach|abandon>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
`--state` is the state re-derived in step 1; omit it when the key resolves to no `items[]`
|
|
83
|
+
entry. Pass the caller's disposition as `--removal-disposition`, and omit the option when none
|
|
84
|
+
was supplied. Exit 0 prints the decision object (`item_key`, `prior_state`, `new_state`,
|
|
85
|
+
`disposition`, `triggers_recompute`) as one JSON line on stdout. Exit 1 is a rejected row:
|
|
86
|
+
surface its single stderr line and stop. Exit 2 is a usage error in the invocation itself.
|
|
79
87
|
|
|
80
88
|
3. **Unstarted removal (recompute).** Set the item's state to `withdrawn`, drop its vertex, and
|
|
81
|
-
recolor
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
89
|
+
recolor through the bundled entry point:
|
|
90
|
+
|
|
91
|
+
```shell
|
|
92
|
+
bash .claude/lib/bash/remove-parallel-item.sh recolor --unstarted "<k> ..." --edges "<a>:<b> ..." --pinned "<k> ..." --generation <g> --current-cohort <c> --highest-pinned-cohort <h>
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Write the output field `cohort_assignments` into `cohorts[]` and set the top-level
|
|
96
|
+
`recolor_generation` to the output field `generation`; the generation increments by exactly
|
|
97
|
+
one. The result names no pinned key, so no in-flight item moves.
|
|
87
98
|
|
|
88
99
|
`current_cohort` is F3's top-level field, read from the re-verified durable state: the lowest
|
|
89
100
|
current-generation cohort index still holding a non-terminal item. Under the per-edge barrier an
|
|
@@ -117,8 +128,18 @@ Do not record a partial removal, and do not record the rejection itself in `muta
|
|
|
117
128
|
invocation above, so an ad hoc command is not matchable and would bypass the confirmation
|
|
118
129
|
contract entirely. One invocation, one item, both side effects.
|
|
119
130
|
|
|
120
|
-
6. **Append exactly one `mutations[]` entry** for a successful removal, built
|
|
121
|
-
|
|
131
|
+
6. **Append exactly one `mutations[]` entry** for a successful removal, built through the
|
|
132
|
+
bundled entry point:
|
|
133
|
+
|
|
134
|
+
```shell
|
|
135
|
+
bash .claude/lib/bash/remove-parallel-item.sh entry --item <key> --prior-state <state> --removal-disposition <detach|abandon> --recompute <true|false> --generation <g> --at <timestamp>
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
`--recompute` equals the decision's `triggers_recompute`. `--generation` is the generation
|
|
139
|
+
before the removal. Omit `--removal-disposition` for an unstarted item. `--at` is the mutation
|
|
140
|
+
timestamp in `yyyy-MM-ddTHH-mm` form; when it is omitted the entry point uses the current UTC
|
|
141
|
+
minute. Exit 0 prints the entry as one JSON line on stdout; exit 1 is a contract rejection whose
|
|
142
|
+
single stderr line is surfaced before stopping; exit 2 is a usage error.
|
|
122
143
|
|
|
123
144
|
| Case | `op` | `item_key` | `prior_state` | `new_state` | `disposition` | `recolor_generation` |
|
|
124
145
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
@@ -127,7 +148,9 @@ Do not record a partial removal, and do not record the rejection itself in `muta
|
|
|
127
148
|
| Remove, `abandon` | `remove` | item key | `in_flight` | `withdrawn` | `abandon` | `g` (unchanged) |
|
|
128
149
|
|
|
129
150
|
`disposition` is non-null only on an in-flight removal and is null on the unstarted row. The `at`
|
|
130
|
-
timestamp comes from the
|
|
151
|
+
timestamp comes from the `--at` value, or from the current UTC minute when `--at` is omitted.
|
|
152
|
+
The repository-local module `scripts/dev_tools/parallel_mutation_protocol.py` is retained as the
|
|
153
|
+
parity reference for this entry point and is not invoked on this path.
|
|
131
154
|
|
|
132
155
|
7. **Validate the checkpoint** before treating the removal as applied. Run the
|
|
133
156
|
`validate_orchestration_artifacts` MCP tool with `artifact_type:
|
|
@@ -49,7 +49,7 @@ PreToolUse hook can verify the body passed to `gh pr create --body-file` is the
|
|
|
49
49
|
produced:
|
|
50
50
|
|
|
51
51
|
1. Write the body text to `artifacts/pr_body_<N>.md`, where `<N>` is the target issue or PR number.
|
|
52
|
-
2. Compute the SHA-256 of the body file
|
|
52
|
+
2. Compute the SHA-256 of the body file by running `sha256sum artifacts/pr_body_<N>.md` as a single command (no chaining) and take the lowercase hexadecimal digest.
|
|
53
53
|
3. Write the sibling receipt `artifacts/pr_body_<N>.receipt.json` with the shape:
|
|
54
54
|
|
|
55
55
|
```json
|
|
@@ -63,6 +63,8 @@ produced:
|
|
|
63
63
|
}
|
|
64
64
|
```
|
|
65
65
|
|
|
66
|
+
Obtain it by running `date -u +%Y-%m-%dT%H:%M:%SZ` as a single command.
|
|
67
|
+
|
|
66
68
|
4. Pass the body to the pull request via `--body-file artifacts/pr_body_<N>.md`; do not use inline
|
|
67
69
|
`--body`.
|
|
68
70
|
|
|
@@ -6,7 +6,7 @@ description: 'Quota throttling and account-switching policy for multi-agent orch
|
|
|
6
6
|
# Quota Throttling and Account-Switching Policy
|
|
7
7
|
|
|
8
8
|
Policy for keeping long-running, multi-agent orchestration inside account usage limits without
|
|
9
|
-
losing work. Derived from about five days of continuous multi-agent orchestration (
|
|
9
|
+
losing work. Derived from about five days of continuous multi-agent orchestration (consumer-repository runs
|
|
10
10
|
`bugs-2026-09-11` and `bugs-2026-09-17`).
|
|
11
11
|
|
|
12
12
|
Every figure marked **MEASURED** was observed; figures marked **ESTIMATE** are extrapolations.
|
package/resources/claude-customizations/.claude/skills/remediation-handoff-atomic-planner/SKILL.md
CHANGED
|
@@ -14,7 +14,7 @@ Use this skill when:
|
|
|
14
14
|
- Audit findings require remediation (FAIL or material PARTIAL findings).
|
|
15
15
|
- Toolchain checks fail.
|
|
16
16
|
- Acceptance criteria are unmet.
|
|
17
|
-
- A
|
|
17
|
+
- A CI check fails after the pull request is open.
|
|
18
18
|
- Any new finding surfaces during execution of an active cycle (in which case begin a new cycle, do not extend the active one).
|
|
19
19
|
|
|
20
20
|
## Full Handoff Chain
|
|
@@ -52,7 +52,9 @@ Trigger remediation when any of these are true:
|
|
|
52
52
|
- Audit artifacts contain FAIL or meaningful PARTIAL findings.
|
|
53
53
|
- Toolchain checks fail (format, lint, type-check, test, contract, or integration stages).
|
|
54
54
|
- Acceptance criteria are not met.
|
|
55
|
-
- A
|
|
55
|
+
- A CI check fails after the PR is open (workflow-file changes specifically must enter the loop and trigger the `modified-workflow-needs-green-run` rule defined in `.claude/skills/feature-review-workflow/SKILL.md`).
|
|
56
|
+
|
|
57
|
+
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`; `autonomous` when no class is stated). When no blocking finding is `autonomous`, the review verdict is `HALT_NON_REMEDIABLE` or `AWAITING_CI`: the orchestrator halts or waits, and no cycle, remediation plan, or `atomic-planner` handoff is created.
|
|
56
58
|
|
|
57
59
|
## Required Remediation Inputs
|
|
58
60
|
|
|
@@ -118,11 +120,13 @@ Iteration ceiling. When a cycle's `iterations` would exceed 2, the orchestrator
|
|
|
118
120
|
|
|
119
121
|
When preflight is clear, `atomic-executor` executes the plan task-by-task. The executor invokes workers (`python-typed-engineer`, `typescript-engineer`, `csharp-typed-engineer`, `powershell-typed-engineer`) internally as needed. The orchestrator does not call workers.
|
|
120
122
|
|
|
123
|
+
Before the reaudit, the orchestrator records `candidate_applied` on the current cycle: `true` only when execution finished with `execution_status: "complete"` and the pre-reaudit commit recorded a non-empty change set, and `false` otherwise (execution not started, execution failed, or an empty staged change set). `remediation_loop.completed_attempts` equals the number of cycles whose `candidate_applied` is `true`, and a cycle with `candidate_applied: false` consumes no attempt number.
|
|
124
|
+
|
|
121
125
|
When execution is complete, the orchestrator delegates to `feature-review`. `feature-review` produces the three reaudit artifacts under `docs/features/active/<slug>/audit/<exit-ts>/` using the exit timestamp.
|
|
122
126
|
|
|
123
127
|
## Exit Gate
|
|
124
128
|
|
|
125
|
-
The orchestrator reads the latest cycle's three reaudit artifacts and computes `blocking_count` as the total number of FAIL findings plus material PARTIAL findings flagged as blocking. Only when `blocking_count == 0` does the orchestrator set `exit_condition_met = true` on the current cycle and mark the remediation loop complete. Otherwise, the orchestrator opens cycle N+1 with a new `remediation/<new-ts>/remediation-inputs.md` and runs the full chain again.
|
|
129
|
+
The orchestrator reads the latest cycle's three reaudit artifacts and computes `blocking_count` as the total number of FAIL findings plus material PARTIAL findings flagged as blocking. Only when `blocking_count == 0` does the orchestrator set `exit_condition_met = true` on the current cycle and mark the remediation loop complete. Otherwise, when at least one remaining blocking finding is `autonomous`, the orchestrator opens cycle N+1 with a new `remediation/<new-ts>/remediation-inputs.md` and runs the full chain again. When the remaining blocking findings are all non-remediable, the orchestrator does not open the next cycle: it halts on `HALT_NON_REMEDIABLE` or waits on `AWAITING_CI`.
|
|
126
130
|
|
|
127
131
|
## Context Package (When Required)
|
|
128
132
|
|
|
@@ -40,25 +40,42 @@
|
|
|
40
40
|
".claude/hooks/enforce-orchestration-preimplementation-gate-epic-scope.ps1",
|
|
41
41
|
".claude/hooks/enforce-orchestration-preimplementation-gate-helpers.ps1",
|
|
42
42
|
".claude/hooks/enforce-orchestration-preimplementation-gate-modes.ps1",
|
|
43
|
+
".claude/hooks/enforce-orchestration-preimplementation-gate-targets.ps1",
|
|
43
44
|
".claude/hooks/enforce-parallel-abandon-gate.ps1",
|
|
44
45
|
".claude/hooks/enforce-parallel-cohort-barrier.ps1",
|
|
45
46
|
".claude/hooks/enforce-parallel-cohort-barrier-helpers.ps1",
|
|
46
47
|
".claude/hooks/enforce-parallel-drift-gate.ps1",
|
|
47
48
|
".claude/hooks/enforce-parallel-drift-gate-helpers.ps1",
|
|
48
49
|
".claude/hooks/enforce-parallel-worktree-removal-gate.ps1",
|
|
50
|
+
".claude/hooks/enforce-pr-author-command-allowlist.ps1",
|
|
51
|
+
".claude/hooks/enforce-pr-author-skill.artifact-root.ps1",
|
|
52
|
+
".claude/hooks/enforce-pr-author-skill.docs-only.ps1",
|
|
49
53
|
".claude/hooks/enforce-pr-author-skill.epic-base-branch.ps1",
|
|
50
54
|
".claude/hooks/enforce-pr-author-skill.ps1",
|
|
51
55
|
".claude/hooks/enforce-pr-author-skill-helpers.ps1",
|
|
52
56
|
".claude/hooks/enforce-prd-feature-before-planner-helpers.ps1",
|
|
53
57
|
".claude/hooks/enforce-prd-feature-before-planner.ps1",
|
|
54
58
|
".claude/hooks/enforce-promotion-mcp-only.ps1",
|
|
59
|
+
".claude/hooks/feature-folder-resolution.ps1",
|
|
60
|
+
".claude/hooks/feature-review-coverage-thresholds.ps1",
|
|
61
|
+
".claude/hooks/hook-command-heredoc.ps1",
|
|
55
62
|
".claude/hooks/hook-command-invocation.ps1",
|
|
63
|
+
".claude/hooks/hook-command-invocation-operands.ps1",
|
|
64
|
+
".claude/hooks/hook-command-payload.ps1",
|
|
65
|
+
".claude/hooks/hook-command-payload-powershell.ps1",
|
|
56
66
|
".claude/hooks/hook-command-scanner.ps1",
|
|
67
|
+
".claude/hooks/hook-dependency-guard.ps1",
|
|
68
|
+
".claude/hooks/hook-docs-only-diff.ps1",
|
|
57
69
|
".claude/hooks/persist-session-id.ps1",
|
|
70
|
+
".claude/hooks/subagentstop-envelope.ps1",
|
|
58
71
|
".claude/hooks/validate-bash.ps1",
|
|
59
72
|
".claude/hooks/validate-discovery-artifact-gate.ps1",
|
|
60
73
|
".claude/hooks/validate-executor-output.ps1",
|
|
74
|
+
".claude/hooks/validate-feature-review-coverage-metrics.ps1",
|
|
75
|
+
".claude/hooks/validate-feature-review-coverage-rules.ps1",
|
|
61
76
|
".claude/hooks/validate-feature-review-coverage.ps1",
|
|
77
|
+
".claude/hooks/validate-orchestrator-output-resolution.ps1",
|
|
78
|
+
".claude/hooks/validate-orchestrator-output-routing.ps1",
|
|
62
79
|
".claude/hooks/validate-orchestrator-output.ps1",
|
|
63
80
|
".claude/hooks/validate-planner-output.ps1",
|
|
64
81
|
".claude/hooks/validate-prd-feature-output.ps1",
|
|
@@ -136,13 +153,16 @@
|
|
|
136
153
|
".claude/lib/orchestrator-state/OrchestratorStateCompletion.psm1",
|
|
137
154
|
".claude/lib/orchestrator-state/OrchestratorStateCheckpointValue.psm1",
|
|
138
155
|
".claude/lib/orchestrator-state/OrchestratorStateReceipts.psm1",
|
|
156
|
+
".claude/lib/orchestrator-state/OrchestratorStateRemediationAccounting.psm1",
|
|
139
157
|
".claude/lib/orchestrator-state/OrchestratorStateModelReceipts.psm1",
|
|
140
158
|
".claude/lib/orchestrator-state/OrchestratorStateCodexModelReceipts.psm1",
|
|
141
159
|
".claude/lib/orchestrator-state/OrchestratorStateCodexTopologyReceipts.psm1",
|
|
142
160
|
".claude/lib/orchestrator-state/OrchestratorStateRoutingMatrix.psm1",
|
|
143
161
|
".claude/lib/orchestrator-state/OrchestratorStateCompletionChecks.psm1",
|
|
144
162
|
".claude/lib/orchestrator-state/OrchestratorStateRoutingContract.psm1",
|
|
163
|
+
".claude/lib/orchestrator-state/OrchestratorStateIssueAdoption.psm1",
|
|
145
164
|
".claude/lib/orchestrator-state/OrchestratorStateUnconditional.psm1",
|
|
165
|
+
".claude/lib/orchestrator-state/OrchestratorStateEpicWaveBarrier.psm1",
|
|
146
166
|
".claude/lib/discovery-validation/DiscoveryValidation.psm1",
|
|
147
167
|
".claude/lib/codex-routing/CodexDeployment.psm1",
|
|
148
168
|
".claude/lib/codex-routing/CodexTopology.psm1",
|
|
@@ -169,13 +189,18 @@
|
|
|
169
189
|
".claude/lib/bash/abandon-parallel-item.sh",
|
|
170
190
|
".claude/lib/bash/compute-cohorts.sh",
|
|
171
191
|
".claude/lib/bash/compute-concurrency-batches.sh",
|
|
192
|
+
".claude/lib/bash/mutate-parallel-run.sh",
|
|
172
193
|
".claude/lib/bash/parallel-cohorts.sh",
|
|
173
194
|
".claude/lib/bash/parallel-common.sh",
|
|
174
195
|
".claude/lib/bash/parallel-items-validate.sh",
|
|
175
196
|
".claude/lib/bash/parallel-lane-assertion.sh",
|
|
176
197
|
".claude/lib/bash/parallel-manifest-validate.sh",
|
|
198
|
+
".claude/lib/bash/parallel-mutation-cli.sh",
|
|
199
|
+
".claude/lib/bash/parallel-mutation-ops.sh",
|
|
200
|
+
".claude/lib/bash/parallel-mutation.sh",
|
|
177
201
|
".claude/lib/bash/parallel-yaml-emit.sh",
|
|
178
202
|
".claude/lib/bash/parallel-yaml-scan.sh",
|
|
203
|
+
".claude/lib/bash/remove-parallel-item.sh",
|
|
179
204
|
".claude/lib/bash/report-lane-assertion.sh",
|
|
180
205
|
".claude/lib/bash/validate-parallel-manifest.sh",
|
|
181
206
|
"config/orchestration-routing.json",
|
|
@@ -68,6 +68,14 @@ During plan execution, after completing a task whose work satisfies an acceptanc
|
|
|
68
68
|
|
|
69
69
|
Timing: Check off AC items as soon as the corresponding plan task passes verification — do not defer all AC updates to the end of plan execution.
|
|
70
70
|
|
|
71
|
+
### CI-Dependent Criteria
|
|
72
|
+
|
|
73
|
+
A CI-dependent criterion is one whose verification requires the result of CI on the PR head. It cannot be verified before the pull request exists, so it stays unchecked and is listed as pending-CI in the AC verification artifact until CI has run.
|
|
74
|
+
|
|
75
|
+
- Owner: the item's own orchestrator run owns the check-off and performs it at S9; this is the one case in which an orchestrator run checks off AC. A parent or coordinating session never commits the check-off from its own root.
|
|
76
|
+
- Timing: after the CI green gate (S9) records `ci_gate.conclusion` as `success`, and before the run reports DONE.
|
|
77
|
+
- Push and re-verify: the check-off is committed in the item's own worktree and pushed to the PR branch, and the CI green gate is re-run against the new head SHA so that `ci_gate.head_sha` equals the final PR head before DONE.
|
|
78
|
+
|
|
71
79
|
### When Reviewers Check Off AC
|
|
72
80
|
|
|
73
81
|
During feature review (feature-audit phase):
|
|
@@ -78,7 +86,7 @@ During feature review (feature-audit phase):
|
|
|
78
86
|
|
|
79
87
|
### When Orchestrators Enforce AC Tracking
|
|
80
88
|
|
|
81
|
-
Orchestrators do not directly check off AC items.
|
|
89
|
+
Orchestrators do not directly check off AC items. The one exception is a CI-dependent criterion, which the item's own orchestrator run checks off at S9 as described in `### CI-Dependent Criteria` above. For every other criterion, orchestrators instead:
|
|
82
90
|
|
|
83
91
|
1. Ensure delegated executors and reviewers reference this skill.
|
|
84
92
|
2. After executor or reviewer completion, verify that AC source files reflect delivered work (spot-check; do not re-execute verification).
|
package/resources/codex-and-agents-customizations/.agents/skills/architecture-boundaries/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: architecture-boundaries
|
|
3
|
-
description: Architecture boundary enforcement rules for
|
|
3
|
+
description: Architecture boundary enforcement rules for a host-neutral layered architecture.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Converted rule
|
|
@@ -16,7 +16,7 @@ Architecture boundary enforcement is a uniform gate across all tiers (T1–T4).
|
|
|
16
16
|
- **TypeScript:** `dependency-cruiser`. Configuration file pattern: `.dependency-cruiser.cjs`.
|
|
17
17
|
- **.NET (when the backend exists):** `NetArchTest.Rules`. Test project naming pattern: `*.ArchitectureTests`.
|
|
18
18
|
|
|
19
|
-
##
|
|
19
|
+
## Host-Neutral Architecture Rules (enforceable assertions)
|
|
20
20
|
|
|
21
21
|
Production code in this repository must satisfy each of the following assertions. Each assertion is enforced by `dependency-cruiser` (TypeScript) or `NetArchTest.Rules` (.NET) where applicable; legacy import utilities, when added, must satisfy the same assertions.
|
|
22
22
|
|
|
@@ -39,9 +39,9 @@ Production code in this repository must satisfy each of the following assertions
|
|
|
39
39
|
|
|
40
40
|
## Layer Boundary Assertions (.NET, applies once the backend exists)
|
|
41
41
|
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
- Adapter projects may depend on
|
|
42
|
+
- `<Product>.Domain` must have zero references to Outlook PIA, VSTO, or Office.js types.
|
|
43
|
+
- `<Product>.Application` may depend on `<Product>.Domain` only.
|
|
44
|
+
- Adapter projects may depend on `<Product>.Domain` and `<Product>.Application`; domain may not depend on adapters.
|
|
45
45
|
|
|
46
46
|
## Enforcement Outcome
|
|
47
47
|
|
|
@@ -55,6 +55,17 @@ For each task:
|
|
|
55
55
|
4. Check off the plan file on disk immediately after verification passes.
|
|
56
56
|
5. Check off satisfied acceptance criteria in the authoritative requirement source file per `acceptance-criteria-tracking`.
|
|
57
57
|
|
|
58
|
+
## Scratch Location
|
|
59
|
+
|
|
60
|
+
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.
|
|
61
|
+
|
|
62
|
+
- `SCRATCH` resolves to `<session scratchpad>/issue-<issue-num>/`, where `<issue-num>` is the plan's canonical issue number.
|
|
63
|
+
- Every scratch file, helper script, staged copy, and coverage report a plan names lives under `SCRATCH`. Subdirectories such as `SCRATCH/stage/` are permitted.
|
|
64
|
+
- Create `SCRATCH` before the first scratch write. Never write a scratch file to the scratchpad root or to a fixed shared name outside `SCRATCH`.
|
|
65
|
+
- 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.
|
|
66
|
+
- Plans and evidence artifacts record the literal token `SCRATCH`, never a host path.
|
|
67
|
+
- 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>`.
|
|
68
|
+
|
|
58
69
|
## Non-Negotiable Constraints
|
|
59
70
|
|
|
60
71
|
- Do not invent new phases or tasks.
|
package/resources/codex-and-agents-customizations/.agents/skills/atomic-plan-contract/SKILL.md
CHANGED
|
@@ -117,6 +117,10 @@ For short-path/minimal-audit plans, Phase 0 evidence is incomplete unless both a
|
|
|
117
117
|
|
|
118
118
|
`Output Summary:` is mandatory for each command-step artifact and must concisely summarize the essential result signal (for example: pass/fail status, key counts, coverage headline, or primary diagnostic).
|
|
119
119
|
|
|
120
|
+
## Evidence Filename Timestamps in Plans
|
|
121
|
+
|
|
122
|
+
Plans name evidence artifacts `<name>.<timestamp>.md` and never fix a plan-time stamp in an evidence filename. An acceptance condition identifies a consumed evidence artifact by the derivation in `evidence-and-timestamp-conventions` (`### Evidence Filename Timestamp`): the lexicographically greatest file matching `<name>.*.md`, not a pre-stamped literal path. This section governs artifact paths only: asserted search tokens remain concrete.
|
|
123
|
+
|
|
120
124
|
## Coverage Evidence Contract (Mandatory when policy requires coverage)
|
|
121
125
|
|
|
122
126
|
For any language in scope where repository policy requires coverage validation:
|
|
@@ -34,6 +34,16 @@ Each task must be:
|
|
|
34
34
|
- independently verifiable,
|
|
35
35
|
- free of placeholder text.
|
|
36
36
|
|
|
37
|
+
## Scratch Location
|
|
38
|
+
|
|
39
|
+
Concurrent child runs in one session share one session scratchpad, so every plan places its scratch files in a directory unique to the child.
|
|
40
|
+
|
|
41
|
+
- `SCRATCH` resolves to `<session scratchpad>/issue-<issue-num>/`, where `<issue-num>` is the plan's canonical issue number. Every plan that uses scratch files defines `SCRATCH` this way.
|
|
42
|
+
- Every scratch file, helper script, staged copy, and coverage report a plan names lives under `SCRATCH`. Subdirectories such as `SCRATCH/stage/` are permitted.
|
|
43
|
+
- A plan never directs a scratch file to the scratchpad root or to a fixed shared name outside `SCRATCH`.
|
|
44
|
+
- Plans and evidence artifacts record the literal token `SCRATCH`, never a host path.
|
|
45
|
+
- 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>`.
|
|
46
|
+
|
|
37
47
|
## Mandatory Preflight Loop
|
|
38
48
|
|
|
39
49
|
Before a plan is finalized:
|
|
@@ -10,8 +10,8 @@ This rule file summarizes the C#-specific policies for this repository.
|
|
|
10
10
|
## Toolchain
|
|
11
11
|
|
|
12
12
|
1. **Formatting — CSharpier**: All C# source files must be formatted with CSharpier. Do not use `dotnet format`. Command: `dotnet tool run csharpier .` or `csharpier .`
|
|
13
|
-
2. **Linting — .NET Analyzers**: C# code must pass Roslyn/.NET analyzer diagnostics. Command: `msbuild
|
|
14
|
-
3. **Type Checking — Nullable Analysis**: Enable nullable reference types and fail on warnings. Command: `msbuild
|
|
13
|
+
2. **Linting — .NET Analyzers**: C# code must pass Roslyn/.NET analyzer diagnostics. Command: `msbuild <solution>.sln /t:Build /p:Configuration=Debug /p:Platform="Any CPU" /p:EnableNETAnalyzers=true /p:EnforceCodeStyleInBuild=true`
|
|
14
|
+
3. **Type Checking — Nullable Analysis**: Enable nullable reference types and fail on warnings. Command: `msbuild <solution>.sln /t:Build /p:Configuration=Debug /p:Platform="Any CPU" /p:Nullable=enable /p:TreatWarningsAsErrors=true`
|
|
15
15
|
4. **Testing — MSTest + Moq + FluentAssertions**: Run tests with: `vstest.console.exe <test-assembly-paths> /EnableCodeCoverage`
|
|
16
16
|
|
|
17
17
|
Run the toolchain in order: format → lint → type-check → test. Restart from step 1 if any step fails or changes files.
|
|
@@ -28,8 +28,8 @@ Before invoking this gate, the agent must have:
|
|
|
28
28
|
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.
|
|
29
29
|
|
|
30
30
|
1. `dotnet tool run csharpier .`
|
|
31
|
-
2. `msbuild
|
|
32
|
-
3. `msbuild
|
|
31
|
+
2. `msbuild <solution>.sln /t:Build /p:Configuration=Debug /p:Platform="Any CPU" /p:EnableNETAnalyzers=true /p:EnforceCodeStyleInBuild=true`
|
|
32
|
+
3. `msbuild <solution>.sln /t:Build /p:Configuration=Debug /p:Platform="Any CPU" /p:Nullable=enable /p:TreatWarningsAsErrors=true`
|
|
33
33
|
4. `vstest.console.exe <test-assembly-paths> /EnableCodeCoverage`
|
|
34
34
|
|
|
35
35
|
If the environment prevents running any tool, stop and report the change as **unverified**. Do not declare completion.
|
|
@@ -68,6 +68,14 @@ Create a missing integration branch from current `origin/main` and push it. Befo
|
|
|
68
68
|
fetch the current remote integration tip. Create every child worktree from that tip, never from
|
|
69
69
|
`main`, and set each feature PR base explicitly to the integration branch.
|
|
70
70
|
|
|
71
|
+
Before each wave launches, run `git fetch origin main` and then
|
|
72
|
+
`git rev-list --count <integration>..origin/main`. A zero count proceeds directly to the wave.
|
|
73
|
+
A non-zero count runs the main-sync as a dedicated chore child item (the `epic-852-main-sync` /
|
|
74
|
+
PR #882 pattern) whose branch starts from the integration tip, merges `origin/main` with a merge
|
|
75
|
+
commit, and opens a PR into the integration branch; that PR must merge before the wave launches.
|
|
76
|
+
Record the sync child's `features[]` row before its launch, and do not reuse a manifest child's
|
|
77
|
+
issue number for it. Run at most one main-sync child per wave, then re-fetch the integration tip.
|
|
78
|
+
|
|
71
79
|
Launch all ready children in one bounded parallel wave. Before each launch, persist the
|
|
72
80
|
epic-child topology receipt, reviewed complexity assessment, delegation receipt, and Codex
|
|
73
81
|
model-routing receipt with the same `delegation_id`, then select the generated deployment agent.
|
|
@@ -112,9 +120,11 @@ authoritative backstop.
|
|
|
112
120
|
|
|
113
121
|
Each child owns its implementation, review, PR, CI-green gate, and merge into the integration
|
|
114
122
|
branch. A merge conflict enters that child's existing remediation loop with a blocking
|
|
115
|
-
`remediation-inputs.<timestamp>.md`.
|
|
116
|
-
`
|
|
117
|
-
|
|
123
|
+
`remediation-inputs.<timestamp>.md`. Conflict cycles share the child's attempt count,
|
|
124
|
+
`remediation_loop.completed_attempts`. The active cycle number is `completed_attempts + 1`, and a
|
|
125
|
+
cycle without an applied candidate consumes no number. After three completed attempts without a
|
|
126
|
+
`PASS` review, record `blocked_conflict_loop_limit` and stop that edge. The epic agent must not
|
|
127
|
+
resolve child conflicts locally.
|
|
118
128
|
|
|
119
129
|
## Worktree Cleanup
|
|
120
130
|
|
|
@@ -63,6 +63,21 @@ must never use placeholders.
|
|
|
63
63
|
Create or reuse `epic/<epic-slug>-integration` from `origin/main`, push it, and commit the epic
|
|
64
64
|
home before preparation. All prepared child outputs must fan into this branch.
|
|
65
65
|
|
|
66
|
+
## Integration Commit Form
|
|
67
|
+
|
|
68
|
+
The epic planner's own commits of the epic manifest, the fanned-in child feature folders and approved plans, and the kickoff copy are orchestration bookkeeping. `.codex/hooks/enforce-orchestration-preimplementation-gate.ps1` exempts them without a ready feature checkpoint only when the invocation is pathspec-bearing and every path operand lies inside `docs/features/epics/`, `docs/features/parallel/`, `docs/features/active/`, `docs/features/potential/`, or `artifacts/orchestration/`. A pathless commit, a whole-tree operand, or any operand outside those trees is denied.
|
|
69
|
+
|
|
70
|
+
Admitted commit forms, each followed by `--` and the exempt path operands:
|
|
71
|
+
|
|
72
|
+
- A single-quoted message containing `$`, for example `git commit -m 'docs: costs $5' -- <exempt paths>`.
|
|
73
|
+
- A single-quoted message containing a backtick, for example ``git commit -m 'docs: fix `Foo`' -- <exempt paths>``.
|
|
74
|
+
- The trailer option on `git commit` only, in the separate-value form `--trailer 'Co-Authored-By: Name <email>'` or the `--trailer=<value>` form, any number of times.
|
|
75
|
+
- The one-paragraph multi-message form: the subject in the first `-m` and every trailer in one single-quoted second `-m` value, separated by a literal newline. Each `-m` value becomes its own paragraph and git parses only the last paragraph as the trailer block, so trailers split across separate `-m` values do not form one trailer block.
|
|
76
|
+
|
|
77
|
+
Quoting rules: `$` and backtick are admitted only inside single quotes. `<`, `>`, and `#` are admitted only inside quotes. A typographic quote character (U+2018 to U+201E) is denied anywhere. Because the executing shell is undetermined (issue #735), a shape whose meaning differs between a POSIX shell and PowerShell is denied: a backslash anywhere in the command line is denied, and `{`, `}`, `,`, `(`, `)`, and `@` are denied outside quotes. Every staging operand must be a plain forward-slash repository-relative path that uses only the characters `A-Z a-z 0-9 . _ / -`.
|
|
78
|
+
|
|
79
|
+
Not admitted: heredoc-fed messages, and message files supplied through `-F <file>` or `--file=<file>` (issue #732, decision D5).
|
|
80
|
+
|
|
66
81
|
## Concurrent Preparation
|
|
67
82
|
|
|
68
83
|
Place all child preparations in one preparation batch, regardless of execution-wave
|
|
@@ -181,7 +196,8 @@ byte-identical; the manifest, durable kickoff, plans, and planning commits must
|
|
|
181
196
|
repository-aware readiness validator without worktree drift.
|
|
182
197
|
|
|
183
198
|
Invoke `validate_orchestration_artifacts` for `epic-planner-state` with
|
|
184
|
-
`require_ready_for_execution: true`
|
|
199
|
+
`require_ready_for_execution: true`, `require_codex_topology: true`,
|
|
200
|
+
`require_codex_model_routing: true`, and the explicit workspace root. Do not write or delegate the
|
|
185
201
|
kickoff until this canonical gate succeeds.
|
|
186
202
|
|
|
187
203
|
## Kickoff Artifacts
|
|
@@ -22,7 +22,8 @@ Use the epic slug or path supplied in the invoking user request.
|
|
|
22
22
|
per-feature plan paths, preflight evidence, and current Git state. Derive optional missing
|
|
23
23
|
hashes from Git; fail closed on actual drift.
|
|
24
24
|
Invoke `validate_orchestration_artifacts` for `epic-planner-state` with
|
|
25
|
-
`require_ready_for_execution: true`
|
|
25
|
+
`require_ready_for_execution: true`, `require_codex_topology: true`,
|
|
26
|
+
`require_codex_model_routing: true`, and the explicit workspace root. Do not delegate until
|
|
26
27
|
that canonical repository-aware gate succeeds.
|
|
27
28
|
4. Delegate the invocation prompt to `epic-orchestrator` and apply `epic-orchestrate`.
|
|
28
29
|
5. Reuse the existing integration branch. Every child resumes at atomic execution from its
|
|
@@ -48,6 +48,17 @@ Use this skill when:
|
|
|
48
48
|
Use `yyyy-MM-ddTHH-mm` for all audit, remediation, and evidence artifacts.
|
|
49
49
|
Example: `2026-02-06T14-30`.
|
|
50
50
|
|
|
51
|
+
The `Timestamp` value is UTC read from the host system clock when the recorded command runs (for example `Get-Date -AsUTC -Format yyyy-MM-ddTHH-mm` in PowerShell 7, `(Get-Date).ToUniversalTime().ToString('yyyy-MM-ddTHH-mm')` in Windows PowerShell 5.1, or `date -u +%Y-%m-%dT%H-%M` in a POSIX shell); the agent never composes or estimates it. The value is written without a zone suffix.
|
|
52
|
+
|
|
53
|
+
### Evidence Filename Timestamp
|
|
54
|
+
|
|
55
|
+
The stamp in the filename of every artifact under `<FEATURE>/evidence/<kind>/` is the UTC time at which that file is written, read from the host system clock immediately before the write, in the same `yyyy-MM-ddTHH-mm` shape with no zone suffix. It is never a plan-time stamp, a plan-cycle identifier, or any other value fixed before the write.
|
|
56
|
+
|
|
57
|
+
- Plans name such an artifact `<name>.<timestamp>.md`, and the executor substitutes the write time. A later loop pass writes a new file with a new stamp.
|
|
58
|
+
- A task that consumes an evidence artifact selects the lexicographically greatest file matching `<name>.*.md`. The fixed-width UTC shape sorts in chronological order, so that file is the most recently written one.
|
|
59
|
+
- Plan files (`plan.<timestamp>.md`, stamped by the feature-folder tooling in America/New_York) and the review artifact set (`policy-audit`, `code-review`, `feature-audit`, `remediation-inputs`, which share one stamp) are outside this rule.
|
|
60
|
+
- Existing evidence files whose names carry a plan-time stamp are not renamed.
|
|
61
|
+
|
|
51
62
|
## Canonical Evidence Locations
|
|
52
63
|
|
|
53
64
|
- Baseline evidence: `evidence/baseline/`
|
|
@@ -112,6 +123,8 @@ When evidence artifacts are used for automated checking or plan reconciliation,
|
|
|
112
123
|
- `Command: <exact command>`
|
|
113
124
|
- `EXIT_CODE: <int>`
|
|
114
125
|
|
|
126
|
+
The first occurrence of `Timestamp`, `Command`, `EXIT_CODE`, and `ExpectedExitCode` forms the record in both the Python and the TypeScript parser; later occurrences, including empty later values, are ignored. An artifact that records several gates therefore reports its first gate.
|
|
127
|
+
|
|
115
128
|
One optional field may also be declared:
|
|
116
129
|
- `ExpectedExitCode: <int>` — the exit code the gate is expected to produce.
|
|
117
130
|
|
|
@@ -83,7 +83,7 @@ Lifecycle guardrails:
|
|
|
83
83
|
|
|
84
84
|
4) Create the potential entry through `mcp__drm-copilot__new_potential_entry` or `mcp__drm-copilot__new_potential_bug_entry`.
|
|
85
85
|
|
|
86
|
-
5) Promote the potential document through `mcp__drm-copilot__potential_to_issue` with the selected `${work-mode}` and capture the numeric `${issue-num}`.
|
|
86
|
+
5) Promote the potential document through `mcp__drm-copilot__potential_to_issue` with the selected `${work-mode}` and capture the numeric `${issue-num}`. When the issue already exists, do not call `potential_to_issue`; verify the issue read-only and record `issue_adoption` with the existing number as `${issue-num}`.
|
|
87
87
|
|
|
88
88
|
6) Rename the branch to the final branch:
|
|
89
89
|
- `${final-branch}`
|