@mmerterden/multi-agent-pipeline 10.2.0 → 10.4.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 +46 -0
- package/README.md +7 -4
- package/docs/FIGMA_PIPELINE.md +12 -0
- package/docs/features.md +2 -0
- package/package.json +1 -1
- package/pipeline/commands/multi-agent/dev-local.md +2 -0
- package/pipeline/commands/multi-agent/finish.md +98 -0
- package/pipeline/commands/multi-agent/help.md +2 -0
- package/pipeline/commands/multi-agent/refs/cross-cli-contract.md +5 -4
- package/pipeline/commands/multi-agent/resume.md +2 -0
- package/pipeline/commands/multi-agent/sync.md +3 -3
- package/pipeline/skills/figma-android/README.md +3 -1
- package/pipeline/skills/figma-common/README.md +1 -1
- package/pipeline/skills/figma-common/figma-bottom-sheets/SKILL.md +17 -2
- package/pipeline/skills/figma-common/figma-evolve-component/SKILL.md +1 -1
- package/pipeline/skills/figma-common/figma-navigation/SKILL.md +15 -1
- package/pipeline/skills/figma-common/figma-overlays/SKILL.md +15 -1
- package/pipeline/skills/figma-common/figma-ui-patterns/patterns/animated-gradient-border.md +9 -5
- package/pipeline/skills/shared/core/multi-agent-finish/SKILL.md +47 -0
package/CHANGELOG.md
CHANGED
|
@@ -14,6 +14,52 @@ Internal file-layout changes that don't affect the slash-command surface are sti
|
|
|
14
14
|
|
|
15
15
|
---
|
|
16
16
|
|
|
17
|
+
## [10.4.0] - 2026-07-02
|
|
18
|
+
|
|
19
|
+
New `finish` command: run the pipeline tail over work you already did locally.
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
|
|
23
|
+
- **`/multi-agent:finish`** (`multi-agent-finish` on Copilot CLI). Takes the
|
|
24
|
+
current branch's local work (diff vs base + working tree) and runs the
|
|
25
|
+
pipeline **tail** in one command — Phase 4 Review → Phase 5 Build+Test success
|
|
26
|
+
gate → Phase 6 Commit/push/PR → Phase 7 technical analysis + a Jira comment
|
|
27
|
+
with test scenarios — **without re-developing** (phases 1-3 skipped). Works
|
|
28
|
+
after `dev-local`/`local` (which skip Review + Test) or after hand-coding /
|
|
29
|
+
hand-testing. Interactive and `autopilot` modes. Reuses the existing
|
|
30
|
+
`phase-4-review` / `phase-5-test` / `phase-6-commit` / `phase-7-report` /
|
|
31
|
+
`channels` contracts; distinct from `resume` (tracked task) and `review`/
|
|
32
|
+
`channels` (single-step). If the repo has no tests it reports "no tests
|
|
33
|
+
present" — never fabricates results.
|
|
34
|
+
- Command inventory 34 → 35 (`cross-cli-contract` §1, README counts, `help.md`
|
|
35
|
+
EN+TR, `sync.md` synced-command list); cross-refs added in `dev-local`/`resume`.
|
|
36
|
+
|
|
37
|
+
## [10.3.0] - 2026-07-02
|
|
38
|
+
|
|
39
|
+
Android (Jetpack Compose) parity for the interaction skills shipped in 10.2.0,
|
|
40
|
+
plus two fixes from a review pass. The cross-cutting integration adapters are
|
|
41
|
+
now genuinely dual-platform, honoring the figma-common "dispatched by both iOS
|
|
42
|
+
and Android" contract.
|
|
43
|
+
|
|
44
|
+
### Added
|
|
45
|
+
|
|
46
|
+
- **Android (Jetpack Compose) sections** in `figma-navigation`, `figma-overlays`,
|
|
47
|
+
and `figma-bottom-sheets`. Same emit-intent / caller-owns rules and the same
|
|
48
|
+
`figma-config` `ui.*` hooks; native-first per platform (Navigation Compose;
|
|
49
|
+
Snackbar / AlertDialog / Dialog + state-driven loading; `ModalBottomSheet` +
|
|
50
|
+
`rememberModalBottomSheetState`). The Android orchestrator uses the Compose
|
|
51
|
+
section, the iOS orchestrator the SwiftUI section. `figma-evolve-component`
|
|
52
|
+
wording made platform-neutral (SwiftUI or Compose).
|
|
53
|
+
|
|
54
|
+
### Fixed
|
|
55
|
+
|
|
56
|
+
- **`animated-gradient-border` reference snippet** now animates the
|
|
57
|
+
`AngularGradient(angle:)` on a static shape instead of `rotationEffect` on the
|
|
58
|
+
stroked rounded-rect (which spun the whole shape — glitchy corners).
|
|
59
|
+
- **Genericized the sheet corner-radius example token** (`.Radius.n12` →
|
|
60
|
+
`.CornerRadius.radius12`) so no app-specific token leaks into the generic
|
|
61
|
+
pipeline.
|
|
62
|
+
|
|
17
63
|
## [10.2.0] - 2026-07-02
|
|
18
64
|
|
|
19
65
|
Generic SwiftUI interaction coverage for the figma-to-swiftui pipeline. Three
|
package/README.md
CHANGED
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
|
|
12
12
|
| Surface | Count |
|
|
13
13
|
|---|---|
|
|
14
|
-
| Slash commands (colon-form `/multi-agent:*`) |
|
|
15
|
-
| Copilot skills (dash-form `multi-agent-*`) |
|
|
14
|
+
| Slash commands (colon-form `/multi-agent:*`) | 35 |
|
|
15
|
+
| Copilot skills (dash-form `multi-agent-*`) | 35 |
|
|
16
16
|
| Platforms (native: Claude Code, Copilot CLI · adapter: Cursor, Antigravity, VS Code Copilot Chat, Codex CLI) | 6 |
|
|
17
17
|
| Store-compliance skills (`apple-archive-compliance`, `google-play-compliance`) | 2 |
|
|
18
|
-
| Figma skills (iOS + Android + Common) |
|
|
18
|
+
| Figma skills (iOS + Android + Common) | 41 |
|
|
19
19
|
| External skill catalog (`shared/external/`) | 143 |
|
|
20
|
-
| Total `SKILL.md` files across all groups |
|
|
20
|
+
| Total `SKILL.md` files across all groups | 221 |
|
|
21
21
|
| Smoke suites | 108 |
|
|
22
22
|
| Golden-task fixtures (`pipeline/eval/golden-tasks/`) | 8 |
|
|
23
23
|
| Eval-triage fixtures | 11 |
|
|
@@ -154,6 +154,9 @@ slows down the install.
|
|
|
154
154
|
|
|
155
155
|
## What's new
|
|
156
156
|
|
|
157
|
+
- **v10.4.0** (2026-07-02) - New `/multi-agent:finish` command: continue already-done LOCAL work through the pipeline tail in one shot — parallel review → build+test success gate → commit/push/PR → technical analysis + a Jira comment with test scenarios, without re-developing (phases 1-3 skipped). Pairs with `dev-local`/`local` (which skip Review + Test) or with hand-coded/hand-tested changes. Command inventory 34 → 35.
|
|
158
|
+
- **v10.3.0** (2026-07-02) - Android (Jetpack Compose) parity for the 10.2.0 interaction skills: `figma-navigation` / `figma-overlays` / `figma-bottom-sheets` now carry both a SwiftUI and a Compose section (Navigation Compose; Snackbar/AlertDialog/Dialog + state-driven loading; `ModalBottomSheet`), same emit-intent rules and `ui.*` config hooks on both platforms. Plus a review pass: corrected the `animated-gradient-border` snippet (animate `AngularGradient(angle:)` on a static shape, not `rotationEffect`) and genericized the sheet corner-radius example token.
|
|
159
|
+
- **v10.2.0** (2026-07-02) - Generic SwiftUI interaction coverage for figma-to-swiftui: three new cross-cutting integration skills (`figma-navigation`, `figma-overlays`, `figma-bottom-sheets`) + a reconcile-and-extend workflow (`figma-evolve-component`), all native-SwiftUI-first with an optional per-project `ui.*` config hook (so the same capabilities work on any SwiftUI codebase, no app-specific coupling). Phase 3D dev detection (§1.5.4) and Phase 4 review both consume them; `figma-to-swiftui` accessibility reference enriched with the VoiceOver-minimalism decision tree; new `animated-gradient-border` UI pattern. Figma-common skills 27 → 31, total figma skills 37 → 41.
|
|
157
160
|
- **v10.1.0** (2026-06-20) - Fable 5 retired (no longer available): the five heavy agent personas plus Phase 1 / Phase 2 / Phase 4 reviewer-1 + triage and `--dev` fast mode now route to Opus (top available tier); fallback ladder is `opus -> sonnet`. Per-task cost guard (`costBudget`) now defaults on in warn mode. Token economy: Phase 4 shared cache prefix + single-repo diff cap, Phase 1 light Explore tier for small bugfixes, triage prior-art injection capped.
|
|
158
161
|
- **v10.0.0** (2026-06-12) - quality major driven by a 10-category self-audit + competitive sweep: validator gates wired into phases 1/2/4 (fails closed), Phase 3 code-simplifier diff-shrink pass, Phase 4 lesson memory loop, Phase 2 cross-artifact consistency gate, skill frontmatter linter (repaired 31 SKILL.md), installer `--dry-run` + unknown-flag rejection, timeout-guarded smoke runner, adapter family deduplicated (~490 lines), CI hardening (blocking lint, npm audit, shellcheck), tag-driven npm release automation, CHANGELOG split (310KB -> 40KB).
|
|
159
162
|
- **v9.10.2** (2026-06-11) - live per-phase token narration on completion; tracker mandates per-phase cost lines in the final report.
|
package/docs/FIGMA_PIPELINE.md
CHANGED
|
@@ -8,6 +8,8 @@ End-to-end guide for generating production-ready UI components from Figma design
|
|
|
8
8
|
- **Platform-agnostic orchestration** — classification happens once in Phase 0; the orchestrator picks the right code generator for iOS or Android based on `figmaConfig.project.platform`.
|
|
9
9
|
- **Multi-repo aware** — components span multiple repos (tokens in `common`, view in `components`, docs in `wiki`). The orchestrator sequences writes correctly.
|
|
10
10
|
- **Non-blocking side effects** — wiki generation + Jira sync run as augmentations; failures log and Phase 7 continues.
|
|
11
|
+
- **Cross-cutting integration skills** — Phase 3D detects content patterns (`figma-form-integration`, `figma-price-integration`, `figma-ui-patterns`) and interaction patterns (`figma-navigation`, `figma-overlays`, `figma-bottom-sheets`) and dispatches the matching skill. All are **native-SwiftUI-first**; a project's own navigation/overlay/sheet system is used only when `figmaConfig.ui.{navigationSystem,overlaySystem,sheetSystem}` declares one (absent → stock SwiftUI: `NavigationStack`, `.alert`/`.sheet(item:)`, `.presentationDetents`). Generic across SwiftUI codebases.
|
|
12
|
+
- **Evolve an existing component** — `figma-evolve-component` reconciles a shipped component against current Figma (drift-heal) and additively extends it for a new need, behind a mandatory human gate — distinct from a fresh build, `figma-mend` (rebuild), and `figma-fix` (review bug).
|
|
11
13
|
|
|
12
14
|
## How it runs
|
|
13
15
|
|
|
@@ -67,6 +69,16 @@ Minimum viable config:
|
|
|
67
69
|
|
|
68
70
|
Android projects swap the `build` section to `{ "gradleModule": ":components:button", "variant": "debug" }` and set `project.platform` to `"android"`.
|
|
69
71
|
|
|
72
|
+
**Optional `ui` block — UI interaction systems.** Consumed by the `figma-navigation` / `figma-overlays` / `figma-bottom-sheets` skills and Phase 4 review. Omit it (or set `mode: "native"`) and the pipeline generates stock SwiftUI (`NavigationStack`, `.alert`/`.sheet(item:)`, `.sheet`+`presentationDetents`). Set `mode: "custom"` to route to a project-supplied system by type name:
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
"ui": {
|
|
76
|
+
"navigationSystem": { "mode": "custom", "router": "AppRouter", "routeEnum": "AppRoute", "sceneType": "SceneContent" },
|
|
77
|
+
"overlaySystem": { "mode": "custom", "center": "OverlayCenter" },
|
|
78
|
+
"sheetSystem": { "mode": "custom", "brandedModifier": "bottomSheet", "detentType": "SheetDetentType" }
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
70
82
|
## The issue → Jira → wiki triad
|
|
71
83
|
|
|
72
84
|
When a GitHub issue triggers the pipeline and has no Jira link:
|
package/docs/features.md
CHANGED
|
@@ -238,6 +238,8 @@ Pipeline learns behavioral signals (feedback corrections, project constraints, e
|
|
|
238
238
|
|
|
239
239
|
Full component generation pipeline from a Figma URL. Generates `{Name}Configuration.swift`, `{Name}View.swift`, `{Name}+Modifiers.swift`, `{Name}.figma.swift`, `FIGMA.md` with variant matrix. 14-item pre-commit checklist covers design tokens, accessibility, tests, Code Connect.
|
|
240
240
|
|
|
241
|
+
Cross-cutting integration skills feed Phase 3D detection + Phase 4B implementation when the design triggers them — content: `figma-form-integration`, `figma-price-integration`, `figma-ui-patterns`; interaction: `figma-navigation`, `figma-overlays`, `figma-bottom-sheets`. Each is **native-SwiftUI-first** and reads project specifics (token namespaces, component paths, and UI systems) from `figma-config` — including the optional `ui.navigationSystem` / `ui.overlaySystem` / `ui.sheetSystem` hooks (absent → stock SwiftUI). So the same capabilities work on any SwiftUI codebase, not just one app. `figma-evolve-component` reconciles an existing component against current Figma (drift-heal) and additively extends it, behind a human gate.
|
|
242
|
+
|
|
241
243
|
### UI Bug Hunter + Audits
|
|
242
244
|
|
|
243
245
|
Automated visual testing and compliance audits via direct Bash (no MCP server dependency):
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mmerterden/multi-agent-pipeline",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.4.0",
|
|
4
4
|
"description": "8-phase AI development pipeline with full orchestration on Claude Code, Copilot CLI, Cursor, Antigravity, and VS Code Copilot Chat. Analysis, planning, TDD, CLI-aware parallel review with consensus surfacing + Opus triage, default-FAIL evidence gates, secret + intent guards, per-phase cost ledger, persistent learnings memory, wiki generation, commit automation. Token-preserving uninstall.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.js",
|
|
@@ -20,6 +20,8 @@ Phase 7: Report → Jira / Wiki + log + knowledge/memory
|
|
|
20
20
|
|
|
21
21
|
`--dev local` skips Phase 1 (Analysis), Phase 2 (Planning + Approval Gate), Phase 4 (Review), and Phase 5 (User Test - local/autopilot variants skip the interactive test gate). It differs from `--dev` on two axes: no git worktree is created (development happens directly on the current branch in `$PROJECT_ROOT`), and the interactive User Test phase is skipped.
|
|
22
22
|
|
|
23
|
+
> **Want the quality tail afterwards?** Since this mode skips Review + Test, run [`/multi-agent:finish`](./finish.md) on the same branch when you're done to add parallel review, a build+test success gate, PR, and a Jira technical-analysis + test-scenario comment - without re-developing.
|
|
24
|
+
|
|
23
25
|
## When to use it
|
|
24
26
|
|
|
25
27
|
- Quick bug fix or small feature - review overhead is unnecessary
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Continue already-done LOCAL work through the pipeline tail: Review → Build+Test → Commit/PR → Report (technical analysis + Jira test-scenario comment). No dev phase."
|
|
3
|
+
allowed-tools: Agent, Bash, Read, Write, Edit, Glob, Grep, TaskCreate, TaskUpdate, TaskList, TaskGet, AskUserQuestion, WebFetch, WebSearch, Skill
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# multi-agent finish - Ship Local Work Through the Pipeline Tail
|
|
7
|
+
|
|
8
|
+
> **Language (read FIRST)**: Before any status output, read `prefs.global.outputLanguage` and render every conversational line in it. `AskUserQuestion` and external payloads stay English. Full contract: `refs/rules.md` "Language Application".
|
|
9
|
+
|
|
10
|
+
You already did the work locally - wrote code on the current branch and maybe tested it by hand (or ran `/multi-agent:local` / `/multi-agent:dev-local`, which skip Review + Test). `/multi-agent:finish` 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.
|
|
11
|
+
|
|
12
|
+
## When to use it
|
|
13
|
+
|
|
14
|
+
- You ran `dev-local` / `local` (which skip Review + Test) and now want the full quality tail on the same branch.
|
|
15
|
+
- You hand-coded or hand-tested a change and want review + build/test + PR + Jira write-up without re-running dev.
|
|
16
|
+
- You want the "reviewed, built, tested, PR'd, documented on Jira" finish with a single command.
|
|
17
|
+
|
|
18
|
+
## When NOT to use it
|
|
19
|
+
|
|
20
|
+
- You haven't written the change yet - use `/multi-agent`, `/multi-agent:local`, or `/multi-agent:dev-local`.
|
|
21
|
+
- You only want the review, nothing else - use `/multi-agent:review`. Only the report/channels - `/multi-agent:channels`. Only device UI testing - `/multi-agent:test` / `/multi-agent:manual-test`.
|
|
22
|
+
|
|
23
|
+
## Input
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
/multi-agent:finish # current branch vs its base; resolve Jira id from branch name
|
|
27
|
+
/multi-agent:finish DIJITAL-12345 # bind to an explicit Jira id for the Phase 7 comment
|
|
28
|
+
/multi-agent:finish --base develop # override the base branch for the diff
|
|
29
|
+
/multi-agent:finish autopilot # no gate prompts: auto-fix blocking findings, auto-PR, auto-comment
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Pipeline
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
Phase 0: Init → project/branch detect, resolve base + diff (work-already-done), Jira id, state (NO worktree)
|
|
36
|
+
Phase 4: Review → deterministic gates + parallel review (Opus + Sonnet) + Opus triage
|
|
37
|
+
Phase 5: Build+Test → stack-aware build gate + run existing tests; SUCCESS required (automated, not the interactive user-test)
|
|
38
|
+
Phase 6: Commit → commit remaining local changes + push + open PR if none exists
|
|
39
|
+
Phase 7: Report → technical analysis + Jira comment with test scenarios (channels: Jira / PR / Confluence / Wiki)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Phases 1-3 (Analysis / Planning / Dev) are skipped by design - `finish` treats the current branch's local changes as the Phase 3 output.
|
|
43
|
+
|
|
44
|
+
## Phase 0 - Context resolution (finish-specific)
|
|
45
|
+
|
|
46
|
+
1. **Project + branch:** detect project (cwd), current branch (`git branch --show-current`). No worktree; work stays on the current branch.
|
|
47
|
+
2. **Base + diff:** resolve base branch in order: `--base <arg>` → `figma-config.project.baseBranch` → `develop` → the branch's upstream/merge-base. The **work under review** is `git diff <base>...HEAD` PLUS uncommitted working-tree changes (`git status`). Abort with a clear message if the diff is empty (`ERR: no local work to finish on <branch> vs <base>`).
|
|
48
|
+
3. **Task binding:** Jira id from the `--`/positional arg, else parse the branch name (`bugfix/DIJITAL-XXXX` / `feature/DIJITAL-XXXX`); `taskType` inferred from the diff (bugfix/feature/refactor/chore) for the report wording. GitHub issue `#N` from branch/arg when present.
|
|
49
|
+
4. **Prior state (optional):** if an `agent-state.json` / tracker-state exists for this branch (left by a prior `dev-local`/`local` run), load its analysis summary + Jira/issue binding to enrich the report; otherwise synthesize a minimal state over the diff. Never require a prior full-pipeline run.
|
|
50
|
+
5. Persist state under `.claude/logs/multi-agent/{project}/{taskId}/` (same as `--local`).
|
|
51
|
+
|
|
52
|
+
## Phase execution (reuse the existing phase contracts)
|
|
53
|
+
|
|
54
|
+
- **Phase 4 Review** — run per `refs/phases/phase-4-review.md` against the resolved diff: deterministic gates (Step 1.x), stack-specific parallel reviewers (Opus + Sonnet on Claude Code; +GPT on Copilot CLI), Opus triage → `triage.accepted`. Blocking/important accepted findings:
|
|
55
|
+
- interactive: present them and ask (`AskUserQuestion`) whether to fix now (loop back through a minimal Phase-3-style TDD fix) or proceed;
|
|
56
|
+
- `autopilot` (or `prefs.global.finish.autoFix == true`): auto-fix accepted blocking/important findings, then re-review the fix, before advancing.
|
|
57
|
+
- **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/frontend 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.**
|
|
58
|
+
- **Phase 6 Commit/PR** — per `refs/phases/phase-6-commit.md`: stage + commit any remaining local changes with a conventional message (`{type}(scope): desc [DIJITAL-{id}]`), push, and open a PR **only if one does not already exist** for the branch. PR body per `refs/pipeline-output-formatting` and `rules/git-conventions` — `Ref: #N` / `Related: #N`, never `Closes/Fixes/Resolves`; NO AI/bot attribution anywhere.
|
|
59
|
+
- **Phase 7 Report** — per `refs/phases/phase-7-report.md` + `channels.md`: produce the **technical analysis** and **test scenarios**, then post to the configured channels. Default content for `finish`: 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.
|
|
60
|
+
|
|
61
|
+
## Modes
|
|
62
|
+
|
|
63
|
+
- **interactive** (default): stops at the Phase 4 gate when there are blocking/important findings; asks before committing/PR when appropriate.
|
|
64
|
+
- **`autopilot`**: no prompts - auto-fix accepted blocking/important findings, auto-commit/push/PR, auto-post the Jira comment. Mirrors `local-autopilot`.
|
|
65
|
+
|
|
66
|
+
## Required: Phase Tracker Contract
|
|
67
|
+
|
|
68
|
+
**The phase tracker is mandatory.** Full spec: [`refs/tracker-contract.md`](./refs/tracker-contract.md). `finish` registers only its active phase set - `0:Init 4:Review 5:Build+Test 6:Commit 7:Report` (phases 1-3 are not part of the finish set; do not register tiles for them).
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# Phase 0, first shell call (every CLI):
|
|
72
|
+
bash $HOME/.claude/scripts/phase-tracker.sh init "$TASK_ID"
|
|
73
|
+
for p in "0:Init" "4:Review" "5:Build+Test" "6:Commit" "7:Report"; do
|
|
74
|
+
bash $HOME/.claude/scripts/phase-tracker.sh add "${p%%:*}" "${p#*:}"
|
|
75
|
+
done
|
|
76
|
+
bash $HOME/.claude/scripts/phase-tracker.sh update 0 in_progress
|
|
77
|
+
|
|
78
|
+
# Every phase boundary (every CLI):
|
|
79
|
+
bash $HOME/.claude/scripts/phase-tracker.sh update <N> in_progress|completed|failed|skipped
|
|
80
|
+
# After every LLM call (every CLI):
|
|
81
|
+
bash $HOME/.claude/scripts/phase-tracker.sh tokens <N> <in> <out>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Visual channel - Claude Code (native TaskList widget, required)
|
|
85
|
+
|
|
86
|
+
Register one tile per phase in **strict creation order** (`0 → 4 → 5 → 6 → 7`) BEFORE any TaskUpdate, capture each `taskId`, persist via `phase-tracker.sh meta <N> tasklist_id "<taskId>"`, then flip status with `TaskUpdate` at each boundary. Out-of-order TaskCreate scrambles the tile stack. Full contract: `refs/tracker-contract.md` "TaskCreate ordering (strict)".
|
|
87
|
+
|
|
88
|
+
### Visual channel - Copilot CLI / plain shell
|
|
89
|
+
|
|
90
|
+
No TaskList widget. After every state change call `bash $HOME/.claude/scripts/phase-tracker.sh render` (prints the bordered ANSI phase table as the last tool result). Do NOT call TaskCreate on these CLIs.
|
|
91
|
+
|
|
92
|
+
## Examples
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
/multi-agent:dev-local "DIJITAL-12345" # develop locally (Init→Dev→Commit→Report, no review/test)
|
|
96
|
+
# … you inspect / hand-test the change …
|
|
97
|
+
/multi-agent:finish # now: review + build/test + PR + Jira analysis & test scenarios
|
|
98
|
+
```
|
|
@@ -90,6 +90,7 @@ Dedicated commands (same as flags above):
|
|
|
90
90
|
/multi-agent:local-autopilot "task" = multi-agent "task" --local autopilot
|
|
91
91
|
/multi-agent:dev-local "task" = multi-agent "task" --dev --local
|
|
92
92
|
/multi-agent:dev-local-autopilot "task" = multi-agent "task" --dev --local autopilot
|
|
93
|
+
/multi-agent:finish [jira-id] [autopilot] Continue already-done LOCAL work: Review → Build+Test → PR → Jira analysis + test scenarios (no dev)
|
|
93
94
|
|
|
94
95
|
------------------------------------------------------------
|
|
95
96
|
|
|
@@ -296,6 +297,7 @@ Dedicated komutlar (yukarıdaki flag'lerin eşdeğeri):
|
|
|
296
297
|
/multi-agent:local-autopilot "task" = multi-agent "task" --local autopilot
|
|
297
298
|
/multi-agent:dev-local "task" = multi-agent "task" --dev --local
|
|
298
299
|
/multi-agent:dev-local-autopilot "task" = multi-agent "task" --dev --local autopilot
|
|
300
|
+
/multi-agent:finish [jira-id] [autopilot] Lokalde biten işi sürdür: Review → Build+Test → PR → Jira teknik analiz + test senaryoları (dev yok)
|
|
299
301
|
|
|
300
302
|
------------------------------------------------------------
|
|
301
303
|
|
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
## 1. Command Inventory (
|
|
9
|
+
## 1. Command Inventory (35 commands)
|
|
10
10
|
|
|
11
11
|
```
|
|
12
12
|
analysis, analysis-resolve, autopilot, build-optimize, channels, delete, dev,
|
|
13
|
-
dev-autopilot, dev-local, dev-local-autopilot, diff-explain, garbage-collect,
|
|
13
|
+
dev-autopilot, dev-local, dev-local-autopilot, diff-explain, finish, garbage-collect,
|
|
14
14
|
help, issue, jira, kill, language, local, local-autopilot, log, manual-test,
|
|
15
15
|
prune-logs, purge, refactor, resume, review, scan, search, setup, stack, status,
|
|
16
16
|
sync, test, update
|
|
@@ -21,6 +21,7 @@ Categories:
|
|
|
21
21
|
- **Interactive pickers** (single-purpose, not modes): `jira`, `issue`
|
|
22
22
|
- **Full 8-phase modes**: `autopilot`, `local`, `local-autopilot`
|
|
23
23
|
- **Fast modes** (Init -> Dev(Opus) -> Commit -> Report): `dev`, `dev-autopilot`, `dev-local`, `dev-local-autopilot`
|
|
24
|
+
- **Tail modes** (run the pipeline tail over already-done local work): `finish`
|
|
24
25
|
- **Ops commands** (one-shot, no worktree): `status`, `log`, `kill`, `purge`, `delete`, `resume`, `review`, `analysis`, `analysis-resolve`, `build-optimize`, `channels`, `scan`, `search`, `diff-explain`, `garbage-collect`, `prune-logs`
|
|
25
26
|
- **Meta-ops**: `setup`, `sync`, `update`, `help`, `refactor`, `test`, `stack`, `manual-test`, `language`
|
|
26
27
|
|
|
@@ -28,7 +29,7 @@ Categories:
|
|
|
28
29
|
|
|
29
30
|
### 1.1 Figma component subphase skills
|
|
30
31
|
|
|
31
|
-
In addition to the
|
|
32
|
+
In addition to the 35 top-level multi-agent commands, the figma-to-component pipeline ships platform-specific skills that multi-agent dispatches from Phase 3 (see `refs/component-dispatch.md`). The structure is **platform-parallel iOS + Android with a shared common pool**:
|
|
32
33
|
|
|
33
34
|
| Location | Skill count | Purpose |
|
|
34
35
|
|---|---|---|
|
|
@@ -310,7 +311,7 @@ For clipboard ops, callers still gate with `if command -v pbpaste >/dev/null; th
|
|
|
310
311
|
|
|
311
312
|
This contract is validated by:
|
|
312
313
|
|
|
313
|
-
- `smoke-cross-cli-behavior.sh` - asserts all
|
|
314
|
+
- `smoke-cross-cli-behavior.sh` - asserts all 35 commands behave identically, pulls from Section 2 (placeholder vocab), Section 5 (argument parsing), Section 6 (output formats); also regression-locks the 6-persona agent deployment
|
|
314
315
|
- `smoke-commands-skills-parity.sh` (50 assertions) - enforces colon-form command ↔ dash-form skill directory parity
|
|
315
316
|
- `smoke-compliance-skills.sh` (45 assertions) - enforces store-compliance skill catalog + 4 consumer wiring
|
|
316
317
|
- `smoke-personal-data.sh` - extended in 0.5.5 to treat deprecated placeholders (`{github-username}`, `{your-website}`, `{website-repo}`) as leaks; adds `mmerterden` to public-handle blocklist for generic docs
|
|
@@ -9,6 +9,8 @@ argument-hint: "[#id] - optional: task ID (e.g. #2). If omitted, the most rece
|
|
|
9
9
|
|
|
10
10
|
Resume a paused or failed task from the last successful phase.
|
|
11
11
|
|
|
12
|
+
> **Not the same as `/multi-agent:finish`.** `resume` continues a **tracked pipeline task** (needs its `agent-state.json`/worktree) from where it stopped. `/multi-agent:finish` takes **ad-hoc local work** on the current branch (no prior task required) and runs the pipeline tail — Review → Build+Test → PR → Jira report — over it.
|
|
13
|
+
|
|
12
14
|
## Steps
|
|
13
15
|
|
|
14
16
|
1. **Find the task** - parse `#N` from the argument, or pick the most recent worktree with `status != "done"`.
|
|
@@ -61,7 +61,7 @@ Run every step automatically:
|
|
|
61
61
|
Step 0: FIGMA_SYNC SKIP (deprecated - feedback_figma_source_deprecated)
|
|
62
62
|
Step 1: PLATFORM Detect macOS / Linux / Windows (Git Bash / WSL); export PLATFORM env
|
|
63
63
|
Step 1.5: DETECT Compare timestamps, find stale targets
|
|
64
|
-
Step 2: COPILOT Claude Code -> Copilot CLI (instructions +
|
|
64
|
+
Step 2: COPILOT Claude Code -> Copilot CLI (instructions + 35 sub-command skills)
|
|
65
65
|
Step 2a: CODEX Claude Code -> Codex CLI (global ~/.codex prompt + AGENTS.md + config.toml mcp)
|
|
66
66
|
- runs via `node pipeline/scripts/sync-adapters.mjs`, which fires the
|
|
67
67
|
codex adapter ONCE (global) when `~/.codex` exists on this machine
|
|
@@ -302,11 +302,11 @@ This step runs only on the Claude <-> Copilot axis. Cursor / Copilot Chat do not
|
|
|
302
302
|
|-------------|-------------|
|
|
303
303
|
| `~/.claude/commands/multi-agent/{cmd}.md` | `~/.copilot/skills/multi-agent-{cmd}/SKILL.md` |
|
|
304
304
|
|
|
305
|
-
**
|
|
305
|
+
**35 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
|
|
306
306
|
|
|
307
307
|
```
|
|
308
308
|
analysis, analysis-resolve, autopilot, build-optimize, channels, delete, dev,
|
|
309
|
-
dev-autopilot, dev-local, dev-local-autopilot, diff-explain, garbage-collect,
|
|
309
|
+
dev-autopilot, dev-local, dev-local-autopilot, diff-explain, finish, garbage-collect,
|
|
310
310
|
help, issue, jira, kill, language, local, local-autopilot, log, manual-test,
|
|
311
311
|
prune-logs, purge, refactor, resume, review, scan, search, setup, stack, status,
|
|
312
312
|
sync, test, update
|
|
@@ -16,7 +16,9 @@ Platform-specific skills for generating Jetpack Compose components from Figma de
|
|
|
16
16
|
|
|
17
17
|
## What's NOT here (yet)
|
|
18
18
|
|
|
19
|
-
The platform-**agnostic** skills - `figma-commit`, `figma-iterate`, `figma-issue`, `figma-review`, `figma-setup`, `figma-validate`, `figma-utility`, `figma-fix`, `figma-mend`, `figma-ui-patterns`, `figma-remote-mcp-auth`, `figma-cli-*`, `performance-*`, etc. - live under [`pipeline/skills/figma-common/`](../figma-common/) (WS-7b ✓). Both iOS and Android orchestrators dispatch there without duplication.
|
|
19
|
+
The platform-**agnostic** skills - `figma-commit`, `figma-iterate`, `figma-issue`, `figma-review`, `figma-setup`, `figma-validate`, `figma-utility`, `figma-fix`, `figma-mend`, `figma-evolve-component`, `figma-ui-patterns`, `figma-form-integration`, `figma-price-integration`, `figma-navigation`, `figma-overlays`, `figma-bottom-sheets`, `figma-remote-mcp-auth`, `figma-cli-*`, `performance-*`, etc. - live under [`pipeline/skills/figma-common/`](../figma-common/) (WS-7b ✓). Both iOS and Android orchestrators dispatch there without duplication.
|
|
20
|
+
|
|
21
|
+
The cross-cutting **integration adapters** (`figma-form-integration`, `figma-price-integration`, `figma-navigation`, `figma-overlays`, `figma-bottom-sheets`) carry both an iOS (SwiftUI) and an Android (Jetpack Compose) section - the Android orchestrator uses the Compose section; the same emit-intent / caller-owns rules and the `figma-config` `ui.*` hooks apply on both platforms.
|
|
20
22
|
|
|
21
23
|
## Routing
|
|
22
24
|
|
|
@@ -39,7 +39,7 @@ Shared skills that both `pipeline/skills/figma-ios/` (SwiftUI) and `pipeline/ski
|
|
|
39
39
|
- `figma-form-integration` - Form protocol adapter (shared UX)
|
|
40
40
|
- `figma-price-integration` - Price protocol adapter (shared UX)
|
|
41
41
|
|
|
42
|
-
**Cross-cutting interaction adapters (
|
|
42
|
+
**Cross-cutting interaction adapters (dual-platform: iOS SwiftUI + Android Jetpack Compose; native-first; project system via `figma-config` `ui.*`):**
|
|
43
43
|
|
|
44
44
|
- `figma-navigation` - Navigation pattern: headless Output vs self-route; native `NavigationStack` or `ui.navigationSystem`
|
|
45
45
|
- `figma-overlays` - Overlay pattern: toast/HUD/alert/data-modal; native `.alert`/`.sheet(item:)` or `ui.overlaySystem`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: figma-bottom-sheets
|
|
3
|
-
description: "Bottom-sheet / detent pattern integration for Figma-to-
|
|
3
|
+
description: "Bottom-sheet / detent pattern integration for Figma-to-UI components (iOS SwiftUI + Android Jetpack Compose) — half-sheets, drawers, pinned bottom CTAs, resizable pull-up panels, content-sized sheets, and multi-step in-sheet flows. Native by default (SwiftUI .sheet+presentationDetents; Compose ModalBottomSheet + rememberModalBottomSheetState); an optional project-supplied detent-sheet system when figma-config declares one. Reach for this when a design shows a bottom sheet, half-sheet, bottom drawer, snap points, a sticky footer button, or a wizard-in-a-sheet."
|
|
4
4
|
user-invocable: true
|
|
5
5
|
allowed-tools: Read, Glob, Grep
|
|
6
6
|
status: wip-v5
|
|
@@ -74,7 +74,7 @@ When `figma-config.json` declares:
|
|
|
74
74
|
"headlessModifiers": ["modalSheet", "dockedSheet", "expandableSheet", "detentNavigationSheet"],
|
|
75
75
|
"detentType": "SheetDetentType", // detent enum
|
|
76
76
|
"backdropType": "Backdrop", // backdrop enum
|
|
77
|
-
"cornerRadiusToken": ".
|
|
77
|
+
"cornerRadiusToken": ".CornerRadius.radius12" // example: your branded top-corner radius token
|
|
78
78
|
}}
|
|
79
79
|
```
|
|
80
80
|
apply the SAME rules via the project's engine (names from config, do NOT hardcode):
|
|
@@ -86,6 +86,21 @@ apply the SAME rules via the project's engine (names from config, do NOT hardcod
|
|
|
86
86
|
|
|
87
87
|
If `mode` is absent or `native`, use the native-first section.
|
|
88
88
|
|
|
89
|
+
## Android (Jetpack Compose)
|
|
90
|
+
|
|
91
|
+
Same rules, Compose vocabulary. Default is Material3; a project sheet engine is used only when `ui.sheetSystem.mode == "custom"`.
|
|
92
|
+
|
|
93
|
+
- **Half / expandable / drawer:** `ModalBottomSheet(onDismissRequest = { showSheet = false }, sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = false)) { Content() }`. The caller owns `var showSheet by remember` and the `SheetState`; the Figma-authored composable is the **content**.
|
|
94
|
+
- **Detents / snap points:** Material3 exposes partial + expanded (`skipPartiallyExpanded`, `SheetValue`); for finer snap points use an `AnchoredDraggable`-based sheet. Don't hard-code pixel heights - derive from content / fractions.
|
|
95
|
+
- **Content-sized:** let the content wrap-height; the sheet grows to content then scrolls (inner `Column`/`LazyColumn` with `verticalScroll`).
|
|
96
|
+
- **Pinned bottom CTA (part of the screen, not a sheet):** `Scaffold(bottomBar = { CTA() })` - reserves space, screen stays interactive. Not a `ModalBottomSheet`.
|
|
97
|
+
- **Multi-step in-sheet flow:** host a nested `NavHost` (or step state) inside the sheet content, resizing per step; each step is a headless composable emitting events (see `/figma-navigation`).
|
|
98
|
+
- **Overlays over the sheet:** show `Snackbar`/`AlertDialog` scoped to the sheet content (`/figma-overlays`), not the root.
|
|
99
|
+
|
|
100
|
+
**Config hook:** `ui.sheetSystem.mode == "custom"` → use the project's `{brandedModifier}` / headless composables + `{detentType}` / `{backdropType}` and radius from `{cornerRadiusToken}`, resolved from config.
|
|
101
|
+
|
|
102
|
+
Corner radius / grabber / insets from tokens (`MaterialTheme.shapes` / figma-config), not literals.
|
|
103
|
+
|
|
89
104
|
---
|
|
90
105
|
|
|
91
106
|
## Integration with Phase 3D
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: figma-evolve-component
|
|
3
|
-
description: "On-demand reconcile-and-extend for an ALREADY-implemented SwiftUI
|
|
3
|
+
description: "On-demand reconcile-and-extend for an ALREADY-implemented UI component (iOS SwiftUI or Android Jetpack Compose). Heals drift from current Figma (stale variants/props/structure, design-token drift, a detached/overridden deviation) AND extends the component non-destructively to cover a need the design can't express — always behind a mandatory human gate. Reach for this when an existing component drifted from its current design or doesn't cover a need. Not for building from scratch (figma-to-component / figma-mend) or fixing one review bug (figma-fix)."
|
|
4
4
|
user-invocable: true
|
|
5
5
|
argument-hint: <component | figma-url> [--report-only]
|
|
6
6
|
allowed-tools: Task, Read, Glob, Grep, Bash, Edit, Write, AskUserQuestion
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: figma-navigation
|
|
3
|
-
description: "Navigation pattern integration for Figma-to-SwiftUI
|
|
3
|
+
description: "Navigation pattern integration for Figma-to-UI components (iOS SwiftUI + Android Jetpack Compose). Guides how a component reaches other screens, tabs, or deep links without coupling to a router — headless screens that emit a typed Output/event, native NavigationStack (iOS) / Navigation Compose (Android) by default, an optional project-supplied navigation system when figma-config declares one. Reach for this when a design embeds a tab bar, nav bar / back button, a push/detail affordance, or a deep-link entry point."
|
|
4
4
|
user-invocable: true
|
|
5
5
|
allowed-tools: Read, Glob, Grep
|
|
6
6
|
status: wip-v5
|
|
@@ -89,6 +89,20 @@ then apply the SAME rules, but express them in the project's vocabulary resolved
|
|
|
89
89
|
|
|
90
90
|
If `mode` is absent or `native`, use the native-first section above. Resolve types via `tools/resource-utility` / repo grep only when the config points at real files.
|
|
91
91
|
|
|
92
|
+
## Android (Jetpack Compose)
|
|
93
|
+
|
|
94
|
+
Same rules, Compose vocabulary. Default is stock **Navigation Compose**; a project system is used only when `ui.navigationSystem.mode == "custom"`.
|
|
95
|
+
|
|
96
|
+
- **Push/pop within a flow:** caller owns `NavHostController` + `NavHost`; the composable emits events via lambdas (`onSelect: (Id) -> Unit`), never calls `navController.navigate(...)` itself. Prefer type-safe routes (`@Serializable` route objects, `navigation-compose` 2.8+).
|
|
97
|
+
- **Back:** system back / `navController.popBackStack()`; intercept only with `BackHandler { }` when the screen owns the gesture. A custom top-bar back emits `onBack` / calls the caller's pop.
|
|
98
|
+
- **Tabs:** state-hoisted selection (`var selected by rememberSaveable`) bound to a `NavigationBar`; the composable reads/writes the hoisted state, never a global.
|
|
99
|
+
- **Deep links:** `navDeepLink { uriPattern = ... }` on the destination, or the caller parses the URI → route and applies it to the same `NavController`. The composable never parses URIs.
|
|
100
|
+
- **Present another screen modally:** caller-owned `var showX by remember` → `Dialog`/`ModalBottomSheet` (see `/figma-bottom-sheets`).
|
|
101
|
+
|
|
102
|
+
**Config hook:** `ui.navigationSystem.mode == "custom"` → use the project's `{router}` / `{routeEnum}` (and a screen container if `{sceneType}` is set) resolved from config; cross-graph jumps go through the DI'd `{navigatorProtocol}`.
|
|
103
|
+
|
|
104
|
+
Tokens/theme via `MaterialTheme` + the project's figma-config token patterns.
|
|
105
|
+
|
|
92
106
|
---
|
|
93
107
|
|
|
94
108
|
## Integration with Phase 3D
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: figma-overlays
|
|
3
|
-
description: "Overlay pattern integration for Figma-to-
|
|
3
|
+
description: "Overlay pattern integration for Figma-to-UI components (iOS SwiftUI + Android Jetpack Compose) — toasts/snackbars, blocking loading HUDs, alert dialogs, and data-driven modal cards presented from anywhere without the component owning presentation. Native by default (SwiftUI .alert/.confirmationDialog/.overlay + ref-counted loading + .sheet; Compose Snackbar/AlertDialog/Dialog + state-driven loading); an optional project-supplied overlay center when figma-config declares one. Reach for this when a design shows a toast/snackbar, a spinner/HUD, an alert, or a modal card, or when giving post-action feedback (saved/deleted/error) from a view model."
|
|
4
4
|
user-invocable: true
|
|
5
5
|
allowed-tools: Read, Glob, Grep
|
|
6
6
|
status: wip-v5
|
|
@@ -81,6 +81,20 @@ apply the SAME rules via the project's center (names from config, do NOT hardcod
|
|
|
81
81
|
|
|
82
82
|
If `mode` is absent or `native`, use the native-first section.
|
|
83
83
|
|
|
84
|
+
## Android (Jetpack Compose)
|
|
85
|
+
|
|
86
|
+
Same rules, Compose vocabulary. Default is stock Compose/Material3; a project overlay system is used only when `ui.overlaySystem.mode == "custom"`.
|
|
87
|
+
|
|
88
|
+
- **Toast/snackbar:** `SnackbarHostState` hoisted at a `Scaffold(snackbarHost = { SnackbarHost(state) })`; the composable emits an intent and the caller calls `snackbarHostState.showSnackbar(...)` from a coroutine. (Prefer an in-app `Snackbar` over the platform `android.widget.Toast`.)
|
|
89
|
+
- **Loading:** a state-driven overlay — `if (uiState.isLoading) Box(Modifier.fillMaxSize()) { CircularProgressIndicator() }`; back the flag with a ref-count in the ViewModel + a min-show so it doesn't flash.
|
|
90
|
+
- **Alert:** `AlertDialog(onDismissRequest, confirmButton, dismissButton)` — data-driven from state, proper confirm/dismiss roles.
|
|
91
|
+
- **Modal card:** data-driven `Dialog { }` / `ModalBottomSheet { }` where a host maps the request value → a Material component (no arbitrary erased content passed through a "center").
|
|
92
|
+
- **From a ViewModel:** expose events (`SharedFlow`/`Channel`) or state; the composable collects and shows the overlay. Keep the VM UI-framework-free.
|
|
93
|
+
|
|
94
|
+
**Config hook:** `ui.overlaySystem.mode == "custom"` → inject/collect the project's `{center}` and render its Material host; keep it data-only.
|
|
95
|
+
|
|
96
|
+
Rich/interactive content stays a local composable (`Dialog`/`ModalBottomSheet` declared at the owning composable), not routed through a center.
|
|
97
|
+
|
|
84
98
|
---
|
|
85
99
|
|
|
86
100
|
## Integration with Phase 3D
|
|
@@ -35,7 +35,7 @@ A self-contained native-SwiftUI recipe (no external package):
|
|
|
35
35
|
|
|
36
36
|
1. **Overlay, don't replace.** Draw the stroke in an `.overlay` of a `RoundedRectangle` so the host keeps its own background/fill.
|
|
37
37
|
2. **Angular gradient stroked along the shape.** `RoundedRectangle(cornerRadius:).stroke(AngularGradient(...), lineWidth:)`. The angular gradient's rotation is driven by an animated angle so the bright spot travels the perimeter.
|
|
38
|
-
3. **Animatable progress 0→1
|
|
38
|
+
3. **Animatable progress 0→1 drives the gradient's `angle`.** Animate the `AngularGradient(angle:)` on a **static** shape — `.degrees(360 * progress)` — so only the bright band travels. Do NOT `.rotationEffect` the stroked shape (that spins the whole rounded-rect). Start in `.onAppear` with `withAnimation(.linear(duration:).repeatForever(autoreverses:false)) { progress = 1 }`.
|
|
39
39
|
4. **Halo shape** = the gradient stop distribution (a bright band with faded shoulders); keep the fade symmetric for the "snake" read.
|
|
40
40
|
5. **Static shortcut.** `isAnimated == false` → render the same stroke frozen (or a single-color stroke).
|
|
41
41
|
|
|
@@ -65,15 +65,19 @@ struct AnimatedGradientBorder: ViewModifier {
|
|
|
65
65
|
@State private var progress: CGFloat = 0
|
|
66
66
|
|
|
67
67
|
func body(content: Content) -> some View {
|
|
68
|
+
// Animate the AngularGradient's `angle` on a STATIC shape — the bright
|
|
69
|
+
// band sweeps the perimeter. (Do NOT rotationEffect the shape: that spins
|
|
70
|
+
// the whole rounded-rect, corners and all.)
|
|
68
71
|
content.overlay(
|
|
69
72
|
RoundedRectangle(cornerRadius: cornerRadius)
|
|
70
73
|
.stroke(
|
|
71
|
-
AngularGradient(
|
|
72
|
-
|
|
74
|
+
AngularGradient(
|
|
75
|
+
gradient: Gradient(colors: colors + [colors.first ?? .clear]),
|
|
76
|
+
center: .center,
|
|
77
|
+
angle: .degrees(isAnimated ? 360 * Double(progress) : 0)
|
|
78
|
+
),
|
|
73
79
|
lineWidth: lineWidth
|
|
74
80
|
)
|
|
75
|
-
.rotationEffect(.degrees(isAnimated ? 360 * Double(progress) : 0))
|
|
76
|
-
.mask(RoundedRectangle(cornerRadius: cornerRadius).stroke(lineWidth: lineWidth))
|
|
77
81
|
)
|
|
78
82
|
.onAppear {
|
|
79
83
|
guard isAnimated else { return }
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: multi-agent-finish
|
|
3
|
+
language: en
|
|
4
|
+
description: "Continue already-done LOCAL work through the pipeline tail: Review → Build+Test → Commit/PR → Report (technical analysis + Jira test-scenario comment). No dev phase."
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# multi-agent finish - Ship Local Work Through the Pipeline Tail
|
|
9
|
+
|
|
10
|
+
You already wrote (and maybe hand-tested) the change on the current branch - or ran `dev-local` / `local`, which skip Review + Test. `finish` picks up from there and runs the **pipeline tail** over that existing local work in one command, without re-developing.
|
|
11
|
+
|
|
12
|
+
## Pipeline
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
Phase 0: Init → project/branch detect, resolve base + diff (work already done), Jira id, state (NO worktree)
|
|
16
|
+
Phase 4: Review → deterministic gates + parallel review + Opus triage
|
|
17
|
+
Phase 5: Build+Test → stack-aware build + run existing tests; SUCCESS required (automated gate, not the interactive user-test)
|
|
18
|
+
Phase 6: Commit → commit remaining changes + push + open PR if none exists
|
|
19
|
+
Phase 7: Report → technical analysis + Jira comment with test scenarios (channels: Jira / PR / Confluence / Wiki)
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Phases 1-3 (Analysis / Planning / Dev) are skipped by design - the branch's local diff IS the input.
|
|
23
|
+
|
|
24
|
+
## When to use it
|
|
25
|
+
|
|
26
|
+
- After `dev-local` / `local` (which skip Review + Test) to run the full quality tail on the same branch.
|
|
27
|
+
- After hand-coding / hand-testing a change, to get review + build/test + PR + Jira write-up without re-running dev.
|
|
28
|
+
|
|
29
|
+
## When NOT to use it
|
|
30
|
+
|
|
31
|
+
- Change not written yet → `multi-agent` / `multi-agent:local` / `multi-agent:dev-local`.
|
|
32
|
+
- Only the review → `multi-agent:review`; only report/channels → `multi-agent:channels`; only device UI test → `multi-agent:test` / `multi-agent:manual-test`.
|
|
33
|
+
|
|
34
|
+
## Input
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
multi-agent finish # current branch vs base; Jira id from branch name
|
|
38
|
+
multi-agent finish DIJITAL-12345 # explicit Jira id for the Phase 7 comment
|
|
39
|
+
multi-agent finish --base develop # override base branch for the diff
|
|
40
|
+
multi-agent finish autopilot # no gate prompts: auto-fix, auto-PR, auto-comment
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Notes
|
|
44
|
+
|
|
45
|
+
- Build+Test is the automated success gate (not the interactive device user-test - that is `multi-agent:manual-test`). If the repo has no tests, it reports "no tests present" - never fabricates results.
|
|
46
|
+
- Commit/PR follows house rules: conventional message, `Ref: #N` (never Closes/Fixes), NO AI/bot attribution. PR opened only if one does not already exist.
|
|
47
|
+
- Full phase contract lives in the Claude Code command `commands/multi-agent/finish.md`; this skill is the Copilot-CLI counterpart.
|