hatch3r 1.0.0 → 1.2.0
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/README.md +93 -322
- package/agents/hatch3r-a11y-auditor.md +24 -6
- package/agents/hatch3r-architect.md +20 -1
- package/agents/hatch3r-ci-watcher.md +31 -8
- package/agents/hatch3r-context-rules.md +14 -2
- package/agents/hatch3r-dependency-auditor.md +21 -5
- package/agents/hatch3r-devops.md +37 -6
- package/agents/hatch3r-docs-writer.md +19 -3
- package/agents/hatch3r-fixer.md +171 -0
- package/agents/hatch3r-implementer.md +84 -11
- package/agents/hatch3r-learnings-loader.md +69 -13
- package/agents/hatch3r-lint-fixer.md +19 -14
- package/agents/hatch3r-perf-profiler.md +18 -1
- package/agents/hatch3r-researcher.md +440 -5
- package/agents/hatch3r-reviewer.md +97 -5
- package/agents/hatch3r-security-auditor.md +23 -5
- package/agents/hatch3r-test-writer.md +21 -10
- package/checks/README.md +49 -0
- package/checks/code-quality.md +49 -0
- package/checks/performance.md +58 -0
- package/checks/security.md +58 -0
- package/checks/testing.md +53 -0
- package/commands/board/pickup-azure-devops.md +81 -0
- package/commands/board/pickup-delegation-multi.md +197 -0
- package/commands/board/pickup-delegation.md +100 -0
- package/commands/board/pickup-github.md +82 -0
- package/commands/board/pickup-gitlab.md +81 -0
- package/commands/board/pickup-modes.md +143 -0
- package/commands/board/pickup-post-impl.md +120 -0
- package/commands/board/shared-azure-devops.md +149 -0
- package/commands/board/shared-board-overview.md +215 -0
- package/commands/board/shared-github.md +169 -0
- package/commands/board/shared-gitlab.md +142 -0
- package/commands/hatch3r-agent-customize.md +40 -2
- package/commands/hatch3r-api-spec.md +294 -32
- package/commands/hatch3r-benchmark.md +386 -32
- package/commands/hatch3r-board-fill.md +161 -25
- package/commands/hatch3r-board-groom.md +595 -0
- package/commands/hatch3r-board-init.md +203 -46
- package/commands/hatch3r-board-pickup.md +79 -457
- package/commands/hatch3r-board-refresh.md +98 -27
- package/commands/hatch3r-board-shared.md +87 -238
- package/commands/hatch3r-bug-plan.md +16 -3
- package/commands/hatch3r-codebase-map.md +43 -10
- package/commands/hatch3r-command-customize.md +6 -0
- package/commands/hatch3r-context-health.md +5 -0
- package/commands/hatch3r-cost-tracking.md +5 -0
- package/commands/hatch3r-debug.md +426 -0
- package/commands/hatch3r-dep-audit.md +7 -1
- package/commands/hatch3r-feature-plan.md +74 -12
- package/commands/hatch3r-healthcheck.md +17 -1
- package/commands/hatch3r-hooks.md +16 -10
- package/commands/hatch3r-learn.md +15 -9
- package/commands/hatch3r-migration-plan.md +333 -33
- package/commands/hatch3r-onboard.md +327 -38
- package/commands/hatch3r-project-spec.md +46 -10
- package/commands/hatch3r-quick-change.md +336 -0
- package/commands/hatch3r-recipe.md +6 -0
- package/commands/hatch3r-refactor-plan.md +29 -13
- package/commands/hatch3r-release.md +13 -3
- package/commands/hatch3r-revision.md +395 -0
- package/commands/hatch3r-roadmap.md +18 -3
- package/commands/hatch3r-rule-customize.md +6 -0
- package/commands/hatch3r-security-audit.md +17 -1
- package/commands/hatch3r-skill-customize.md +6 -0
- package/commands/hatch3r-test-plan.md +532 -0
- package/commands/hatch3r-workflow.md +113 -38
- package/dist/cli/index.js +5184 -2593
- package/dist/cli/index.js.map +1 -0
- package/github-agents/hatch3r-docs-agent.md +1 -0
- package/github-agents/hatch3r-lint-agent.md +1 -0
- package/github-agents/hatch3r-security-agent.md +1 -0
- package/github-agents/hatch3r-test-agent.md +1 -0
- package/hooks/hatch3r-ci-failure.md +30 -0
- package/hooks/hatch3r-file-save.md +22 -0
- package/hooks/hatch3r-post-merge.md +23 -0
- package/hooks/hatch3r-pre-commit.md +23 -0
- package/hooks/hatch3r-pre-push.md +22 -0
- package/hooks/hatch3r-session-start.md +22 -0
- package/mcp/mcp.json +22 -3
- package/package.json +4 -7
- package/prompts/hatch3r-bug-triage.md +1 -0
- package/prompts/hatch3r-code-review.md +1 -0
- package/prompts/hatch3r-pr-description.md +1 -0
- package/rules/hatch3r-accessibility-standards.md +1 -0
- package/rules/hatch3r-agent-orchestration.md +326 -53
- package/rules/hatch3r-agent-orchestration.mdc +225 -0
- package/rules/hatch3r-api-design.md +4 -1
- package/rules/hatch3r-browser-verification.md +33 -1
- package/rules/hatch3r-browser-verification.mdc +29 -0
- package/rules/hatch3r-ci-cd.md +5 -1
- package/rules/hatch3r-ci-cd.mdc +4 -1
- package/rules/hatch3r-code-standards.md +18 -0
- package/rules/hatch3r-code-standards.mdc +10 -1
- package/rules/hatch3r-component-conventions.md +4 -1
- package/rules/hatch3r-data-classification.md +1 -0
- package/rules/hatch3r-deep-context.md +94 -0
- package/rules/hatch3r-deep-context.mdc +69 -0
- package/rules/hatch3r-dependency-management.md +13 -0
- package/rules/hatch3r-feature-flags.md +4 -1
- package/rules/hatch3r-git-conventions.md +1 -0
- package/rules/hatch3r-i18n.md +4 -1
- package/rules/hatch3r-learning-consult.md +4 -2
- package/rules/hatch3r-learning-consult.mdc +3 -2
- package/rules/hatch3r-migrations.md +12 -0
- package/rules/hatch3r-observability.md +293 -1
- package/rules/hatch3r-performance-budgets.md +5 -2
- package/rules/hatch3r-performance-budgets.mdc +1 -1
- package/rules/hatch3r-secrets-management.md +11 -3
- package/rules/hatch3r-secrets-management.mdc +10 -3
- package/rules/hatch3r-security-patterns.md +23 -3
- package/rules/hatch3r-security-patterns.mdc +8 -2
- package/rules/hatch3r-testing.md +1 -0
- package/rules/hatch3r-theming.md +4 -1
- package/rules/hatch3r-tooling-hierarchy.md +42 -15
- package/rules/hatch3r-tooling-hierarchy.mdc +27 -4
- package/skills/hatch3r-a11y-audit/SKILL.md +1 -0
- package/skills/hatch3r-agent-customize/SKILL.md +3 -0
- package/skills/hatch3r-api-spec/SKILL.md +1 -0
- package/skills/hatch3r-architecture-review/SKILL.md +6 -2
- package/skills/hatch3r-bug-fix/SKILL.md +4 -1
- package/skills/hatch3r-ci-pipeline/SKILL.md +1 -0
- package/skills/hatch3r-command-customize/SKILL.md +1 -0
- package/skills/hatch3r-context-health/SKILL.md +2 -1
- package/skills/hatch3r-cost-tracking/SKILL.md +1 -0
- package/skills/hatch3r-dep-audit/SKILL.md +6 -2
- package/skills/hatch3r-feature/SKILL.md +9 -2
- package/skills/hatch3r-gh-agentic-workflows/SKILL.md +130 -21
- package/skills/hatch3r-incident-response/SKILL.md +11 -5
- package/skills/hatch3r-issue-workflow/SKILL.md +12 -7
- package/skills/hatch3r-logical-refactor/SKILL.md +1 -0
- package/skills/hatch3r-migration/SKILL.md +1 -0
- package/skills/hatch3r-perf-audit/SKILL.md +2 -1
- package/skills/hatch3r-pr-creation/SKILL.md +20 -10
- package/skills/hatch3r-qa-validation/SKILL.md +2 -1
- package/skills/hatch3r-recipe/SKILL.md +1 -0
- package/skills/hatch3r-refactor/SKILL.md +7 -1
- package/skills/hatch3r-release/SKILL.md +15 -11
- package/skills/hatch3r-rule-customize/SKILL.md +1 -0
- package/skills/hatch3r-skill-customize/SKILL.md +1 -0
- package/skills/hatch3r-visual-refactor/SKILL.md +1 -0
- package/dist/cli/hooks-ZOTFDEA3.js +0 -59
- package/rules/hatch3r-error-handling.md +0 -17
- package/rules/hatch3r-error-handling.mdc +0 -15
|
@@ -0,0 +1,595 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: hatch3r-board-groom
|
|
3
|
+
type: command
|
|
4
|
+
description: Ongoing backlog refinement for existing board items. Re-prioritize, reclassify, re-scope, archive stale items, decompose oversized issues, merge duplicates, refresh dependencies, and remediate board health findings.
|
|
5
|
+
tags: [board, team]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Agent Pipeline
|
|
9
|
+
|
|
10
|
+
This command runs as a single orchestrator without sub-agent delegation.
|
|
11
|
+
|
|
12
|
+
All board operations MUST follow the Board Sync Enforcement rules defined in `hatch3r-board-shared`.
|
|
13
|
+
|
|
14
|
+
# Board Groom -- Backlog Refinement for Existing Issues
|
|
15
|
+
|
|
16
|
+
Perform ongoing backlog grooming on **{owner}/{repo}** (read from `.agents/hatch.json` board config). Scans all open issues, surfaces health-driven refinement suggestions, and lets the user selectively apply grooming actions: re-prioritize, reclassify, re-scope, demote, archive, decompose, merge duplicates, refresh dependencies, and remediate board health gaps. Unlike `board-fill` (which ingests new work from `todo.md`), board-groom operates exclusively on existing board items. Unlike `board-refresh` (which is read-only), board-groom mutates issues based on user-confirmed decisions.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Integration with GitHub Agentic Workflows
|
|
21
|
+
|
|
22
|
+
hatch3r's board commands operate as the **implementation orchestration layer** above GitHub Agentic Workflows. While GitHub's agentic workflows handle continuous automation (triage, testing, documentation), hatch3r's board commands orchestrate the full delivery pipeline:
|
|
23
|
+
|
|
24
|
+
- **board-init** sets up the project management structure that agentic workflows operate within
|
|
25
|
+
- **board-fill** creates the work items that agentic workflows can triage and label
|
|
26
|
+
- **board-groom** refines existing work items as priorities, scope, and dependencies evolve over time
|
|
27
|
+
- **board-pickup** orchestrates the implementation -> review -> merge pipeline that goes beyond what generic agentic workflows provide
|
|
28
|
+
- **board-refresh** regenerates the living dashboard on demand without running a full board command
|
|
29
|
+
|
|
30
|
+
GitHub Agentic Workflows and hatch3r are complementary: use agentic workflows for continuous background automation, use hatch3r board commands for structured delivery orchestration.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Shared Context
|
|
35
|
+
|
|
36
|
+
**Read the `hatch3r-board-shared` command at the start of the run.** It contains Board Configuration, Platform Detection, Platform Context, Board Sync Procedure, and tooling directives. Cache all values for the duration of this run.
|
|
37
|
+
|
|
38
|
+
## Token-Saving Directives
|
|
39
|
+
|
|
40
|
+
Follow the **Token-Saving Directives** in `hatch3r-board-shared`.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Workflow
|
|
45
|
+
|
|
46
|
+
Execute these steps in order. **Do not skip any step.** Ask the user at every checkpoint marked with ASK.
|
|
47
|
+
|
|
48
|
+
### Step 1: Read Configuration
|
|
49
|
+
|
|
50
|
+
1. Read `.agents/hatch.json` and cache the full config (top-level `owner`/`repo`, `platform`, and `board` section).
|
|
51
|
+
2. Read `platform` from `.agents/hatch.json`. Default to `github` if missing.
|
|
52
|
+
3. Resolve owner/repo per `hatch3r-board-shared`: use top-level `owner`/`repo` first, fall back to `board.owner`/`board.repo` if top-level values are empty.
|
|
53
|
+
4. If both are missing, abort with: "Cannot groom board -- owner and repo are not configured in `.agents/hatch.json`. Run `board-init` first."
|
|
54
|
+
5. Note `board.projectNumber` -- if null, board sync will be skipped later.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
### Step 2: Full Board Scan
|
|
59
|
+
|
|
60
|
+
Perform ONE comprehensive scan and cache everything for subsequent steps.
|
|
61
|
+
|
|
62
|
+
#### 2a. Fetch Open Issues / Work Items
|
|
63
|
+
|
|
64
|
+
**Platform-specific: Fetch all open items**
|
|
65
|
+
|
|
66
|
+
**If platform is `github`:**
|
|
67
|
+
1. Fetch ALL open issues: `gh issue list -R {owner}/{repo} --state open --limit 500 --json number,title,labels,state,createdAt,updatedAt,body`. Paginate if necessary. Fall back to `list_issues` MCP if gh CLI fails.
|
|
68
|
+
|
|
69
|
+
**If platform is `azure-devops`:**
|
|
70
|
+
1. Fetch ALL active work items: `az boards query --org https://dev.azure.com/{namespace} --project {project} --wiql "SELECT [System.Id], [System.Title], [System.State], [System.Tags], [System.CreatedDate], [System.ChangedDate], [System.Description] FROM WorkItems WHERE [System.State] <> 'Closed' AND [System.State] <> 'Removed'"`. Fall back to `list_work_items` MCP.
|
|
71
|
+
|
|
72
|
+
**If platform is `gitlab`:**
|
|
73
|
+
1. Fetch ALL open issues: `glab issue list -R {namespace}/{project} --state opened --per-page 100`. Paginate if necessary.
|
|
74
|
+
|
|
75
|
+
2. For each issue/work item, extract labels/tags from the response.
|
|
76
|
+
3. Check for sub-issues/child work items:
|
|
77
|
+
- **GitHub:** `issue_read` with `method: get_sub_issues`.
|
|
78
|
+
- **Azure DevOps:** `az boards work-item relation list --id N` to find parent-child relations.
|
|
79
|
+
- **GitLab:** `glab api projects/{project_id}/issues/{N}/links` for related issues.
|
|
80
|
+
Cache parent-child relationships.
|
|
81
|
+
4. Parse `## Dependencies` sections from issue bodies for dependency references. Recognize both hard (`Blocked by #N`, `Depends on #N`) and soft (`Recommended after #N`) dependency types. Track the type for each edge in the dependency graph -- only hard dependencies block pickup.
|
|
82
|
+
5. **Exclude** any issue labeled `meta:board-overview` from all analysis and listings.
|
|
83
|
+
|
|
84
|
+
#### 2b. Categorize Issues
|
|
85
|
+
|
|
86
|
+
Classify every open issue (excluding `meta:board-overview`):
|
|
87
|
+
|
|
88
|
+
- **Epic** -- has sub-issues
|
|
89
|
+
- **Sub-issue** -- is a child of an epic
|
|
90
|
+
- **Standalone** -- neither parent nor child
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
### Step 3: Compute Board Health & Surface Refinement Opportunities
|
|
95
|
+
|
|
96
|
+
Analyze cached data to produce actionable refinement suggestions. This step combines diagnostic detection (same as `board-refresh`) with grooming-specific analysis.
|
|
97
|
+
|
|
98
|
+
#### 3a. Status Distribution
|
|
99
|
+
|
|
100
|
+
Count issues per status label:
|
|
101
|
+
|
|
102
|
+
| Status | Source |
|
|
103
|
+
| --- | --- |
|
|
104
|
+
| Backlog / Triage | Issues with `status:triage` |
|
|
105
|
+
| Ready | Issues with `status:ready` |
|
|
106
|
+
| In Progress | Issues with `status:in-progress` |
|
|
107
|
+
| In Review | Issues with `status:in-review` |
|
|
108
|
+
| Externally Blocked | Issues with `status:blocked` |
|
|
109
|
+
|
|
110
|
+
#### 3b. Missing Metadata Detection
|
|
111
|
+
|
|
112
|
+
For each open issue, check for required labels. Flag issues missing any of:
|
|
113
|
+
|
|
114
|
+
- `type:*` (at least one type label)
|
|
115
|
+
- `priority:*` (at least one priority label)
|
|
116
|
+
- `executor:*` (at least one executor label)
|
|
117
|
+
|
|
118
|
+
Optional but noted: missing `area:*`, missing `risk:*`.
|
|
119
|
+
|
|
120
|
+
#### 3c. Stale Issue Detection
|
|
121
|
+
|
|
122
|
+
Flag open issues that are potentially stale:
|
|
123
|
+
|
|
124
|
+
- `status:triage` with no update in 14+ days (based on `updatedAt`).
|
|
125
|
+
- `status:in-progress` with no update in 7+ days (may be abandoned).
|
|
126
|
+
- `status:ready` with no update in 30+ days (may be deprioritized or obsolete).
|
|
127
|
+
|
|
128
|
+
#### 3d. Dependency Health
|
|
129
|
+
|
|
130
|
+
1. Build a dependency graph from parsed `## Dependencies` sections.
|
|
131
|
+
2. Identify **stale dependency references**: issues referencing closed blockers in `## Dependencies` that should be cleaned up (the `Blocked by #N` is satisfied but the text remains).
|
|
132
|
+
3. Identify **orphaned blockers**: issues with `has-dependencies` label but no `## Dependencies` section, or an empty section.
|
|
133
|
+
4. Identify **blocked chains**: open issues with unsatisfied blockers where the blocker is also blocked, creating a chain.
|
|
134
|
+
5. **Epic ordering consistency**: For each epic, compare its `## Implementation Order` levels against the DAG derived from its sub-issues' `## Dependencies` sections. Flag epics where the two diverge.
|
|
135
|
+
6. **Cross-epic dependencies**: Scan hard dependencies where the blocking issue and the dependent issue belong to different epics.
|
|
136
|
+
|
|
137
|
+
#### 3e. Priority Imbalance Detection
|
|
138
|
+
|
|
139
|
+
Analyze the distribution of priority labels across the board:
|
|
140
|
+
|
|
141
|
+
- Flag if >50% of issues are `priority:p0` or `priority:p1` (priority inflation).
|
|
142
|
+
- Flag if all issues share the same priority (undifferentiated backlog).
|
|
143
|
+
- Flag issues where priority does not align with risk (e.g., `priority:p3` + `risk:high`).
|
|
144
|
+
|
|
145
|
+
#### 3f. Grouping Opportunities
|
|
146
|
+
|
|
147
|
+
Scan existing standalone issues for potential epic grouping:
|
|
148
|
+
|
|
149
|
+
- 2+ standalone issues sharing the same `area:*` labels.
|
|
150
|
+
- 2+ standalone issues with semantically similar titles or overlapping scope.
|
|
151
|
+
|
|
152
|
+
#### 3g. Decomposition Candidates
|
|
153
|
+
|
|
154
|
+
Flag issues that may be oversized:
|
|
155
|
+
|
|
156
|
+
- Issues with 5+ acceptance criteria.
|
|
157
|
+
- Issues touching 3+ distinct `area:*` labels.
|
|
158
|
+
- Issues whose body exceeds ~2000 characters (heuristic for scope sprawl).
|
|
159
|
+
|
|
160
|
+
#### 3h. Duplicate Detection
|
|
161
|
+
|
|
162
|
+
Compare existing open issues pairwise for semantic overlap:
|
|
163
|
+
|
|
164
|
+
- Same `area:*` + similar title keywords.
|
|
165
|
+
- Overlapping acceptance criteria.
|
|
166
|
+
- Cross-reference `## Scope` sections for boundary collisions.
|
|
167
|
+
|
|
168
|
+
#### 3j. Unlinked Sub-Issue Detection
|
|
169
|
+
|
|
170
|
+
For each epic, compare the sub-issue references in the epic body (checklist items, `> Parent:` references) against the native sub-issue list from `issue_read` with `method: get_sub_issues` (GitHub) or equivalent platform call. Flag sub-issues that appear in the body but are not natively linked.
|
|
171
|
+
|
|
172
|
+
#### 3k. Board Sync Drift Detection
|
|
173
|
+
|
|
174
|
+
If `board.projectNumber` is configured, compare label-based status (`status:*` labels) against board column status via `gh project item-list {board.projectNumber} --owner {board.owner} --format json` (GitHub) or equivalent platform call. Flag issues where the label status and board column status diverge.
|
|
175
|
+
|
|
176
|
+
#### 3l. Present Refinement Summary
|
|
177
|
+
|
|
178
|
+
Present findings grouped by category:
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
Board Groom — Refinement Summary:
|
|
182
|
+
|
|
183
|
+
Board Health:
|
|
184
|
+
Total open issues: N (X epics, Y sub-issues, Z standalone)
|
|
185
|
+
Missing metadata: M issues (details below)
|
|
186
|
+
Stale issues: S issues
|
|
187
|
+
Stale dependency refs: D issues
|
|
188
|
+
Priority imbalance: {description or "None"}
|
|
189
|
+
Epic ordering discrepancies: E epics
|
|
190
|
+
Unlinked sub-issues: U issues (non-native links)
|
|
191
|
+
Board sync drift: V issues (label/board status mismatch)
|
|
192
|
+
|
|
193
|
+
Grooming Opportunities:
|
|
194
|
+
Re-prioritize candidates: R issues (priority/risk misalignment, priority inflation)
|
|
195
|
+
Archive candidates: A issues (stale, likely obsolete)
|
|
196
|
+
Decomposition candidates: C issues (oversized)
|
|
197
|
+
Grouping candidates: G standalone issues → potential epics
|
|
198
|
+
Duplicate/overlap candidates: O issue pairs
|
|
199
|
+
Dependency cleanup: K issues (stale refs, orphaned labels)
|
|
200
|
+
Link fix candidates: L issues (advisory or comment-only links)
|
|
201
|
+
|
|
202
|
+
Available actions: [reprioritize | reclassify | re-scope | demote | archive | decompose | merge | dep-refresh | health-fix | link-fix | all]
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**ASK:** "Here is the board refinement summary. Which grooming actions do you want to perform? Select one or more: reprioritize / reclassify / re-scope / demote / archive / decompose / merge / dep-refresh / health-fix / link-fix / all. You can also specify issue numbers to target specific items (e.g., 'reprioritize #5, #12')."
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
### Step 4: Execute Selected Grooming Actions
|
|
210
|
+
|
|
211
|
+
Execute only the actions the user selected. Each action is a self-contained sub-step with its own ASK checkpoint. If the user selected "all", execute every action in the order listed below.
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
#### 4a. Re-prioritize
|
|
216
|
+
|
|
217
|
+
Change `priority:*` labels on existing issues based on current context.
|
|
218
|
+
|
|
219
|
+
1. Present re-prioritize candidates from Step 3e (priority/risk misalignment, priority inflation) plus any user-specified issues.
|
|
220
|
+
2. For each candidate, show current priority, risk, type, and a one-line rationale for the suggested change.
|
|
221
|
+
|
|
222
|
+
```
|
|
223
|
+
Re-prioritize Candidates:
|
|
224
|
+
|
|
225
|
+
| # | Title | Current | Suggested | Rationale |
|
|
226
|
+
|---|-------|---------|-----------|-----------|
|
|
227
|
+
| #N | {title} | P3 | P1 | risk:high but lowest priority; security-adjacent |
|
|
228
|
+
| #M | {title} | P0 | P2 | no longer critical after #K shipped |
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**ASK:** "Confirm or adjust priority changes. Enter issue numbers with new priorities (e.g., '#5 → P1, #12 → P3'), or 'confirm all' / 'skip'."
|
|
232
|
+
|
|
233
|
+
3. Apply confirmed changes using platform CLI:
|
|
234
|
+
- **GitHub:** `gh issue edit N --remove-label "priority:pN" --add-label "priority:pM"` (fall back to `issue_write` MCP).
|
|
235
|
+
- **Azure DevOps:** `az boards work-item update --id N --fields "System.Tags=..."` (update tag string).
|
|
236
|
+
- **GitLab:** `glab issue update N --unlabel "priority::pN" --label "priority::pM"`.
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
#### 4b. Reclassify
|
|
241
|
+
|
|
242
|
+
Update `type:*`, `executor:*`, `risk:*`, or `area:*` labels on existing issues.
|
|
243
|
+
|
|
244
|
+
1. Present reclassification candidates:
|
|
245
|
+
- Issues where executor may have shifted (e.g., originally `executor:agent` but issue body reveals human decisions needed → suggest `executor:hybrid`).
|
|
246
|
+
- Issues where risk assessment has changed (e.g., a dependency was removed, reducing risk).
|
|
247
|
+
- Issues where type may be wrong (e.g., labeled `type:feature` but reads as a refactor).
|
|
248
|
+
2. For each candidate, show current labels and suggested changes with rationale.
|
|
249
|
+
|
|
250
|
+
**ASK:** "Confirm or adjust reclassifications. Enter changes per issue (e.g., '#5 executor:hybrid, #12 risk:low'), or 'confirm all' / 'skip'."
|
|
251
|
+
|
|
252
|
+
3. Apply confirmed changes using platform CLI:
|
|
253
|
+
- **GitHub:** `gh issue edit N --remove-label "..." --add-label "..."` (fall back to `issue_write` MCP).
|
|
254
|
+
- **Azure DevOps:** `az boards work-item update --id N --fields "System.Tags=..."`.
|
|
255
|
+
- **GitLab:** `glab issue update N --unlabel "..." --label "..."`.
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
#### 4c. Re-scope
|
|
260
|
+
|
|
261
|
+
Update acceptance criteria, `## Scope` sections, and issue body content for existing issues. This uses the same triage questioning framework as `board-fill` Step 2.5 but applied to existing issues.
|
|
262
|
+
|
|
263
|
+
1. Present re-scope candidates: user-specified issues, or issues flagged in Step 3g (decomposition candidates whose scope needs tightening rather than splitting).
|
|
264
|
+
2. For each candidate, display the current acceptance criteria and scope section.
|
|
265
|
+
|
|
266
|
+
**ASK:** "Which issues need re-scoping? For each, I'll ask targeted questions to refine scope and acceptance criteria."
|
|
267
|
+
|
|
268
|
+
3. For each confirmed issue, run triage questioning across the six dimensions (Scope/Definition, Value/Why, Unknowns/Spikes, External Blockers, Size/Decomposition, User/Stakeholder). Ask only about dimensions that appear unclear or outdated. Batch issues by theme.
|
|
269
|
+
|
|
270
|
+
4. Update the issue/work item body with refined acceptance criteria and scope. Preserve all other body sections.
|
|
271
|
+
- **GitHub:** `gh issue edit N --body "..."` (fall back to `issue_write` MCP).
|
|
272
|
+
- **Azure DevOps:** `az boards work-item update --id N --description "..."`.
|
|
273
|
+
- **GitLab:** `glab issue update N --description "..."`.
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
#### 4d. Demote to Triage
|
|
278
|
+
|
|
279
|
+
Send `status:ready` issues back to `status:triage` when they need rework. This is the one grooming action that deliberately relaxes the "never downgrade status" guardrail from `board-fill`.
|
|
280
|
+
|
|
281
|
+
1. Present demotion candidates: issues the user specified, or issues where the readiness assessment from `board-fill` Step 5.6 criteria would now fail (e.g., acceptance criteria are stale, scope has shifted, unresolved unknowns emerged).
|
|
282
|
+
2. For each candidate, explain why demotion is recommended.
|
|
283
|
+
|
|
284
|
+
```
|
|
285
|
+
Demotion Candidates:
|
|
286
|
+
|
|
287
|
+
| # | Title | Current Status | Reason |
|
|
288
|
+
|---|-------|----------------|--------|
|
|
289
|
+
| #N | {title} | status:ready | AC reference API that was redesigned in #K |
|
|
290
|
+
| #M | {title} | status:ready | scope expanded beyond original estimate |
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
**ASK:** "Confirm demotion for these issues. They will return to `status:triage` and need re-filling via `board-fill` before pickup. Confirm / adjust / skip."
|
|
294
|
+
|
|
295
|
+
3. Apply confirmed demotions using platform CLI. Sync board status to Backlog.
|
|
296
|
+
- **GitHub:** `gh issue edit N --remove-label "status:ready" --add-label "status:triage"`. Sync Projects V2 status.
|
|
297
|
+
- **Azure DevOps:** `az boards work-item update --id N --state "New"` and update tags.
|
|
298
|
+
- **GitLab:** `glab issue update N --unlabel "status::ready" --label "status::triage"`.
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
#### 4e. Archive Stale Items
|
|
303
|
+
|
|
304
|
+
Close issues that are no longer relevant or have been superseded.
|
|
305
|
+
|
|
306
|
+
1. Present archive candidates from Step 3c (stale issues) plus any user-specified issues.
|
|
307
|
+
2. For each candidate, show last update date, current status, and staleness reason.
|
|
308
|
+
|
|
309
|
+
```
|
|
310
|
+
Archive Candidates:
|
|
311
|
+
|
|
312
|
+
| # | Title | Status | Last Updated | Staleness |
|
|
313
|
+
|---|-------|--------|--------------|-----------|
|
|
314
|
+
| #N | {title} | triage | 45 days ago | No activity since creation |
|
|
315
|
+
| #M | {title} | in-progress | 21 days ago | Possibly abandoned |
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
**ASK:** "Which issues should be archived (closed)? I'll add a 'Closed as stale during board grooming' comment before closing. Enter issue numbers, 'all', or 'skip'. Issues marked in-progress will require explicit confirmation."
|
|
319
|
+
|
|
320
|
+
3. For each confirmed archive:
|
|
321
|
+
- Add a comment: `Closed during board grooming — {reason}. Reopen if still relevant.`
|
|
322
|
+
- Close the issue/work item using platform CLI:
|
|
323
|
+
- **GitHub:** `gh issue close N` (fall back to `issue_write` MCP with `state: CLOSED`).
|
|
324
|
+
- **Azure DevOps:** `az boards work-item update --id N --state "Closed"`.
|
|
325
|
+
- **GitLab:** `glab issue close N -R {namespace}/{project}`.
|
|
326
|
+
- If the issue was a sub-issue of an epic, note the change on the parent epic.
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
#### 4f. Decompose
|
|
331
|
+
|
|
332
|
+
Break down oversized issues into smaller sub-issues.
|
|
333
|
+
|
|
334
|
+
1. Present decomposition candidates from Step 3g plus any user-specified issues.
|
|
335
|
+
2. For each candidate, analyze the issue body and propose specific sub-issues with one-line descriptions. Follow the same decomposition logic as `board-fill` Step 5c:
|
|
336
|
+
- Split along area boundaries when multiple areas are touched.
|
|
337
|
+
- Split along acceptance criteria clusters when criteria fall into distinct shippable groups.
|
|
338
|
+
- Respect user-stated MVP slices from original triage context if available in the issue body.
|
|
339
|
+
|
|
340
|
+
3. Present decomposition proposals:
|
|
341
|
+
|
|
342
|
+
```
|
|
343
|
+
Decomposition — #N: {title}
|
|
344
|
+
|
|
345
|
+
Proposed sub-issues:
|
|
346
|
+
1. {sub-issue title} — {one-line scope}
|
|
347
|
+
2. {sub-issue title} — {one-line scope}
|
|
348
|
+
3. {sub-issue title} — {one-line scope}
|
|
349
|
+
|
|
350
|
+
The original issue becomes the parent epic.
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
**ASK:** "Confirm decomposition for each issue, or adjust sub-issue breakdown. Confirm / modify / skip per issue."
|
|
354
|
+
|
|
355
|
+
4. For confirmed decompositions:
|
|
356
|
+
- If the original is standalone, convert it to an epic by updating its body with `## Implementation Order` and adding sub-issue links.
|
|
357
|
+
- Create sub-issues using platform CLI (`gh issue create` / `az boards work-item create` / `glab issue create`). Fall back to MCP if CLI fails.
|
|
358
|
+
- Link sub-issues to the parent using the **Sub-Issue Linking Procedure** from `hatch3r-board-shared` (three-tier fallback chain).
|
|
359
|
+
- Inherit labels/tags from the parent. Add `## Dependencies` sections. Add `has-dependencies` label to sub-issues with dependency references (per rule 7 of Board Sync Enforcement).
|
|
360
|
+
- Sync new sub-issues to the board via the **Board Sync Procedure** from `hatch3r-board-shared`.
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
#### 4g. Merge Duplicates
|
|
365
|
+
|
|
366
|
+
Combine overlapping issues discovered after initial dedup.
|
|
367
|
+
|
|
368
|
+
1. Present duplicate/overlap candidates from Step 3h.
|
|
369
|
+
2. For each pair, show both issues side by side: title, labels, acceptance criteria overlap, scope overlap.
|
|
370
|
+
|
|
371
|
+
**ASK:** "For each pair: (a) merge into one (specify which survives), (b) keep both, (c) convert one to sub-issue of the other. Enter decisions per pair."
|
|
372
|
+
|
|
373
|
+
3. For confirmed merges:
|
|
374
|
+
- Transfer unique acceptance criteria from the closing issue to the surviving issue.
|
|
375
|
+
- Transfer any labels the surviving issue lacks.
|
|
376
|
+
- Add a comment on the closing issue: `Merged into #N during board grooming.`
|
|
377
|
+
- Close the duplicate using platform CLI:
|
|
378
|
+
- **GitHub:** `gh issue close N`.
|
|
379
|
+
- **Azure DevOps:** `az boards work-item update --id N --state "Closed"`.
|
|
380
|
+
- **GitLab:** `glab issue close N -R {namespace}/{project}`.
|
|
381
|
+
- If any other issue references the closed duplicate in `## Dependencies`, update those references to point to the surviving issue.
|
|
382
|
+
|
|
383
|
+
---
|
|
384
|
+
|
|
385
|
+
#### 4h. Dependency Refresh
|
|
386
|
+
|
|
387
|
+
Re-analyze and clean up dependency data based on current board state.
|
|
388
|
+
|
|
389
|
+
1. **Clean stale references:** For issues referencing closed blockers, remove the satisfied `Blocked by #N` lines from `## Dependencies` (the blocker is done, the reference is noise). Replace with `None` if no other dependencies remain.
|
|
390
|
+
1b. **Normalize dependency format:** Replace `Depends on #N` with `Blocked by #N` in `## Dependencies` sections. This enforces the canonical format per the Dependency Data Model in `hatch3r-board-shared`.
|
|
391
|
+
2. **Fix orphaned labels:** For issues with `has-dependencies` label but empty or missing `## Dependencies`, either add the section or remove the label. Also add `has-dependencies` to issues that have dependency references but are missing the label (bidirectional enforcement per rule 7 of Board Sync Enforcement).
|
|
392
|
+
3. **Discover new dependencies:** Analyze the current board for producer/consumer relationships that weren't captured in the original fill. Propose new dependency edges.
|
|
393
|
+
4. **Recompute epic ordering:** For epics with stale `## Implementation Order` sections (flagged in Step 3d), regenerate the section from sub-issues' `## Dependencies` DAG.
|
|
394
|
+
5. **Unblock newly available items:** After cleaning stale refs, identify issues that were previously dependency-waiting but are now available (all blockers closed). Note these for the user.
|
|
395
|
+
|
|
396
|
+
Present all proposed changes:
|
|
397
|
+
|
|
398
|
+
```
|
|
399
|
+
Dependency Refresh:
|
|
400
|
+
|
|
401
|
+
Stale references to remove:
|
|
402
|
+
#N — remove "Blocked by #K" (K is closed)
|
|
403
|
+
#M — remove "Blocked by #J" (J is closed) → section becomes "None"
|
|
404
|
+
|
|
405
|
+
Orphaned labels to fix:
|
|
406
|
+
#P — has "has-dependencies" but no ## Dependencies section → remove label
|
|
407
|
+
|
|
408
|
+
New dependencies discovered:
|
|
409
|
+
#Q should be "Blocked by #R" (Q consumes API that R creates)
|
|
410
|
+
|
|
411
|
+
Epic ordering to regenerate:
|
|
412
|
+
Epic #S — sub-issue deps diverge from ## Implementation Order
|
|
413
|
+
|
|
414
|
+
Newly unblocked:
|
|
415
|
+
#T — was waiting on #K (now closed) → available for pickup
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
**ASK:** "Confirm dependency changes. Adjust / confirm all / skip."
|
|
419
|
+
|
|
420
|
+
6. Apply confirmed changes using platform CLI:
|
|
421
|
+
- **GitHub:** `gh issue edit N --body "..."`, add/remove labels via `gh issue edit N --add-label / --remove-label`.
|
|
422
|
+
- **Azure DevOps:** `az boards work-item update --id N --description "..."`, update tags.
|
|
423
|
+
- **GitLab:** `glab issue update N --description "..."`, update labels.
|
|
424
|
+
Regenerate `## Implementation Order` for affected epics.
|
|
425
|
+
|
|
426
|
+
---
|
|
427
|
+
|
|
428
|
+
#### 4h-link. Link Fix (Sub-Issue Re-Linking)
|
|
429
|
+
|
|
430
|
+
Re-run the **Sub-Issue Linking Procedure** from `hatch3r-board-shared` for sub-issues identified in Step 3j as non-natively linked.
|
|
431
|
+
|
|
432
|
+
1. Present link-fix candidates from Step 3j:
|
|
433
|
+
|
|
434
|
+
```
|
|
435
|
+
Link Fix Candidates:
|
|
436
|
+
|
|
437
|
+
| # | Title | Parent Epic | Current Link Status |
|
|
438
|
+
|---|-------|-------------|---------------------|
|
|
439
|
+
| #N | {title} | #{epic} | advisory |
|
|
440
|
+
| #M | {title} | #{epic} | comment-only |
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
**ASK:** "Confirm re-linking for these sub-issues. The procedure will attempt native linking via MCP. Confirm / skip."
|
|
444
|
+
|
|
445
|
+
2. For each confirmed candidate, run the Sub-Issue Linking Procedure fallback chain starting from the primary tier. Record updated link status in the run cache.
|
|
446
|
+
|
|
447
|
+
---
|
|
448
|
+
|
|
449
|
+
#### 4i. Health Fix (Board Health Remediation)
|
|
450
|
+
|
|
451
|
+
Fix structural gaps detected in Step 3b (missing metadata).
|
|
452
|
+
|
|
453
|
+
1. For each issue with missing required labels, infer the missing labels from issue content using the same classification tables as `board-fill` Step 3:
|
|
454
|
+
- Missing `type:*` → infer from title/body keywords.
|
|
455
|
+
- Missing `priority:*` → default `priority:p2` unless urgency signals suggest otherwise.
|
|
456
|
+
- Missing `executor:*` → infer from scope complexity.
|
|
457
|
+
- Missing `area:*` → infer from file paths, modules, or subsystems mentioned.
|
|
458
|
+
- Missing `risk:*` → infer from scope, dependencies, and architectural impact.
|
|
459
|
+
|
|
460
|
+
2. Present inferred labels:
|
|
461
|
+
|
|
462
|
+
```
|
|
463
|
+
Health Fix — Missing Metadata:
|
|
464
|
+
|
|
465
|
+
| # | Title | Missing | Inferred |
|
|
466
|
+
|---|-------|---------|----------|
|
|
467
|
+
| #N | {title} | priority | priority:p2 (no urgency signals) |
|
|
468
|
+
| #M | {title} | type, executor | type:feature, executor:agent (clear scope) |
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
**ASK:** "Confirm or adjust inferred labels. Enter corrections per issue, or 'confirm all' / 'skip'."
|
|
472
|
+
|
|
473
|
+
3. Apply confirmed labels/tags using platform CLI:
|
|
474
|
+
- **GitHub:** `gh issue edit N --add-label "..."` (fall back to `issue_write` MCP).
|
|
475
|
+
- **Azure DevOps:** `az boards work-item update --id N --fields "System.Tags=..."`.
|
|
476
|
+
- **GitLab:** `glab issue update N --label "..."`.
|
|
477
|
+
|
|
478
|
+
---
|
|
479
|
+
|
|
480
|
+
### Step 5: Readiness Re-evaluation
|
|
481
|
+
|
|
482
|
+
After all grooming actions are applied, re-evaluate readiness for all affected issues.
|
|
483
|
+
|
|
484
|
+
1. Collect all issues modified during Step 4.
|
|
485
|
+
2. For each modified issue currently at `status:triage`, check all readiness criteria from `board-fill` Step 5.6 (structural + substantive). If all criteria are met, propose promoting to `status:ready`.
|
|
486
|
+
3. For each modified issue currently at `status:ready`, verify readiness criteria still hold after the changes. If criteria no longer hold (e.g., scope was expanded but acceptance criteria weren't updated), flag but do **not** auto-demote -- demotion requires explicit user action via Step 4d.
|
|
487
|
+
|
|
488
|
+
Present readiness changes:
|
|
489
|
+
|
|
490
|
+
```
|
|
491
|
+
Readiness Re-evaluation:
|
|
492
|
+
|
|
493
|
+
Promote to ready:
|
|
494
|
+
#N — all structural + substantive criteria met after health fix
|
|
495
|
+
|
|
496
|
+
Readiness warnings (still ready, but verify):
|
|
497
|
+
#M — priority changed from P3 to P1; confirm AC still reflect the higher urgency
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
**ASK:** "Confirm readiness promotions and acknowledge warnings. Confirm / adjust / skip."
|
|
501
|
+
|
|
502
|
+
4. Apply confirmed promotions: remove `status:triage`, add `status:ready`. Sync Projects v2 status.
|
|
503
|
+
|
|
504
|
+
---
|
|
505
|
+
|
|
506
|
+
### Step 6: Apply Changes & Sync Board
|
|
507
|
+
|
|
508
|
+
For every issue/work item whose labels or status changed during Steps 4-5:
|
|
509
|
+
|
|
510
|
+
1. **Sync board status:** Run the full **Board Sync Procedure** from `hatch3r-board-shared` for each issue with a status label change. Map the new status label to the corresponding board status.
|
|
511
|
+
2. **Sync other board fields:** If priority, area, or other mapped fields changed, update those fields on the board as well (per the enforcement rules in `hatch3r-board-shared`).
|
|
512
|
+
3. **Track item IDs:** Cache board item IDs for all synced issues to avoid re-resolution within this run.
|
|
513
|
+
|
|
514
|
+
---
|
|
515
|
+
|
|
516
|
+
### Step 7: Refresh Board Dashboard
|
|
517
|
+
|
|
518
|
+
**This step is mandatory. Do not skip.**
|
|
519
|
+
|
|
520
|
+
1. Search the cached board inventory for an open issue labeled `meta:board-overview`.
|
|
521
|
+
2. Compute Implementation Lanes using the **Lane Computation Algorithm** (steps 1-12) from `hatch3r-board-shared`. Use the dependency graph from Step 3d, updated with mutations from Step 4, as input. This includes inter-lane dependency computation, lane phasing, and the Lane Dependency Map.
|
|
522
|
+
3. Assign models to all open issues using the **Model Selection Heuristic (Quality-First)** from `hatch3r-board-shared`.
|
|
523
|
+
4. **If found:** Regenerate the dashboard body using the **Board Overview Issue Format** template from `hatch3r-board-shared`, populated with cached board data updated with all mutations from Steps 4-6. Update using platform CLI:
|
|
524
|
+
- **GitHub:** `gh issue edit {N} --body "..."` (fall back to `issue_write` MCP).
|
|
525
|
+
- **Azure DevOps:** `az boards work-item update --id {N} --description "..."`.
|
|
526
|
+
- **GitLab:** `glab issue update {N} --description "..."`.
|
|
527
|
+
5. **If not found:** Create a new board overview issue using the **Board Overview Issue Format** template, populated with current board data. Label/tag it `meta:board-overview` and sync to the board.
|
|
528
|
+
|
|
529
|
+
Do NOT re-fetch all issues; use cached data updated with this run's mutations.
|
|
530
|
+
|
|
531
|
+
---
|
|
532
|
+
|
|
533
|
+
### Step 7.5: End-of-Run Reconciliation
|
|
534
|
+
|
|
535
|
+
**This step is mandatory. Do not skip.**
|
|
536
|
+
|
|
537
|
+
Run the **End-of-Run Reconciliation Procedure** from `hatch3r-board-shared`. This verifies board sync, sub-issue links, label consistency, and PR linkage for all issues created or updated during this grooming session. Output the reconciliation report before proceeding to Step 8.
|
|
538
|
+
|
|
539
|
+
---
|
|
540
|
+
|
|
541
|
+
### Step 8: Groom Summary
|
|
542
|
+
|
|
543
|
+
Present a summary of all changes made during this grooming session:
|
|
544
|
+
|
|
545
|
+
```
|
|
546
|
+
Board Groom Complete:
|
|
547
|
+
Project: {owner}/{repo}
|
|
548
|
+
Overview issue: #{number} (updated / created)
|
|
549
|
+
|
|
550
|
+
Actions performed:
|
|
551
|
+
Re-prioritized: {count} issues
|
|
552
|
+
Reclassified: {count} issues
|
|
553
|
+
Re-scoped: {count} issues
|
|
554
|
+
Demoted to triage: {count} issues
|
|
555
|
+
Archived (closed): {count} issues
|
|
556
|
+
Decomposed: {count} issues → {count} new sub-issues
|
|
557
|
+
Merged: {count} duplicate pairs
|
|
558
|
+
Dependencies: {count} refs cleaned, {count} new deps added, {count} epics reordered
|
|
559
|
+
Health fixed: {count} issues (missing metadata resolved)
|
|
560
|
+
Readiness promoted: {count} issues (triage → ready)
|
|
561
|
+
|
|
562
|
+
Board State:
|
|
563
|
+
Total open: {count} ({epics} epics, {sub} sub-issues, {standalone} standalone)
|
|
564
|
+
Ready: {count} ({available} available, {depWaiting} waiting on deps)
|
|
565
|
+
In Progress: {count}
|
|
566
|
+
In Review: {count}
|
|
567
|
+
Triage: {count}
|
|
568
|
+
Blocked: {count}
|
|
569
|
+
Lanes: {laneCount} parallel lanes
|
|
570
|
+
```
|
|
571
|
+
|
|
572
|
+
---
|
|
573
|
+
|
|
574
|
+
## Error Handling
|
|
575
|
+
|
|
576
|
+
- **Issue listing failure:** Retry once, then fall back to MCP. If both fail, abort with platform-specific auth guidance:
|
|
577
|
+
- **GitHub:** "Cannot scan board -- check `gh auth login` status and repository access."
|
|
578
|
+
- **Azure DevOps:** "Cannot scan board -- check `az login` status and project access."
|
|
579
|
+
- **GitLab:** "Cannot scan board -- check `glab auth login` status and project access."
|
|
580
|
+
- **Issue edit/close failure:** Retry once, then fall back to MCP. If both fail, warn and skip that specific mutation. Summarize failures at end.
|
|
581
|
+
- **Sub-issue/relation read failure:** Warn and continue. Epic/sub-issue relationships will be incomplete; note in the summary.
|
|
582
|
+
- **Sub-issue linking failure (decomposition):** Report but do not delete the created sub-issue. Note the failed link in the summary.
|
|
583
|
+
- **Board sync failure:** Follow the resilience rules from `hatch3r-board-shared`. Warn and continue.
|
|
584
|
+
|
|
585
|
+
## Guardrails
|
|
586
|
+
|
|
587
|
+
- **Never modify the `meta:board-overview` issue outside of Step 7.** Steps 4-6 operate on work items only.
|
|
588
|
+
- **Never skip ASK checkpoints.** Every grooming action requires explicit user confirmation before mutation.
|
|
589
|
+
- **Demotion requires double confirmation.** Step 4d is the only place where status downgrade is permitted, and it requires the user to explicitly confirm each demotion.
|
|
590
|
+
- **Never auto-close issues.** Archiving (Step 4e) always requires user selection. Issues marked `status:in-progress` require individual explicit confirmation even when the user selects "all".
|
|
591
|
+
- **Preserve issue body structure.** When updating `## Dependencies`, `## Scope`, or acceptance criteria, preserve all other sections of the issue body. Read the full body before editing, apply targeted replacements.
|
|
592
|
+
- **No dependency cycles.** When adding new dependencies in Step 4h, validate that the addition does not create a cycle. Flag and reject any cycle-forming edge.
|
|
593
|
+
- **Follow the Platform CLI-first approach** from `hatch3r-board-shared`. Use platform CLI as primary; MCP as fallback.
|
|
594
|
+
- **Board Overview is auto-maintained.** Exclude from all analysis. One board overview issue at a time.
|
|
595
|
+
- **Single board scan.** Perform ONE full board scan per run. Cache all issue data. Reuse for all subsequent steps. Only re-fetch an issue if you mutated it and need the updated body for a subsequent step.
|