@mmerterden/multi-agent-pipeline 20.11.1 → 20.13.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.
Files changed (71) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/README.md +1 -1
  3. package/README.tr.md +1 -1
  4. package/docs/facts.json +2 -2
  5. package/install/_common.mjs +1 -1
  6. package/install/_plugin-skills.mjs +13 -9
  7. package/install/catalog-history.json +1 -1
  8. package/install/claude.mjs +9 -0
  9. package/install/codex.mjs +12 -12
  10. package/manifest.json +74 -67
  11. package/package.json +5 -5
  12. package/pipeline/agents/code-reviewer.md +1 -1
  13. package/pipeline/commands/multi-agent/SKILL.md +1 -0
  14. package/pipeline/commands/multi-agent/analysis/SKILL.md +7 -3
  15. package/pipeline/commands/multi-agent/analysis-jira/SKILL.md +57 -7
  16. package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +2 -2
  17. package/pipeline/commands/multi-agent/autopilot/SKILL.md +6 -0
  18. package/pipeline/commands/multi-agent/autopilot-off/SKILL.md +1 -0
  19. package/pipeline/commands/multi-agent/doctor/SKILL.md +6 -0
  20. package/pipeline/commands/multi-agent/feedback/SKILL.md +2 -2
  21. package/pipeline/commands/multi-agent/forget/SKILL.md +1 -0
  22. package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +1 -0
  23. package/pipeline/commands/multi-agent/kill/SKILL.md +1 -0
  24. package/pipeline/commands/multi-agent/model/SKILL.md +7 -0
  25. package/pipeline/commands/multi-agent/prune-logs/SKILL.md +1 -0
  26. package/pipeline/commands/multi-agent/prune-prompts/SKILL.md +1 -0
  27. package/pipeline/commands/multi-agent/review/SKILL.md +5 -0
  28. package/pipeline/commands/multi-agent/review-analysis/SKILL.md +7 -2
  29. package/pipeline/commands/multi-agent/sync/SKILL.md +5 -6
  30. package/pipeline/lib/agent-model-sync.mjs +95 -0
  31. package/pipeline/lib/analysis-jira-write.sh +81 -27
  32. package/pipeline/lib/analysis-quality.mjs +261 -0
  33. package/pipeline/lib/analysis-sections.mjs +105 -0
  34. package/pipeline/lib/jira-epic-link.sh +54 -0
  35. package/pipeline/lib/model-rung.sh +7 -0
  36. package/pipeline/multi-agent-refs/analysis/locked.md +4 -4
  37. package/pipeline/multi-agent-refs/analysis/redesign.md +3 -1
  38. package/pipeline/multi-agent-refs/analysis/render.md +20 -21
  39. package/pipeline/multi-agent-refs/analysis/resolve.md +1 -1
  40. package/pipeline/multi-agent-refs/analysis/review.md +16 -3
  41. package/pipeline/multi-agent-refs/analysis/synthesis.md +10 -2
  42. package/pipeline/multi-agent-refs/analysis-template-corporate.md +44 -9
  43. package/pipeline/multi-agent-refs/analysis-template.md +21 -14
  44. package/pipeline/multi-agent-refs/cross-cli-contract.md +4 -0
  45. package/pipeline/multi-agent-refs/features/analysis-jira.md +69 -19
  46. package/pipeline/multi-agent-refs/features/doctor.md +10 -0
  47. package/pipeline/multi-agent-refs/features/model-fallback.md +10 -0
  48. package/pipeline/multi-agent-refs/features/phone-api.md +1 -1
  49. package/pipeline/multi-agent-refs/features/unattended-security.md +2 -2
  50. package/pipeline/multi-agent-refs/features/usage-reporting.md +13 -0
  51. package/pipeline/schemas/analysis-spec.schema.json +22 -0
  52. package/pipeline/schemas/prefs.schema.json +22 -1
  53. package/pipeline/scripts/analysis-story-body.mjs +210 -0
  54. package/pipeline/scripts/analysis-story-tree.mjs +73 -12
  55. package/pipeline/scripts/analysis-tickets-writeback.mjs +101 -0
  56. package/pipeline/scripts/build-references.mjs +14 -1
  57. package/pipeline/scripts/confluence-readback.mjs +148 -0
  58. package/pipeline/scripts/doctor.mjs +48 -0
  59. package/pipeline/scripts/jira-wiki-escape.mjs +40 -0
  60. package/pipeline/scripts/migrate-prefs.mjs +14 -0
  61. package/pipeline/scripts/unattended_policy.py +12 -5
  62. package/pipeline/scripts/usage-report.mjs +84 -9
  63. package/pipeline/scripts/validate-analysis-doc.mjs +120 -70
  64. package/pipeline/skills/.skill-manifest.json +8 -8
  65. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +6 -1
  66. package/pipeline/skills/shared/core/multi-agent-analysis-jira/SKILL.md +56 -6
  67. package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +6 -0
  68. package/pipeline/skills/shared/core/multi-agent-doctor/SKILL.md +6 -0
  69. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +5 -0
  70. package/pipeline/skills/shared/core/multi-agent-review-analysis/SKILL.md +5 -0
  71. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +1 -0
