devflow-kit 3.4.0 → 3.5.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/CHANGELOG.md +29 -0
- package/README.md +8 -4
- package/dist/agents/code-edit.md +133 -0
- package/dist/agents/code-fix.md +165 -0
- package/dist/agents/code.md +39 -182
- package/dist/agents/design.md +0 -1
- package/dist/agents/git.md +31 -693
- package/dist/agents/knowledge.md +8 -2
- package/dist/agents/research.md +6 -0
- package/dist/agents/review.md +0 -4
- package/dist/agents/scrutinize.md +3 -0
- package/dist/agents/skim.md +4 -0
- package/dist/agents/triage.md +8 -1
- package/dist/cli/commands/behavior-prompts.js +77 -0
- package/dist/cli/commands/behavior.js +123 -0
- package/dist/cli/commands/flags.js +8 -2
- package/dist/cli/commands/init-seed.js +7 -3
- package/dist/cli/commands/init.js +72 -5
- package/dist/cli/commands/rules.js +16 -0
- package/dist/cli/commands/tracker.js +112 -15
- package/dist/cli.js +2 -0
- package/dist/commands/bug-analysis.md +5 -5
- package/dist/commands/code-review.md +14 -9
- package/dist/commands/debug.md +25 -4
- package/dist/commands/dynamic-build.md +28 -38
- package/dist/commands/dynamic-plan.md +11 -9
- package/dist/commands/dynamic-profile.md +3 -3
- package/dist/commands/dynamic-tickets.md +12 -10
- package/dist/commands/explore.md +3 -3
- package/dist/commands/implement.md +91 -125
- package/dist/commands/plan.md +15 -8
- package/dist/commands/release.md +3 -2
- package/dist/commands/research.md +16 -9
- package/dist/commands/resolve.md +20 -15
- package/dist/commands/self-review.md +2 -2
- package/dist/core/agent-frontmatter.js +101 -0
- package/dist/core/compliance-compose.js +6 -4
- package/dist/core/feature-switch.js +23 -2
- package/dist/core/flags.js +111 -0
- package/dist/core/manifest.js +11 -3
- package/dist/core/mds-variants.js +68 -26
- package/dist/core/plugins.js +42 -65
- package/dist/core/project-paths.js +0 -4
- package/dist/core/proxy-log.js +1 -1
- package/dist/core/proxy-state.js +1 -1
- package/dist/core/tracker.js +120 -2
- package/dist/learning-off/agents/code-edit.md +129 -0
- package/dist/learning-off/agents/code-fix.md +161 -0
- package/dist/learning-off/agents/code.md +37 -180
- package/dist/learning-off/agents/design.md +0 -1
- package/dist/learning-off/agents/knowledge.md +8 -2
- package/dist/learning-off/agents/research.md +6 -0
- package/dist/learning-off/agents/review.md +0 -4
- package/dist/learning-off/agents/scrutinize.md +3 -0
- package/dist/learning-off/agents/skim.md +4 -0
- package/dist/learning-off/agents/triage.md +8 -1
- package/dist/learning-off/commands/bug-analysis.md +3 -3
- package/dist/learning-off/commands/code-review.md +12 -7
- package/dist/learning-off/commands/debug.md +22 -2
- package/dist/learning-off/commands/dynamic-build.md +27 -37
- package/dist/learning-off/commands/dynamic-plan.md +10 -8
- package/dist/learning-off/commands/dynamic-profile.md +2 -2
- package/dist/learning-off/commands/dynamic-tickets.md +11 -9
- package/dist/learning-off/commands/explore.md +1 -1
- package/dist/learning-off/commands/implement.md +89 -123
- package/dist/learning-off/commands/plan.md +13 -6
- package/dist/learning-off/commands/release.md +3 -2
- package/dist/learning-off/commands/research.md +14 -7
- package/dist/learning-off/commands/resolve.md +18 -13
- package/dist/skills/git/references/learn-conventions.md +27 -3
- package/dist/skills/git/references/pr/check-ci-status.md +19 -0
- package/dist/skills/git/references/pr/check-merge-readiness.md +19 -0
- package/dist/skills/git/references/pr/fetch-review-threads.md +30 -0
- package/dist/skills/git/references/pr/post-resolution-summary.md +18 -0
- package/dist/skills/git/references/pr/post-review-summary.md +20 -0
- package/dist/skills/git/references/pr/resolve-review-threads.md +28 -4
- package/dist/skills/git/references/pr/update-pr-evidence.md +13 -0
- package/dist/skills/git/references/pr/validate-branch.md +26 -0
- package/dist/skills/git/references/tracker/github/associate-release.md +24 -0
- package/dist/skills/git/references/tracker/github/backlink-shipped-issues.md +31 -1
- package/dist/skills/git/references/tracker/github/create-release.md +30 -1
- package/dist/skills/git/references/tracker/github/ensure-pr-ready.md +89 -2
- package/dist/skills/git/references/tracker/github/ensure-traceable-issue.md +16 -1
- package/dist/skills/git/references/tracker/github/fetch-issue.md +36 -1
- package/dist/skills/git/references/tracker/github/fetch-issues-batch.md +47 -1
- package/dist/skills/git/references/tracker/github/gather-release-evidence.md +25 -0
- package/dist/skills/git/references/tracker/github/manage-debt.md +21 -1
- package/dist/skills/git/references/tracker/github/post-wave-report.md +15 -1
- package/dist/skills/git/references/tracker/github/setup-task.md +41 -1
- package/dist/skills/git/references/tracker/jira/associate-release.md +24 -0
- package/dist/skills/git/references/tracker/jira/backlink-shipped-issues.md +31 -1
- package/dist/skills/git/references/tracker/jira/create-release.md +30 -1
- package/dist/skills/git/references/tracker/jira/ensure-pr-ready.md +89 -2
- package/dist/skills/git/references/tracker/jira/ensure-traceable-issue.md +16 -1
- package/dist/skills/git/references/tracker/jira/fetch-issue.md +36 -1
- package/dist/skills/git/references/tracker/jira/fetch-issues-batch.md +47 -1
- package/dist/skills/git/references/tracker/jira/gather-release-evidence.md +25 -0
- package/dist/skills/git/references/tracker/jira/manage-debt.md +21 -1
- package/dist/skills/git/references/tracker/jira/post-wave-report.md +15 -1
- package/dist/skills/git/references/tracker/jira/setup-task.md +41 -1
- package/dist/skills/git/references/tracker/linear/associate-release.md +24 -0
- package/dist/skills/git/references/tracker/linear/backlink-shipped-issues.md +31 -1
- package/dist/skills/git/references/tracker/linear/create-release.md +30 -1
- package/dist/skills/git/references/tracker/linear/ensure-pr-ready.md +89 -2
- package/dist/skills/git/references/tracker/linear/ensure-traceable-issue.md +16 -1
- package/dist/skills/git/references/tracker/linear/fetch-issue.md +36 -1
- package/dist/skills/git/references/tracker/linear/fetch-issues-batch.md +47 -1
- package/dist/skills/git/references/tracker/linear/gather-release-evidence.md +25 -0
- package/dist/skills/git/references/tracker/linear/manage-debt.md +21 -1
- package/dist/skills/git/references/tracker/linear/post-wave-report.md +15 -1
- package/dist/skills/git/references/tracker/linear/setup-task.md +41 -1
- package/dist/targets/claude-code/agent-type-owner.js +164 -0
- package/dist/targets/claude-code/behavior-install.js +111 -0
- package/dist/targets/claude-code/installer.js +69 -2
- package/dist/targets/claude-code/learning-install.js +9 -1
- package/dist/targets/claude-code/tracker-install.js +33 -16
- package/dist/targets/claude-code/tracker-servers.js +107 -0
- package/package.json +4 -3
- package/src/assets/agents/_partials/_code.mds +109 -0
- package/src/assets/agents/code-edit.mds +81 -0
- package/src/assets/agents/code-fix.mds +113 -0
- package/src/assets/agents/code.mds +18 -222
- package/src/assets/agents/design.mds +0 -1
- package/src/assets/agents/evaluate.md +7 -1
- package/src/assets/agents/explore.md +58 -0
- package/src/assets/agents/git.mds +31 -693
- package/src/assets/agents/knowledge.mds +8 -2
- package/src/assets/agents/learning.md +19 -69
- package/src/assets/agents/research.mds +6 -0
- package/src/assets/agents/review.mds +0 -4
- package/src/assets/agents/scrutinize.mds +3 -0
- package/src/assets/agents/simplify.md +3 -0
- package/src/assets/agents/skim.mds +4 -0
- package/src/assets/agents/synthesize.md +26 -352
- package/src/assets/agents/test.md +8 -0
- package/src/assets/agents/tracker.md +20 -7
- package/src/assets/agents/triage.mds +8 -1
- package/src/assets/agents/validate.md +5 -0
- package/src/assets/commands/_partials/_compliance.mds +36 -0
- package/src/assets/commands/_partials/_decisions.mds +2 -2
- package/src/assets/commands/_partials/_engine.mds +8 -8
- package/src/assets/commands/_partials/_preamble.mds +3 -3
- package/src/assets/commands/_partials/_roster.mds +4 -3
- package/src/assets/commands/_partials/_wave.mds +2 -2
- package/src/assets/commands/bug-analysis.mds +3 -3
- package/src/assets/commands/code-review.mds +11 -8
- package/src/assets/commands/debug.mds +24 -2
- package/src/assets/commands/dynamic-build.mds +14 -25
- package/src/assets/commands/dynamic-plan.mds +4 -3
- package/src/assets/commands/dynamic-tickets.mds +5 -4
- package/src/assets/commands/explore.mds +1 -1
- package/src/assets/commands/implement.mds +89 -125
- package/src/assets/commands/plan.mds +12 -7
- package/src/assets/commands/release.mds +3 -2
- package/src/assets/commands/research.mds +14 -7
- package/src/assets/commands/resolve.mds +17 -14
- package/src/assets/mds/.mdsroot +4 -0
- package/src/assets/mds/git/_ops.mds +383 -0
- package/src/assets/mds/git/_ops_pr.mds +201 -0
- package/src/assets/mds/git/_ops_steps.mds +147 -0
- package/src/assets/mds/git/_pr.mds +39 -44
- package/src/assets/mds/git/_references.mds +6 -3
- package/src/assets/mds/tracker/_common.mds +5 -5
- package/src/assets/mds/tracker/_contract.mds +4 -3
- package/src/assets/mds/tracker/_github.mds +60 -14
- package/src/assets/mds/tracker/_jira.mds +60 -14
- package/src/assets/mds/tracker/_linear.mds +60 -14
- package/src/assets/mds/tracker/_steps.mds +10 -9
- package/src/assets/rules/behavior.md +6 -0
- package/src/assets/scripts/hooks/assets/orchestrator-charter.md +2 -1
- package/src/assets/scripts/hooks/lib/project-paths.cjs +0 -6
- package/src/assets/skills/agent-references/SKILL.md +33 -0
- package/src/assets/skills/agent-references/references/learning/maintain.md +71 -0
- package/src/assets/skills/agent-references/references/synthesize/bug-analysis.md +71 -0
- package/src/assets/skills/agent-references/references/synthesize/design.md +36 -0
- package/src/assets/skills/agent-references/references/synthesize/exploration.md +38 -0
- package/src/assets/skills/agent-references/references/synthesize/planning.md +60 -0
- package/src/assets/skills/agent-references/references/synthesize/research.md +61 -0
- package/src/assets/skills/agent-references/references/synthesize/review.md +76 -0
- package/src/assets/skills/compliance/SKILL.md +1 -1
- package/src/assets/skills/docs-framework/SKILL.md +80 -83
- package/src/assets/skills/docs-framework/references/patterns.md +14 -25
- package/src/assets/skills/docs-framework/references/violations.md +7 -7
- package/src/assets/skills/gap-analysis/SKILL.md +0 -16
- package/src/assets/skills/gap-analysis/references/compliance.md +19 -0
- package/dist/skills/git/references/pr/ensure-pr-ready.md +0 -24
|
@@ -3,6 +3,8 @@ output-dir: dist/skills/git/references
|
|
|
3
3
|
---
|
|
4
4
|
@import "./_common.mds" as common
|
|
5
5
|
@import "./_steps.mds" as steps
|
|
6
|
+
@import "../git/_ops.mds" as ops
|
|
7
|
+
@import "../git/_ops_steps.mds" as opsteps
|
|
6
8
|
|
|
7
9
|
GitHub tracker mechanics for the `devflow:git` skill.
|
|
8
10
|
|
|
@@ -19,10 +21,14 @@ moving with it. Define-set parity — one `@define` per op, named identically
|
|
|
19
21
|
across modules — is what the `cross-provider define-set parity` scan asserts
|
|
20
22
|
over all three, because a define name is visible to no type.
|
|
21
23
|
|
|
22
|
-
Each section
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
Each section is the WHOLE operation, and a spawn reads nothing else for it
|
|
25
|
+
(D-OP-ONE-REF): the operation's contract (description, `**Input:**`, degradation
|
|
26
|
+
notes, `**Output:**` template) comes first, called from `_ops.mds` once for every
|
|
27
|
+
module that emits the operation (D-OP-CONTRACT-ONCE), and the provider's
|
|
28
|
+
mechanics follow it (D-OP-MOVABLE). `_ops.mds` and `_ops_steps.mds` are two more
|
|
29
|
+
ALIAS imports (`as ops`, `as opsteps`); the second holds the inline steps every
|
|
30
|
+
provider runs identically, which each section places at the position its step
|
|
31
|
+
number gives it.
|
|
26
32
|
|
|
27
33
|
Headings below each section's own anchor are `###` by grammar, not by taste: a
|
|
28
34
|
column-0 `## ` line outside a fence terminates the section for every guard that
|
|
@@ -39,9 +45,11 @@ identical — and `tests/build-mds-compile-time.test.ts` holds the budget.
|
|
|
39
45
|
@define setup_task():
|
|
40
46
|
## Operation: setup-task
|
|
41
47
|
|
|
48
|
+
{{ops.setup_task_contract()}}
|
|
49
|
+
|
|
42
50
|
Load when the resolved tracker provider is `github` and the operation is `setup-task`.
|
|
43
51
|
|
|
44
|
-
**Mechanics held here:** the
|
|
52
|
+
**Mechanics held here:** the `### Process` steps that talk to GitHub — issue lookup, branch-token rendering, and the conventions probe.
|
|
45
53
|
|
|
46
54
|
### Process
|
|
47
55
|
|
|
@@ -69,12 +77,15 @@ Load when the resolved tracker provider is `github` and the operation is `setup-
|
|
|
69
77
|
@define fetch_issue():
|
|
70
78
|
## Operation: fetch-issue
|
|
71
79
|
|
|
80
|
+
{{ops.fetch_issue_contract()}}
|
|
81
|
+
|
|
72
82
|
Load when the resolved tracker provider is `github` and the operation is `fetch-issue`.
|
|
73
83
|
|
|
74
|
-
**Mechanics held here:** the
|
|
84
|
+
**Mechanics held here:** the `### Process` body — single-issue lookup and the field projection it requests.
|
|
75
85
|
|
|
76
86
|
### Process
|
|
77
87
|
|
|
88
|
+
{{opsteps.fetch_issue_step_1()}}
|
|
78
89
|
1b. **Ref pre-flight.** The numeric path is taken only when `ISSUE_INPUT` satisfies `^#?[1-9][0-9]{0,8}$` — this provider's anchored reference grammar, stated with its strip-one-leading-`#` normalisation and the shell-comment reason it exists for in this operation's sibling `backlink-shipped-issues` reference. Interpolate only the digits that survive the strip. Anything the grammar rejects is a SEARCH TERM and takes the text path, so it never reaches a command.
|
|
79
90
|
2. Fetch full issue data (title, body, labels, assignees, milestone, comments)
|
|
80
91
|
3. Extract acceptance criteria and dependencies from body; neutralise any `</untrusted-issue-body>` in the body before wrapping (Principle 8 marker neutralisation).
|
|
@@ -106,12 +117,15 @@ DEPENDS_ON=$(echo "$BODY" | grep -oE '(depends on|blocked by) #[0-9]+' | grep -o
|
|
|
106
117
|
@define fetch_issues_batch():
|
|
107
118
|
## Operation: fetch-issues-batch
|
|
108
119
|
|
|
120
|
+
{{ops.fetch_issues_batch_contract()}}
|
|
121
|
+
|
|
109
122
|
Load when the resolved tracker provider is `github` and the operation is `fetch-issues-batch`.
|
|
110
123
|
|
|
111
|
-
**Mechanics held here:** the
|
|
124
|
+
**Mechanics held here:** the `### Process` body — the single bounded batch query and the reporting of references it could not resolve.
|
|
112
125
|
|
|
113
126
|
### Process
|
|
114
127
|
|
|
128
|
+
{{opsteps.fetch_issues_batch_step_1()}}
|
|
115
129
|
2. Fetch all issues in a **single** GraphQL query using per-issue aliases (dynamically constructed for the resolved list); resolve owner/repo from the git remote context:
|
|
116
130
|
```
|
|
117
131
|
gh api graphql -f query='query { repository(owner:"OWNER", name:"REPO") {
|
|
@@ -122,14 +136,17 @@ Load when the resolved tracker provider is `github` and the operation is `fetch-
|
|
|
122
136
|
```
|
|
123
137
|
{{common.state_batch_line("`state` (`OPEN` or `CLOSED`)", "`state`", "{ISSUE_REF}")}}
|
|
124
138
|
{{steps.batch_extract_steps()}}
|
|
139
|
+
{{opsteps.fetch_issues_batch_step_5()}}
|
|
125
140
|
@end
|
|
126
141
|
|
|
127
142
|
@define manage_debt():
|
|
128
143
|
## Operation: manage-debt
|
|
129
144
|
|
|
145
|
+
{{ops.manage_debt_contract()}}
|
|
146
|
+
|
|
130
147
|
Load when the resolved tracker provider is `github` and the operation is `manage-debt`.
|
|
131
148
|
|
|
132
|
-
**Mechanics held here:** the
|
|
149
|
+
**Mechanics held here:** the `### Process` body — locating the rolling tech-debt item, creating it when absent, and updating its description.
|
|
133
150
|
|
|
134
151
|
### Process
|
|
135
152
|
|
|
@@ -231,12 +248,16 @@ This issue reached the size limit.
|
|
|
231
248
|
@define create_release():
|
|
232
249
|
## Operation: create-release
|
|
233
250
|
|
|
251
|
+
{{ops.create_release_contract()}}
|
|
252
|
+
|
|
234
253
|
Load when the resolved tracker provider is `github` and the operation is `create-release`.
|
|
235
254
|
|
|
236
|
-
**Mechanics held here:** the
|
|
255
|
+
**Mechanics held here:** the release-host steps 1a–6 — version check, annotated tag, tag push, notes composition, the D11 scrub and the release itself — which are the same under every provider, and this provider's shipped-issues step inside step 5.
|
|
237
256
|
|
|
238
257
|
### Process
|
|
239
258
|
|
|
259
|
+
{{opsteps.create_release_steps()}}
|
|
260
|
+
|
|
240
261
|
Inside step 5 (compose release notes):
|
|
241
262
|
|
|
242
263
|
- If `SHIPPED_ISSUES` provided: append a `## Shipped Issues` section with issue references — **first ≤50 issues** (the same bound `backlink-shipped-issues` applies); if truncated, add a final `…and {n} more issues` line (D4 degrade if enrichment fails)
|
|
@@ -245,6 +266,8 @@ Inside step 5 (compose release notes):
|
|
|
245
266
|
@define gather_release_evidence():
|
|
246
267
|
## Operation: gather-release-evidence
|
|
247
268
|
|
|
269
|
+
{{ops.gather_release_evidence_contract()}}
|
|
270
|
+
|
|
248
271
|
Load when the resolved tracker provider is `github` and the operation is `gather-release-evidence`.
|
|
249
272
|
|
|
250
273
|
**Mechanics held here:** the last release tag, the closing-keyword rule, this provider's history grammar, resolving which issues the range's merged PRs close — one listing, with its bounded fallback — and the trace map.
|
|
@@ -270,9 +293,11 @@ Load when the resolved tracker provider is `github` and the operation is `gather
|
|
|
270
293
|
@define backlink_shipped_issues():
|
|
271
294
|
## Operation: backlink-shipped-issues
|
|
272
295
|
|
|
296
|
+
{{ops.backlink_shipped_issues_contract()}}
|
|
297
|
+
|
|
273
298
|
Load when the resolved tracker provider is `github` and the operation is `backlink-shipped-issues`.
|
|
274
299
|
|
|
275
|
-
**Mechanics held here:** the
|
|
300
|
+
**Mechanics held here:** the `### Process` body — the hoisted current-user lookup, the back-link post, and the inter-item throttle — and, because this is the tracker operation that owns the fan-out, GitHub's rate-limit and posting signals for the always-loaded D4 and D11 contracts.
|
|
276
301
|
|
|
277
302
|
### Provider signals (GitHub)
|
|
278
303
|
|
|
@@ -292,10 +317,14 @@ node "$HOME/.devflow/scripts/redact-secrets.cjs" "$DEVFLOW_BODY_RAW" "$DEVFLOW_B
|
|
|
292
317
|
|
|
293
318
|
### Process
|
|
294
319
|
|
|
320
|
+
{{opsteps.shipped_issues_step_0()}}
|
|
321
|
+
|
|
295
322
|
**Ref pre-flight (the always-loaded entry gate, instantiated for this provider).** Every entry of `SHIPPED_ISSUES` must satisfy `^#?[1-9][0-9]{0,8}$`, anchored at both ends of the STRING (a newline fails it) — this provider's reference grammar is what the entry gate's shape requirement means here, and the anchored form is what keeps a reference out of the commands below. **Then normalise once, before the loop, never inside it:** strip **exactly one** leading `#` from every admitted entry (`#42` ≡ `42`) and interpolate only the stripped digits. The grammar admits both spellings because both are how a reference is written here, but a `#` at word start opens a shell comment — an un-stripped `#42` would truncate `gh issue view`, `gh issue comment` and every other command below at the reference, so the stripped form is the only one that reaches a command. **Drop** every entry that fails and report it as `TRACEABILITY: DEGRADED (issue reference "{ref}" does not match github reference grammar)`. If every entry is dropped, emit `TRACEABILITY: DEGRADED (no parseable refs for provider {p})`, post nothing, and **never report the status as `COMPLETE`**.
|
|
296
323
|
|
|
297
324
|
**Setup (once, before the loop):** Fetch viewer login: `gh api user --jq '.login'` → store as VIEWER_LOGIN
|
|
298
325
|
|
|
326
|
+
{{opsteps.shipped_issues_loop()}}
|
|
327
|
+
|
|
299
328
|
Then, per issue, within the operation's ≤50 bound:
|
|
300
329
|
|
|
301
330
|
1. Fetch existing comments authored by the viewer: `gh issue view {number} --json comments --jq '[.comments[] | select(.author.login == "'"$VIEWER_LOGIN"'")] | .[].body'`
|
|
@@ -313,12 +342,18 @@ Then, per issue, within the operation's ≤50 bound:
|
|
|
313
342
|
@define associate_release():
|
|
314
343
|
## Operation: associate-release
|
|
315
344
|
|
|
345
|
+
{{ops.associate_release_contract()}}
|
|
346
|
+
|
|
316
347
|
Load when the resolved tracker provider is `github` and the operation is `associate-release`.
|
|
317
348
|
|
|
318
349
|
**Mechanics held here:** the release milestone — created first, else found by a bounded walk — then one batched read and one batched assignment that never replaces a milestone.
|
|
319
350
|
|
|
320
351
|
### Process
|
|
321
352
|
|
|
353
|
+
{{opsteps.shipped_issues_step_0()}}
|
|
354
|
+
|
|
355
|
+
{{opsteps.associate_release_marker_step()}}
|
|
356
|
+
|
|
322
357
|
**Ref pre-flight (the always-loaded entry gate, instantiated for this provider).** Every entry of `SHIPPED_ISSUES` must satisfy `^#?[1-9][0-9]{0,8}$`, anchored at both ends of the STRING; strip exactly one leading `#` once, and interpolate only the digits. Drop each failure as `TRACEABILITY: DEGRADED (issue reference "{ref}" does not match github reference grammar)`. Every entry dropped ⇒ `TRACEABILITY: DEGRADED (no parseable refs for provider {p})`, no call, and **never report the status as `COMPLETE`**.
|
|
323
358
|
|
|
324
359
|
Steps 1, 3 and 4 each run in ONE shell that opens with `trap 'rm -- "$F"' EXIT; F="$(mktemp)"`.
|
|
@@ -334,9 +369,11 @@ Steps 1, 3 and 4 each run in ONE shell that opens with `trap 'rm -- "$F"' EXIT;
|
|
|
334
369
|
@define ensure_traceable_issue():
|
|
335
370
|
## Operation: ensure-traceable-issue
|
|
336
371
|
|
|
372
|
+
{{ops.ensure_traceable_issue_contract()}}
|
|
373
|
+
|
|
337
374
|
Load when the resolved tracker provider is `github` and the operation is `ensure-traceable-issue`.
|
|
338
375
|
|
|
339
|
-
**Mechanics held here:** the
|
|
376
|
+
**Mechanics held here:** the `### Process` body — issue creation, and posting the design artifact as a collapsed comment; and the D3 issue template below, whose section headings are GitHub's Markdown, not every tracker's.
|
|
340
377
|
|
|
341
378
|
{{common.traceable_issue_rules()}}
|
|
342
379
|
|
|
@@ -406,9 +443,11 @@ When creating or enriching a GitHub issue via the `ensure-traceable-issue` opera
|
|
|
406
443
|
@define post_wave_report():
|
|
407
444
|
## Operation: post-wave-report
|
|
408
445
|
|
|
446
|
+
{{ops.post_wave_report_contract()}}
|
|
447
|
+
|
|
409
448
|
Load when the resolved tracker provider is `github` and the operation is `post-wave-report`.
|
|
410
449
|
|
|
411
|
-
**Mechanics held here:** the
|
|
450
|
+
**Mechanics held here:** the `### Process` body — locating the wave's tracking item and posting or updating the report.
|
|
412
451
|
|
|
413
452
|
{{common.wave_report_inputs()}}
|
|
414
453
|
|
|
@@ -433,13 +472,17 @@ Load when the resolved tracker provider is `github` and the operation is `post-w
|
|
|
433
472
|
@define ensure_pr_ready():
|
|
434
473
|
## Operation: ensure-pr-ready
|
|
435
474
|
|
|
475
|
+
{{ops.ensure_pr_ready_contract()}}
|
|
476
|
+
|
|
436
477
|
Load when the resolved tracker provider is `github` and the operation is `ensure-pr-ready`.
|
|
437
478
|
|
|
438
|
-
**Mechanics held here:** step 4b
|
|
479
|
+
**Mechanics held here:** the whole operation. Steps 1–4a, the PR-host half of step 4b and steps 4c–6 are PR-host mechanics, the same under every provider (written once in `_ops.mds`); step 4b is this provider's: the issue-number resolution and its `Closes #{n}` line.
|
|
439
480
|
|
|
440
481
|
### Process
|
|
441
482
|
|
|
442
|
-
|
|
483
|
+
{{opsteps.ensure_pr_ready_steps_to_4a()}}
|
|
484
|
+
|
|
485
|
+
4b. (ALWAYS-ON) Ensure PR body contains a `## Related Issues` section with `Closes #{n}` link when a verified issue number is known. A given `ISSUE_PR_LINK` is already decided in step 4a: skip the resolution below. Resolution order:
|
|
443
486
|
a. Prefer the issue number returned by `setup-task` / `ensure-traceable-issue` for this branch.
|
|
444
487
|
b. If unavailable, fall back to the branch name pattern `{type}/{number}-{slug}`: extract the numeric segment and verify with `gh issue view {n} --json number,state`. If the call fails or `.state` is not `"open"`, skip silently — never add a `Closes` link for an unverified number. Branches like `chore/2026-cleanup` or `fix/2fa-login` may produce false matches; the existence check is the guard.
|
|
445
488
|
|
|
@@ -447,6 +490,9 @@ Load when the resolved tracker provider is `github` and the operation is `ensure
|
|
|
447
490
|
|
|
448
491
|
If no verified issue number is discoverable, skip silently.
|
|
449
492
|
On any 4xx/5xx from `gh pr edit` when updating the body: emit `TRACEABILITY: DEGRADED ({reason})` and continue — a failed Related Issues update never blocks the PR.
|
|
493
|
+
{{opsteps.ensure_pr_ready_steps_from_4c()}}
|
|
494
|
+
|
|
495
|
+
{{opsteps.ensure_pr_ready_pr_edit()}}
|
|
450
496
|
@end
|
|
451
497
|
|
|
452
498
|
<!-- op: setup-task -->
|
|
@@ -4,6 +4,8 @@ output-dir: dist/skills/git/references
|
|
|
4
4
|
@import "./_mcp.mds" as mcp
|
|
5
5
|
@import "./_common.mds" as common
|
|
6
6
|
@import "./_steps.mds" as steps
|
|
7
|
+
@import "../git/_ops.mds" as ops
|
|
8
|
+
@import "../git/_ops_steps.mds" as opsteps
|
|
7
9
|
|
|
8
10
|
Jira tracker mechanics for the `devflow:git` skill.
|
|
9
11
|
|
|
@@ -20,10 +22,14 @@ Define-set parity — one `@define` per op, named identically across modules —
|
|
|
20
22
|
what the `cross-provider define-set parity` scan asserts over all three,
|
|
21
23
|
because a define name is visible to no type.
|
|
22
24
|
|
|
23
|
-
Each section
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
Each section is the WHOLE operation, and a spawn reads nothing else for it
|
|
26
|
+
(D-OP-ONE-REF): the operation's contract (description, `**Input:**`, degradation
|
|
27
|
+
notes, `**Output:**` template) comes first, called from `_ops.mds` once for every
|
|
28
|
+
module that emits the operation (D-OP-CONTRACT-ONCE), and the provider's
|
|
29
|
+
mechanics follow it (D-OP-MOVABLE). `_ops.mds` and `_ops_steps.mds` are two more
|
|
30
|
+
ALIAS imports (`as ops`, `as opsteps`); the second holds the inline steps every
|
|
31
|
+
provider runs identically, which each section places at the position its step
|
|
32
|
+
number gives it.
|
|
27
33
|
|
|
28
34
|
The provider-independent rules the sections below carry are IMPORTED rather than
|
|
29
35
|
written here: `posting_gate_head`, `query_safety`, `shipped_marker_rule`,
|
|
@@ -79,9 +85,11 @@ Refs {KEY}-{n}
|
|
|
79
85
|
@define setup_task():
|
|
80
86
|
## Operation: setup-task
|
|
81
87
|
|
|
88
|
+
{{ops.setup_task_contract()}}
|
|
89
|
+
|
|
82
90
|
Load when the resolved tracker provider is `jira` and the operation is `setup-task`.
|
|
83
91
|
|
|
84
|
-
**Mechanics held here:** the tracker-facing
|
|
92
|
+
**Mechanics held here:** the tracker-facing `### Process` steps — site and project resolution, the issue lookup, the branch steps, the optional transition.
|
|
85
93
|
|
|
86
94
|
### Setup — session-scoped, resolved once before any step below
|
|
87
95
|
|
|
@@ -114,12 +122,15 @@ Load when the resolved tracker provider is `jira` and the operation is `setup-ta
|
|
|
114
122
|
@define fetch_issue():
|
|
115
123
|
## Operation: fetch-issue
|
|
116
124
|
|
|
125
|
+
{{ops.fetch_issue_contract()}}
|
|
126
|
+
|
|
117
127
|
Load when the resolved tracker provider is `jira` and the operation is `fetch-issue`.
|
|
118
128
|
|
|
119
|
-
**Mechanics held here:** the
|
|
129
|
+
**Mechanics held here:** the `### Process` body — the single-issue lookup by key and the field projection it requests.
|
|
120
130
|
|
|
121
131
|
### Process
|
|
122
132
|
|
|
133
|
+
{{opsteps.fetch_issue_step_1()}}
|
|
123
134
|
2. Resolve the issue through the *fetch by key* capability, requesting summary, description, issue type, labels, assignee, status and comments in ONE call. The capability absent or denied ⇒ `TRACEABILITY: DEGRADED (no tracker tool for fetch by key)` and return; the caller continues without issue content.
|
|
124
135
|
- `ISSUE_REF` is re-gated here rather than trusted upstream. {{common.ref_preflight_single("jira", "`^[A-Z][A-Z0-9_]{1,9}-[1-9][0-9]{0,8}$`", "", "", " Neither is a retry.")}}
|
|
125
136
|
3. Extract acceptance criteria and dependencies from the description. The response's **shape** is trusted and its **field values are not**: neutralise any `</untrusted-issue-body>` in the description and in every comment before wrapping (Principle 8 marker neutralisation), and shape-gate every value at the sink it reaches.
|
|
@@ -133,12 +144,15 @@ Load when the resolved tracker provider is `jira` and the operation is `fetch-is
|
|
|
133
144
|
@define fetch_issues_batch():
|
|
134
145
|
## Operation: fetch-issues-batch
|
|
135
146
|
|
|
147
|
+
{{ops.fetch_issues_batch_contract()}}
|
|
148
|
+
|
|
136
149
|
Load when the resolved tracker provider is `jira` and the operation is `fetch-issues-batch`.
|
|
137
150
|
|
|
138
|
-
**Mechanics held here:** the
|
|
151
|
+
**Mechanics held here:** the `### Process` body — the single bounded batch query and the reporting of references it could not resolve.
|
|
139
152
|
|
|
140
153
|
### Process
|
|
141
154
|
|
|
155
|
+
{{opsteps.fetch_issues_batch_step_1()}}
|
|
142
156
|
2. Resolve the whole list with **ONE** call to the *batch fetch* capability — a single filtered query over the resolved keys, **never a per-item loop**:
|
|
143
157
|
- {{common.ref_preflight_list("jira", "`^[A-Z][A-Z0-9_]{1,9}-[1-9][0-9]{0,8}$`", "", "", " and return without querying.")}}
|
|
144
158
|
- Build the filter as `key in (KEY-1, KEY-2, …)` over the surviving keys, bounded `≤50` keys with an explicit `maxResults` bound carried on the query itself. More than 50 surviving keys ⇒ query the first 50 in list order and report the remainder as `TRUNCATED ({n} not processed)`.
|
|
@@ -147,14 +161,17 @@ Load when the resolved tracker provider is `jira` and the operation is `fetch-is
|
|
|
147
161
|
{{common.state_batch_line("status", "the status", "{KEY}")}}
|
|
148
162
|
2c. A key the query returned nothing for is reported once and is not retried individually: a missing key is a permission or a deletion, and a second call answers the same thing at twice the cost.
|
|
149
163
|
{{steps.batch_extract_steps()}}
|
|
164
|
+
{{opsteps.fetch_issues_batch_step_5()}}
|
|
150
165
|
@end
|
|
151
166
|
|
|
152
167
|
@define manage_debt():
|
|
153
168
|
## Operation: manage-debt
|
|
154
169
|
|
|
170
|
+
{{ops.manage_debt_contract()}}
|
|
171
|
+
|
|
155
172
|
Load when the resolved tracker provider is `jira` and the operation is `manage-debt`.
|
|
156
173
|
|
|
157
|
-
**Mechanics held here:** the
|
|
174
|
+
**Mechanics held here:** the `### Process` body — locating the rolling tech-debt item, creating it when absent, and updating its description.
|
|
158
175
|
|
|
159
176
|
### Process
|
|
160
177
|
|
|
@@ -186,12 +203,16 @@ Over `{{comment_cap()}}` characters the rolling item is closed and a successor i
|
|
|
186
203
|
@define create_release():
|
|
187
204
|
## Operation: create-release
|
|
188
205
|
|
|
206
|
+
{{ops.create_release_contract()}}
|
|
207
|
+
|
|
189
208
|
Load when the resolved tracker provider is `jira` and the operation is `create-release`.
|
|
190
209
|
|
|
191
|
-
**Mechanics held here:** the
|
|
210
|
+
**Mechanics held here:** the release-host steps 1a–6 — version check, annotated tag, tag push, notes composition, the D11 scrub and the release itself — and this provider's shipped-issues step inside step 5. The release-host steps are release-host mechanics, not tracker mechanics, and are the same under every provider.
|
|
192
211
|
|
|
193
212
|
### Process
|
|
194
213
|
|
|
214
|
+
{{opsteps.create_release_steps()}}
|
|
215
|
+
|
|
195
216
|
Inside step 5 (compose release notes):
|
|
196
217
|
|
|
197
218
|
- If `SHIPPED_ISSUES` is provided: append a `## Shipped Issues` section rendering each entry through `## Reference Rendering` — **first ≤50 issues** (the same bound `backlink-shipped-issues` applies); if truncated, add a final `…and {n} more issues` line (D4 degrade if enrichment fails).
|
|
@@ -206,6 +227,8 @@ Inside step 5 (compose release notes):
|
|
|
206
227
|
@define gather_release_evidence():
|
|
207
228
|
## Operation: gather-release-evidence
|
|
208
229
|
|
|
230
|
+
{{ops.gather_release_evidence_contract()}}
|
|
231
|
+
|
|
209
232
|
Load when the resolved tracker provider is `jira` and the operation is `gather-release-evidence`.
|
|
210
233
|
|
|
211
234
|
**Mechanics held here:** the last release tag, resolving which issues a commit range closes, the honest reporting of what this provider cannot resolve, and the trace map.
|
|
@@ -230,9 +253,11 @@ Load when the resolved tracker provider is `jira` and the operation is `gather-r
|
|
|
230
253
|
@define backlink_shipped_issues():
|
|
231
254
|
## Operation: backlink-shipped-issues
|
|
232
255
|
|
|
256
|
+
{{ops.backlink_shipped_issues_contract()}}
|
|
257
|
+
|
|
233
258
|
Load when the resolved tracker provider is `jira` and the operation is `backlink-shipped-issues`.
|
|
234
259
|
|
|
235
|
-
**Mechanics held here:** the
|
|
260
|
+
**Mechanics held here:** the `### Process` body — the hoisted identity lookup, the dedup ladder, the back-link post and the inter-item throttle — and, because this is the tracker operation that owns the fan-out, this provider's rate-limit signal for the always-loaded D4 and D11 contracts.
|
|
236
261
|
|
|
237
262
|
### Provider signals (Jira)
|
|
238
263
|
|
|
@@ -252,6 +277,8 @@ The D4 degradation contract and the D11 comment-sink scrub state the rules; what
|
|
|
252
277
|
|
|
253
278
|
### Process
|
|
254
279
|
|
|
280
|
+
{{opsteps.shipped_issues_step_0()}}
|
|
281
|
+
|
|
255
282
|
**Setup (once, before the loop):** resolve the capability set, the current-user `accountId` from the *identify current user* capability, and the dedup rung.
|
|
256
283
|
|
|
257
284
|
**Ref pre-flight (the always-loaded entry gate, instantiated for this provider).** {{common.ref_preflight_entry("jira", "`^[A-Z][A-Z0-9_]{1,9}-[1-9][0-9]{0,8}$`")}} {{mcp.ref_preflight_tail()}}
|
|
@@ -260,6 +287,8 @@ The D4 degradation contract and the D11 comment-sink scrub state the rules; what
|
|
|
260
287
|
|
|
261
288
|
{{mcp.aggregate_call_budget("`authored-marker` is this provider's default landing rung, and there each item's marker check is a paged comment listing rather than one call.")}}
|
|
262
289
|
|
|
290
|
+
{{opsteps.shipped_issues_loop()}}
|
|
291
|
+
|
|
263
292
|
For each issue the hoist did not answer, within the operation's `≤50` bound:
|
|
264
293
|
|
|
265
294
|
1. Read that issue's devflow-authored comments through the rung Setup selected, newest-first, bounded at `≤2` pages.
|
|
@@ -274,12 +303,18 @@ For each issue the hoist did not answer, within the operation's `≤50` bound:
|
|
|
274
303
|
@define associate_release():
|
|
275
304
|
## Operation: associate-release
|
|
276
305
|
|
|
306
|
+
{{ops.associate_release_contract()}}
|
|
307
|
+
|
|
277
308
|
Load when the resolved tracker provider is `jira` and the operation is `associate-release`.
|
|
278
309
|
|
|
279
310
|
**Mechanics held here:** the project's release version — found, else created — and the read-modify-write that adds it to each item's `fixVersions` without removing any other.
|
|
280
311
|
|
|
281
312
|
### Process
|
|
282
313
|
|
|
314
|
+
{{opsteps.shipped_issues_step_0()}}
|
|
315
|
+
|
|
316
|
+
{{opsteps.associate_release_marker_step()}}
|
|
317
|
+
|
|
283
318
|
**Setup (once, before any item):** resolve the capability set per the tool-call contract; the project key is the provider resolution's.
|
|
284
319
|
|
|
285
320
|
**Ref pre-flight (the always-loaded entry gate, instantiated for this provider).** {{common.ref_preflight_entry("jira", "`^[A-Z][A-Z0-9_]{1,9}-[1-9][0-9]{0,8}$`")}} {{mcp.ref_preflight_tail()}}
|
|
@@ -295,9 +330,11 @@ Load when the resolved tracker provider is `jira` and the operation is `associat
|
|
|
295
330
|
@define ensure_traceable_issue():
|
|
296
331
|
## Operation: ensure-traceable-issue
|
|
297
332
|
|
|
333
|
+
{{ops.ensure_traceable_issue_contract()}}
|
|
334
|
+
|
|
298
335
|
Load when the resolved tracker provider is `jira` and the operation is `ensure-traceable-issue`.
|
|
299
336
|
|
|
300
|
-
**Mechanics held here:** the
|
|
337
|
+
**Mechanics held here:** the `### Process` body — issue creation, and how the design artifact is attached on a provider whose comment format has no collapsed-block analogue.
|
|
301
338
|
|
|
302
339
|
{{common.traceable_issue_rules()}}
|
|
303
340
|
|
|
@@ -337,9 +374,11 @@ The D3 section headings are the canonical ones; only the transport differs from
|
|
|
337
374
|
@define post_wave_report():
|
|
338
375
|
## Operation: post-wave-report
|
|
339
376
|
|
|
377
|
+
{{ops.post_wave_report_contract()}}
|
|
378
|
+
|
|
340
379
|
Load when the resolved tracker provider is `jira` and the operation is `post-wave-report`.
|
|
341
380
|
|
|
342
|
-
**Mechanics held here:** the
|
|
381
|
+
**Mechanics held here:** the `### Process` body — locating the wave's tracking item and posting the report once.
|
|
343
382
|
|
|
344
383
|
{{common.wave_report_inputs()}}
|
|
345
384
|
|
|
@@ -363,13 +402,17 @@ Load when the resolved tracker provider is `jira` and the operation is `post-wav
|
|
|
363
402
|
@define ensure_pr_ready():
|
|
364
403
|
## Operation: ensure-pr-ready
|
|
365
404
|
|
|
405
|
+
{{ops.ensure_pr_ready_contract()}}
|
|
406
|
+
|
|
366
407
|
Load when the resolved tracker provider is `jira` and the operation is `ensure-pr-ready`.
|
|
367
408
|
|
|
368
|
-
**Mechanics held here:**
|
|
409
|
+
**Mechanics held here:** the whole operation. Steps 1–4a, the PR-host half of step 4b and steps 4c–6 are PR-host mechanics, the same under every provider (written once in `_ops.mds`): devflow deliberately keeps pull requests on their existing host while the tracker is this one, so nothing about the PR surface is provider-dependent. Step 4b is this provider's: resolving the issue key for this branch and rendering the link line.
|
|
369
410
|
|
|
370
411
|
### Process
|
|
371
412
|
|
|
372
|
-
|
|
413
|
+
{{opsteps.ensure_pr_ready_steps_to_4a()}}
|
|
414
|
+
|
|
415
|
+
4b. (ALWAYS-ON) Ensure the PR body contains a `## Related Issues` section naming the verified issue when one is known. A given `ISSUE_PR_LINK` is already decided in step 4a: skip the resolution and the rendering below. Resolution order:
|
|
373
416
|
a. Prefer the issue key returned by `setup-task` / `ensure-traceable-issue` for this branch — it was verified at creation time.
|
|
374
417
|
b. Otherwise fall back to the branch name pattern `{type}/{KEY}-{slug}`: {{common.ref_preflight_branch("matching `^[A-Z][A-Z0-9_]{1,9}-[1-9][0-9]{0,8}$`")}}
|
|
375
418
|
c. The *fetch by key* capability absent or denied ⇒ `TRACEABILITY: DEGRADED (no tracker tool for fetch by key)` and skip the section; the PR is never blocked on it.
|
|
@@ -379,10 +422,13 @@ Load when the resolved tracker provider is `jira` and the operation is `ensure-p
|
|
|
379
422
|
Publish the section through step 4b's PR-host half.
|
|
380
423
|
|
|
381
424
|
If no verified issue key is discoverable, skip silently. A failure while updating the PR body emits `TRACEABILITY: DEGRADED ({reason})` and continues — a failed Related Issues update never blocks the PR.
|
|
425
|
+
{{opsteps.ensure_pr_ready_steps_from_4c()}}
|
|
382
426
|
|
|
383
427
|
{{mcp.reference_rendering_gate()}}
|
|
384
428
|
|
|
385
429
|
**This provider's documented default is `{{pr_link_default()}}`.** It is stated here because it is a provider fact, and the gate above is what routes to it: a section that is absent, a file that is absent and a token the gate discarded all render this, and none of them is a degradation.
|
|
430
|
+
|
|
431
|
+
{{opsteps.ensure_pr_ready_pr_edit()}}
|
|
386
432
|
@end
|
|
387
433
|
|
|
388
434
|
<!-- op: setup-task -->
|