@mmerterden/multi-agent-pipeline 16.10.1 → 16.12.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 +58 -0
- package/README.md +115 -4
- package/README.tr.md +116 -4
- package/docs/adr/0001-three-model-triage.md +5 -0
- package/docs/features.md +18 -2
- package/install/templates/copilot-instructions.md +1 -1
- package/package.json +1 -1
- package/pipeline/claude-md-template.md +1 -1
- package/pipeline/commands/multi-agent/SKILL.md +4 -4
- package/pipeline/commands/multi-agent/analysis/SKILL.md +10 -10
- package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/autopilot/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/build-optimize/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/channels/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/complaint-analysis/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/create-jira/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/design-check/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/help/SKILL.md +6 -6
- package/pipeline/commands/multi-agent/language/SKILL.md +3 -3
- package/pipeline/commands/multi-agent/local/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/local-autopilot/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/purge/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/resume-local/SKILL.md +4 -4
- package/pipeline/commands/multi-agent/review/SKILL.md +10 -9
- package/pipeline/commands/multi-agent/review-analysis/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/setup/SKILL.md +9 -9
- package/pipeline/commands/multi-agent/stack/SKILL.md +12 -13
- package/pipeline/lib/extract-conventions.sh +19 -18
- package/pipeline/lib/figma-screenshot.sh +107 -7
- package/pipeline/lib/md2confluence-v3.py +133 -25
- package/pipeline/multi-agent-refs/_account-picker.md +1 -1
- package/pipeline/multi-agent-refs/_dev-context.md +2 -2
- package/pipeline/multi-agent-refs/_input-parser.md +1 -1
- package/pipeline/multi-agent-refs/analysis/evidence.md +4 -4
- package/pipeline/multi-agent-refs/analysis/intake.md +112 -36
- package/pipeline/multi-agent-refs/analysis/locked.md +5 -4
- package/pipeline/multi-agent-refs/analysis/render.md +72 -14
- package/pipeline/multi-agent-refs/analysis/review.md +17 -1
- package/pipeline/multi-agent-refs/analysis/synthesis.md +7 -7
- package/pipeline/multi-agent-refs/analysis-template-corporate.md +15 -4
- package/pipeline/multi-agent-refs/analysis-template.md +6 -6
- package/pipeline/multi-agent-refs/channels/confluence.md +1 -0
- package/pipeline/multi-agent-refs/channels/pr.md +2 -2
- package/pipeline/multi-agent-refs/conventions-defaults.md +13 -13
- package/pipeline/multi-agent-refs/features/stack-skill-routing.md +1 -1
- package/pipeline/multi-agent-refs/knowledge.md +1 -1
- package/pipeline/multi-agent-refs/phases/modes.md +1 -1
- package/pipeline/multi-agent-refs/phases/phase-0-init.md +10 -6
- package/pipeline/multi-agent-refs/phases/phase-2-planning.md +6 -5
- package/pipeline/multi-agent-refs/phases/phase-3-dev.md +4 -4
- package/pipeline/multi-agent-refs/phases/phase-4-review.md +8 -8
- package/pipeline/multi-agent-refs/phases/phase-6-commit.md +7 -7
- package/pipeline/multi-agent-refs/picker-contract.md +29 -4
- package/pipeline/multi-agent-refs/readiness-review.md +1 -1
- package/pipeline/multi-agent-refs/rules.md +4 -4
- package/pipeline/multi-agent-refs/{frontend-guide.md → web-guide.md} +2 -2
- package/pipeline/schemas/analysis-output.schema.json +1 -1
- package/pipeline/schemas/analysis-spec.schema.json +5 -3
- package/pipeline/schemas/prefs.schema.json +18 -2
- package/pipeline/schemas/reviewer-output.schema.json +1 -1
- package/pipeline/schemas/triage-output.schema.json +1 -1
- package/pipeline/scripts/anonymize-findings.mjs +1 -1
- package/pipeline/scripts/gen-skills-index.mjs +1 -1
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +9 -9
- package/pipeline/scripts/validate-analysis-doc.mjs +92 -26
- package/pipeline/scripts/validate-analysis.mjs +6 -1
- package/pipeline/skills/.skills-index.json +2 -2
- package/pipeline/skills/shared/README.md +4 -4
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +4 -4
- package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +3 -3
- package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +4 -4
- package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +11 -12
- package/pipeline/skills/skills-index.md +2 -2
|
@@ -8,7 +8,7 @@ argument-hint: "(none - operates on current repo)"
|
|
|
8
8
|
|
|
9
9
|
Wraps the vendored `xcode-build-orchestrator` skill (and its 5 specialist analyzers) so iOS users do not have to remember the orchestrator skill name. Recommend-first: no project files are modified without explicit developer approval. All output lands in `.build-benchmark/` in the current repo.
|
|
10
10
|
|
|
11
|
-
> **Language**: Per `$HOME/.claude/multi-agent-refs/rules.md` Language Application matrix - instruction prose stays English (this file is read as a system prompt). `AskUserQuestion.label` and `
|
|
11
|
+
> **Language**: Per `$HOME/.claude/multi-agent-refs/rules.md` Language Application matrix - instruction prose stays English (this file is read as a system prompt). `AskUserQuestion.question`, `.options[].label` and `.options[].description` follow `outputLanguage`; only `header` stays English (<=12-char chip). The emitted benchmark plan body (the upstream skill controls it) is English by upstream convention.
|
|
12
12
|
|
|
13
13
|
## When to use
|
|
14
14
|
|
|
@@ -25,7 +25,7 @@ Before dispatch, fail fast on non-iOS repos. Detect iOS context via the standard
|
|
|
25
25
|
|--------|--------|
|
|
26
26
|
| `*.xcodeproj` or `*.xcworkspace` in cwd | Proceed to dispatch |
|
|
27
27
|
| `Package.swift` only (SwiftPM lib, no Xcode project) | Proceed; orchestrator handles `xcodebuild -package-path` |
|
|
28
|
-
| Android / Backend /
|
|
28
|
+
| Android / Backend / Web markers only | Surface a short error: "build-optimize is iOS-only. Detected: <stack>. Use the platform-appropriate perf skill (android-performance / web-performance / etc.) instead." Exit. |
|
|
29
29
|
| No recognizable stack | Surface "no iOS project found in cwd" and exit. |
|
|
30
30
|
|
|
31
31
|
## Steps
|
|
@@ -334,7 +334,7 @@ Applying the Jira table to the PR body is the recurring failure of this step: it
|
|
|
334
334
|
|
|
335
335
|
Secondary artifacts ride along as one-line intents at the bottom of the preview: Wiki page list, wiki → Jira triad comment (when Wiki is selected and the triad is active per `$HOME/.claude/multi-agent-refs/issue-jira-triad.md`), Board status move (`{from} → {to}`), GitHub issue comment + Progress-flag sync (Phase 7 Step 1.5 - same gate, see `$HOME/.claude/multi-agent-refs/phases/phase-7-report.md`).
|
|
336
336
|
|
|
337
|
-
**Then a single AskUserQuestion** (`question`/`description` in `outputLanguage`; `
|
|
337
|
+
**Then a single AskUserQuestion** (`question`/`label`/`description` in `outputLanguage`; `header` English):
|
|
338
338
|
|
|
339
339
|
| Option | Behavior |
|
|
340
340
|
|---|---|
|
|
@@ -12,7 +12,7 @@ Triage of customer-reported errors across the layers the team owns (client apps
|
|
|
12
12
|
|
|
13
13
|
**Side-effect contract**: may write a local markdown report, post a Confluence page, or add a Jira comment/description - but **never** creates branches, worktrees, commits, or PRs. Stops at the report.
|
|
14
14
|
|
|
15
|
-
> **Language**: Per `$HOME/.claude/multi-agent-refs/rules.md` Language Application matrix - instruction prose stays English. `AskUserQuestion.label` and `
|
|
15
|
+
> **Language**: Per `$HOME/.claude/multi-agent-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 report body follows `outputLanguage`; Graylog excerpts, verdict tokens, and external payload metadata stay English.
|
|
16
16
|
|
|
17
17
|
## Locked decisions (do not re-ask)
|
|
18
18
|
|
|
@@ -10,7 +10,7 @@ argument-hint: "[\"<free-text description>\"] [figma-url] [swagger-url] - all
|
|
|
10
10
|
|
|
11
11
|
Creates exactly one Jira issue, and only after explicit approval. The issue type (Task / Bug / Story) is asked at the start of every run. No branches, no commits, no worktrees, no pipeline chaining. The draft learns the target project's conventions from its recent same-type issues (summary format, labels, components, priority norms, test-scenario style) and offers active-sprint placement when a sprint is running.
|
|
12
12
|
|
|
13
|
-
> **Language**: instruction prose here is English. AskUserQuestion `question`/`description` and the issue content (summary + description) follow `prefs.global.outputLanguage`, like every other user-facing payload body (`rules.md` matrix). `
|
|
13
|
+
> **Language**: instruction prose here is English. AskUserQuestion `question`/`label`/`description` and the issue content (summary + description) follow `prefs.global.outputLanguage`, like every other user-facing payload body (`rules.md` matrix). Only `header` stays English (<=12-char chip).
|
|
14
14
|
|
|
15
15
|
## Issue types
|
|
16
16
|
|
|
@@ -16,7 +16,7 @@ Local, on-device design-conformance auditor. It runs the app in a **mock mode**
|
|
|
16
16
|
> 1. **`prefs.global.promptLanguage` is always `en`** - this spec and every instruction to the LLM stay English.
|
|
17
17
|
> 2. **`prefs.global.outputLanguage` is user-selectable** - applies to conversational lines and the human-readable parts of the report. Pass it to `design_report` as `report.lang`; the engine defaults to English and ships an `en` + `tr` label pack, plus per-key `report.labels` overrides.
|
|
18
18
|
>
|
|
19
|
-
> Regardless of `outputLanguage`, these stay English: `AskUserQuestion`
|
|
19
|
+
> Regardless of `outputLanguage`, these stay English: `AskUserQuestion` `header` chips, branch names, file paths, code identifiers, log lines. Option `label`s follow `outputLanguage` like the rest of the picker copy. Full contract: `$HOME/.claude/multi-agent-refs/rules.md` "Language Application".
|
|
20
20
|
|
|
21
21
|
## Scope - `$ARGUMENTS`
|
|
22
22
|
|
|
@@ -113,7 +113,7 @@ for l in sys.stdin:
|
|
|
113
113
|
```
|
|
114
114
|
Branch on `supported`:
|
|
115
115
|
- **`false`** → **HALT**. Show `reason` + that no runtime mock switch / launchable app / mock fixtures were found. Tell the user this module cannot be audited by design-check and stop. Do not fabricate a comparison.
|
|
116
|
-
- **`"debug-only"`** → surface an `AskUserQuestion` warning: mocks are compiled into the Debug build via `#if DEBUG` DI, so **variants cannot be toggled at launch** - only the default Debug state is comparable. Options
|
|
116
|
+
- **`"debug-only"`** → surface an `AskUserQuestion` warning: mocks are compiled into the Debug build via `#if DEBUG` DI, so **variants cannot be toggled at launch** - only the default Debug state is comparable. Options (label + description in `outputLanguage`): option 1 semantically "Continue" - audit the single default Debug state only; option 2 semantically "Cancel" - stop.
|
|
117
117
|
- **`true`** → continue. Persist `state.designCheck.mock = <detect result>` (mechanism, activation, variantsHint, evidence).
|
|
118
118
|
5. **SCENARIO INVENTORY (this is the audit's target set)**:
|
|
119
119
|
```
|
|
@@ -59,7 +59,7 @@ Pipeline (after Phase 0) - shown as visual cards in terminal:
|
|
|
59
59
|
only; a Short run has no plan, autopilot may not ask)
|
|
60
60
|
Phase 3: Dev -> TDD: test -> code -> build (Sonnet) + build queue
|
|
61
61
|
Phase 4: Review -> Deterministic gates + parallel AI review + Fable triage
|
|
62
|
-
(Claude Code: Fable + Sonnet · Copilot CLI: GPT-5.4 + Opus + Sonnet)
|
|
62
|
+
(Claude Code: Fable + Opus + Sonnet · Copilot CLI: GPT-5.4 + Opus + Sonnet)
|
|
63
63
|
Phase 5: Test -> Optional: switch to branch, test in Xcode
|
|
64
64
|
(only /multi-agent has it; every autopilot and local entry drops it)
|
|
65
65
|
Phase 6: Commit -> Commit -> push -> PR + issue body update (never auto-closes)
|
|
@@ -239,7 +239,7 @@ Setup:
|
|
|
239
239
|
|
|
240
240
|
Key Features:
|
|
241
241
|
|
|
242
|
-
Multi-Platform iOS, Android, Backend,
|
|
242
|
+
Multi-Platform iOS, Android, Backend, Web - auto-detected
|
|
243
243
|
Build Queue xcodebuild/Gradle serialized with lock file - parallel safe
|
|
244
244
|
Stack Aware Auto-detects iOS/Android/Python/Node/Go/Docker, uses the enabled stack plugin's skills
|
|
245
245
|
Det. Gates Build + lint + test + secret scan BEFORE AI review
|
|
@@ -279,7 +279,7 @@ Examples:
|
|
|
279
279
|
/multi-agent:autopilot "LoginView dark mode fix" # iOS
|
|
280
280
|
/multi-agent "Add pagination to /api/users endpoint" # Backend
|
|
281
281
|
/multi-agent "Fix bottom nav recomposition in HomeScreen" # Android
|
|
282
|
-
/multi-agent "Responsive layout broken on tablet" #
|
|
282
|
+
/multi-agent "Responsive layout broken on tablet" # Web, choose Short
|
|
283
283
|
|
|
284
284
|
# Review current diff only
|
|
285
285
|
/multi-agent:review
|
|
@@ -334,7 +334,7 @@ Pipeline (Phase 0'dan sonra) - terminalde görsel kart olarak görünür:
|
|
|
334
334
|
etkileşimli; Kısa'da plan yok, autopilot soru soramaz)
|
|
335
335
|
Phase 3: Dev -> TDD: test -> kod -> build (Sonnet) + build queue
|
|
336
336
|
Phase 4: Review -> Deterministik kapılar + paralel AI review + Fable triage
|
|
337
|
-
(Claude Code: Fable + Sonnet · Copilot CLI: GPT-5.4 + Opus + Sonnet)
|
|
337
|
+
(Claude Code: Fable + Opus + Sonnet · Copilot CLI: GPT-5.4 + Opus + Sonnet)
|
|
338
338
|
Phase 5: Test -> Opsiyonel: branch'e geç, Xcode'da test
|
|
339
339
|
(yalnız /multi-agent'ta var; her autopilot ve local girişi düşürür)
|
|
340
340
|
Phase 6: Commit -> Commit -> push -> PR + issue body güncelleme (hiç auto-close yok)
|
|
@@ -514,7 +514,7 @@ Setup:
|
|
|
514
514
|
|
|
515
515
|
Temel Özellikler:
|
|
516
516
|
|
|
517
|
-
Multi-Platform iOS, Android, Backend,
|
|
517
|
+
Multi-Platform iOS, Android, Backend, Web - otomatik tespit
|
|
518
518
|
Build Queue xcodebuild/Gradle lock file ile seri - parallel güvenli
|
|
519
519
|
Stack Aware iOS/Android/Python/Node/Go/Docker algılanır, etkin stack plugin'inin skilleri kullanılır
|
|
520
520
|
Det. Gates AI review'dan ÖNCE build + lint + test + secret scan
|
|
@@ -554,7 +554,7 @@ Quality & Telemetry (advisory, default açık - prefs.global.* ile kapatılabi
|
|
|
554
554
|
/multi-agent:autopilot "LoginView dark mode fix" # iOS
|
|
555
555
|
/multi-agent "Add pagination to /api/users endpoint" # Backend
|
|
556
556
|
/multi-agent "Fix bottom nav recomposition in HomeScreen" # Android
|
|
557
|
-
/multi-agent "Responsive layout broken on tablet" #
|
|
557
|
+
/multi-agent "Responsive layout broken on tablet" # Web, Kısa seç
|
|
558
558
|
|
|
559
559
|
# Sadece mevcut diff'i review et
|
|
560
560
|
/multi-agent:review
|
|
@@ -15,9 +15,9 @@ Two-axis language preference for the pipeline:
|
|
|
15
15
|
| `promptLanguage` | Interactive prompts during a pipeline run (account picker, project picker, dev-context picker, base-branch picker, branch-name picker, maturity ack, channels picker, Phase 5 test prompt, Phase 6 local-checkout prompt) | `prefs.global.promptLanguage` | **Fixed to `en`** - never toggled by this skill |
|
|
16
16
|
| `outputLanguage` | Assistant's explanations, status updates, error messages, and pipeline-generated reports rendered to the user (NOT external payloads) | `prefs.global.outputLanguage` | Toggled by this skill |
|
|
17
17
|
|
|
18
|
-
**Why promptLanguage is fixed:** it governs the picker's structural chrome only - `AskUserQuestion` `
|
|
18
|
+
**Why promptLanguage is fixed:** it governs the picker's structural chrome only - the `AskUserQuestion` `header` chip, host error UI, and internal contract identifiers. The chip stays English because it is capped at 12 characters and most Turkish equivalents overflow it. Everything a user actually reads follows `outputLanguage`: the picker `question`, each option's `label`, and each option's `description`, per the canonical per-field matrix in `multi-agent-refs/rules.md`. A picker whose question or buttons are English on a Turkish run is a bug, not the contract. The host's own **Other** row is injected by the CLI and stays English on every run; nothing in the pipeline can localize it.
|
|
19
19
|
|
|
20
|
-
**Always English regardless of either field**: commit messages, PR
|
|
20
|
+
**Always English regardless of either field**: commit messages, PR title prefixes (`feat:`, `fix:`), branch names, code identifiers, file paths, `agent-state.json` values, `agent-log.md` payloads, reviewer/triage system prompts, and confirmation / error UI exposed by the CLI host. PR descriptions, Jira comments, GitHub issue comments and wiki/Confluence page **bodies** follow `outputLanguage` - they are written for a human reader, per the `rules.md` matrix.
|
|
21
21
|
|
|
22
22
|
**Follows outputLanguage (localized at install/toggle time)**: the slash-command picker `description` shown by the CLI host autocomplete. Repo and npm files always keep the English `description:`; files shipping a `description-tr:` line get swapped in the INSTALLED `~/.claude/commands/multi-agent/` tree by `localize-commands.mjs` (reversible via a `description-en:` sidecar). `/multi-agent:sync` restores English before mirroring back to the repo.
|
|
23
23
|
|
|
@@ -109,5 +109,5 @@ Render in the **new** outputLanguage:
|
|
|
109
109
|
|
|
110
110
|
- `setup.md` Step 0 - first-run language picker (asks only outputLanguage; promptLanguage seeded as `en`)
|
|
111
111
|
- `prefs.schema.json` - `global.promptLanguage` (fixed `"en"`) and `global.outputLanguage` definitions
|
|
112
|
-
- `phase-5-test.md`, `phase-6-commit.md` - interactive prompts follow the per-field matrix: `question` + `description` in `outputLanguage`, `
|
|
112
|
+
- `phase-5-test.md`, `phase-6-commit.md` - interactive prompts follow the per-field matrix: `question` + `label` + `description` in `outputLanguage`, `header` English
|
|
113
113
|
- `help.md` - reads outputLanguage to render its own help text
|
|
@@ -6,7 +6,7 @@ allowed-tools: Agent, Bash, Read, Write, Edit, Glob, Grep, TaskCreate, TaskUpdat
|
|
|
6
6
|
|
|
7
7
|
# multi-agent local - Full Pipeline, Local Branch
|
|
8
8
|
|
|
9
|
-
> **Language (read FIRST)**: Before any status output, read `prefs.global.outputLanguage` and render every conversational line in it. `AskUserQuestion`
|
|
9
|
+
> **Language (read FIRST)**: Before any status output, read `prefs.global.outputLanguage` and render every conversational line in it. `AskUserQuestion` renders its `question`, option `label`s and option `description`s in `outputLanguage`; only `header` stays English (<=12-char chip); external payload bodies follow `outputLanguage` too (identifiers, commit messages, branch names stay English). Full contract: `$HOME/.claude/multi-agent-refs/rules.md` "Language Application".
|
|
10
10
|
|
|
11
11
|
The full pipeline in normal mode (Plan Approval Gate + parallel review + triage included), running on the **current branch with no worktree**. Dedicated alias for the `multi-agent "task" --local` flag form. Phase 5 (User Test) is skipped because there is no worktree to check the change out from; the other seven phases all run.
|
|
12
12
|
|
|
@@ -9,7 +9,7 @@ allowed-tools: Agent, Bash, Read, Write, Edit, Glob, Grep, TaskCreate, TaskUpdat
|
|
|
9
9
|
|
|
10
10
|
**Input**: $ARGUMENTS
|
|
11
11
|
|
|
12
|
-
> **Language (read FIRST)**: Before any status output, read `prefs.global.outputLanguage` and render every conversational line in it. `AskUserQuestion`
|
|
12
|
+
> **Language (read FIRST)**: Before any status output, read `prefs.global.outputLanguage` and render every conversational line in it. `AskUserQuestion` renders its `question`, option `label`s and option `description`s in `outputLanguage`; only `header` stays English (<=12-char chip); external payload bodies follow `outputLanguage` too (identifiers, commit messages, branch names stay English). Full contract: `$HOME/.claude/multi-agent-refs/rules.md` "Language Application".
|
|
13
13
|
|
|
14
14
|
Run the full pipeline **without a worktree** and **with every confirmation skipped**. Phase 5 (User Test) does not run (no worktree to check out from, and no interaction), so 7 phases execute. The `autopilot + local` combination - vs `/multi-agent:autopilot` the only difference is no worktree (work stays on the current branch); vs `/multi-agent:local` the only difference is zero interaction.
|
|
15
15
|
|
|
@@ -27,12 +27,12 @@ audit trail and metrics corpus at the log root are always preserved.
|
|
|
27
27
|
2. **First confirmation** - native `AskUserQuestion` picker (no typed keyword),
|
|
28
28
|
in `outputLanguage`, including the dry-run counts:
|
|
29
29
|
- `question`: "Wipe the listed worktrees, branches, and counter?"
|
|
30
|
-
- `header`: "Purge" · `options
|
|
30
|
+
- `header`: "Purge" (English, <=12 chars) · `options` (label + description in `outputLanguage`; the names below are the option SEMANTICS, not strings to print): option 1 "Continue" - proceed to the final confirmation; option 2 "Cancel" - abort, change nothing
|
|
31
31
|
- **Cancel** → exit.
|
|
32
32
|
|
|
33
33
|
3. **Second confirmation** (paranoia gate) - a second `AskUserQuestion` picker:
|
|
34
34
|
- `question`: "This is irreversible. Permanently wipe every worktree, branch, and state now?" (`outputLanguage`)
|
|
35
|
-
- `header`: "Confirm" · `options
|
|
35
|
+
- `header`: "Confirm" (English, <=12 chars) · `options` (label + description in `outputLanguage`; the names below are the option SEMANTICS, not strings to print): option 1 "Purge permanently" - delete all worktrees, branches, and the counter; option 2 "Cancel" - abort, change nothing
|
|
36
36
|
- Anything other than **Purge permanently** → cancel.
|
|
37
37
|
|
|
38
38
|
4. **Remote branches** - ask once whether to delete the remote branches too;
|
|
@@ -6,7 +6,7 @@ allowed-tools: Agent, Bash, Read, Write, Edit, Glob, Grep, TaskCreate, TaskUpdat
|
|
|
6
6
|
|
|
7
7
|
# multi-agent resume-local - Take Existing Branch Work Through the Pipeline Tail
|
|
8
8
|
|
|
9
|
-
> **Language (read FIRST)**: Before any status output, read `prefs.global.outputLanguage` and render every conversational line in it. `AskUserQuestion`
|
|
9
|
+
> **Language (read FIRST)**: Before any status output, read `prefs.global.outputLanguage` and render every conversational line in it. `AskUserQuestion` renders its `question`, option `label`s and option `description`s in `outputLanguage`; only `header` stays English (<=12-char chip); external payload bodies follow `outputLanguage` too (identifiers, commit messages, branch names stay English). Full contract: `$HOME/.claude/multi-agent-refs/rules.md` "Language Application".
|
|
10
10
|
|
|
11
11
|
You already did the work locally - wrote code on the current branch and maybe tested it by hand, or committed it outside the pipeline entirely. (As of v14.0.0 a Short run reviews its own output, so this command is for work that had no pipeline run behind it, not a patch for a mode that skipped review.) `/multi-agent:resume-local` picks up from there and runs the **pipeline tail** over that existing local work in one command: parallel review, a build + test success gate, commit/push + PR, then the technical analysis and a **Jira comment with test scenarios**. It does NOT re-develop - Analysis / Planning / Dev (phases 1-3) are intentionally skipped; the diff already on the branch IS the input.
|
|
12
12
|
|
|
@@ -34,7 +34,7 @@ You already did the work locally - wrote code on the current branch and maybe
|
|
|
34
34
|
|
|
35
35
|
```
|
|
36
36
|
Phase 0: Init → project/branch detect, resolve base + diff (work-already-done), Jira id, state (NO worktree)
|
|
37
|
-
Phase 4: Review → deterministic gates + parallel review (Fable + Sonnet) + Fable triage
|
|
37
|
+
Phase 4: Review → deterministic gates + parallel review (Fable + Opus + Sonnet) + Fable triage
|
|
38
38
|
Phase 5: Build+Test → stack-aware build gate + run existing tests; SUCCESS required (automated, not the interactive user-test)
|
|
39
39
|
Phase 6: Commit → commit remaining local changes + push + open PR if none exists
|
|
40
40
|
Phase 7: Report → technical analysis + Jira comment with test scenarios (channels: Jira / PR / Confluence / Wiki)
|
|
@@ -52,10 +52,10 @@ Phases 1-3 (Analysis / Planning / Dev) are skipped by design - `ship` treats t
|
|
|
52
52
|
|
|
53
53
|
## Phase execution (reuse the existing phase contracts)
|
|
54
54
|
|
|
55
|
-
- **Phase 4 Review** - run per `$HOME/.claude/multi-agent-refs/phases/phase-4-review.md` against the resolved diff: deterministic gates (Step 1.x), stack-specific parallel reviewers (Fable + Sonnet on Claude Code; GPT + Opus + Sonnet on Copilot CLI), Fable triage → `triage.accepted`. Blocking/important accepted findings:
|
|
55
|
+
- **Phase 4 Review** - run per `$HOME/.claude/multi-agent-refs/phases/phase-4-review.md` against the resolved diff: deterministic gates (Step 1.x), stack-specific parallel reviewers (Fable + Opus + Sonnet on Claude Code; GPT + Opus + Sonnet on Copilot CLI), Fable triage → `triage.accepted`. Blocking/important accepted findings:
|
|
56
56
|
- interactive: present them and ask (`AskUserQuestion`) whether to fix now (loop back through a minimal Phase-3-style TDD fix) or proceed;
|
|
57
57
|
- `autopilot` (or `prefs.global.resumeLocal.autoFix == true`): auto-fix accepted blocking/important findings, then re-review the fix, before advancing.
|
|
58
|
-
- **Phase 5 Build+Test** - the **automated success gate** (this is what "build+test success" means here; the interactive device user-test is `/multi-agent:manual-test`). Stack-aware: build via `figma-config.build` (iOS scheme / Android gradle / detected backend/
|
|
58
|
+
- **Phase 5 Build+Test** - the **automated success gate** (this is what "build+test success" means here; the interactive device user-test is `/multi-agent:manual-test`). Stack-aware: build via `figma-config.build` (iOS scheme / Android gradle / detected backend/web build) and run the existing test suite if present (`swift test` / `xcodebuild test` / `./gradlew test` / `pytest` / `npm test` / `vitest`). Require success to advance; on failure, surface logs and (interactive) stop or (autopilot) attempt a bounded fix loop. **If the repo has no tests, report "no tests present" - never fabricate test results.**
|
|
59
59
|
- **Phase 6 Commit/PR** - per `$HOME/.claude/multi-agent-refs/phases/phase-6-commit.md`: stage + commit any remaining local changes with a conventional message (`{type}(scope): desc [{JIRA_KEY}-{id}]`), push, and open a PR **only if one does not already exist** for the branch. PR body per `$HOME/.claude/multi-agent-refs/rules.md "External System Outputs"` and `$HOME/.claude/rules/git-conventions.md` - `Ref: #N` / `Related: #N`, never `Closes/Fixes/Resolves`; NO AI/bot attribution anywhere.
|
|
60
60
|
- **Phase 7 Report** - per `$HOME/.claude/multi-agent-refs/phases/phase-7-report.md` + `channels.md`: produce the **technical analysis** and **test scenarios**, then post to the configured channels. Default content for `ship`: a Jira **comment** carrying the technical analysis + the test scenarios (and, when the PR was opened, the PR description). Every body runs through the humanizer; bot/tool/AI signatures are FORBIDDEN in comments.
|
|
61
61
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Run parallel review on a branch's diff or a Pull Request:
|
|
3
|
-
description-tr: "Bir branch diff'i veya Pull Request üzerinde paralel review koşar: Claude Code'da
|
|
2
|
+
description: "Run parallel review on a branch's diff or a Pull Request: 3 models on Claude Code (Fable + Opus + Sonnet), 3 models on Copilot CLI (GPT + Opus + Sonnet). On PR input, posts per-finding inline comments and sets approve/needs-work review state. Use when a branch diff or a pull request needs reviewing before it merges."
|
|
3
|
+
description-tr: "Bir branch diff'i veya Pull Request üzerinde paralel review koşar: Claude Code'da 3 model (Fable + Opus + Sonnet), Copilot CLI'da 3 model (GPT + Opus + Sonnet). PR girdisinde bulgu başına inline yorum atar ve approve/needs-work durumunu işaretler."
|
|
4
4
|
argument-hint: "[#N | repo#N | PR-URL | branch] - optional: PR by number/URL, repo+number, or local branch. Supports GitHub and Bitbucket Server URLs. If omitted (interactive), open GitHub + Bitbucket PRs are listed for multi-select; autopilot falls back to the current branch."
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -175,7 +175,7 @@ Scope note: a guide governs only files under its own directory - a guide found
|
|
|
175
175
|
|
|
176
176
|
### 3. Launch parallel reviewers - host-CLI dependent
|
|
177
177
|
|
|
178
|
-
**Claude Code (
|
|
178
|
+
**Claude Code (3 in parallel):**
|
|
179
179
|
- Agent 1: `claude-fable-5` → security + architecture
|
|
180
180
|
- Agent 2: `claude-sonnet-5` → general quality
|
|
181
181
|
|
|
@@ -242,18 +242,19 @@ Optional opt-out prompt (interactive mode only; autopilot skips and posts):
|
|
|
242
242
|
```
|
|
243
243
|
question (outputLanguage): "PR #{N} için review action gönderilsin mi?"
|
|
244
244
|
header (English): "Post review"
|
|
245
|
-
options:
|
|
246
|
-
-
|
|
247
|
-
|
|
248
|
-
|
|
245
|
+
options (label + description in outputLanguage; semantics, not literals):
|
|
246
|
+
- option 1 - "Post review": inline comments + Request changes when there are
|
|
247
|
+
findings, Approve when there are none
|
|
248
|
+
- option 2 - "Chat only": leave the PR untouched, the chat summary is enough
|
|
249
|
+
default: option 1
|
|
249
250
|
```
|
|
250
251
|
|
|
251
252
|
Defaults:
|
|
252
|
-
- Interactive mode: prompt with default
|
|
253
|
+
- Interactive mode: prompt with default option 1
|
|
253
254
|
- Autopilot mode: auto-post (no prompt)
|
|
254
255
|
- `--no-comment` / `--no-post` flag: skip the post entirely
|
|
255
256
|
|
|
256
|
-
If the user picks
|
|
257
|
+
If the user picks option 1 (post the review):
|
|
257
258
|
|
|
258
259
|
```bash
|
|
259
260
|
bash $HOME/.claude/lib/post-pr-review.sh "$TASK_ID"
|
|
@@ -16,7 +16,7 @@ Read `$HOME/.claude/multi-agent-refs/analysis/review.md` and execute it:
|
|
|
16
16
|
|
|
17
17
|
1. **Resolve** the document from a local path, a Confluence URL or `pageId`, or a Jira key. With no argument, offer the recent analyses from `~/Desktop/multiAgentAnalysis/` and from each selected repo's `analysis/`, newest first.
|
|
18
18
|
2. **Deterministic gates first**: `validate-analysis-doc.mjs` on the document, and `build-references.mjs --check` when the run's state JSON is available (`--state`, or a fresh analysis). Their output is reported verbatim, before any model reads the document. A finding a script already proves does not need an opinion.
|
|
19
|
-
3. **Parallel model review** against the rubric (buildability, evidence, spine, altitude, admitted gaps, contradiction), CLI-aware:
|
|
19
|
+
3. **Parallel model review** against the rubric (buildability, evidence, spine, altitude, admitted gaps, contradiction), CLI-aware: 3 models on Claude Code, 3 on Copilot CLI.
|
|
20
20
|
4. **Fable triage** into Blocker / Important / Suggestion, dropping duplicates and anything the document answers elsewhere.
|
|
21
21
|
5. **Report**, naming the profile it judged against and, explicitly, what was NOT checked.
|
|
22
22
|
6. **Output** on request only: chat (default), Confluence comment, Jira comment, or a `-review.md` beside the document.
|
|
@@ -24,7 +24,7 @@ Ask BEFORE anything else, so every subsequent setup prompt and the rest of the p
|
|
|
24
24
|
|
|
25
25
|
| Axis | What it controls | Configurable? |
|
|
26
26
|
|---|---|---|
|
|
27
|
-
| `promptLanguage` |
|
|
27
|
+
| `promptLanguage` | Picker chrome only: the `AskUserQuestion` `header` chip, host error UI, internal contract identifiers | **No - fixed to `en`.** The chip is capped at 12 chars, which most Turkish equivalents overflow. |
|
|
28
28
|
| `outputLanguage` | The assistant's non-interactive explanations, status updates, error messages, and pipeline-generated reports rendered to the user | Yes - set here and changeable later via `/multi-agent:language <en\|tr>` |
|
|
29
29
|
|
|
30
30
|
`promptLanguage` is seeded as `"en"` and never offered to the user. **External payloads always stay English** (commits, PR titles/bodies, Jira comments, wiki content, reviewer/triage prompts, agent-log.md).
|
|
@@ -53,21 +53,20 @@ Select (1-2):
|
|
|
53
53
|
|
|
54
54
|
From this point forward, every prompt in Steps 1-6 below follows the canonical
|
|
55
55
|
per-field matrix in `$HOME/.claude/multi-agent-refs/rules.md` ("Language Application"):
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
`question`, `label` and `description` render in `outputLanguage`; `header` stays
|
|
57
|
+
English. Wizard status and the post-setup summary follow `outputLanguage`. External
|
|
58
|
+
payloads remain English.
|
|
59
59
|
|
|
60
60
|
> This paragraph used to say every prompt renders in English "per the fixed
|
|
61
61
|
> `promptLanguage`", which contradicted the canonical matrix and produced
|
|
62
62
|
> half-English pickers on Turkish runs: `promptLanguage` governs only the button and
|
|
63
63
|
> chip chrome, never the question a user reads.
|
|
64
64
|
|
|
65
|
-
### Step 0.5 -
|
|
66
|
-
|
|
67
|
-
Before discovery, verify the platform's credential backend is available:
|
|
65
|
+
### Step 0.5 - Dependency check
|
|
68
66
|
|
|
69
67
|
```bash
|
|
70
68
|
~/.claude/lib/credential-store.sh doctor
|
|
69
|
+
command -v pdftotext >/dev/null 2>&1 || echo "pdftotext: MISSING"
|
|
71
70
|
```
|
|
72
71
|
|
|
73
72
|
| Output | Action |
|
|
@@ -76,6 +75,7 @@ Before discovery, verify the platform's credential backend is available:
|
|
|
76
75
|
| Linux: `secret-tool ✗ MISSING` | Prompt: `sudo apt install libsecret-tools` (Debian/Ubuntu) or `sudo dnf install libsecret` (Fedora). Re-run setup after install. |
|
|
77
76
|
| Windows: `CredentialManager ✗ MISSING` | Prompt: `Install-Module CredentialManager -Scope CurrentUser -Force` in an elevated PowerShell. Re-run setup. |
|
|
78
77
|
| Platform `unknown` | Halt - credential storage cannot proceed. |
|
|
78
|
+
| `pdftotext: MISSING` | Advisory. Print `brew install poppler` (or distro equivalent), continue. `.docx` needs nothing. |
|
|
79
79
|
|
|
80
80
|
### Credential Key Naming Rule
|
|
81
81
|
|
|
@@ -316,7 +316,7 @@ Expired / rejected token (401 / 403 mid-run) - the Expired-token decision from
|
|
|
316
316
|
Select:
|
|
317
317
|
```
|
|
318
318
|
|
|
319
|
-
Render `question` + `description` in `outputLanguage`; `
|
|
319
|
+
Render `question` + `label` + `description` in `outputLanguage`; `header` English. Names below are option semantics, not strings to print. The picked option is a choice, never the secret: the value enters via Step B clipboard.
|
|
320
320
|
|
|
321
321
|
- **Skip** (missing `[2]` / expired `[3]`) → skip semantics. During setup: `keychainMapping` stays `null`. During Phase 0 / mid-run: abort that service's contribution, warn and continue if non-critical, halt if critical (e.g. Jira token for Jira input).
|
|
322
322
|
- **Add now** / **Regenerate** → proceed to Step B (clipboard save). Regenerate reuses the same `{KEY_NAME}`.
|
|
@@ -835,6 +835,6 @@ Stack skills ship as versioned plugins in the `{owner}/multi-agent-plugins` mark
|
|
|
835
835
|
- `requirements.txt` / `pyproject.toml` / server `package.json` → `ai-backend-toolkit`
|
|
836
836
|
- **no clear marker → default `ai-ios-toolkit`**
|
|
837
837
|
`ai-common-toolkit@multi-agent-plugins` and `ai-analyst-toolkit@multi-agent-plugins` are always set `true` alongside the stack plugin: neither is stack-specific.
|
|
838
|
-
3. Report the enabled set. To change later, run `/multi-agent:stack <ios|android|
|
|
838
|
+
3. Report the enabled set. To change later, run `/multi-agent:stack <ios|android|web|backend|...>` in the repo. Pipeline Phase 1 auto-detects the stack for its own routing regardless of enablement.
|
|
839
839
|
|
|
840
840
|
The marketplace repo name (`multi-agent-plugins`) is generic; a different org points `{owner}` at its own fork - nothing in the pipeline is coupled to a specific account.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: "Select the active stack(s) for this repo by enabling the matching marketplace plugin(s) in .claude/settings.json. Multi-select: pass several stacks (ios backend) or pick them in the native picker. Use when a repo's stack changed or the wrong plugins are enabled for it."
|
|
3
3
|
description-tr: "Bu repo için aktif stack'leri seçer: eşleşen marketplace plugin'lerini .claude/settings.json'da etkinleştirir. Çoklu seçim: birden fazla stack yazılabilir (ios backend) ya da native picker'dan seçilir."
|
|
4
|
-
argument-hint: "[ios|android|frontend|
|
|
4
|
+
argument-hint: "[ios|android|web|frontend|backend|mobile|fullstack|all ...]"
|
|
5
5
|
allowed-tools: Bash, Read, Edit, Write, AskUserQuestion
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -22,8 +22,8 @@ This replaces the old `stack-swap.sh` mechanic that physically moved skill direc
|
|
|
22
22
|
/multi-agent:stack android # Compose toolkit + common
|
|
23
23
|
/multi-agent:stack mobile # alias: ios + android + common
|
|
24
24
|
/multi-agent:stack backend # Python / Node spec-driven toolkit + common
|
|
25
|
-
/multi-agent:stack
|
|
26
|
-
/multi-agent:stack fullstack # alias:
|
|
25
|
+
/multi-agent:stack web # React / TSX toolkit + common (alias: frontend)
|
|
26
|
+
/multi-agent:stack fullstack # alias: web + backend + common
|
|
27
27
|
/multi-agent:stack all # all four stack toolkits + common
|
|
28
28
|
```
|
|
29
29
|
|
|
@@ -33,7 +33,7 @@ This replaces the old `stack-swap.sh` mechanic that physically moved skill direc
|
|
|
33
33
|
|---|---|
|
|
34
34
|
| `ios` | `ai-common-toolkit`, `ai-analyst-toolkit`, `ai-ios-toolkit` |
|
|
35
35
|
| `android` | `ai-common-toolkit`, `ai-analyst-toolkit`, `ai-android-toolkit` |
|
|
36
|
-
| `
|
|
36
|
+
| `web` / `frontend` | `ai-common-toolkit`, `ai-analyst-toolkit`, `ai-frontend-toolkit` |
|
|
37
37
|
| `backend` | `ai-common-toolkit`, `ai-analyst-toolkit`, `ai-backend-toolkit` |
|
|
38
38
|
| `mobile` | common + `ai-ios-toolkit` + `ai-android-toolkit` |
|
|
39
39
|
| `fullstack` | common + `ai-frontend-toolkit` + `ai-backend-toolkit` |
|
|
@@ -46,10 +46,10 @@ Multiple args union their plugin sets: `ios backend` → common + iOS + backend.
|
|
|
46
46
|
1. **No arg → native multi-select picker.** Read `.claude/settings.json` (repo) + `~/.claude/settings.json` (global) to learn the current state, then ask with `AskUserQuestion` (`multiSelect: true`) - NEVER a numbered text menu:
|
|
47
47
|
- `question` (in `outputLanguage`): which stacks should be active in this repo, noting the currently enabled ones
|
|
48
48
|
- `header`: "Stacks" (English, UI contract)
|
|
49
|
-
- `options` (4): `ios` / `android` / `
|
|
50
|
-
- Map each selected label back to its canonical arg before step 2: the token before any parenthesis
|
|
49
|
+
- `options` (4): `ios` / `android` / `web` / `backend`, each `description` (in `outputLanguage`) naming the plugin it enables and marking the ones already enabled with "(currently on)" / "(şu an açık)"
|
|
50
|
+
- Map each selected label back to its canonical arg before step 2: the token before any parenthesis.
|
|
51
51
|
- Empty selection or cancel → **status mode**: print the currently enabled `@multi-agent-plugins` plugins and exit without modifying anything. Status mode never runs the Implementation block below - that block is enable-mode only.
|
|
52
|
-
2. **Arg(s) present → enable mode.** Accept multiple space-separated stacks. Resolve each through the alias table (`web
|
|
52
|
+
2. **Arg(s) present → enable mode.** Accept multiple space-separated stacks. Resolve each through the alias table (`frontend`→`web`, `mobile`→`ios android`, `fullstack`→`web backend`, `all`→every stack), union the plugin sets, then write the **current repo's** `.claude/settings.json`.
|
|
53
53
|
3. **Write rules:**
|
|
54
54
|
- every plugin in the union is set to `true`
|
|
55
55
|
- every stack toolkit **not** in the union is set to `false` (leave non-`@multi-agent-plugins` entries untouched)
|
|
@@ -74,7 +74,7 @@ COMMON="ai-common-toolkit@${MP}"
|
|
|
74
74
|
ANALYST="ai-analyst-toolkit@${MP}"
|
|
75
75
|
IOS="ai-ios-toolkit@${MP}"
|
|
76
76
|
ANDROID="ai-android-toolkit@${MP}"
|
|
77
|
-
|
|
77
|
+
WEB="ai-frontend-toolkit@${MP}"
|
|
78
78
|
BACKEND="ai-backend-toolkit@${MP}"
|
|
79
79
|
|
|
80
80
|
# Enable-mode only: with zero args the write rules below would set every stack
|
|
@@ -91,13 +91,12 @@ for ARG in "$@"; do
|
|
|
91
91
|
case "$ARG" in
|
|
92
92
|
ios) ON="$ON $IOS" ;;
|
|
93
93
|
android) ON="$ON $ANDROID" ;;
|
|
94
|
-
frontend
|
|
95
|
-
"frontend (web)") ON="$ON $FRONTEND" ;;
|
|
94
|
+
web|frontend) ON="$ON $WEB" ;;
|
|
96
95
|
backend) ON="$ON $BACKEND" ;;
|
|
97
96
|
mobile) ON="$ON $IOS $ANDROID" ;;
|
|
98
|
-
fullstack) ON="$ON $
|
|
99
|
-
all) ON="$ON $IOS $ANDROID $
|
|
100
|
-
*) echo "Unknown stack '$ARG'. One of: ios android mobile backend
|
|
97
|
+
fullstack) ON="$ON $WEB $BACKEND" ;;
|
|
98
|
+
all) ON="$ON $IOS $ANDROID $WEB $BACKEND" ;;
|
|
99
|
+
*) echo "Unknown stack '$ARG'. One of: ios android mobile backend web fullstack all"; exit 1 ;;
|
|
101
100
|
esac
|
|
102
101
|
done
|
|
103
102
|
```
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
#
|
|
7
7
|
# Usage:
|
|
8
8
|
# extract-conventions.sh <repo-path> <platform>
|
|
9
|
-
# Platform: ios | android | backend | frontend
|
|
9
|
+
# Platform: ios | android | backend | web ('frontend' accepted as the pre-rename alias)
|
|
10
10
|
#
|
|
11
11
|
# Output schema (per bucket):
|
|
12
12
|
# { pattern, example, confidence, evidenceFiles[], alternativeCandidates[] }
|
|
@@ -28,9 +28,10 @@ if [ ! -d "$REPO_PATH" ]; then
|
|
|
28
28
|
fi
|
|
29
29
|
|
|
30
30
|
case "$PLATFORM" in
|
|
31
|
-
|
|
31
|
+
frontend) PLATFORM=web ;;
|
|
32
|
+
ios|android|backend|web) ;;
|
|
32
33
|
*)
|
|
33
|
-
echo "extract-conventions: invalid platform: $PLATFORM (expected ios|android|backend|
|
|
34
|
+
echo "extract-conventions: invalid platform: $PLATFORM (expected ios|android|backend|web)" >&2
|
|
34
35
|
exit 1
|
|
35
36
|
;;
|
|
36
37
|
esac
|
|
@@ -100,7 +101,7 @@ scan_roots() {
|
|
|
100
101
|
[ -d "$REPO_PATH/$d" ] && roots+=("$REPO_PATH/$d")
|
|
101
102
|
done
|
|
102
103
|
;;
|
|
103
|
-
|
|
104
|
+
web)
|
|
104
105
|
for d in src app components features lib hooks pages; do
|
|
105
106
|
[ -d "$REPO_PATH/$d" ] && roots+=("$REPO_PATH/$d")
|
|
106
107
|
done
|
|
@@ -341,7 +342,7 @@ bucket_folder_structure() {
|
|
|
341
342
|
empty_bucket
|
|
342
343
|
fi
|
|
343
344
|
;;
|
|
344
|
-
|
|
345
|
+
web)
|
|
345
346
|
local feats
|
|
346
347
|
feats=$(run_find -type d -name 'features' 2>/dev/null | head -10)
|
|
347
348
|
if [ -z "$feats" ]; then
|
|
@@ -439,7 +440,7 @@ bucket_state_holder() {
|
|
|
439
440
|
backend)
|
|
440
441
|
empty_bucket
|
|
441
442
|
;;
|
|
442
|
-
|
|
443
|
+
web)
|
|
443
444
|
# Look for hooks (useXxx) or stores
|
|
444
445
|
local files
|
|
445
446
|
files=$(run_find -type f \( -name '*.ts' -o -name '*.tsx' -o -name '*.js' -o -name '*.jsx' \) 2>/dev/null || true)
|
|
@@ -480,7 +481,7 @@ bucket_view_naming() {
|
|
|
480
481
|
backend)
|
|
481
482
|
empty_bucket
|
|
482
483
|
;;
|
|
483
|
-
|
|
484
|
+
web)
|
|
484
485
|
local files
|
|
485
486
|
files=$(run_find -type f \( -name '*.tsx' -o -name '*.jsx' \) 2>/dev/null || true)
|
|
486
487
|
if [ -z "$files" ]; then empty_bucket; return; fi
|
|
@@ -522,7 +523,7 @@ bucket_navigator_naming() {
|
|
|
522
523
|
backend)
|
|
523
524
|
empty_bucket
|
|
524
525
|
;;
|
|
525
|
-
|
|
526
|
+
web)
|
|
526
527
|
empty_bucket
|
|
527
528
|
;;
|
|
528
529
|
esac
|
|
@@ -542,7 +543,7 @@ bucket_usecase_naming() {
|
|
|
542
543
|
backend)
|
|
543
544
|
emit_naming_bucket "*.py" "" "Service" "Handler"
|
|
544
545
|
;;
|
|
545
|
-
|
|
546
|
+
web)
|
|
546
547
|
# useFooQuery / useFooMutation as a proxy
|
|
547
548
|
local files cnt sample
|
|
548
549
|
files=$(run_find -type f \( -name '*.ts' -o -name '*.tsx' \) 2>/dev/null || true)
|
|
@@ -573,7 +574,7 @@ bucket_repository_naming() {
|
|
|
573
574
|
backend)
|
|
574
575
|
emit_naming_bucket "*.py" "" "Repository" "Dao"
|
|
575
576
|
;;
|
|
576
|
-
|
|
577
|
+
web)
|
|
577
578
|
emit_naming_bucket "*.ts" "" "Api" "Client"
|
|
578
579
|
;;
|
|
579
580
|
esac
|
|
@@ -593,7 +594,7 @@ bucket_dto_naming() {
|
|
|
593
594
|
backend)
|
|
594
595
|
emit_naming_bucket "*.py" "" "Response" "Request" "In" "Out"
|
|
595
596
|
;;
|
|
596
|
-
|
|
597
|
+
web)
|
|
597
598
|
emit_naming_bucket "*.ts" "" "Dto" "Response" "Request"
|
|
598
599
|
;;
|
|
599
600
|
esac
|
|
@@ -640,7 +641,7 @@ bucket_ui_state_model() {
|
|
|
640
641
|
empty_bucket
|
|
641
642
|
return
|
|
642
643
|
;;
|
|
643
|
-
|
|
644
|
+
web)
|
|
644
645
|
local hook_files
|
|
645
646
|
hook_files=$(run_find -type f \( -name 'use*.ts' -o -name 'use*.tsx' \) 2>/dev/null | head -50 || true)
|
|
646
647
|
if [ -z "$hook_files" ]; then empty_bucket; return; fi
|
|
@@ -689,7 +690,7 @@ bucket_test_method_naming() {
|
|
|
689
690
|
backend)
|
|
690
691
|
test_files=$(run_find -type f -name 'test_*.py' 2>/dev/null | head -20 || true)
|
|
691
692
|
;;
|
|
692
|
-
|
|
693
|
+
web)
|
|
693
694
|
test_files=$(run_find -type f \( -name '*.test.ts' -o -name '*.test.tsx' -o -name '*.spec.ts' -o -name '*.spec.tsx' \) 2>/dev/null | head -20 || true)
|
|
694
695
|
;;
|
|
695
696
|
esac
|
|
@@ -709,7 +710,7 @@ bucket_test_method_naming() {
|
|
|
709
710
|
backend)
|
|
710
711
|
underscore_count=$((underscore_count + $(count_matches -E '^def +test_[a-z0-9_]+' "$f")))
|
|
711
712
|
;;
|
|
712
|
-
|
|
713
|
+
web)
|
|
713
714
|
it_count=$((it_count + $(count_matches -E "(it|test)\\(['\"\`]" "$f")))
|
|
714
715
|
;;
|
|
715
716
|
esac
|
|
@@ -739,7 +740,7 @@ bucket_test_method_naming() {
|
|
|
739
740
|
empty_bucket
|
|
740
741
|
fi
|
|
741
742
|
;;
|
|
742
|
-
|
|
743
|
+
web)
|
|
743
744
|
if [ "$it_count" -gt 0 ]; then
|
|
744
745
|
emit_bucket "it/test sentence" "it('returns error when email invalid', ...)" "$(confidence_for "$it_count")" "$evidence_json" '["describe-it","test-only"]'
|
|
745
746
|
else
|
|
@@ -837,7 +838,7 @@ bucket_accessibility_identifier() {
|
|
|
837
838
|
empty_bucket
|
|
838
839
|
fi
|
|
839
840
|
;;
|
|
840
|
-
|
|
841
|
+
web)
|
|
841
842
|
local files ids
|
|
842
843
|
files=$(run_find -type f \( -name '*.tsx' -o -name '*.jsx' \) 2>/dev/null | head -100 || true)
|
|
843
844
|
if [ -z "$files" ]; then empty_bucket; return; fi
|
|
@@ -901,7 +902,7 @@ bucket_localization_key() {
|
|
|
901
902
|
;;
|
|
902
903
|
backend)
|
|
903
904
|
empty_bucket; return ;;
|
|
904
|
-
|
|
905
|
+
web)
|
|
905
906
|
local json_files
|
|
906
907
|
json_files=$(run_find -type f -path '*i18n*' -name '*.json' 2>/dev/null | head -5 || true)
|
|
907
908
|
if [ -n "$json_files" ]; then
|
|
@@ -1002,7 +1003,7 @@ bucket_di_registration() {
|
|
|
1002
1003
|
empty_bucket
|
|
1003
1004
|
fi
|
|
1004
1005
|
;;
|
|
1005
|
-
|
|
1006
|
+
web)
|
|
1006
1007
|
files=$(run_find -type f \( -name '*.tsx' -o -name '*.ts' \) 2>/dev/null || true)
|
|
1007
1008
|
if [ -z "$files" ]; then empty_bucket; return; fi
|
|
1008
1009
|
local context_count zustand_count hook_count
|