@@ -15,6 +15,11 @@ Produces a stakeholder-ready, platform-agnostic feature-spec document set (one m
15
15
 
16
16
  > **Language**: Per `refs/rules.md` Language Application matrix - instruction prose stays English. `AskUserQuestion.question`, `.options[].label` and `.options[].description` follow `outputLanguage`; only `header` stays English (<=12-char chip). The emitted document body follows `outputLanguage` (`tr` or `en`).
17
17
 
18
+ ## Gotchas
19
+
20
+ - Design is fetched only inside this command (Locked 29). A variant missing from the document is added by re-running analysis, never by a later phase.
21
+ - `status: final` fails the validator while any `AS-NN` is still open; publish drafts as `draft`.
22
+
18
23
  ## When to use
19
24
 
20
25
  - Before kicking off a new feature: design + API + business rules + architecture plan + test strategy crystallized into one per-platform document set
@@ -40,7 +45,7 @@ One run emits one profile. A missing input never blocks either: the gap is writt
40
45
 
41
46
  The template has 23 main sections plus footer (Glossary, Changelog). The rendered set is chosen from evidence by the omission table (Locked 2), not by a mode: a section with no evidence drops, and 19 Alternatives, 22 Glossary and 18 Rollout are default-drop.
42
47
 
43
- **Section omission**: zero-evidence sections are dropped entirely (no "TBD" placeholder); numbering re-flows to stay sequential. Sections 1, 2, 4, 9, 13, 14, 20, 21 are never omitted.
48
+ **Section omission**: zero-evidence sections are dropped entirely (no "TBD" placeholder); a rendered section keeps its canonical template number, so the rendered set has gaps. Sections 1, 2, 4, 9, 13, 14, 20, 21 are never omitted.
44
49
 
45
50
  **Two-pass render**: Pass A computes the shared logical content once; Pass B projects it onto each selected platform using conventions extracted from the repos (Phase 1c, seven pattern groups with confidence levels). Every projected cell carries an evidence footnote. A convention preview gate lets the user approve or override cells before any file renders.
46
51
 
@@ -2,7 +2,7 @@
2
2
  name: multi-agent-analysis-jira
3
3
  description: "Turn a rendered analysis document into a Jira story tree: derive stories from the document's own rule ids, check coverage both ways, preview every byte, then create only what does not already exist. Use when an analysis is final and the work needs tickets."
4
4
  user-invocable: true
5
- argument-hint: "[analysis.md] [--project KEY] - optional; with no argument, pick from the documents this run emitted"
5
+ argument-hint: "[analysis.md] [--project KEY] [--epic KEY] - optional; with no argument, pick from the documents this run emitted"
6
6
  metadata:
7
7
  language: en
8
8
  not-for: create-jira, jira
@@ -18,13 +18,26 @@ invents a story: every node comes from an id the document defines.
18
18
  Contract, severities and reasoning:
19
19
  `$HOME/.claude/multi-agent-refs/features/analysis-jira.md`.
20
20
 
21
+ ## Gotchas
22
+
23
+ - An issue whose label already exists is skipped, never updated. Editing the document and re-running creates only what is missing; existing tickets keep their old text.
24
+ - A document with no `BR-`/`FG-` ids still plans, from its `4.N` sub-sections, but its coverage verdict is `unverifiable`: there is nothing to check the tree against.
25
+ - An open `EKLENECEK`/`TBD` marker or an open Section 20 row stops planning with exit 4. Resolve them with `/multi-agent-analysis-resolve` first.
26
+ - The epic must already exist: stories are linked to it, never an epic created. On Server/Data Center the Epic Link field is discovered from the site; when none is found the stories are created unlinked and the writer says so.
27
+ - Channel clones (`issueTree.cloneByChannel`) carry their own labels and are searched like stories, so a re-run never doubles them or their links.
28
+ - Story bodies hold only document text. A body warning (no user story, fewer than 2 criteria, no negative criterion) is a gap in the document; fix the document, not the ticket.
29
+
21
30
  ## Phase 1 - Plan, offline
22
31
 
23
32
  ```bash
24
- node "$HOME/.claude/scripts/analysis-story-tree.mjs" "<analysis.md>" --json > /tmp/ma-plan.json
25
- node "$HOME/.claude/scripts/analysis-story-tree.mjs" "<analysis.md>"
33
+ node "$HOME/.claude/scripts/analysis-story-tree.mjs" "<analysis.md>" --json $PAGE > /tmp/ma-plan.json
34
+ node "$HOME/.claude/scripts/analysis-story-tree.mjs" "<analysis.md>" $PAGE
26
35
  ```
27
36
 
37
+ `$PAGE` is `--page-url <url>` when the document was published (the run's
38
+ `outputs.confluencePages[]`); without it the front-matter `confluence_url` is
39
+ used, and with neither the story bodies carry no analysis link.
40
+
28
41
  Exit 4 means the document still carries an open placeholder. Stop and report it:
29
42
  the step is `/multi-agent:analysis-resolve`, and a tree built from an open
30
43
  question publishes the gap as work somebody is now assigned.
@@ -48,12 +61,19 @@ what makes a preview meaningful:
48
61
  - every field beside the pref key it came from, so a wrong setting shows here
49
62
  rather than in Jira afterwards
50
63
  - the write count
64
+ - every story's full description, as it will be written, with its body
65
+ warnings; `--brief` gives the one-line-per-node view
66
+
67
+ Then ask for the epic, once. `AskUserQuestion`:
68
+
69
+ - **Link to an existing epic** - the user types its key (`--epic <KEY>`)
70
+ - **No epic** - the stories are created unlinked
51
71
 
52
72
  Then the dry run, which is what proves the writer agrees with the plan:
53
73
 
54
74
  ```bash
55
75
  bash "$HOME/.claude/lib/analysis-jira-write.sh" \
56
- --plan /tmp/ma-plan.json --project "<KEY>" --dry-run
76
+ --plan /tmp/ma-plan.json --project "<KEY>" [--epic "<EPIC>"] --dry-run
57
77
  ```
58
78
 
59
79
  ## Phase 3 - Approve
@@ -79,11 +99,14 @@ be reachable.
79
99
  invented id means the plan cites something the document does not define - treat
80
100
  that as a defect in the plan, not a warning to click past.
81
101
 
102
+ Body warnings are printed before the question too. They do not block: the
103
+ ticket says only what the document says, and the warning names the gap.
104
+
82
105
  ## Phase 4 - Write
83
106
 
84
107
  ```bash
85
108
  bash "$HOME/.claude/lib/analysis-jira-write.sh" \
86
- --plan /tmp/ma-plan.json --project "<KEY>"
109
+ --plan /tmp/ma-plan.json --project "<KEY>" [--epic "<EPIC>"]
87
110
  ```
88
111
 
89
112
  It searches by label first and skips what exists. Re-running is safe and is the
@@ -93,9 +116,36 @@ findable rather than duplicable.
93
116
  **Never pass `--force`-like flags, and never update an existing node.** Jira has
94
117
  no backup path for fields other than description.
95
118
 
119
+ ### Write the tickets back
120
+
121
+ The document lists what it produced. Local and idempotent: the table sits
122
+ between `<!-- tickets:start -->` and `<!-- tickets:end -->`, a re-run replaces
123
+ it, and only nodes with a key appear.
124
+
125
+ ```bash
126
+ LEDGER="$HOME/.claude/logs/multi-agent/_analysis-jira/$(jq -r '.document.id // "unidentified"' /tmp/ma-plan.json).jsonl"
127
+ node "$HOME/.claude/scripts/analysis-tickets-writeback.mjs" \
128
+ --doc "<analysis.md>" --ledger "$LEDGER" --plan /tmp/ma-plan.json
129
+ ```
130
+
131
+ When the document has a Confluence page, updating it is a **separate**
132
+ `AskUserQuestion`, never part of the tree approval:
133
+
134
+ - **Update the Confluence page** - publish the document with its new table
135
+ - **Keep it local** - the page stays as it is
136
+
137
+ ```bash
138
+ python3 "$HOME/.claude/lib/md2confluence-v3.py" update \
139
+ --page-id "<pageId>" --title "<page title>" \
140
+ --markdown "<analysis.md>" --attachments-dir "$(dirname "<analysis.md>")"
141
+ ```
142
+
143
+ Read its JSON envelope as the analysis render step does, and surface any
144
+ missing-attachment warning.
145
+
96
146
  ## Phase 5 - Report
97
147
 
98
- Keys created, keys skipped, the coverage verdict, and the ledger path. If the
148
+ Keys created, keys skipped, the epic linked (or none), the coverage verdict, and the ledger path. If the
99
149
  verdict was `unverifiable`, say that in the report too - not only at approval
100
150
  time, because the report is what gets pasted elsewhere.
101
151
 
@@ -13,6 +13,12 @@ metadata:
13
13
 
14
14
  Run the task end-to-end with no confirmations.
15
15
 
16
+ ## Gotchas
17
+
18
+ - The guard decides within a 5-second internal deadline and fails closed when unattended. On a heavily loaded machine a correct command can be refused for time, not for policy.
19
+ - An unattended run never pushes or opens a PR itself: it records the request in `pr-request.json` and the runner publishes it.
20
+ - An unattended run cannot run `/multi-agent-stack` or write `.claude/` in the repo; a missing stack toolkit is read from a local marketplace clone instead.
21
+
16
22
  ## What changes
17
23
 
18
24
  | Phase | Normal | Autopilot |
@@ -20,6 +20,12 @@ same way - late, mid-run, after the pickers had been answered. A missing script
20
20
  fails at the call. Malformed preferences fail after Phase 0 has asked five
21
21
  questions. A token in a remote URL does not fail at all; it leaks.
22
22
 
23
+ ## Gotchas
24
+
25
+ - Exit 4 means the layout did not resolve and nothing was checked. It is not a pass.
26
+ - Without `--probe` no credential is sent anywhere, so a revoked token still reads as mapped.
27
+ - `usage-report` SKIP means nothing has been sent from this machine yet, not that reporting works.
28
+
23
29
  ## Run it
24
30
 
25
31
  ```bash
@@ -13,6 +13,11 @@ metadata:
13
13
 
14
14
  Skip Phase 0-3 and review a diff only. Input shapes: a PR (`#N`, `repo#N`, GitHub/Bitbucket-Server PR URL), a branch name, or empty.
15
15
 
16
+ ## Gotchas
17
+
18
+ - The counterpart-repo comparison needs exactly one resolved candidate. With several, an unattended run skips it silently, so an autopilot review can have no cross-platform section.
19
+ - The counterpart's stack comes from marker files, never from the repo name.
20
+
16
21
  ## Steps
17
22
 
18
23
  1. **Resolve the input** (`{kind, provider}`):
@@ -13,6 +13,11 @@ metadata:
13
13
 
14
14
  `multi-agent-review` judges a diff. This judges the document that diff was supposed to come from, before the code exists. No worktree, no branch, no commit, and the reviewed document is never edited in place.
15
15
 
16
+ ## Gotchas
17
+
18
+ - Validator ERRORs are Blockers and WARNs are Important, unless the document states why the warned-about item is acceptable.
19
+ - Every rubric class is printed, with `none` when empty. A class missing from the verdict did not run; it is not a clean result.
20
+
16
21
  ## Flow
17
22
 
18
23
  Read `$HOME/.copilot/multi-agent-refs/analysis/review.md` and execute it:
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: multi-agent-setup
3
3
  description: "First-run setup wizard: keychain token discovery, Git Identity onboarding, and pipeline preparation. Use when the pipeline is being set up for the first time, or tokens and git identity need onboarding."
4
+ argument-hint: "[jira-keys | hosts | accounts] - optional; no argument runs the whole onboarding"
4
5
  user-invocable: true
5
6
  metadata:
6
7
  language: en