hatch3r 1.1.0 → 1.3.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 +109 -364
- package/agents/hatch3r-a11y-auditor.md +8 -8
- package/agents/hatch3r-architect.md +2 -4
- package/agents/hatch3r-ci-watcher.md +2 -4
- package/agents/hatch3r-context-rules.md +2 -4
- package/agents/hatch3r-dependency-auditor.md +5 -7
- package/agents/hatch3r-devops.md +2 -4
- package/agents/hatch3r-docs-writer.md +2 -4
- package/agents/hatch3r-fixer.md +2 -0
- package/agents/hatch3r-implementer.md +32 -0
- package/agents/hatch3r-learnings-loader.md +189 -13
- package/agents/hatch3r-lint-fixer.md +3 -14
- package/agents/hatch3r-perf-profiler.md +2 -4
- package/agents/hatch3r-researcher.md +247 -0
- package/agents/hatch3r-reviewer.md +76 -7
- package/agents/hatch3r-security-auditor.md +4 -7
- package/agents/hatch3r-test-writer.md +3 -11
- package/agents/modes/architecture.md +44 -0
- package/agents/modes/boundary-analysis.md +45 -0
- package/agents/modes/codebase-impact.md +81 -0
- package/agents/modes/complexity-risk.md +40 -0
- package/agents/modes/coverage-analysis.md +44 -0
- package/agents/modes/current-state.md +52 -0
- package/agents/modes/feature-design.md +39 -0
- package/agents/modes/impact-analysis.md +45 -0
- package/agents/modes/library-docs.md +31 -0
- package/agents/modes/migration-path.md +55 -0
- package/agents/modes/prior-art.md +31 -0
- package/agents/modes/refactoring-strategy.md +55 -0
- package/agents/modes/regression.md +45 -0
- package/agents/modes/requirements-elicitation.md +68 -0
- package/agents/modes/risk-assessment.md +41 -0
- package/agents/modes/risk-prioritization.md +43 -0
- package/agents/modes/root-cause.md +39 -0
- package/agents/modes/similar-implementation.md +70 -0
- package/agents/modes/symptom-trace.md +39 -0
- package/agents/modes/test-pattern.md +61 -0
- package/agents/shared/external-knowledge.md +11 -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 +3 -2
- package/commands/hatch3r-api-spec.md +1 -0
- package/commands/hatch3r-benchmark.md +1 -0
- package/commands/hatch3r-board-fill.md +15 -16
- package/commands/hatch3r-board-groom.md +50 -10
- package/commands/hatch3r-board-init.md +1 -0
- package/commands/hatch3r-board-pickup.md +44 -572
- package/commands/hatch3r-board-refresh.md +31 -10
- package/commands/hatch3r-board-shared.md +87 -439
- package/commands/hatch3r-bug-plan.md +1 -0
- package/commands/hatch3r-codebase-map.md +1 -0
- package/commands/hatch3r-command-customize.md +1 -0
- package/commands/hatch3r-context-health.md +23 -2
- package/commands/hatch3r-cost-tracking.md +15 -0
- package/commands/hatch3r-debug.md +1 -0
- package/commands/hatch3r-dep-audit.md +2 -1
- package/commands/hatch3r-feature-plan.md +1 -0
- package/commands/hatch3r-healthcheck.md +2 -1
- package/commands/hatch3r-hooks.md +1 -0
- package/commands/hatch3r-learn.md +69 -2
- package/commands/hatch3r-migration-plan.md +1 -0
- package/commands/hatch3r-onboard.md +1 -0
- package/commands/hatch3r-project-spec.md +1 -0
- package/commands/hatch3r-quick-change.md +1 -0
- package/commands/hatch3r-recipe.md +1 -0
- package/commands/hatch3r-refactor-plan.md +1 -0
- package/commands/hatch3r-release.md +2 -1
- package/commands/hatch3r-revision.md +1 -0
- package/commands/hatch3r-roadmap.md +8 -1
- package/commands/hatch3r-rule-customize.md +1 -0
- package/commands/hatch3r-security-audit.md +2 -1
- package/commands/hatch3r-skill-customize.md +1 -0
- package/commands/hatch3r-test-plan.md +532 -0
- package/commands/hatch3r-workflow.md +1 -0
- package/dist/cli/index.js +4735 -1426
- package/dist/cli/index.js.map +1 -1
- 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 +1 -0
- package/hooks/hatch3r-file-save.md +1 -0
- package/hooks/hatch3r-post-merge.md +1 -0
- package/hooks/hatch3r-pre-commit.md +1 -0
- package/hooks/hatch3r-pre-push.md +1 -0
- package/hooks/hatch3r-session-start.md +1 -0
- package/package.json +2 -2
- 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 +289 -73
- package/rules/hatch3r-api-design.md +1 -0
- package/rules/hatch3r-browser-verification.md +1 -0
- package/rules/hatch3r-ci-cd.md +1 -0
- package/rules/hatch3r-code-standards.md +9 -0
- package/rules/hatch3r-component-conventions.md +1 -0
- package/rules/hatch3r-data-classification.md +1 -0
- package/rules/hatch3r-deep-context.md +1 -0
- package/rules/hatch3r-dependency-management.md +13 -0
- package/rules/hatch3r-feature-flags.md +1 -0
- package/rules/hatch3r-git-conventions.md +1 -0
- package/rules/hatch3r-i18n.md +1 -0
- package/rules/hatch3r-learning-consult.md +1 -0
- package/rules/hatch3r-migrations.md +12 -0
- package/rules/hatch3r-observability.md +290 -0
- package/rules/hatch3r-performance-budgets.md +1 -0
- package/rules/hatch3r-secrets-management.md +1 -0
- package/rules/hatch3r-security-patterns.md +12 -0
- package/rules/hatch3r-testing.md +1 -0
- package/rules/hatch3r-theming.md +1 -0
- package/rules/hatch3r-tooling-hierarchy.md +1 -0
- package/skills/hatch3r-a11y-audit/SKILL.md +1 -0
- package/skills/hatch3r-agent-customize/SKILL.md +1 -0
- package/skills/hatch3r-api-spec/SKILL.md +1 -0
- package/skills/hatch3r-architecture-review/SKILL.md +1 -0
- package/skills/hatch3r-bug-fix/SKILL.md +1 -0
- 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 +1 -0
- package/skills/hatch3r-cost-tracking/SKILL.md +1 -0
- package/skills/hatch3r-dep-audit/SKILL.md +2 -1
- package/skills/hatch3r-feature/SKILL.md +1 -0
- package/skills/hatch3r-gh-agentic-workflows/SKILL.md +1 -0
- package/skills/hatch3r-incident-response/SKILL.md +1 -0
- package/skills/hatch3r-issue-workflow/SKILL.md +1 -0
- package/skills/hatch3r-logical-refactor/SKILL.md +1 -0
- package/skills/hatch3r-migration/SKILL.md +1 -0
- package/skills/hatch3r-perf-audit/SKILL.md +1 -0
- package/skills/hatch3r-pr-creation/SKILL.md +1 -0
- package/skills/hatch3r-qa-validation/SKILL.md +1 -0
- package/skills/hatch3r-recipe/SKILL.md +1 -0
- package/skills/hatch3r-refactor/SKILL.md +1 -0
- package/skills/hatch3r-release/SKILL.md +1 -0
- 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
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: hatch3r-board-shared-overview
|
|
3
|
+
type: shared-context
|
|
4
|
+
description: Board overview dashboard template, model pool, model selection heuristic, and lane computation algorithm. Referenced from hatch3r-board-shared.
|
|
5
|
+
tags: [board, team]
|
|
6
|
+
---
|
|
7
|
+
# Board Overview Reference
|
|
8
|
+
|
|
9
|
+
If `meta:board-overview` is included in `board.labels.meta`, board commands will look for an open issue with that label to use as a live dashboard. This dashboard is auto-maintained and MUST be regenerated at the end of every board command run that mutates issues. For on-demand regeneration without running a full board command, use `hatch3r-board-refresh`.
|
|
10
|
+
|
|
11
|
+
Teams can extend the dashboard with project-specific sections, but the following structure and model recommendations are required.
|
|
12
|
+
|
|
13
|
+
## Frontier Model Pool
|
|
14
|
+
|
|
15
|
+
When populating the board overview, assign a recommended model to each issue. The pool uses aliases that map to the project's configured model versions in `hatch.json`. Specific model IDs are intentionally omitted here to avoid staleness as model versions change — configure actual model IDs in `hatch.json` under `models`.
|
|
16
|
+
|
|
17
|
+
| Alias | Strength | Use When |
|
|
18
|
+
| ----- | -------- | -------- |
|
|
19
|
+
| `opus` | Code quality, multi-file refactoring, security, deep reasoning | Complex refactors, security-critical, architectural changes, `risk:high` |
|
|
20
|
+
| `codex` | Agentic coding, long-running tasks, tool orchestration | Multi-step implementations, polyglot codebases, complex tool integrations |
|
|
21
|
+
| `gemini-pro` | Large context windows, multimodal, web development | Massive context needs (large epics), web/frontend work |
|
|
22
|
+
| `sonnet` | Balance of quality and speed | Standard features, bugs, docs, QA — when the top-tier model is overkill |
|
|
23
|
+
|
|
24
|
+
## Model Selection Heuristic (Quality-First)
|
|
25
|
+
|
|
26
|
+
1. **Default:** `opus` — highest code quality baseline.
|
|
27
|
+
2. **Override to `codex`** if the issue involves heavy agentic coding, long-running multi-step tasks, or multi-language requirements.
|
|
28
|
+
3. **Override to `gemini-pro`** if the issue requires processing very large context (large epic with many sub-issues spanning many files) or is primarily web/frontend work.
|
|
29
|
+
4. **Downgrade to `sonnet`** ONLY for straightforward issues: simple bugs (`risk:low`), documentation (`type:docs`), QA validation (`type:qa`), or issues with clear bounded scope and no architectural impact.
|
|
30
|
+
|
|
31
|
+
## Board Overview Issue Format
|
|
32
|
+
|
|
33
|
+
Issue listings in the board overview MUST include a `Model` column. All board commands that regenerate the dashboard MUST use this canonical template. Omit any status section that has zero issues (except Status Summary, which always appears). Omit Board Health sub-sections that have no findings. Sort issues within each status group by priority (`P0` first), then by issue number.
|
|
34
|
+
|
|
35
|
+
```markdown
|
|
36
|
+
## Board Overview
|
|
37
|
+
|
|
38
|
+
**Project:** {owner}/{repo}
|
|
39
|
+
**Last refreshed:** {ISO date}
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Status Summary
|
|
44
|
+
|
|
45
|
+
| Status | Count |
|
|
46
|
+
|--------|-------|
|
|
47
|
+
| Backlog / Triage | {count} |
|
|
48
|
+
| Ready | {count} |
|
|
49
|
+
| In Progress | {count} |
|
|
50
|
+
| In Review | {count} |
|
|
51
|
+
| Externally Blocked | {count} |
|
|
52
|
+
| **Total Open** | **{count}** |
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## In Progress
|
|
57
|
+
|
|
58
|
+
| # | Title | Type | Pri | Executor | Model | PR |
|
|
59
|
+
|---|-------|------|-----|----------|-------|----|
|
|
60
|
+
| #{N} | {title} | {type} | {pri} | {executor} | {model} | #{pr_number} or -- |
|
|
61
|
+
|
|
62
|
+
## In Review
|
|
63
|
+
|
|
64
|
+
| # | Title | Type | Pri | Executor | Model | PR |
|
|
65
|
+
|---|-------|------|-----|----------|-------|----|
|
|
66
|
+
| #{N} | {title} | {type} | {pri} | {executor} | {model} | #{pr_number} or -- |
|
|
67
|
+
|
|
68
|
+
## Implementation Lanes
|
|
69
|
+
|
|
70
|
+
Issues grouped into work streams with dependency-aware phasing.
|
|
71
|
+
Lanes in the same phase can be worked concurrently; within a lane, follow the listed order.
|
|
72
|
+
Lanes in later phases should start after their prerequisite lanes complete or reach a stable state.
|
|
73
|
+
|
|
74
|
+
### Lane Dependency Map
|
|
75
|
+
|
|
76
|
+
| Lane | Phase | Prerequisites | Relationship |
|
|
77
|
+
|------|-------|---------------|--------------|
|
|
78
|
+
| Lane 1: {name} | 1 | -- | Independent |
|
|
79
|
+
| Lane 2: {name} | 2 | Lane 1 (resolved-hard) | Depends on Lane 1 output |
|
|
80
|
+
| Lane 3: {name} | 2 | Lane 1 (soft) | Recommended after Lane 1 |
|
|
81
|
+
|
|
82
|
+
When 4+ lanes have inter-lane edges, also render a **Mermaid diagram**:
|
|
83
|
+
- Solid arrows (`-->`) for resolved-hard edges
|
|
84
|
+
- Dashed arrows (`-.->`) for soft edges
|
|
85
|
+
- Phase 1 nodes = green, Phase 2 = yellow, Phase 3+ = orange
|
|
86
|
+
- Omit diagram when all lanes are Phase 1 or fewer than 4 lanes exist
|
|
87
|
+
|
|
88
|
+
### Lane 1: {area/theme} [Phase 1]
|
|
89
|
+
|
|
90
|
+
| Order | # | Title | Type | Pri | Executor | Model |
|
|
91
|
+
|-------|---|-------|------|-----|----------|-------|
|
|
92
|
+
| 1 | #{N} | {title} | {type} | {pri} | {executor} | {model} |
|
|
93
|
+
| 2 | #{M} | {title} | {type} | {pri} | {executor} | {model} |
|
|
94
|
+
|
|
95
|
+
### Lane 2: {area/theme} [Phase 2]
|
|
96
|
+
> After: Lane 1 (API creates endpoints this lane consumes)
|
|
97
|
+
|
|
98
|
+
| Order | # | Title | Type | Pri | Executor | Model |
|
|
99
|
+
|-------|---|-------|------|-----|----------|-------|
|
|
100
|
+
| 1 | #{N} | {title} | {type} | {pri} | {executor} | {model} |
|
|
101
|
+
|
|
102
|
+
## Cross-Epic Dependencies
|
|
103
|
+
|
|
104
|
+
Dependency relationships between epics. Omit if no cross-epic dependencies exist.
|
|
105
|
+
|
|
106
|
+
| Upstream Epic | Downstream Epic | Via |
|
|
107
|
+
|---------------|-----------------|-----|
|
|
108
|
+
| #{epicA} {title} | #{epicB} {title} | #{subX} blocks #{subY} |
|
|
109
|
+
|
|
110
|
+
## Cross-Lane Dependencies
|
|
111
|
+
|
|
112
|
+
Inter-lane dependency edges from the Lane Dependency Map. Omit if no cross-lane dependencies exist.
|
|
113
|
+
|
|
114
|
+
| From (Lane) | Issue | To (Lane) | Issue | Type | Reason |
|
|
115
|
+
|-------------|-------|-----------|-------|------|--------|
|
|
116
|
+
| Lane 1: API | #{N} | Lane 3: Integration | #{M} | resolved-hard | #{M} was blocked by #{N} (now closed) |
|
|
117
|
+
| Lane 1: API | #{N} | Lane 2: Auth | #{K} | soft | Shared area overlap, reduced merge conflict risk |
|
|
118
|
+
|
|
119
|
+
## Waiting on Dependencies
|
|
120
|
+
|
|
121
|
+
`status:ready` issues with one or more unsatisfied blockers. Not yet available for pickup.
|
|
122
|
+
|
|
123
|
+
| # | Title | Type | Waiting On | Model |
|
|
124
|
+
|---|-------|------|------------|-------|
|
|
125
|
+
| #{N} | {title} | {type} | #{blocker} ({blocker status}) | {model} |
|
|
126
|
+
|
|
127
|
+
## Externally Blocked
|
|
128
|
+
|
|
129
|
+
Issues with `status:blocked` -- waiting on external factors (approvals, environments, third-party services).
|
|
130
|
+
|
|
131
|
+
| # | Title | Type | Reason | Model |
|
|
132
|
+
|---|-------|------|--------|-------|
|
|
133
|
+
| #{N} | {title} | {type} | {blocker reason} | {model} |
|
|
134
|
+
|
|
135
|
+
## Backlog / Triage
|
|
136
|
+
|
|
137
|
+
| # | Title | Type | Pri | Executor | Model |
|
|
138
|
+
|---|-------|------|-----|----------|-------|
|
|
139
|
+
| #{N} | {title} | {type} | {pri} | {executor} | {model} |
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Board Health
|
|
144
|
+
|
|
145
|
+
**Missing metadata:**
|
|
146
|
+
- {list or "None -- all issues have required labels."}
|
|
147
|
+
|
|
148
|
+
**Stale issues:**
|
|
149
|
+
- {list or "None -- all issues are active."}
|
|
150
|
+
|
|
151
|
+
**Blocked chains:**
|
|
152
|
+
- {list or "None -- no blocked dependencies."}
|
|
153
|
+
|
|
154
|
+
**Epic ordering discrepancies:**
|
|
155
|
+
- {list or "None -- all epic Implementation Order sections match sub-issue Dependencies."}
|
|
156
|
+
|
|
157
|
+
**Lane sequencing warnings:**
|
|
158
|
+
- {list or "None -- all lane phase assignments are clear."}
|
|
159
|
+
|
|
160
|
+
Flag: Phase 2+ lanes with 0 prerequisite work completed, lanes with bidirectional soft deps (review independence), lanes sharing 4+ soft deps (consider merging).
|
|
161
|
+
|
|
162
|
+
**Unlinked sub-issues:**
|
|
163
|
+
- {list or "None -- all sub-issues are natively linked."}
|
|
164
|
+
|
|
165
|
+
**Unlinked in-progress work:**
|
|
166
|
+
- {list or "None -- all active issues have PRs."}
|
|
167
|
+
|
|
168
|
+
**Board sync drift:**
|
|
169
|
+
- {list or "None -- all labels match board state."}
|
|
170
|
+
|
|
171
|
+
**Dependency format inconsistencies:**
|
|
172
|
+
- {list using `Depends on` instead of `Blocked by`, or "None -- all use canonical format."}
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
*This issue is auto-maintained by hatch3r board commands. Do not close.*
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Dependency Data Model
|
|
182
|
+
|
|
183
|
+
`## Dependencies` sections in individual issue bodies are the **single authoritative source** of dependency data. Every issue (epic, sub-issue, standalone) tracks its own blockers in its `## Dependencies` section using two reference types:
|
|
184
|
+
|
|
185
|
+
- **Hard:** `Blocked by #N` -- this issue cannot start until #N is closed. Used for true producer/consumer relationships (A creates what B consumes) and explicit sequencing requirements.
|
|
186
|
+
- **Soft:** `Recommended after #N` -- this issue can proceed in parallel with #N, but sequential execution is recommended (e.g., shared area overlap, reduced merge conflict risk). Soft dependencies are advisory; they do not block pickup or exclude issues from Implementation Lanes.
|
|
187
|
+
|
|
188
|
+
When no dependencies exist, the section contains `None`.
|
|
189
|
+
|
|
190
|
+
**Canonical format:** `Blocked by #N` is the only hard dependency format board commands generate. `Depends on #N` is accepted as a legacy alias when parsing but MUST NOT be written. `board-groom` normalizes `Depends on #N` → `Blocked by #N` during dependency refresh.
|
|
191
|
+
|
|
192
|
+
`## Implementation Order` sections in epic bodies are a **derived convenience view** -- they visualize the dependency DAG among an epic's sub-issues as numbered levels. Board commands that create or update epics MUST regenerate `## Implementation Order` from the sub-issues' `## Dependencies` sections, not the other way around. When the two diverge, `## Dependencies` wins.
|
|
193
|
+
|
|
194
|
+
## Lane Computation Algorithm
|
|
195
|
+
|
|
196
|
+
Used by `board-fill`, `board-groom`, and `board-refresh` when generating the Implementation Lanes and Waiting on Dependencies sections. Input: all `status:ready` issues and their dependency data (from `## Dependencies` sections).
|
|
197
|
+
|
|
198
|
+
1. **Collect** all `status:ready` issues.
|
|
199
|
+
2. **Partition by hard-blocker satisfaction** -- for each collected issue, check all **hard** dependency references (`Blocked by #N`) in its `## Dependencies` section against the full board. An issue is **dependency-waiting** if any hard blocker is still open (regardless of the blocker's status). Soft dependencies (`Recommended after #N`) do not affect this partition. Separate into two sets:
|
|
200
|
+
- **Available** -- all hard blockers satisfied (closed) or no hard blockers. These proceed to lane computation (step 3+).
|
|
201
|
+
- **Dependency-waiting** -- one or more hard blockers still open. These are excluded from Implementation Lanes and listed in the **Waiting on Dependencies** section of the overview instead.
|
|
202
|
+
3. **Build the available sub-graph** -- retain **both** hard and soft dependency edges among available issues (from parsed `## Dependencies` sections). Hard edges determine intra-lane ordering. Soft edges are tracked for inter-lane computation in steps 10-12.
|
|
203
|
+
4. **Group by dependency chains** -- issues with sequential dependencies go in the same lane, ordered topologically within the chain.
|
|
204
|
+
5. **Group by area overlap** -- independent issues (no inter-dependencies) that share `area:*` labels go in the same lane. This avoids merge conflicts on the same files when multiple agents work in parallel.
|
|
205
|
+
6. **General lane** -- issues with no dependencies and no area overlap form their own single-issue lanes. If three or more such issues exist, group them into a single "General" lane.
|
|
206
|
+
7. **Name lanes** by the dominant `area:*` label or shared theme of the issues in the lane. Use "General" for the catch-all lane.
|
|
207
|
+
8. **Sort lanes** by the highest-priority issue in each lane (`P0`-lane first, then `P1`, etc.). Break ties by lowest issue number.
|
|
208
|
+
9. **Sort within lanes** by dependency order (blockers before dependents), then by priority, then by issue number.
|
|
209
|
+
10. **Compute inter-lane dependency edges:** After lanes are formed, scan all soft dependencies (`Recommended after #N`) and resolved hard dependencies (`Blocked by #N` where #N is closed) where the blocker and dependent are in *different* lanes. Record: source lane, target lane, edge type (`soft` / `resolved-hard`), issue pair.
|
|
210
|
+
11. **Compute lane phases:** Build a lane-level DAG from step 10 edges. Assign phase numbers via topological ordering:
|
|
211
|
+
- Phase 1: lanes with no incoming inter-lane edges (can start immediately).
|
|
212
|
+
- Phase 2+: lanes whose predecessors are all in earlier phases.
|
|
213
|
+
- Soft-only edges are annotated but do not enforce phasing (advisory).
|
|
214
|
+
- If all lanes have no edges → all Phase 1 (truly parallel).
|
|
215
|
+
12. **Build Lane Dependency Map:** Produce summary: lane phase assignments, inter-lane edges with types, whether the board is fully parallel or phased. This summary populates the Lane Dependency Map and Cross-Lane Dependencies sections of the board overview.
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: hatch3r-board-shared-github
|
|
3
|
+
type: shared-context
|
|
4
|
+
description: GitHub-specific platform details for board shared context. Covers GitHub Issues, Projects V2, gh CLI, and MCP tools.
|
|
5
|
+
tags: [board, team, github]
|
|
6
|
+
---
|
|
7
|
+
# Board Shared Reference — GitHub Platform Details
|
|
8
|
+
|
|
9
|
+
Platform-specific procedures for GitHub. Referenced from `hatch3r-board-shared`.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Platform Detection — GitHub
|
|
14
|
+
|
|
15
|
+
Use `gh` CLI and GitHub MCP tools. Issues = GitHub Issues. PRs = Pull Requests. Board = Projects V2.
|
|
16
|
+
|
|
17
|
+
### CLI Command Reference
|
|
18
|
+
|
|
19
|
+
| Action | Command |
|
|
20
|
+
|--------|---------|
|
|
21
|
+
| Create issue | `gh issue create -R {owner}/{repo}` |
|
|
22
|
+
| List issues | `gh issue list -R {owner}/{repo}` |
|
|
23
|
+
| View issue | `gh issue view N -R {owner}/{repo}` |
|
|
24
|
+
| Update issue | `gh issue edit N -R {owner}/{repo}` |
|
|
25
|
+
| Close issue | `gh issue close N -R {owner}/{repo}` |
|
|
26
|
+
| Create PR | `gh pr create -R {owner}/{repo}` |
|
|
27
|
+
| Add label | `gh issue edit N --add-label "x"` |
|
|
28
|
+
| Add comment | `gh issue comment N -R {owner}/{repo}` |
|
|
29
|
+
| Board sync | `gh project item-add`, GraphQL |
|
|
30
|
+
|
|
31
|
+
### MCP Tool Reference
|
|
32
|
+
|
|
33
|
+
| Action | MCP Tool |
|
|
34
|
+
|--------|----------|
|
|
35
|
+
| Create issue | `issue_write` |
|
|
36
|
+
| Read issue | `issue_read` |
|
|
37
|
+
| List issues | `list_issues` |
|
|
38
|
+
| Search issues | `search_issues` |
|
|
39
|
+
| Add sub-issue | `sub_issue_write` |
|
|
40
|
+
| Create PR | `create_pull_request` |
|
|
41
|
+
|
|
42
|
+
### Terminology
|
|
43
|
+
|
|
44
|
+
| Concept | GitHub Term |
|
|
45
|
+
|---------|------------|
|
|
46
|
+
| Work unit | Issue |
|
|
47
|
+
| Code review | Pull Request (PR) |
|
|
48
|
+
| Board | Projects V2 |
|
|
49
|
+
| Labels | Labels |
|
|
50
|
+
| Project identifier | `projectNumber` |
|
|
51
|
+
| Status tracking | Projects V2 Status field |
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## GitHub Context
|
|
56
|
+
|
|
57
|
+
Derived from `.agents/hatch.json` board config:
|
|
58
|
+
|
|
59
|
+
- **Owner:** top-level `owner` (fallback: `board.owner`)
|
|
60
|
+
- **Repository:** top-level `repo` (fallback: `board.repo`)
|
|
61
|
+
- **Default branch:** `board.defaultBranch` (fallback: `"main"`)
|
|
62
|
+
- **Type labels:** `board.labels.types`
|
|
63
|
+
- **Executor labels:** `board.labels.executors`
|
|
64
|
+
- **Status labels:** `board.labels.statuses`
|
|
65
|
+
- **Dependency label:** `has-dependencies`
|
|
66
|
+
- **Meta labels:** `board.labels.meta`
|
|
67
|
+
- **Branch convention:** `board.branchConvention`
|
|
68
|
+
- **Issue templates:** Check `.github/ISSUE_TEMPLATE/` if present in the repository.
|
|
69
|
+
- **PR template:** Check `.github/PULL_REQUEST_TEMPLATE.md` if present.
|
|
70
|
+
|
|
71
|
+
### GitHub Project Reference (cache for the full run)
|
|
72
|
+
|
|
73
|
+
If `board.projectNumber` is not null, verify via `gh project view {board.projectNumber} --owner {board.owner}` or `gh project field-list {board.projectNumber} --owner {board.owner}` on first use.
|
|
74
|
+
|
|
75
|
+
- **Owner:** `board.owner`, **owner type:** infer from context (`org` or `user`)
|
|
76
|
+
- **Project number:** `board.projectNumber`
|
|
77
|
+
- **Status field ID:** `board.statusFieldId`
|
|
78
|
+
- **Status option IDs:** Read from `board.statusOptions` (keys: `backlog`, `ready`, `inProgress`, `inReview`, `done`)
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## GitHub Projects V2 Sync
|
|
83
|
+
|
|
84
|
+
> **Skip entirely if `board.projectNumber` is null.**
|
|
85
|
+
|
|
86
|
+
**Prerequisites:** `gh auth refresh -s project` (Projects v2 via gh requires the `project` scope). gh CLI 2.40+ recommended.
|
|
87
|
+
|
|
88
|
+
**Status label → Projects v2 option mapping:**
|
|
89
|
+
|
|
90
|
+
Read the mapping from `board.statusOptions` in `.agents/hatch.json`:
|
|
91
|
+
|
|
92
|
+
| Label | Option ID from hatch.json |
|
|
93
|
+
| -------------------- | ---------------------------------- |
|
|
94
|
+
| `status:triage` | `board.statusOptions.backlog` |
|
|
95
|
+
| `status:ready` | `board.statusOptions.ready` |
|
|
96
|
+
| `status:in-progress` | `board.statusOptions.inProgress` |
|
|
97
|
+
| `status:in-review` | `board.statusOptions.inReview` |
|
|
98
|
+
| `status:blocked` | `board.statusOptions.backlog` |
|
|
99
|
+
|
|
100
|
+
**Steps for each issue to sync (gh CLI primary):**
|
|
101
|
+
|
|
102
|
+
1. **Resolve project node ID** (once per run, cache for the run): `gh project view {board.projectNumber} --owner {board.owner} --format json -q '.id'`. Required for step 3.
|
|
103
|
+
2. **Add to board + capture item ID:** `gh project item-add {board.projectNumber} --owner {board.owner} --url https://github.com/{board.owner}/{board.repo}/issues/{N} --format json -q '.id'`. **Capture the item ID from the output.** This call is idempotent -- if the item already exists on the board it returns the existing item with its ID.
|
|
104
|
+
3. **Update status:** `gh project item-edit --id {item_id} --project-id {project_node_id} --field-id {board.statusFieldId} --single-select-option-id {option_id}` using the label→option mapping from the table above.
|
|
105
|
+
4. **Verify (first sync per run only):** After step 3, optionally confirm via `gh project item-list {board.projectNumber} --owner {board.owner} --format json` that the item's status matches. If it does not, retry step 3 once.
|
|
106
|
+
|
|
107
|
+
**For PRs:** Use `--url https://github.com/{board.owner}/{board.repo}/pull/{N}` in step 2.
|
|
108
|
+
|
|
109
|
+
**Fallback (rare):** If item-add does not return an item ID, use `gh project item-list {board.projectNumber} --owner {board.owner} --format json` and match by issue/PR content to obtain the item ID. Then proceed with step 3.
|
|
110
|
+
|
|
111
|
+
**MCP fallback:** If gh CLI fails, `project` scope is unavailable, or gh version is too old, fall back to `projects_write` / `projects_get` / `projects_list` with `method: add_project_item`, `method: update_project_item`, `method: get_project_item`, `method: list_project_items` as in the legacy procedure.
|
|
112
|
+
|
|
113
|
+
**Resilience:** If any call fails, retry once. If it still fails, surface a warning to the user and continue with the next item. If gh CLI and MCP are both unavailable, skip sync silently and warn: "Projects v2 sync skipped -- run `gh auth refresh -s project` or enable the `projects` toolset in your MCP configuration."
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Sub-Issue Linking — GitHub
|
|
118
|
+
|
|
119
|
+
### Three-Tier Fallback Chain
|
|
120
|
+
|
|
121
|
+
1. **Primary — MCP native link:**
|
|
122
|
+
`sub_issue_write` MCP with `method: add` using the parent `issue_number` and child's internal numeric `id`.
|
|
123
|
+
Record link status as `native`.
|
|
124
|
+
|
|
125
|
+
2. **Fallback 1 — CLI body-reference:**
|
|
126
|
+
If MCP linking fails, establish an advisory link:
|
|
127
|
+
- Prepend `> Parent: #{epic}` to the child issue body via `gh issue edit {child} --body "..."`.
|
|
128
|
+
- Add `- [ ] #{child} {title}` to the epic's sub-issue checklist via `gh issue edit {epic} --body "..."`.
|
|
129
|
+
- Record link status as `advisory`.
|
|
130
|
+
|
|
131
|
+
3. **Fallback 2 — Comment trace:**
|
|
132
|
+
If both primary and Fallback 1 fail:
|
|
133
|
+
`gh issue comment {epic} --body "Sub-issue: #{child} — {title} (linking failed)"`.
|
|
134
|
+
Record link status as `comment-only`.
|
|
135
|
+
|
|
136
|
+
### Verification
|
|
137
|
+
|
|
138
|
+
After linking, verify via `issue_read` with `method: get_sub_issues` on the parent epic.
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Board Sync Enforcement — GitHub
|
|
143
|
+
|
|
144
|
+
1. **Status updates:** Set via Projects V2 GraphQL mutation or `gh project item-edit`.
|
|
145
|
+
2. **Fallback escalation:** GraphQL mutation → `gh project item-edit` CLI → MCP `projects_write` → surface error to user. Silent skipping is prohibited.
|
|
146
|
+
3. **Board item tracking:** After adding an item to the board, store the returned item ID in the run cache keyed by issue number.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Cross-Cutting Tooling — GitHub CLI-First
|
|
151
|
+
|
|
152
|
+
**Prerequisites:** `gh auth login` must be completed, or `GITHUB_TOKEN` environment variable set. For Projects v2: `gh auth refresh -s project`.
|
|
153
|
+
|
|
154
|
+
| Operation | Primary (`gh` CLI) | Fallback (MCP) |
|
|
155
|
+
| -------------------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------- |
|
|
156
|
+
| List issues | `gh issue list` | `list_issues` |
|
|
157
|
+
| Read issue details | `gh issue view` | `issue_read` |
|
|
158
|
+
| Create/update issues | `gh issue create` / `gh issue edit` | `issue_write` |
|
|
159
|
+
| Search issues | `gh search issues` | `search_issues` / `semantic_issues_search` |
|
|
160
|
+
| Manage sub-issues | `sub_issue_write` (MCP only — no CLI equivalent) | `sub_issue_write` |
|
|
161
|
+
| Add comments | `gh issue comment` | `add_issue_comment` |
|
|
162
|
+
| Create PRs | `gh pr create` | `create_pull_request` |
|
|
163
|
+
| Read PR details | `gh pr view` | `pull_request_read` |
|
|
164
|
+
| Manage labels | `gh label create` / `gh label list` | `issue_write` (with labels) |
|
|
165
|
+
| Projects v2 | `gh project item-add`, `gh project item-edit`, `gh project item-list`, `gh project field-list`, `gh project view` | `projects_write` / `projects_get` / `projects_list` |
|
|
166
|
+
| CI/Actions | `gh run list` / `gh run view` | N/A |
|
|
167
|
+
| Releases | `gh release create` | N/A |
|
|
168
|
+
|
|
169
|
+
Fallback to MCP only for operations the `gh` CLI cannot handle: sub-issue management (`sub_issue_write`).
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: hatch3r-board-shared-gitlab
|
|
3
|
+
type: shared-context
|
|
4
|
+
description: GitLab-specific platform details for board shared context. Covers GitLab Issues, Issue Boards, glab CLI, and label-based sync.
|
|
5
|
+
tags: [board, team, gitlab]
|
|
6
|
+
---
|
|
7
|
+
# Board Shared Reference — GitLab Platform Details
|
|
8
|
+
|
|
9
|
+
Platform-specific procedures for GitLab. Referenced from `hatch3r-board-shared`.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Platform Detection — GitLab
|
|
14
|
+
|
|
15
|
+
Use `glab` CLI. Issues = GitLab Issues. PRs = Merge Requests (MRs). Board = GitLab Issue Boards. Requires `glab auth login` or `GITLAB_TOKEN`.
|
|
16
|
+
|
|
17
|
+
### CLI Command Reference
|
|
18
|
+
|
|
19
|
+
| Action | Command |
|
|
20
|
+
|--------|---------|
|
|
21
|
+
| Create issue | `glab issue create -R {namespace}/{project}` |
|
|
22
|
+
| List issues | `glab issue list -R {namespace}/{project}` |
|
|
23
|
+
| View issue | `glab issue view N -R {namespace}/{project}` |
|
|
24
|
+
| Update issue | `glab issue update N -R {namespace}/{project}` |
|
|
25
|
+
| Close issue | `glab issue close N -R {namespace}/{project}` |
|
|
26
|
+
| Create MR | `glab mr create -R {namespace}/{project}` |
|
|
27
|
+
| Add label | `glab issue update N --label "x"` |
|
|
28
|
+
| Add comment | `glab issue note N -R {namespace}/{project}` |
|
|
29
|
+
| Board sync | Board list = label-based |
|
|
30
|
+
|
|
31
|
+
### MCP Tool Reference
|
|
32
|
+
|
|
33
|
+
GitLab MCP tools are not currently available. All operations use the `glab` CLI.
|
|
34
|
+
|
|
35
|
+
### Terminology
|
|
36
|
+
|
|
37
|
+
| Concept | GitLab Term |
|
|
38
|
+
|---------|-------------|
|
|
39
|
+
| Work unit | Issue |
|
|
40
|
+
| Code review | Merge Request (MR) |
|
|
41
|
+
| Board | GitLab Issue Boards |
|
|
42
|
+
| Labels | Labels |
|
|
43
|
+
| Project identifier | project ID |
|
|
44
|
+
| Status tracking | Board lists/labels |
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## GitLab Context
|
|
49
|
+
|
|
50
|
+
Derived from `.agents/hatch.json` board config:
|
|
51
|
+
|
|
52
|
+
- **Namespace:** top-level `owner` (GitLab group or user namespace)
|
|
53
|
+
- **Project:** top-level `repo` (GitLab project name)
|
|
54
|
+
- **Default branch:** `board.defaultBranch` (fallback: `"main"`)
|
|
55
|
+
- **Type labels:** `board.labels.types`
|
|
56
|
+
- **Executor labels:** `board.labels.executors`
|
|
57
|
+
- **Status labels:** `board.labels.statuses`
|
|
58
|
+
- **Scoped labels:** GitLab supports scoped labels (`status::ready`, `type::bug`). Map hatch3r label format (`status:ready`) to GitLab scoped format (`status::ready`) when creating labels.
|
|
59
|
+
- **Issue templates:** Check `.gitlab/issue_templates/` if present.
|
|
60
|
+
- **MR template:** Check `.gitlab/merge_request_templates/` if present.
|
|
61
|
+
|
|
62
|
+
### GitLab Project Reference (cache for the full run)
|
|
63
|
+
|
|
64
|
+
- **Project path:** `{namespace}/{project}`
|
|
65
|
+
- **Board:** GitLab Issue Boards use label-based lists. Each status maps to a board list label.
|
|
66
|
+
- **Board ID:** `board.projectNumber` (repurposed as GitLab Board ID if configured)
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## GitLab Board Label-Based Sync
|
|
71
|
+
|
|
72
|
+
> **Skip entirely if board is not configured.**
|
|
73
|
+
|
|
74
|
+
GitLab Boards use labels to organize issues into lists. Board sync is achieved by updating issue labels to match the target status.
|
|
75
|
+
|
|
76
|
+
**Status label → Board list mapping:**
|
|
77
|
+
|
|
78
|
+
GitLab board lists are label-based. Each status corresponds to a scoped label:
|
|
79
|
+
|
|
80
|
+
| Label | GitLab Scoped Label |
|
|
81
|
+
| -------------------- | ------------------- |
|
|
82
|
+
| `status:triage` | `status::triage` |
|
|
83
|
+
| `status:ready` | `status::ready` |
|
|
84
|
+
| `status:in-progress` | `status::in-progress` |
|
|
85
|
+
| `status:in-review` | `status::in-review` |
|
|
86
|
+
| `status:blocked` | `status::blocked` |
|
|
87
|
+
|
|
88
|
+
**Steps for each issue to sync:**
|
|
89
|
+
|
|
90
|
+
1. **Update labels:** `glab issue update {N} -R {namespace}/{project} --unlabel "status::*" --label "status::{new-status}"`. GitLab scoped labels auto-replace within the same scope, so setting `status::ready` automatically removes `status::triage`.
|
|
91
|
+
2. **Verify:** `glab issue view {N} -R {namespace}/{project}` and confirm labels match.
|
|
92
|
+
|
|
93
|
+
**For MRs:** `glab mr update {N} -R {namespace}/{project} --label "status::{new-status}"`.
|
|
94
|
+
|
|
95
|
+
**Resilience:** If any call fails, retry once. If it still fails, surface a warning and continue. If `glab` CLI is unavailable, warn: "GitLab Board sync skipped -- run `glab auth login` or set GITLAB_TOKEN."
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Sub-Issue Linking — GitLab
|
|
100
|
+
|
|
101
|
+
### Three-Tier Fallback Chain
|
|
102
|
+
|
|
103
|
+
1. **Primary — API link:**
|
|
104
|
+
`glab api projects/{project_id}/issues/{parent_iid}/links --method POST --field target_project_id={project_id} --field target_issue_iid={child_iid}`.
|
|
105
|
+
Record link status as `native`.
|
|
106
|
+
|
|
107
|
+
2. **Fallback 1 — Comment trace:**
|
|
108
|
+
If API linking fails:
|
|
109
|
+
`glab issue note {epic} -R {namespace}/{project} --message "Sub-issue: #{child} — {title} (linking failed)"`.
|
|
110
|
+
Record link status as `comment-only`.
|
|
111
|
+
|
|
112
|
+
### Verification
|
|
113
|
+
|
|
114
|
+
After linking, verify via `glab api projects/{project_id}/issues/{epic_iid}/links` and check linked issues.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Board Sync Enforcement — GitLab
|
|
119
|
+
|
|
120
|
+
1. **Status updates:** Set via `glab issue update --label`.
|
|
121
|
+
2. **Fallback escalation:** `glab issue update` CLI → surface error to user. Silent skipping is prohibited.
|
|
122
|
+
3. **Board item tracking:** After updating an issue, store the issue ID in the run cache keyed by issue number.
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Cross-Cutting Tooling — GitLab CLI-First
|
|
127
|
+
|
|
128
|
+
**Prerequisites:** `glab auth login` must be completed, or `GITLAB_TOKEN` environment variable set.
|
|
129
|
+
|
|
130
|
+
| Operation | Primary (`glab` CLI) | Fallback (MCP) |
|
|
131
|
+
| -------------------- | ------------------------------------------------------------- | -------------- |
|
|
132
|
+
| List issues | `glab issue list -R {namespace}/{project}` | N/A |
|
|
133
|
+
| Read issue details | `glab issue view N -R {namespace}/{project}` | N/A |
|
|
134
|
+
| Create/update issues | `glab issue create` / `glab issue update N` | N/A |
|
|
135
|
+
| Search issues | `glab issue list --search "..."` | N/A |
|
|
136
|
+
| Manage relations | `glab issue note N --message "Related to #M"` (advisory only) | N/A |
|
|
137
|
+
| Add comments | `glab issue note N -R {namespace}/{project}` | N/A |
|
|
138
|
+
| Create MRs | `glab mr create -R {namespace}/{project}` | N/A |
|
|
139
|
+
| Read MR details | `glab mr view N -R {namespace}/{project}` | N/A |
|
|
140
|
+
| Manage labels | `glab label create` / `glab label list` | N/A |
|
|
141
|
+
| Board sync | Label updates (automatic board list placement) | N/A |
|
|
142
|
+
| CI/Pipelines | `glab ci list` / `glab ci view` | N/A |
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
id: hatch3r-agent-customize
|
|
3
3
|
type: command
|
|
4
4
|
description: Configure per-agent customization including model overrides, description changes, and project-specific markdown instructions
|
|
5
|
+
tags: [customize]
|
|
5
6
|
---
|
|
6
7
|
|
|
7
8
|
## Agent Pipeline
|
|
@@ -179,5 +180,5 @@ The `protected` field is set in the canonical agent definition and cannot be ove
|
|
|
179
180
|
- Skill customization: `hatch3r-skill-customize` command
|
|
180
181
|
- Command customization: `hatch3r-command-customize` command
|
|
181
182
|
- Rule customization: `hatch3r-rule-customize` command
|
|
182
|
-
- Model selection: [
|
|
183
|
-
- Platform support: [
|
|
183
|
+
- Model selection: [Model Selection](https://docs.hatch3r.com/docs/guides/model-selection) — configuration, aliases, resolution order
|
|
184
|
+
- Platform support: [Adapter Capability Matrix](https://docs.hatch3r.com/docs/reference/adapter-capability-matrix) — model emission per adapter (native vs guidance)
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
id: hatch3r-board-fill
|
|
3
3
|
type: command
|
|
4
4
|
description: Create epics and issues/work items from todo.md, reorganize the board with dependency analysis, readiness assessment, and implementation ordering. Supports GitHub, Azure DevOps, and GitLab.
|
|
5
|
+
tags: [board, team]
|
|
5
6
|
---
|
|
6
7
|
|
|
7
8
|
## Agent Pipeline
|
|
@@ -530,9 +531,9 @@ Execute in dependency order (parents before children). Do not prompt between ope
|
|
|
530
531
|
**Platform-specific: Issue creation**
|
|
531
532
|
|
|
532
533
|
**If platform is `github`:**
|
|
533
|
-
1. **Epics first:** `gh issue create -R {owner}/{repo} --title "..." --body "..." --label "..."` (fall back to `issue_write` MCP with `method: create`). Include `## Dependencies` section and `has-dependencies` label. Record the returned `number` and internal numeric `id` field.
|
|
534
|
-
2. **Sub-issues:** Create each. Record the returned `number` and internal numeric `id` field.
|
|
535
|
-
3. **Standalone issues:** Create with `## Dependencies` and `has-dependencies
|
|
534
|
+
1. **Epics first:** `gh issue create -R {owner}/{repo} --title "..." --body "..." --label "..."` (fall back to `issue_write` MCP with `method: create`). Include `## Dependencies` section and `has-dependencies` label (per rule 7 of Board Sync Enforcement). Record the returned `number` and internal numeric `id` field.
|
|
535
|
+
2. **Sub-issues:** Create each. Include `## Dependencies` section. Add `has-dependencies` label if the sub-issue has any dependency references (per rule 7 of Board Sync Enforcement). Record the returned `number` and internal numeric `id` field.
|
|
536
|
+
3. **Standalone issues:** Create with `## Dependencies` and `has-dependencies` (when dependencies exist, per rule 7).
|
|
536
537
|
|
|
537
538
|
**If platform is `azure-devops`:**
|
|
538
539
|
1. **Epics first:** `az boards work-item create --org https://dev.azure.com/{namespace} --project {project} --type "Epic" --title "..." --description "..." --fields "System.Tags=has-dependencies"` (fall back to `create_work_item` MCP). Record the returned work item `id`.
|
|
@@ -546,14 +547,7 @@ Execute in dependency order (parents before children). Do not prompt between ope
|
|
|
546
547
|
|
|
547
548
|
**Phase 2 — Link sub-issues** (after all issues exist):
|
|
548
549
|
|
|
549
|
-
**
|
|
550
|
-
For each sub-issue, link via `sub_issue_write` with `method: add` using the parent `issue_number` and child's internal numeric `id` (NOT the issue number or node_id).
|
|
551
|
-
|
|
552
|
-
**If platform is `azure-devops`:**
|
|
553
|
-
For each sub-issue, create a parent-child relation: `az boards work-item relation add --org https://dev.azure.com/{namespace} --id {child_id} --relation-type "System.LinkTypes.Hierarchy-Reverse" --target-id {parent_id}`.
|
|
554
|
-
|
|
555
|
-
**If platform is `gitlab`:**
|
|
556
|
-
For each sub-issue, add a related issue link: `glab api projects/{project_id}/issues/{parent_iid}/links --method POST --field target_project_id={project_id} --field target_issue_iid={child_iid}`. Also reference the parent in the sub-issue body.
|
|
550
|
+
For each sub-issue, follow the **Sub-Issue Linking Procedure** from `hatch3r-board-shared`. Use the three-tier fallback chain (MCP native → CLI body-reference → comment trace) and record link status per child in the run cache under `link_results`.
|
|
557
551
|
|
|
558
552
|
**Phase 3 — Sync to board** (after all issues and links are created):
|
|
559
553
|
|
|
@@ -568,10 +562,7 @@ For issues needing updates (from Steps 5, 5.5, 5.6):
|
|
|
568
562
|
- **Azure DevOps:** `az boards work-item update --id N --description "..."`.
|
|
569
563
|
- **GitLab:** `glab issue update N --description "..."`.
|
|
570
564
|
2. **Regenerate `## Implementation Order`** (epics only): Derive from the sub-issues' `## Dependencies` DAG (see Dependency Data Model in `hatch3r-board-shared`). Replace the existing section entirely -- do not manually edit it.
|
|
571
|
-
3. **Apply epic regrouping:** Link standalones to epics.
|
|
572
|
-
- **GitHub:** `sub_issue_write` MCP. Update epic body.
|
|
573
|
-
- **Azure DevOps:** `az boards work-item relation add` with parent-child relation.
|
|
574
|
-
- **GitLab:** `glab api` issue links endpoint. Update epic body.
|
|
565
|
+
3. **Apply epic regrouping:** Link standalones to epics using the **Sub-Issue Linking Procedure** from `hatch3r-board-shared`. Update epic body with the new sub-issue reference.
|
|
575
566
|
4. **Mark `status:ready`:** Remove `status:triage`, add `status:ready`. Do not downgrade existing statuses.
|
|
576
567
|
- **GitHub:** `gh issue edit N --remove-label "status:triage" --add-label "status:ready"`.
|
|
577
568
|
- **Azure DevOps:** `az boards work-item update --id N --state "Active" --fields "System.Tags=+status:ready;-status:triage"`.
|
|
@@ -598,7 +589,7 @@ Board Summary: N created, M updated, X marked ready, Y still triage, Z parallel
|
|
|
598
589
|
**This step is mandatory. Do not skip.**
|
|
599
590
|
|
|
600
591
|
1. Search the cached board inventory for an open issue labeled `meta:board-overview`.
|
|
601
|
-
2. Compute Implementation Lanes using the **Lane Computation Algorithm** from `hatch3r-board-shared`. Use the cached dependency DAG from Step 5.5 as input.
|
|
592
|
+
2. Compute Implementation Lanes using the **Lane Computation Algorithm** (steps 1-12) from `hatch3r-board-shared`. Use the cached dependency DAG from Step 5.5 as input. This includes inter-lane dependency computation, lane phasing, and the Lane Dependency Map.
|
|
602
593
|
3. Assign models to all open issues using the **Model Selection Heuristic (Quality-First)** from `hatch3r-board-shared`.
|
|
603
594
|
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 mutations from Step 7. Update the issue body using platform CLI (fall back to MCP):
|
|
604
595
|
- **GitHub:** `gh issue edit {N} --body "..."` (fall back to `issue_write` MCP).
|
|
@@ -613,6 +604,14 @@ Do NOT re-fetch all issues; use cached data.
|
|
|
613
604
|
|
|
614
605
|
---
|
|
615
606
|
|
|
607
|
+
### Step 7.8: End-of-Run Reconciliation
|
|
608
|
+
|
|
609
|
+
**This step is mandatory. Do not skip.**
|
|
610
|
+
|
|
611
|
+
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 run. Output the reconciliation report before proceeding to Step 8.
|
|
612
|
+
|
|
613
|
+
---
|
|
614
|
+
|
|
616
615
|
### Step 8: Cleanup
|
|
617
616
|
|
|
618
617
|
**ASK:** "All issues created. Should I remove processed items from `todo.md`? (yes / no / only created ones)"
|