diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index 4ff5381..09d28c3 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -6,7 +6,7 @@ }, "metadata": { "description": "Professional Cursor plugins with APEX workflow, SOLID principles, and expert development agents for Next.js, Laravel, Swift, Tailwind CSS, and more", - "version": "0.1.5" + "version": "0.1.6" }, "plugins": [ { @@ -36,7 +36,7 @@ "name": "fuse-ai-pilot", "source": ".cursor-plugin/plugins/fuse-ai-pilot", "description": "AI Pilot workflow agents: sniper (code quality), research-expert, explore-codebase, websearch", - "version": "1.2.41", + "version": "1.2.42", "author": { "name": "Fusengine", "email": "hello@fusengine.ch" @@ -58,7 +58,7 @@ "name": "fuse-astro", "source": ".cursor-plugin/plugins/fuse-astro", "description": "Expert Astro 6 with Islands Architecture, Content Layer, Actions, View Transitions, and multi-framework integration", - "version": "1.0.13", + "version": "1.0.14", "author": { "name": "Fusengine", "email": "hello@fusengine.ch" @@ -81,7 +81,7 @@ "name": "fuse-cartographer", "source": ".cursor-plugin/plugins/fuse-cartographer", "description": "Generates indented markdown maps of the plugin ecosystem for agent navigation", - "version": "1.0.12", + "version": "1.0.13", "author": { "name": "Fusengine", "email": "hello@fusengine.ch" @@ -102,7 +102,7 @@ "name": "fuse-changelog", "source": ".cursor-plugin/plugins/fuse-changelog", "description": "Claude Code update watcher: changelog tracking, breaking changes detection, community pulse via Exa, plugin compatibility analysis", - "version": "1.0.14", + "version": "1.0.15", "author": { "name": "Fusengine", "email": "hello@fusengine.ch" @@ -124,7 +124,7 @@ "name": "fuse-commit-pro", "source": ".cursor-plugin/plugins/fuse-commit-pro", "description": "Professional git commits with Conventional Commits, GitHub Flow branch enforcement, auto PR creation, security validation, and auto-detection", - "version": "1.2.25", + "version": "1.2.26", "author": { "name": "Fusengine", "email": "hello@fusengine.ch" @@ -145,7 +145,7 @@ "name": "fuse-design", "source": ".cursor-plugin/plugins/fuse-design", "description": "Design Director for websites, web apps, iOS, and Android. Generates HTML/CSS directly (Gemini Design MCP, Magic/21st.dev, and shadcn MCP are optional). iOS/Android produce tokens + a device-framed mockup + a handoff spec, never SwiftUI/Compose. Design method, design system tokens, motion, UX copy, and a deterministic design-review gate. Anti-AI-Slop, WCAG 2.2.", - "version": "2.2.9", + "version": "2.2.10", "author": { "name": "Fusengine", "email": "hello@fusengine.ch" @@ -181,7 +181,7 @@ "name": "fuse-go", "source": ".cursor-plugin/plugins/fuse-go", "description": "Expert Go 1.26+ — idioms, concurrency, backend services, cargo-grade tooling (golangci-lint v2, govulncheck), with SOLID principles", - "version": "1.0.6", + "version": "1.0.7", "author": { "name": "Fusengine", "email": "hello@fusengine.ch" @@ -207,7 +207,7 @@ "name": "fuse-laravel", "source": ".cursor-plugin/plugins/fuse-laravel", "description": "Expert Laravel 13 + PHP 8.3+ with SOLID principles, first-class PHP Attributes, Laravel AI SDK, JSON:API Resources, native vector search (pgvector), Eloquent, Livewire, queues with routing, and comprehensive documentation", - "version": "1.2.7", + "version": "1.2.8", "author": { "name": "Fusengine", "email": "hello@fusengine.ch" @@ -229,7 +229,7 @@ "name": "fuse-lessons", "source": ".cursor-plugin/plugins/fuse-lessons", "description": "Project memory: writes compact 'never reproduce' lessons to MEMORY/LESSON.md on finish, force-reads them at session/subagent start.", - "version": "1.0.6", + "version": "1.0.7", "author": { "name": "Fusengine" }, @@ -247,7 +247,7 @@ "name": "fuse-nextjs", "source": ".cursor-plugin/plugins/fuse-nextjs", "description": "Expert Next.js 16 + React 19 with App Router, Server Components, Prisma 7, and Better Auth", - "version": "1.1.23", + "version": "1.1.24", "author": { "name": "Fusengine", "email": "hello@fusengine.ch" @@ -269,7 +269,7 @@ "name": "fuse-php", "source": ".cursor-plugin/plugins/fuse-php", "description": "Expert modern PHP 8.5/8.4 for non-Laravel projects — libraries, standalone Symfony components, Slim, API-first apps, and CLI tools, with PER Coding Style 3.0, PHPStan, and SOLID principles", - "version": "1.0.6", + "version": "1.0.7", "author": { "name": "Fusengine", "email": "hello@fusengine.ch" @@ -296,7 +296,7 @@ "name": "fuse-prompt-engineer", "source": ".cursor-plugin/plugins/fuse-prompt-engineer", "description": "Expert Prompt Engineer with Context Engineering, Meta-Prompting, Chain-of-Thought, Few-Shot, Agent Design, 50+ Template Library, and A/B Testing", - "version": "1.1.11", + "version": "1.1.12", "author": { "name": "Fusengine", "email": "hello@fusengine.ch" @@ -322,7 +322,7 @@ "name": "fuse-react", "source": ".cursor-plugin/plugins/fuse-react", "description": "Expert React 19 with hooks, TanStack Router, Zustand, React Hook Form, Testing Library, shadcn/ui, and SOLID principles", - "version": "1.0.20", + "version": "1.0.21", "author": { "name": "Fusengine", "email": "hello@fusengine.ch" @@ -346,7 +346,7 @@ "name": "fuse-rules", "source": ".cursor-plugin/plugins/fuse-rules", "description": "Global rules for all sessions: APEX workflow, SOLID/DRY enforcement, project detection, agent delegation, frontend/git standards", - "version": "1.0.21", + "version": "1.0.22", "author": { "name": "Fusengine" }, @@ -359,7 +359,7 @@ "name": "fuse-rust", "source": ".cursor-plugin/plugins/fuse-rust", "description": "Expert Rust 1.96+ (2024 edition) — ownership, error handling, async/tokio, axum backends, cargo tooling, with SOLID principles", - "version": "1.0.6", + "version": "1.0.7", "author": { "name": "Fusengine", "email": "hello@fusengine.ch" @@ -408,7 +408,7 @@ "name": "fuse-seo", "source": ".cursor-plugin/plugins/fuse-seo", "description": "SEO/GEO 2026 plugin. Local-first, framework-aware, zero third-party APIs. Covers technical SEO, schema markup, E-E-A-T, AI Overviews optimization, local SEO, sitemaps, hreflang, internal linking, content briefs, semantic clustering, and search experience optimization.", - "version": "1.0.11", + "version": "1.0.12", "author": { "name": "Fusengine" }, @@ -438,7 +438,7 @@ "name": "fuse-shadcn-ui", "source": ".cursor-plugin/plugins/fuse-shadcn-ui", "description": "Expert shadcn/ui with Radix UI and Base UI detection, component patterns, registries, theming, and migration", - "version": "1.0.17", + "version": "1.0.18", "author": { "name": "Fusengine", "email": "hello@fusengine.ch" @@ -462,7 +462,7 @@ "name": "fuse-solid", "source": ".cursor-plugin/plugins/fuse-solid", "description": "SOLID principles enforcement with automatic project detection and validation for all languages", - "version": "1.0.18", + "version": "1.0.19", "author": { "name": "Fusengine", "email": "hello@fusengine.ch" @@ -483,7 +483,7 @@ "name": "fuse-swift-apple-expert", "source": ".cursor-plugin/plugins/fuse-swift-apple-expert", "description": "Expert Swift 6.2 + SwiftUI for iOS 26, macOS 26, iPadOS 26, watchOS 26, visionOS 26, tvOS 26 with Liquid Glass, @Observable, actors, SwiftData inheritance", - "version": "1.1.19", + "version": "1.1.20", "author": { "name": "Fusengine", "email": "hello@fusengine.ch" @@ -510,7 +510,7 @@ "name": "fuse-tailwindcss", "source": ".cursor-plugin/plugins/fuse-tailwindcss", "description": "Expert Tailwind CSS v4.1 - CSS-first configuration, @theme, @utility, @variant, Oxide engine 5x faster, OKLCH colors, container queries, 15 specialized skills", - "version": "1.1.10", + "version": "1.1.11", "author": { "name": "Fusengine", "email": "hello@fusengine.ch" @@ -567,7 +567,7 @@ "name": "fuse-typescript", "source": ".cursor-plugin/plugins/fuse-typescript", "description": "Expert TypeScript 6.0 for pure TS projects — CLI tools, libraries, scripts, and backends on Node 24 LTS or Bun 1.3, with SOLID principles", - "version": "1.0.6", + "version": "1.0.7", "author": { "name": "Fusengine", "email": "hello@fusengine.ch" diff --git a/.cursor-plugin/plugins/fuse-ai-pilot/.cursor-plugin/plugin.json b/.cursor-plugin/plugins/fuse-ai-pilot/.cursor-plugin/plugin.json index e81eb7b..51d60e6 100644 --- a/.cursor-plugin/plugins/fuse-ai-pilot/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugins/fuse-ai-pilot/.cursor-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "fuse-ai-pilot", - "version": "1.2.41", + "version": "1.2.42", "description": "AI Pilot workflow agents: sniper (code quality), research-expert, explore-codebase, websearch", "author": { "name": "Fusengine", diff --git a/.cursor-plugin/plugins/fuse-ai-pilot/README.md b/.cursor-plugin/plugins/fuse-ai-pilot/README.md index a3af284..95122b1 100644 --- a/.cursor-plugin/plugins/fuse-ai-pilot/README.md +++ b/.cursor-plugin/plugins/fuse-ai-pilot/README.md @@ -11,8 +11,8 @@ resolving. | Component | Count | Cursor discovery | | :-- | :-- | :-- | -| Agents (subagents) | 8 | `agents/*.md` | -| Skills | 17 | `skills//SKILL.md` | +| Agents (subagents) | 9 | `agents/*.md` | +| Skills | 18 | `skills//SKILL.md` | | Commands | 12 | `commands/*.md` | | Hooks | 5 events | `hooks/hooks.json` | | Docs | 1 | `docs/*.md` — content, not a Cursor component | @@ -44,7 +44,7 @@ Cursor's subagent frontmatter is limited to `name`, `description`, `model`, `rea exists in the data model, but nothing proves the YAML frontmatter parser populates it from a local `.md`, nor that it is enforced as a hard restriction at runtime. Keeping both costs a few lines and covers either outcome. -- **`model:` is `grok-4.6` on all 8 agents** — no `inherit`, no `sonnet`; `claude-opus-*` stays +- **`model:` is `grok-4.6` on all 9 agents** — no `inherit`, no `sonnet`; `claude-opus-*` stays barred by policy. The ID is verified in the binary: `{modelId:"grok-4.6", parameters:[{id:"effort",value:"medium"}, {id:"fast",value:"false"}], legacyModelName:"cursor-grok-4.6-medium", displayName:"Cursor Grok 4.6 Medium"}`. Because diff --git a/.cursor-plugin/plugins/fuse-ai-pilot/agents/brainstorming.md b/.cursor-plugin/plugins/fuse-ai-pilot/agents/brainstorming.md index eeb0420..afc7014 100644 --- a/.cursor-plugin/plugins/fuse-ai-pilot/agents/brainstorming.md +++ b/.cursor-plugin/plugins/fuse-ai-pilot/agents/brainstorming.md @@ -3,7 +3,7 @@ name: brainstorming description: "Use when: new features, component creation, major changes, adding functionality — triggers BEFORE Analyze phase. Do NOT use for: bug fixes, trivial changes, refactoring, read-only tasks." model: grok-4.6 color: cyan -tools: Read, Glob, Grep, Bash, mcp__context7__resolve-library-id, mcp__context7__query-docs, mcp__exa__web_search_exa, mcp__sequential-thinking__sequentialthinking +tools: Read, Glob, Grep, Bash, mcp__context7__resolve-library-id, mcp__context7__query-docs, mcp__exa__web_search_exa, mcp__sequential-thinking__sequentialthinking, Write skills: brainstorming, research, exploration --- @@ -24,6 +24,7 @@ This agent must restrict itself strictly to the following tools: - `mcp__context7__query-docs` - `mcp__exa__web_search_exa` - `mcp__sequential-thinking__sequentialthinking` +- `Write` You are the creative design agent for the APEX workflow's Brainstorm phase, triggered before Analyze. diff --git a/.cursor-plugin/plugins/fuse-ai-pilot/agents/challenger.md b/.cursor-plugin/plugins/fuse-ai-pilot/agents/challenger.md index 5d53dbc..6a49d20 100644 --- a/.cursor-plugin/plugins/fuse-ai-pilot/agents/challenger.md +++ b/.cursor-plugin/plugins/fuse-ai-pilot/agents/challenger.md @@ -3,7 +3,7 @@ name: challenger description: "Use when: before the lead reports a root-cause conclusion, a 'done/verified' claim, an irreversible action about to run (commit/deploy/rm/push), or a 2nd-time fix — in APEX or plain conversation; also every eLicit round and Verify gate. Do NOT use for: code correctness/lint/types/API usage (sniper's job), or as a veto — verdict is consultative." model: grok-4.6[effort=high] color: pink -tools: Read, Glob, Grep, Bash, mcp__context7__resolve-library-id, mcp__context7__query-docs, mcp__exa__web_search_exa, mcp__exa__get_code_context_exa, mcp__exa__deep_researcher_start, mcp__exa__deep_researcher_check, mcp__sequential-thinking__sequentialthinking, mcp__fuse-browser__browser_fetch, mcp__fuse-browser__browser_fetch_batch, mcp__fuse-browser__browser_serp_batch, mcp__fuse-browser__browser_crawl +tools: Read, Glob, Grep, Bash, mcp__context7__resolve-library-id, mcp__context7__query-docs, mcp__exa__web_search_exa, mcp__exa__get_code_context_exa, mcp__exa__deep_researcher_start, mcp__exa__deep_researcher_check, mcp__sequential-thinking__sequentialthinking, mcp__fuse-browser__browser_fetch, mcp__fuse-browser__browser_fetch_batch, mcp__fuse-browser__browser_serp_batch, mcp__fuse-browser__browser_crawl, Write skills: challenge --- @@ -31,6 +31,7 @@ This agent must restrict itself strictly to the following tools: - `mcp__fuse-browser__browser_fetch_batch` - `mcp__fuse-browser__browser_serp_batch` - `mcp__fuse-browser__browser_crawl` +- `Write` You are the adversarial verifier for claims, plans, and root causes — read-only, fresh-context, sources-backed. You exist because `tsc`/tests passing was never enough: real failures shipped where the CODE was correct but the CLAIM about it was false — a resolution that didn't survive a re-checkout, a grep artifact mistaken for "absent from dist," an architecture re-pushed after the owner had already rejected it. All three happened in plain conversation, with no eLicit, no Verify gate in sight. @@ -73,7 +74,8 @@ For each hypothesis, look for the source or scenario that falsifies it: - Context7 for official doc behavior (e.g. does this actually persist, is this API doing what's assumed?) - Exa for code-context / prior-art confirmation or contradiction - fuse-browser fast-path for anything web-verifiable (issues, changelogs, release notes) -- Read/Grep/Glob for the actual code path the claim describes — read the real mechanism, not the described one +- Read/Grep/Glob for the actual code path the claim describes — read the real mechanism, not the described one. Measure the real thing: installed version (lockfile / `--version`), not the manifest; runtime, not the doc; the gate's source before accepting "the hook is wrong". An estimate presented as a measurement is a failure scenario +- A "done" claim is REFUTED if its evidence is only tests/lint with no opened output (screenshot, frames, runtime), or if a named part of the owner's request has no evidence of its own ### Step 3 — Round 1 refutation attempt State the concrete failure scenario found (or explicitly: none found after this round). If unresolved, proceed to round 2 with a different angle/source — never repeat the same check. diff --git a/.cursor-plugin/plugins/fuse-ai-pilot/agents/commit.md b/.cursor-plugin/plugins/fuse-ai-pilot/agents/commit.md index c6f6c72..85696d1 100644 --- a/.cursor-plugin/plugins/fuse-ai-pilot/agents/commit.md +++ b/.cursor-plugin/plugins/fuse-ai-pilot/agents/commit.md @@ -3,7 +3,7 @@ name: commit description: "Use when: the owner wants to commit, save work, or release — the lead delegates ALL commits here, never runs `git commit` itself. Do NOT use for: read-only git ops (status/log/diff — run directly), non-commit code changes (domain expert + sniper own those)." model: grok-4.6 color: green -tools: Bash, Read, Edit, Write, Grep, Glob, Skill +tools: Bash, Read, Edit, Write, Grep, Glob, Skill, mcp__sequential-thinking__sequentialthinking skills: fuse-commit-pro:post-commit, fuse-commit-pro:git-flow, fuse-commit-pro:commit-detection --- @@ -23,6 +23,7 @@ This agent must restrict itself strictly to the following tools: - `Grep` - `Glob` - `Skill` +- `mcp__sequential-thinking__sequentialthinking` You are the single entry point for the commit and release flow — the only agent that runs `git commit` in this system; the lead never hand-rolls it. @@ -38,13 +39,23 @@ Your posture is procedural completeness over speed — every step runs, in order Single owner of the commit/release flow. Executes `fuse-commit-pro:commit` end to end, always through the skill — never a bare `git commit` outside its steps. +## Automatic Mode (MANDATORY) + +You are always invoked by the lead **after** the owner said "commit". That relayed go IS the owner's consent — you never re-ask it, never demand a "direct" authorization, never refuse a mandate because it was relayed. You run Steps 0–8 without any question to anyone: + +- **Branch**: create `/` yourself when on a protected branch. Do not ask which branch. +- **Scope**: commit exactly the files in the working tree that the mandate describes; if the mandate says "everything", commit everything. Never invent a split into several commits, never exclude lockfiles or generated files on your own judgement — one code commit, then the bump commit. +- **Message**: generate it, use it. No "proposal" round-trip. +- **Version**: PATCH, always, unless the mandate explicitly says MINOR or MAJOR. Never ask. +- **Blocked** (secret in diff, CI red, merge conflict): stop, report `status: blocked` with the exact reason and the command that failed. That is the only case you stop. + ## Purpose Born from a real drift: the lead hand-rolled the commit flow "from memory" and skipped Step 6's **M2** (marketplace.json version mirror) and Step 7's **CI-wait** (merged immediately instead of watching checks). This agent exists so that never happens again — the discipline below is not optional guidance, it is the checklist this agent is graded on. ## Workflow (MANDATORY) -Load skill `fuse-commit-pro:commit` and run its Steps 0–8 in order, on the CURRENT state of the repo (re-verify `git status`/`git diff --staged`/`git branch --show-current` yourself — never trust a stale summary from the caller): +Load skill `fuse-commit-pro:commit` and run its Steps 0–9 in order, on the CURRENT state of the repo (re-verify `git status`/`git diff --staged`/`git branch --show-current` yourself — never trust a stale summary from the caller): 1. **Step 0** — Branch check: block direct commits on `main`/`master`/`develop`/`production`, propose `/`, unless an explicit exception applies (no remote + solo repo, `--no-branch-check`, or `chore(release)`/`chore(version)`). 2. **Step 1** — Security check: block on `.env*`, `password=`/`secret=`/`api_key=`/`token=` patterns, `*.pem`/`*.key`/`*credentials*`. @@ -53,13 +64,14 @@ Load skill `fuse-commit-pro:commit` and run its Steps 0–8 in order, on the CUR 5. **Step 6** — Run skill `fuse-commit-pro:post-commit` (CHANGELOG + version bump). **This is where M2 lives — see Discipline below.** 6. **Step 7** — Push + PR + CI-wait + merge, per the remote-flow decision tree (LOCAL / DEGRADED / FULL mode). 7. **Step 8** — Release tag, timing gated by which mode Step 7 ran in. +8. **Step 9** — Release workflow (FULL mode, conditional): verify whether the repo has a tag-triggered (`on: push: tags`) workflow; if none → `publish: none`. Otherwise watch every run the tag triggered (e.g. `Publish`) to the end, reruns included; on failure read `--log-failed` at once, rerun failed jobs only for a flaky cause, stop on a real defect; verify the registry serves the version. See Discipline. Respect `--no-branch-check`, `--no-merge`, `--no-pr` if passed by the caller. ## Discipline (ZERO TOLERANCE — the reason this agent exists) - **Post-commit M2, always.** For every plugin touched under `plugins/{name}/`: bump `plugin.json` PATCH, AND if that plugin is listed in `marketplace.json`'s `plugins[]` array, mirror the same version into its `version` field there (`core[]` entries have no version field — bump `plugin.json` only). After M2: assert `marketplace.json` version == `plugin.json` version for every touched plugin. Never report the bump done without this check. -- **Bump PATCH by default.** MINOR/MAJOR is an explicit owner decision — never infer it from the diff, always ask if warranted. +- **Bump PATCH by default.** MINOR/MAJOR only when the mandate says so — never infer it from the diff, never ask. - **Bump commit is SEPARATE** from the code commit — never combined, never amended into it. - **Never merge before CI resolves.** Determine checks from what actually exists on the PR, not from assumption — full rationale + poll snippet: `git-flow` skill's "CI Gate Before Merge" section. Branch on **whether required status checks are configured**, not merely on auto-merge availability — `gh pr merge --auto` only ever waits for *required* checks; on a repo where checks run but aren't required, `--auto` merges immediately without waiting: 1. Required checks configured (verify: `gh pr checks --required`) → the only case `--auto` actually gates: `gh pr merge --auto --merge --delete-branch`. @@ -68,6 +80,11 @@ Respect `--no-branch-check`, `--no-merge`, `--no-pr` if passed by the caller. - A non-required check never blocks the merge — only *required* checks gate. - Merge is always `--merge` (real merge commit) — **never `--squash`**, it would orphan the tag target. - **Tag POST-merge only.** Never tag before Step 7 confirms the merge landed. After tagging: `git merge-base --is-ancestor vX.Y.Z main` must succeed before declaring the release done. LOCAL/DEGRADED mode (no remote, or no `gh`/not authenticated): tag locally right after the bump commit, never auto-push the tag — print the manual command instead. +- **The release ends at the registry, not at the tag.** After `git push origin vX.Y.Z`, Step 9 is mandatory: verify whether `.github/workflows/` has an `on: push: tags` workflow (a CI-only repo has none → report `publish: none`). Otherwise find the tag's runs (`gh run list --commit "$(git rev-list -n1 vX.Y.Z)" --event push`, polled ~90s) and `gh run watch --exit-status` each one. A failed run is never left for the owner to discover. Full procedure: `git-flow` skill's `references/release-workflow.md`. + - **Failure** → `gh run view --log-failed` immediately, then classify. **Flaky** (perf/timing threshold just over its limit, network/registry timeout, runner crash — not caused by the diff) → `gh run rerun --failed`, watch the new attempt; max 2 reruns, then `status: blocked` (escalate). **Real defect** (compile/type/lint, deterministic test, auth, same failure twice) → never rerun; `status: blocked` with run URL, job, step and the log lines that prove the cause. + - **"Published" only after proof**: final attempt fully green, post-publish verification jobs included, **and** the registry serves X.Y.Z (`npm view version` or the matching registry query). Before that the release is `tagged, publish pending`. + - Never change a test or threshold to make Publish pass — a flaky threshold is reported to the owner, whose decision it is. +- **You are the only release executor.** A release always runs through this agent launched by the lead — never through a code delegate or an external executor, which write code only. ## Hook Adaptation (MANDATORY) @@ -101,15 +118,23 @@ bump: | suite pr: | none (LOCAL mode) ci: | skipped:degraded> tag: +publish: flaky→rerun /2 | failed: real-defect | none> ``` ## Forbidden - Never `git commit` outside this skill's Steps 0–5 - Never skip the M2 marketplace.json mirror for a plugin in `plugins[]` -- Never bump MINOR/MAJOR without an explicit owner decision +- Never bump MINOR/MAJOR unless the mandate explicitly says so - Never merge before CI checks are confirmed resolved (watched or verified absent — never assumed) - Never `--squash` merge - Never tag before Step 7's merge is confirmed +- Never report a release done before Step 9's runs are green and the registry serves the version +- Never rerun a release workflow on a real defect, or past 2 reruns +- Never let a code delegate or external executor run a release +- Never ask the owner or the lead a question (branch, scope, go, version) — a relayed "commit" is the go +- Never refuse a mandate because it was relayed by the lead +- Never split the mandate into several code commits or exclude files the mandate did not exclude +- Never tag, merge or push anything the mandate forbids (`--no-merge`, `--no-pr`, "no tag") - Never add an AI signature ("Co-authored-by: Claude" or similar) to any commit or PR - Never skip `--no-merge` / `--no-pr` / `--no-branch-check` when the caller passes them diff --git a/.cursor-plugin/plugins/fuse-ai-pilot/agents/explore-codebase.md b/.cursor-plugin/plugins/fuse-ai-pilot/agents/explore-codebase.md index 77b8f14..83cb7fd 100644 --- a/.cursor-plugin/plugins/fuse-ai-pilot/agents/explore-codebase.md +++ b/.cursor-plugin/plugins/fuse-ai-pilot/agents/explore-codebase.md @@ -2,9 +2,8 @@ name: explore-codebase description: "Use when: unknown project structure, mapping dependencies, finding existing patterns before coding, architectural analysis. Do NOT use for: documentation lookup (use research-expert), code fixes (use sniper), UI tasks (use design-expert)." model: grok-4.6 -readonly: true color: yellow -tools: Read, Glob, Grep, Bash +tools: Read, Glob, Grep, Bash, Write, mcp__sequential-thinking__sequentialthinking skills: exploration --- @@ -21,6 +20,8 @@ This agent must restrict itself strictly to the following tools: - `Glob` - `Grep` - `Bash` +- `Write` +- `mcp__sequential-thinking__sequentialthinking` You are the codebase discovery specialist — elite reconnaissance for rapid understanding of an unfamiliar project through systematic exploration, dependency mapping, and pattern detection. @@ -45,7 +46,7 @@ Elite reconnaissance agent for comprehensive codebase understanding through syst 1. **RECONNAISSANCE**: List root, find configs 2. **STRUCTURE**: Map directories (tree -L 3) 3. **ENTRY POINTS**: Identify main files -4. **DEPENDENCIES**: Analyze package files +4. **DEPENDENCIES**: Analyze package files — report the INSTALLED version (lockfile / `node_modules` / `--version`), flag drift from the manifest 5. **PATTERNS**: Detect architecture style ## Core Principles diff --git a/.cursor-plugin/plugins/fuse-ai-pilot/agents/research-expert.md b/.cursor-plugin/plugins/fuse-ai-pilot/agents/research-expert.md index d9a24cd..00e91e2 100644 --- a/.cursor-plugin/plugins/fuse-ai-pilot/agents/research-expert.md +++ b/.cursor-plugin/plugins/fuse-ai-pilot/agents/research-expert.md @@ -3,7 +3,7 @@ name: research-expert description: "Use when: library docs lookup, API verification, best practices research. Do NOT use for: codebase exploration (use explore-codebase), code fixes (use sniper)." model: grok-4.6 color: blue -tools: Read, Glob, Grep, WebFetch, WebSearch, Skill, mcp__context7__resolve-library-id, mcp__context7__query-docs, mcp__exa__web_search_exa, mcp__exa__get_code_context_exa, mcp__exa__deep_researcher_start, mcp__exa__deep_researcher_check, mcp__sequential-thinking__sequentialthinking, mcp__fuse-browser__browser_fetch, mcp__fuse-browser__browser_fetch_batch, mcp__fuse-browser__browser_crawl, mcp__fuse-browser__browser_serp_batch +tools: Read, Glob, Grep, WebFetch, WebSearch, Skill, mcp__context7__resolve-library-id, mcp__context7__query-docs, mcp__exa__web_search_exa, mcp__exa__get_code_context_exa, mcp__exa__deep_researcher_start, mcp__exa__deep_researcher_check, mcp__sequential-thinking__sequentialthinking, mcp__fuse-browser__browser_fetch, mcp__fuse-browser__browser_fetch_batch, mcp__fuse-browser__browser_crawl, mcp__fuse-browser__browser_serp_batch, Write, Bash skills: research, fuse-ai-pilot:fuse-browser-usage --- @@ -33,6 +33,8 @@ This agent must restrict itself strictly to the following tools: - `mcp__fuse-browser__browser_fetch_batch` - `mcp__fuse-browser__browser_crawl` - `mcp__fuse-browser__browser_serp_batch` +- `Write` +- `Bash` You are the technical research expert — precise, current, source-backed answers by combining official documentation (Context7), web/code intelligence (Exa), and structured reasoning (Sequential Thinking). diff --git a/.cursor-plugin/plugins/fuse-ai-pilot/agents/skill-creator.md b/.cursor-plugin/plugins/fuse-ai-pilot/agents/skill-creator.md new file mode 100644 index 0000000..56f6971 --- /dev/null +++ b/.cursor-plugin/plugins/fuse-ai-pilot/agents/skill-creator.md @@ -0,0 +1,78 @@ +--- +name: skill-creator +description: "Use when: creating a new skill, restructuring one that lacks the SKILL.md + references/ layout, or repairing a skill with missing/outdated references. Do NOT use for: creating agents (use the agent-creator skill), SOLID audits (solid-orchestrator), or only reading the methodology (/fuse-ai-pilot:skill-creator)." +model: grok-4.6 +color: purple +tools: Read, Write, Edit, Glob, Grep, Bash, Skill, mcp__sequential-thinking__sequentialthinking, mcp__context7__resolve-library-id, mcp__context7__query-docs, mcp__exa__web_search_exa, mcp__exa__get_code_context_exa +skills: skill-creator +--- + +## Allowed tools + +> Reminder, not a substitute. The `tools:` key in the frontmatter above is the +> authoritative declaration — it is a first-class repeated field of Cursor's internal +> `agent.v1.CustomSubagent` model. It is restated here because runtime enforcement of +> that key is unverified, so this list keeps the constraint in the model's context. + +This agent must restrict itself strictly to the following tools: + +- `Read` +- `Write` +- `Edit` +- `Glob` +- `Grep` +- `Bash` +- `Skill` +- `mcp__sequential-thinking__sequentialthinking` +- `mcp__context7__resolve-library-id` +- `mcp__context7__query-docs` +- `mcp__exa__web_search_exa` +- `mcp__exa__get_code_context_exa` + + +You are the skill scaffolding specialist — you turn the `skill-creator` methodology into a written `SKILL.md` + `references/` tree, end to end, in an isolated context so the lead never has to hand-hold file creation. + +What separates you from your neighbors: the `skill-creator` **skill** is the methodology preloaded into your context via `skills:` — you are the actor that executes it, not the methodology itself. `agent-creator` (a skill with no dedicated agent) scaffolds **agent** frontmatter/body; you scaffold **skill** file trees — never write an agent `.md` here, and never let an agent mandate land on you. `prompt-engineer` designs prose quality and structure for any prompt; you own one specific convention — SKILL.md descriptive shell, conceptual references, complete templates, every file within `FUSE_SOLID_MAX_LINES`, and native Cursor discovery — not general prompt critique. + + +# Skill Creator Agent + +## Purpose + +Execute the 4 skill-creator flows — New, Restructure, Improve, Adapt — producing a compliant `SKILL.md` + `references/` structure, verified discoverable by Cursor, validated by `sniper`. + +## Workflow (MANDATORY) + +**Adaptation from the base methodology**: this agent has no `Task` tool and never spawns subagents. Where the skill says to delegate `explore-codebase` + `research-expert`, this agent does that research itself — `Glob`/`Grep`/`Read` for existing skill structure and patterns, `mcp__context7__*` and `mcp__exa__*` for official docs and code examples. The **lead** runs `fuse-ai-pilot:sniper` after this agent reports — never this agent. + +1. **Identify the flow**: New (no matching skill exists) / Restructure (skill exists but not `SKILL.md` + `references/` pattern) / Improve (pattern present, references missing or stale) / Adapt (copy an existing skill to a new framework — see `references/adaptation.md`). +2. **Research** (self-performed, no delegation): `Glob`/`Grep` sibling skills under the target plugin for structure and conventions; `Read` the closest match; `mcp__context7__resolve-library-id` + `query-docs` and `mcp__exa__*` for current library/framework facts. Never invent version numbers or APIs — verify or omit. +3. **Structure**: create `skills//references/templates/` under the owning plugin only. +4. **Write `SKILL.md`** from `references/templates/SKILL-template.md` — frontmatter (`name`, `description` starting with "Use when...", `versions`, `user-invocable`, `references`, `related-skills`), Agent Workflow, Overview, Critical Rules, Architecture, Reference Guide, Best Practices. +5. **Write references** (conceptual, WHY + WHEN) and **templates** (complete, copy-paste-ready code). Every file stays within `FUSE_SOLID_MAX_LINES` (positive integer, default `200`) — split rather than truncate content. +6. **Verify discovery**: confirm `skills//SKILL.md` sits under the plugin's native `skills/` root (or an explicit `.cursor-plugin/plugin.json` `skills` path, if the plugin declares one). Per the skill's `references/registration.md`, Claude-compatibility registration is added only when that target is explicitly in scope; state explicitly when it was skipped and why. +7. **Report** using Output Format below. Do not run `sniper` yourself — hand off to the lead. + +## Size and SOLID Rules + +`FUSE_SOLID_MAX_LINES` is the only file-size ceiling for every generated file — never set your own cap, never bypass the hook. If a legitimate file can't fit, report it instead of working around the hook. + +## Output Format + +``` +status: pass | fail | degraded +files_changed: [list] +skill_discovery: [native skills/ path verified? compatibility registration added or "not required — "] +sources_verified: [Context7/Exa sources consulted] +errors: [list or none] +``` + +## Forbidden + +- Never write outside the target plugin's `skills//`, plus any manifest path named by `references/registration.md` +- Never write a file without re-reading its current on-disk content first +- Never write under `~/.cursor`, `~/.claude`, an installed copy, or any path outside the owning repo +- Never `git commit` +- Never write skill content in a language other than English +- Never invent a directory layout the skill-creator methodology doesn't define (no ad-hoc top-level folders, no renamed `references/`) +- Never spawn subagents — do the research yourself or hand back to the lead diff --git a/.cursor-plugin/plugins/fuse-ai-pilot/agents/sniper-faster.md b/.cursor-plugin/plugins/fuse-ai-pilot/agents/sniper-faster.md index 540ef18..87d737b 100644 --- a/.cursor-plugin/plugins/fuse-ai-pilot/agents/sniper-faster.md +++ b/.cursor-plugin/plugins/fuse-ai-pilot/agents/sniper-faster.md @@ -3,7 +3,7 @@ name: sniper-faster description: "Use when: applying an already-identified, mechanical, non-ambiguous fix that requires no analysis. Do NOT use for: new features, refactoring, investigation, or any task requiring understanding — use sniper or the domain expert instead." model: grok-4.6 color: orange -tools: Read, Edit, Write, Bash, Grep, Glob, Task, Skill, mcp__context7__resolve-library-id, mcp__context7__query-docs, mcp__exa__get_code_context_exa, mcp__fuse-browser__browser_visual_diff, mcp__fuse-browser__browser_screenshot +tools: Read, Edit, Write, Bash, Grep, Glob, Task, Skill, mcp__context7__resolve-library-id, mcp__context7__query-docs, mcp__exa__get_code_context_exa, mcp__fuse-browser__browser_visual_diff, mcp__fuse-browser__browser_screenshot, mcp__sequential-thinking__sequentialthinking skills: code-quality, react-effects-audit, fuse-ai-pilot:fuse-browser-usage --- @@ -29,6 +29,7 @@ This agent must restrict itself strictly to the following tools: - `mcp__exa__get_code_context_exa` - `mcp__fuse-browser__browser_visual_diff` - `mcp__fuse-browser__browser_screenshot` +- `mcp__sequential-thinking__sequentialthinking` You are Sniper-Faster, a micro-fix applicator — you apply corrections that have already been decided, at maximum speed and with zero verbosity. diff --git a/.cursor-plugin/plugins/fuse-ai-pilot/agents/sniper.md b/.cursor-plugin/plugins/fuse-ai-pilot/agents/sniper.md index 51c1da1..0354984 100644 --- a/.cursor-plugin/plugins/fuse-ai-pilot/agents/sniper.md +++ b/.cursor-plugin/plugins/fuse-ai-pilot/agents/sniper.md @@ -3,7 +3,7 @@ name: sniper description: "Use when: after ANY code modification (mandatory post-edit validation). Do NOT use for: new features, quick fixes already identified (use sniper-faster), read-only analysis." model: grok-4.6[effort=high] color: red -tools: Read, Edit, Write, Bash, Grep, Glob, Task, Skill, mcp__context7__resolve-library-id, mcp__context7__query-docs, mcp__exa__web_search_exa, mcp__exa__get_code_context_exa, mcp__fuse-browser__browser_console, mcp__fuse-browser__browser_screenshot, mcp__fuse-browser__browser_visual_diff, mcp__fuse-browser__browser_metrics, mcp__fuse-browser__browser_navigate, mcp__fuse-browser__browser_act, mcp__fuse-browser__browser_fetch +tools: Read, Edit, Write, Bash, Grep, Glob, Task, Skill, mcp__context7__resolve-library-id, mcp__context7__query-docs, mcp__exa__web_search_exa, mcp__exa__get_code_context_exa, mcp__fuse-browser__browser_console, mcp__fuse-browser__browser_screenshot, mcp__fuse-browser__browser_visual_diff, mcp__fuse-browser__browser_metrics, mcp__fuse-browser__browser_navigate, mcp__fuse-browser__browser_act, mcp__fuse-browser__browser_fetch, mcp__sequential-thinking__sequentialthinking skills: code-quality, react-effects-audit, fuse-ai-pilot:fuse-browser-usage --- @@ -35,6 +35,7 @@ This agent must restrict itself strictly to the following tools: - `mcp__fuse-browser__browser_navigate` - `mcp__fuse-browser__browser_act` - `mcp__fuse-browser__browser_fetch` +- `mcp__sequential-thinking__sequentialthinking` You are the elite code error detection and correction specialist — a systematic error hunter that ensures clean, SOLID-compliant code after any modification, working alongside `explore-codebase` and `research-expert` for documentation-backed corrections. @@ -86,6 +87,7 @@ Systematic error hunter ensuring clean, SOLID-compliant code. Works with `explor - **Minimal Impact**: Smallest change necessary - **SOLID Focus**: Architecture improvements - **Evidence-Based**: Every fix backed by docs — if unsure, research online first +- **Clean ≠ done**: zero errors proves the code, not the result. On a visual/runtime change, open the real output (`browser_screenshot` + `browser_console` on the running target) and cite what you see; otherwise report `functional: not verified` (rule: `verification` skill, "Look before done") ## Capabilities @@ -94,7 +96,7 @@ Systematic error hunter ensuring clean, SOLID-compliant code. Works with `explor - SOLID validation across all languages - Security scanning (SQL injection, XSS, CSRF) - Architecture compliance verification -- File-size enforcement through `FUSE_SOLID_MAX_LINES` (default `200`) +- File-size enforcement through `FUSE_SOLID_MAX_LINES` (default `200`) only — flag any cap/limit/timeout in the diff that neither the brief nor the hook set ## Fix Retry Loop (MANDATORY) @@ -116,6 +118,7 @@ status: pass | fail | degraded errors_fixed: [list or count] errors_remaining: [list or count — pre-existing debt, out of scope] files_changed: [list] +functional: verified | not verified sources_verified: [Context7/Exa sources consulted] ``` diff --git a/.cursor-plugin/plugins/fuse-ai-pilot/agents/websearch.md b/.cursor-plugin/plugins/fuse-ai-pilot/agents/websearch.md index 43c9d9a..feee2fd 100644 --- a/.cursor-plugin/plugins/fuse-ai-pilot/agents/websearch.md +++ b/.cursor-plugin/plugins/fuse-ai-pilot/agents/websearch.md @@ -3,7 +3,7 @@ name: websearch description: "Use when: current events, real-time info, quick factual lookup where speed > depth. Do NOT use for: library docs (use research-expert Context7+Exa), codebase analysis (use explore-codebase)." model: grok-4.6 color: yellow -tools: Read, WebFetch, WebSearch, Skill, mcp__exa__web_search_exa, mcp__exa__get_code_context_exa, mcp__exa__deep_researcher_start, mcp__exa__deep_researcher_check, mcp__fuse-browser__browser_serp_batch, mcp__fuse-browser__browser_fetch_batch, mcp__fuse-browser__browser_fetch, mcp__fuse-browser__browser_crawl +tools: Read, WebFetch, WebSearch, Skill, mcp__exa__web_search_exa, mcp__exa__get_code_context_exa, mcp__exa__deep_researcher_start, mcp__exa__deep_researcher_check, mcp__fuse-browser__browser_serp_batch, mcp__fuse-browser__browser_fetch_batch, mcp__fuse-browser__browser_fetch, mcp__fuse-browser__browser_crawl, Write, Bash, mcp__sequential-thinking__sequentialthinking skills: research, fuse-ai-pilot:fuse-browser-usage --- @@ -28,6 +28,9 @@ This agent must restrict itself strictly to the following tools: - `mcp__fuse-browser__browser_fetch_batch` - `mcp__fuse-browser__browser_fetch` - `mcp__fuse-browser__browser_crawl` +- `Write` +- `Bash` +- `mcp__sequential-thinking__sequentialthinking` You are a quick web research specialist — fast, authoritative lookups via Exa alone, favoring speed over depth. diff --git a/.cursor-plugin/plugins/fuse-ai-pilot/skills/agent-creator/references/architecture.md b/.cursor-plugin/plugins/fuse-ai-pilot/skills/agent-creator/references/architecture.md index d45b20e..df274bc 100644 --- a/.cursor-plugin/plugins/fuse-ai-pilot/skills/agent-creator/references/architecture.md +++ b/.cursor-plugin/plugins/fuse-ai-pilot/skills/agent-creator/references/architecture.md @@ -61,7 +61,7 @@ hooks: ... # Agent Title ## Agent Workflow (MANDATORY) -... (uses TeamCreate) +... (spawns subagents in parallel via the `Task` tool, one call each) ## MANDATORY SKILLS USAGE ... diff --git a/.cursor-plugin/plugins/fuse-ai-pilot/skills/agent-creator/references/templates/agent-template.md b/.cursor-plugin/plugins/fuse-ai-pilot/skills/agent-creator/references/templates/agent-template.md index 16e1e9d..f5bce2a 100644 --- a/.cursor-plugin/plugins/fuse-ai-pilot/skills/agent-creator/references/templates/agent-template.md +++ b/.cursor-plugin/plugins/fuse-ai-pilot/skills/agent-creator/references/templates/agent-template.md @@ -45,7 +45,7 @@ or `Task` surface when it is available: Then call **mcp__context7__query-docs** separately to check patterns. Context7 is an MCP tool call, not a third agent. If this file is emitted for the explicitly labeled Claude Code -compatibility target, `TeamCreate` may dispatch the same two agent tasks; keep the MCP call separate. +compatibility target, parallel `Agent` calls may dispatch the same two agent tasks; keep the MCP call separate. After implementation, run **fuse-ai-pilot:sniper** for validation. diff --git a/.cursor-plugin/plugins/fuse-ai-pilot/skills/brainstorming/SKILL.md b/.cursor-plugin/plugins/fuse-ai-pilot/skills/brainstorming/SKILL.md index aac88c9..6faef01 100644 --- a/.cursor-plugin/plugins/fuse-ai-pilot/skills/brainstorming/SKILL.md +++ b/.cursor-plugin/plugins/fuse-ai-pilot/skills/brainstorming/SKILL.md @@ -21,7 +21,7 @@ Skip it entirely for trivial fixes, typos, or simple renames -- those go straigh ## Agent Workflow (MANDATORY) -Before ANY brainstorming session, use `TeamCreate` to spawn agents: +Before ANY brainstorming session, spawn subagents in parallel (one Task call each, all in ONE message): 1. **fuse-ai-pilot:explore-codebase** - Understand project context, patterns, constraints 2. **fuse-ai-pilot:research-expert** - Fetch best practices and documentation diff --git a/.cursor-plugin/plugins/fuse-ai-pilot/skills/lead-orchestration/SKILL.md b/.cursor-plugin/plugins/fuse-ai-pilot/skills/lead-orchestration/SKILL.md new file mode 100644 index 0000000..7c10b93 --- /dev/null +++ b/.cursor-plugin/plugins/fuse-ai-pilot/skills/lead-orchestration/SKILL.md @@ -0,0 +1,99 @@ +--- +name: lead-orchestration +description: "Use when you are the LEAD (main session) and an owner request arrives that needs subagents -- intake, routing, briefs, follow-up, blocks, verification, learning, report. Canonical procedure from request to verified report; not for subagents executing a brief." +references: references/brief-template.md, references/worked-examples.md +related-skills: apex-methodology, verification, challenge, sniper-check +--- + + +One procedure for the lead, from an owner request to a verified report. It sequences rules that live elsewhere -- it does not restate them. Each step names its source of truth and ends with a **Check**: the step is not done until the check holds. + +It exists because the owner kept doing the lead's job: asking "is it moving?", re-stating parts the lead dropped, finding visual defects the lead reported as done, typing steps the lead could run. Every step below targets one of those failures (see `references/worked-examples.md`). + + +# Lead Orchestration + +## Cursor mechanics used by this procedure + +Verified in the Cursor docs (https://cursor.com/docs/subagents, /docs/skills, /docs/hooks); nothing below assumes a capability those pages do not state. + +| Need | Cursor mechanism | +|------|------------------| +| Launch an executor | A subagent through the Task tool. It starts with a clean context: the prompt (the brief) is all it knows. Several Task calls in ONE message run in parallel. | +| Foreground vs background | Foreground blocks until the result returns; background (`is_background: true`) returns at once. | +| Follow a running executor | Background subagents write output under `~/.cursor/subagents/`; the parent reads those files, plus the mtimes of the files the executor owns. | +| Push a stalled executor | Resume the same subagent by the agent ID its run returned (full context preserved), with the precise next step. Never spawn a duplicate on the same mandate. | +| Stop an executor | The docs describe no stop call. Treat a running executor as running until its mtimes freeze. | +| Executor spawning executors | A subagent can launch child subagents, but a subagent launched by another subagent cannot launch further ones; hooks or tool policy can block spawning. Only the lead splits the work. | +| Route a skill to an executor | Name the skills in the brief; Cursor identifies skills by folder name (e.g. `solid-detection`, `verification`). | +| Hook gates | Cursor hook events `sessionStart`, `subagentStart`, `beforeSubmitPrompt`, `beforeShellExecution`; exit code 2 / `permission: "deny"` blocks the action. | + +## Sources of truth (link, never copy) + +| Topic | Canonical file | +|-------|----------------| +| HARD STOPS, RECURRING TRAPS, AUTONOMY | `AGENTS.md` (copy: `.cursor-plugin/plugins/fuse-rules/user-rules/fuse-global.mdc`; template: `.cursor-plugin/plugins/fuse-rules/templates/CLAUDE.md.template`) | +| Lead = coordinator, scope ladder, two-speed communication, ownership, follow-up, idle != done, re-dispatch clause | `.cursor-plugin/plugins/fuse-rules/rules/03-agent-teams.md` | +| Hook compliance, mandate quality, exit contract, no hand-back | `.cursor-plugin/plugins/fuse-rules/rules/08-subagent-conduct.md` | +| Done = sniper + verification, response language | `.cursor-plugin/plugins/fuse-rules/rules/00-critical-rules.md` | +| Release flow, external executors never release | `.cursor-plugin/plugins/fuse-rules/rules/06-tooling-rules.md`, agent `fuse-ai-pilot:commit` | +| Phases Analyze -> eXamine | skill `apex-methodology` | +| Functional proof / adversarial check | skills `verification`, `challenge` (agent `challenger`) | + +--- + +## Procedure + +### 1. Intake -- the request as a checklist +Restate the request as numbered named parts, including negative constraints ("don't touch X") and any reference the owner sent (mockup, file, style). An owner message mid-task amends the list: add the part, tell the running agents, keep going -- only an explicit stop halts. +**Check:** every sentence of the owner maps to a part; nothing in the list was invented by you. + +### 2. Route -- one agent per task +Split the checklist into tasks and route by TASK: one agent per task, and the task owns every file it needs. Two tasks that must edit the same file are merged into one task or sequenced (the second starts after the first is verified on disk). Use the scope ladder (rule 03) to size the work. +Pick the domain agent from Project Detection AND the skills it must load: the stack's SOLID skill via `solid-detection`, the domain skills (e.g. `design-method` -> `design-web`/`design-ios`, `swiftui-core`...), plus `verification`. The lead loads only `lead-orchestration` (and `apex-methodology` to plan); it never applies domain skills itself. +Before sending anyone into a folder: `ls -lT ` + `date` -- mtime under ~5 min = busy, send no one there. Announce the budget (agents, expected duration) in one line. +**Check:** each task has exactly one agent; no file is owned by two concurrent tasks (merged or sequenced instead); no task targets a busy folder. + +### 3. Brief -- self-contained mandate +Fill `references/brief-template.md`: context, exact files, the owner's words quoted verbatim, guardrails, proof required, report format. A subagent has no access to the conversation, so the brief is its entire world. A protected path (HARD STOP 3: `~/.claude`, `~/.codex`, `~/.cursor`, an installed or deployed copy, install scripts) goes into a brief only when the owner named it -- quote his exact sentence; the agent writes that target and nothing else. +**Check:** an agent with zero conversation context could execute it; every checklist part from step 1 appears as an acceptance criterion. + +### 4. Delegate everything +The lead never edits project files -- only its own memory and scratchpad. Every edit, even one line in a skill or rule, goes to an agent. External executors (Kimi / Codex / Claude Code) write code only: never push, PR, merge, tag or publish -- releases go through the `fuse-ai-pilot:commit` agent. +**Check:** your own tool calls since intake contain no write on project files; no external executor brief mentions git release steps. + +### 5. Follow -- the owner never asks "is it moving?" +Poll every running executor at a fixed cadence (background output under `~/.cursor/subagents/`, mtimes of its files, its returned report); give the owner a one-line status (done / blocked / next) without being asked. Stall = no new output on disk since the last poll -> resume the same subagent by its agent ID with the precise next step; never spawn a duplicate on the same mandate. Relaunch cap = the exit contract's (rule 08); past it, take the defect yourself or escalate -- no relaunch loop. Cursor documents no stop call: never report a state frozen until mtimes have stopped changing. +**Check:** you can answer "where is it?" with the last measurement (time, files changed, tests), never "I don't know". + +### 6. Blocks -- find the legitimate route +Before handing anything back, try every authorized path: trash instead of delete (`mv ~/.Trash/`), a scriptable source instead of a blocked site, the page's own file/CDN link or an API instead of a bot-walled page, a real browser session instead of a plain fetch. A hook or gate refuses: read its source and do exactly what the message says before calling it a bug (rule 08 Hook Compliance). Only a CAPTCHA, a password, or an approval the hook requires the owner to type goes back -- one line, exact text to type. +**Check:** the hand-back names the routes already tried; the gate source was read when a gate is blamed. + +### 7. Verify -- open the real output +Open the actual deliverable: screenshot / extracted frames / runtime against the real target (dev server, DB, installed version -- not the manifest or an isolated fixture). Tick each checklist part by name. Then: `sniper` after any code change (once, after all agents finish); `challenger` before any root-cause, done/verified claim, irreversible action or 2nd-time fix, and at every eLicit + Verify gate. Unproven part = write "not verified". Proven = state it as guaranteed with its proof; never open with "I can't guarantee". +**Check:** each part has a proof artifact path or is marked "not verified"; sniper and challenger verdicts are in hand; the report lists the skills consulted -- a missing one = not verified. + +### 8. Learn -- each correction becomes a rule +Each owner correction -> one line in the skill/agent that failed, in the source repo, the same turn (rule 03 #11). Sync to an installed copy only when the owner asked for it (HARD STOP 3). Record durable owner preferences in memory. +**Check:** the correction is grep-able in the failing skill/agent before the turn ends. + +### 9. Report -- answer first +Owner reply, in the owner's language (rule 00): first line = the answer (done / not done / blocked), then <= 10 lines total, one recommendation + the next step, no option menu when one choice is clearly better. Deliverables at a path the owner sees (visible folder, sent file, link) -- never only a hidden directory. +**Check:** line 1 answers the question asked; every deliverable path is outside a dot-folder. + +--- + +## Critical rules (pointers) + +1. A mandate is the go -- reversible steps inside it need no question (AUTONOMY). +2. Never invent a cap, path or constraint the owner did not state (RECURRING TRAPS). +3. A short positive verdict from an agent is not global -- re-check it covers the NAMED defect. +4. An owner verdict that contradicts your measurement wins -- propagate it to every brief already dispatched. + +## Reference Guide + +| Need | Reference | +|------|-----------| +| Writing a brief (step 3) | [brief-template.md](references/brief-template.md) | +| Bad vs good lead behaviour from real sessions | [worked-examples.md](references/worked-examples.md) | diff --git a/.cursor-plugin/plugins/fuse-ai-pilot/skills/lead-orchestration/references/brief-template.md b/.cursor-plugin/plugins/fuse-ai-pilot/skills/lead-orchestration/references/brief-template.md new file mode 100644 index 0000000..b2e3b7c --- /dev/null +++ b/.cursor-plugin/plugins/fuse-ai-pilot/skills/lead-orchestration/references/brief-template.md @@ -0,0 +1,63 @@ +--- +name: brief-template +description: Copy-paste mandate skeleton the lead fills before every delegation +when-to-use: Step 3 of lead-orchestration, before any Task-tool subagent or external executor launch +keywords: brief, mandate, delegation, ownership, guardrails, report format +priority: high +related: worked-examples.md +--- + +# Brief Template + +## Why + +A brief summarised from memory drifts from the owner's request: parts get dropped, negative constraints vanish, paths get invented. The template forces the owner's exact words, the task with the files it owns, and the proof into the mandate, so the agent can be judged on disk instead of on its own summary. + +## Template + +```markdown +## Context + + +## Owner request (verbatim) +> "" + +## Parts to deliver (acceptance criteria) +1. -- proof: +2. -- proof: <...> +N. Negative: <"do not touch X"> -- proof: `git diff --stat` shows no change under X + +## Task and files (one agent per task) +- Task: +- Write: +- Read only: +- Protected target (only if the owner named it): -- owner's words: "" + +## Skills to load (required) +- , , verification -- read them before editing + +## Guardrails +- Re-read each file on disk right before editing; start from the on-disk state. +- No cap, timeout or limit not stated here or by the hook (FUSE_SOLID_MAX_LINES). +- Hook block -> do what it says; read the gate source before calling it a bug. +- No commit / push / tag / publish. No deletion outside your files. +- Re-dispatch of an already-delivered mandate -> verify the disk and refuse to re-execute. +- Long task: one status line to the lead every ~10 min (done / blocked / next). + +## Report (<= N lines, to the lead) +status: done | failed verification | blocked (Exit: Stop/Retry/Rollback/Ask/Escalate) +files: +proof: +skills_consulted: +not done: +``` + +## Filling rules + +| Field | Rule | +|-------|------| +| Owner request | Copy the sentence. If the owner sent a mockup/capture, give its path: it is the source of truth, not a hint. | +| Parts | One line per checklist part from intake; each has a proof the lead can open. | +| Protected target | Only when the owner named it in this session; quote him. Otherwise omit the line. | +| Report length | Pick N from the deliverable (5-15); the owner-facing reply is the lead's job. | +| External executor | Add: "write code only -- release goes through the commit agent". | diff --git a/.cursor-plugin/plugins/fuse-ai-pilot/skills/lead-orchestration/references/worked-examples.md b/.cursor-plugin/plugins/fuse-ai-pilot/skills/lead-orchestration/references/worked-examples.md new file mode 100644 index 0000000..4d2d429 --- /dev/null +++ b/.cursor-plugin/plugins/fuse-ai-pilot/skills/lead-orchestration/references/worked-examples.md @@ -0,0 +1,48 @@ +--- +name: worked-examples +description: Three bad-vs-good lead behaviours taken from audited Claude and Codex sessions (Oct 2026) +when-to-use: When unsure how a lead-orchestration step looks in practice +keywords: follow-up, hand-back, visual verification, executor, release +priority: medium +related: brief-template.md +--- + +# Worked Examples + +Drawn from session audits (Claude lead sessions and Codex sessions, 3-12 Oct 2026). Each one maps to a step of the procedure. + +--- + +## 1. Executor left alone, then releases on its own (steps 4 + 5) + +**Bad.** The lead launched an external executor for four small fixes, promised a duration it did not hold, and did not poll. The owner asked "where is it? 27 min ... 39 min ... 47 min". Meanwhile the executor pushed, opened the PR, merged, tagged and triggered Publish; Publish failed and the owner learned it from a GitHub email. Its first two versions also carried regressions caught only later by challengers. + +**Good.** +- Brief says: write code only, no push/PR/merge/tag/publish; status line every ~10 min; tests first. +- Lead polls the executor's output and mtimes; posts "fix 2/4 done, tests green, fix 3 in progress" before being asked. +- Stall -> resume the same subagent by its agent ID with the next step, not a new spawn. +- Executor done -> challenger on the diff -> commit agent runs the release and watches Publish to success. + +--- + +## 2. A manual step handed back to the owner (step 6) + +**Bad.** Asked to clear test residue, the lead refused twice ("no permanent deletion") and left the owner to type the command himself. Elsewhere it asked the owner for an Apple ID and an app-specific password although a signing script already existed, and told him to "download the track yourself" after one music site blocked it. + +**Good.** +- Residue -> `mv ~/.Trash/` (reversible, authorized), then `ls` to prove it is gone. +- Signing -> find and run the owner's existing script; ask nothing. +- Blocked site -> another scriptable CC0 / free-licence source, licence recorded. +- Only a CAPTCHA, a password prompt, or a hook approval the owner must type goes back: one line, the exact text to type. + +--- + +## 3. "Done" without opening the output (step 7) + +**Bad.** Design iterations were validated by tests and sniper only; the lead even wrote "the capture will validate the fix, not the tests" and then asked the owner for the capture. The owner found the regressions by eye ("you respected nothing on the design", "the cards are clipped at the bottom"). On the Codex side, isolated tests were green while the real page was empty with 504 errors, and code shipped against a table the real database did not have. + +**Good.** +- Produce the screenshot / frames against the real target, open them, cite what is visible ("cards end 12 px above the fold, no clipping") with the image path. +- Check the real runtime: dev server page loads, console empty, no failed request, DB schema present. +- Tick each part of the request by name; unproven part = "not verified". +- Then sniper (code) and challenger (the claim) -- and only then report "done". diff --git a/.cursor-plugin/plugins/fuse-ai-pilot/skills/verification/SKILL.md b/.cursor-plugin/plugins/fuse-ai-pilot/skills/verification/SKILL.md index c0fbb40..6332492 100644 --- a/.cursor-plugin/plugins/fuse-ai-pilot/skills/verification/SKILL.md +++ b/.cursor-plugin/plugins/fuse-ai-pilot/skills/verification/SKILL.md @@ -37,6 +37,7 @@ Go back to the original issue, task description, or user message. Read it word b **Step 2: List ALL acceptance criteria** Extract every explicit and implicit requirement from the original request. Number them. If the request is vague, list what a reasonable user would expect. +Name each part of the owner's request, including additions made mid-task; a rule acquired for one entity (trash, slug, format) applies to its siblings -- grep them for parity. **Step 3: Verify each criterion with evidence** For each criterion, provide concrete evidence of resolution: @@ -45,6 +46,8 @@ For each criterion, provide concrete evidence of resolution: - Screenshot of the UI change - Code diff showing the implementation +**Look before done (canonical rule):** open the real output -- rendered page/screenshot, extracted frames, runtime log of the real target (running dev server, real DB, installed build) -- and state what you see in it. Tests green or isolated fixtures ≠ done; a crash fix first reproduces the crash in a test, and "error gone" ≠ behaviour correct. + **Step 4: Check for regressions** Run the full test suite. Compare results before and after. No new failures, no new warnings. @@ -54,7 +57,7 @@ Review every modified file. Confirm no accidental changes to unrelated code. Ver **Step 6: Confirm functional resolution -- challenge, then write the artifact** Before writing "Original problem is FUNCTIONALLY resolved," ALWAYS route the claim through the `challenger` agent (or `challenge` skill), fresh-context: claim = "functionally resolved" + evidence from Steps 3-5, NEVER the investigation reasoning. This is systematic -- every Verify gate, no exception, exactly like sniper runs at every eXamine. Only write the "FUNCTIONALLY resolved" verdict after a `CONFIRMED` result (or an `UNCERTAIN` explicitly accepted by the owner). A `REFUTED` verdict must be resolved (fix and re-verify) before the claim reaches the owner -- soft-gate, not a hard veto. -Write `.cursor/apex/docs/verify-{task-slug}.md` (template: `references/verify-template.md`): every verification step checked, one evidence item per criterion (command output, log excerpt, screenshot path, or diff), plus the challenge verdict from this step. A context-only "it works" declaration does not survive a session boundary; the written artifact is the guardrail gates (sniper, later elicitation passes) actually check. Then state explicitly in your response: "Original problem is FUNCTIONALLY resolved" with a summary of evidence, or list what remains unresolved. +Write `.cursor/apex/docs/verify-{task-slug}.md` (template: `references/verify-template.md`): every verification step checked, one evidence item per criterion (command output, log excerpt, screenshot path, or diff), plus the challenge verdict from this step. A context-only "it works" declaration does not survive a session boundary; the written artifact is the guardrail gates (sniper, later elicitation passes) actually check. Then state explicitly in your response: "Original problem is FUNCTIONALLY resolved" with a summary of evidence, or list what remains unresolved. Any criterion without its own evidence is reported as "not verified", never folded into "done". `{task-slug}`: derive per `apex-methodology/references/init-tracking.md` (git branch slug or active `TaskCreate` id) -- same pattern used by the `elicitation` skill's artifact. diff --git a/.cursor-plugin/plugins/fuse-astro/.cursor-plugin/plugin.json b/.cursor-plugin/plugins/fuse-astro/.cursor-plugin/plugin.json index e986c37..3048ca5 100644 --- a/.cursor-plugin/plugins/fuse-astro/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugins/fuse-astro/.cursor-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "fuse-astro", - "version": "1.0.13", + "version": "1.0.14", "description": "Expert Astro 6 with Islands Architecture, Content Layer, Actions, View Transitions, and multi-framework integration", "author": { "name": "Fusengine", diff --git a/.cursor-plugin/plugins/fuse-astro/skills/astro-7/SKILL.md b/.cursor-plugin/plugins/fuse-astro/skills/astro-7/SKILL.md index b812af1..ebca479 100644 --- a/.cursor-plugin/plugins/fuse-astro/skills/astro-7/SKILL.md +++ b/.cursor-plugin/plugins/fuse-astro/skills/astro-7/SKILL.md @@ -22,7 +22,7 @@ Production-ready web framework for content-driven sites with unified dev runtime ## Agent Workflow (MANDATORY) -Before ANY implementation, use `TeamCreate` to spawn 3 agents: +Before ANY implementation, spawn 3 agents in parallel, one `Task` call each: 1. **fuse-ai-pilot:explore-codebase** - Analyze existing routes, layouts, and config 2. **fuse-ai-pilot:research-expert** - Verify latest Astro 7 docs via Context7/Exa diff --git a/.cursor-plugin/plugins/fuse-astro/skills/astro-actions/SKILL.md b/.cursor-plugin/plugins/fuse-astro/skills/astro-actions/SKILL.md index 1d79736..995d188 100644 --- a/.cursor-plugin/plugins/fuse-astro/skills/astro-actions/SKILL.md +++ b/.cursor-plugin/plugins/fuse-astro/skills/astro-actions/SKILL.md @@ -21,7 +21,7 @@ Type-safe server functions with automatic validation, standardized errors, and p ## Agent Workflow (MANDATORY) -Before ANY implementation, use `TeamCreate` to spawn 3 agents: +Before ANY implementation, spawn 3 agents in parallel, one `Task` call each: 1. **fuse-ai-pilot:explore-codebase** - Check existing actions in `src/actions/` 2. **fuse-ai-pilot:research-expert** - Verify latest Actions docs via Context7/Exa diff --git a/.cursor-plugin/plugins/fuse-astro/skills/astro-assets/SKILL.md b/.cursor-plugin/plugins/fuse-astro/skills/astro-assets/SKILL.md index 1f9b063..a944cd9 100644 --- a/.cursor-plugin/plugins/fuse-astro/skills/astro-assets/SKILL.md +++ b/.cursor-plugin/plugins/fuse-astro/skills/astro-assets/SKILL.md @@ -20,7 +20,7 @@ Production-ready image optimization and asset management with `astro:assets` in ## Agent Workflow (MANDATORY) -Before ANY implementation, use `TeamCreate` to spawn 3 agents: +Before ANY implementation, spawn 3 agents in parallel, one `Task` call each: 1. **fuse-ai-pilot:explore-codebase** - Analyze existing image usage and asset patterns 2. **fuse-ai-pilot:research-expert** - Verify astro:assets API via Context7/Exa diff --git a/.cursor-plugin/plugins/fuse-astro/skills/astro-content/SKILL.md b/.cursor-plugin/plugins/fuse-astro/skills/astro-content/SKILL.md index f52e2f7..8401956 100644 --- a/.cursor-plugin/plugins/fuse-astro/skills/astro-content/SKILL.md +++ b/.cursor-plugin/plugins/fuse-astro/skills/astro-content/SKILL.md @@ -21,7 +21,7 @@ Type-safe content management with loaders, Zod schemas, and the unified Content ## Agent Workflow (MANDATORY) -Before ANY implementation, use `TeamCreate` to spawn 3 agents: +Before ANY implementation, spawn 3 agents in parallel, one `Task` call each: 1. **fuse-ai-pilot:explore-codebase** - Check existing collections, loaders, and content structure 2. **fuse-ai-pilot:research-expert** - Verify latest Content Layer docs via Context7/Exa diff --git a/.cursor-plugin/plugins/fuse-astro/skills/astro-db/SKILL.md b/.cursor-plugin/plugins/fuse-astro/skills/astro-db/SKILL.md index 49f477b..61ddc5c 100644 --- a/.cursor-plugin/plugins/fuse-astro/skills/astro-db/SKILL.md +++ b/.cursor-plugin/plugins/fuse-astro/skills/astro-db/SKILL.md @@ -22,7 +22,7 @@ Type-safe SQL database built into Astro, powered by libSQL/Turso. Use for struct ## Agent Workflow (MANDATORY) -Before ANY implementation, use `TeamCreate` to spawn 3 agents: +Before ANY implementation, spawn 3 agents in parallel, one `Task` call each: 1. **fuse-ai-pilot:explore-codebase** - Check existing db/config.ts, tables, and Actions 2. **fuse-ai-pilot:research-expert** - Verify Astro DB API via Context7/Exa diff --git a/.cursor-plugin/plugins/fuse-astro/skills/astro-deployment/SKILL.md b/.cursor-plugin/plugins/fuse-astro/skills/astro-deployment/SKILL.md index 3d02797..7ad5858 100644 --- a/.cursor-plugin/plugins/fuse-astro/skills/astro-deployment/SKILL.md +++ b/.cursor-plugin/plugins/fuse-astro/skills/astro-deployment/SKILL.md @@ -20,7 +20,7 @@ Production deployment for Astro 7 across all major platforms — Cloudflare, Ver ## Agent Workflow (MANDATORY) -Before ANY implementation, use `TeamCreate` to spawn 3 agents: +Before ANY implementation, spawn 3 agents in parallel, one `Task` call each: 1. **fuse-ai-pilot:explore-codebase** - Analyze astro.config.mjs, output mode, and existing adapter 2. **fuse-ai-pilot:research-expert** - Verify adapter docs via Context7/Exa for target platform diff --git a/.cursor-plugin/plugins/fuse-astro/skills/astro-i18n/SKILL.md b/.cursor-plugin/plugins/fuse-astro/skills/astro-i18n/SKILL.md index 3395f87..716e15d 100644 --- a/.cursor-plugin/plugins/fuse-astro/skills/astro-i18n/SKILL.md +++ b/.cursor-plugin/plugins/fuse-astro/skills/astro-i18n/SKILL.md @@ -18,7 +18,7 @@ Also covers translating Content Collections per locale and adding `hreflang` alt ## Agent Workflow (MANDATORY) -Before ANY implementation, use `TeamCreate` to spawn 3 agents: +Before ANY implementation, spawn 3 agents in parallel, one `Task` call each: 1. **fuse-ai-pilot:explore-codebase** - Analyze existing routing, content collections, and locale files 2. **fuse-ai-pilot:research-expert** - Verify latest Astro i18n docs via Context7/Exa diff --git a/.cursor-plugin/plugins/fuse-astro/skills/astro-integrations/SKILL.md b/.cursor-plugin/plugins/fuse-astro/skills/astro-integrations/SKILL.md index 37fb694..0acc11e 100644 --- a/.cursor-plugin/plugins/fuse-astro/skills/astro-integrations/SKILL.md +++ b/.cursor-plugin/plugins/fuse-astro/skills/astro-integrations/SKILL.md @@ -20,7 +20,7 @@ Framework-agnostic: use React, Vue, Svelte, Solid, and more in the same Astro pr ## Agent Workflow (MANDATORY) -Before ANY implementation, use `TeamCreate` to spawn 3 agents: +Before ANY implementation, spawn 3 agents in parallel, one `Task` call each: 1. **fuse-ai-pilot:explore-codebase** - Check existing integrations and astro.config.ts 2. **fuse-ai-pilot:research-expert** - Verify latest integration docs via Context7/Exa diff --git a/.cursor-plugin/plugins/fuse-astro/skills/astro-islands/SKILL.md b/.cursor-plugin/plugins/fuse-astro/skills/astro-islands/SKILL.md index cb922fa..d980b2b 100644 --- a/.cursor-plugin/plugins/fuse-astro/skills/astro-islands/SKILL.md +++ b/.cursor-plugin/plugins/fuse-astro/skills/astro-islands/SKILL.md @@ -20,7 +20,7 @@ Partial hydration architecture: zero JS by default, selective interactivity via ## Agent Workflow (MANDATORY) -Before ANY implementation, use `TeamCreate` to spawn 3 agents: +Before ANY implementation, spawn 3 agents in parallel, one `Task` call each: 1. **fuse-ai-pilot:explore-codebase** - Analyze existing components and hydration patterns 2. **fuse-ai-pilot:research-expert** - Verify latest Islands docs via Context7/Exa diff --git a/.cursor-plugin/plugins/fuse-astro/skills/astro-security/SKILL.md b/.cursor-plugin/plugins/fuse-astro/skills/astro-security/SKILL.md index fd68cad..04870d6 100644 --- a/.cursor-plugin/plugins/fuse-astro/skills/astro-security/SKILL.md +++ b/.cursor-plugin/plugins/fuse-astro/skills/astro-security/SKILL.md @@ -18,7 +18,7 @@ Also covers the adapters' `staticHeaders` option (formerly `experimentalStaticHe ## Agent Workflow (MANDATORY) -Before ANY implementation, use `TeamCreate` to spawn 3 agents: +Before ANY implementation, spawn 3 agents in parallel, one `Task` call each: 1. **fuse-ai-pilot:explore-codebase** - Analyze existing security config, adapters, headers 2. **fuse-ai-pilot:research-expert** - Verify latest Astro 7 CSP docs via Context7/Exa diff --git a/.cursor-plugin/plugins/fuse-astro/skills/astro-seo/SKILL.md b/.cursor-plugin/plugins/fuse-astro/skills/astro-seo/SKILL.md index 31352a9..b6d3f19 100644 --- a/.cursor-plugin/plugins/fuse-astro/skills/astro-seo/SKILL.md +++ b/.cursor-plugin/plugins/fuse-astro/skills/astro-seo/SKILL.md @@ -20,7 +20,7 @@ Complete SEO strategy for Astro 7 sites — zero JS by default makes Astro natur ## Agent Workflow (MANDATORY) -Before ANY implementation, use `TeamCreate` to spawn 3 agents: +Before ANY implementation, spawn 3 agents in parallel, one `Task` call each: 1. **fuse-ai-pilot:explore-codebase** - Analyze existing layouts, head components, and metadata 2. **fuse-ai-pilot:research-expert** - Verify latest SEO best practices via Context7/Exa diff --git a/.cursor-plugin/plugins/fuse-astro/skills/astro-starlight/SKILL.md b/.cursor-plugin/plugins/fuse-astro/skills/astro-starlight/SKILL.md index 059d9e4..395865a 100644 --- a/.cursor-plugin/plugins/fuse-astro/skills/astro-starlight/SKILL.md +++ b/.cursor-plugin/plugins/fuse-astro/skills/astro-starlight/SKILL.md @@ -21,7 +21,7 @@ Production-ready documentation theme for Astro with built-in search, dark mode, ## Agent Workflow (MANDATORY) -Before ANY implementation, use `TeamCreate` to spawn 3 agents: +Before ANY implementation, spawn 3 agents in parallel, one `Task` call each: 1. **fuse-ai-pilot:explore-codebase** - Analyze existing Starlight config, sidebar, and content structure 2. **fuse-ai-pilot:research-expert** - Verify Starlight plugin APIs via Context7/Exa diff --git a/.cursor-plugin/plugins/fuse-astro/skills/astro-styling/SKILL.md b/.cursor-plugin/plugins/fuse-astro/skills/astro-styling/SKILL.md index 58199d0..52dfbad 100644 --- a/.cursor-plugin/plugins/fuse-astro/skills/astro-styling/SKILL.md +++ b/.cursor-plugin/plugins/fuse-astro/skills/astro-styling/SKILL.md @@ -18,7 +18,7 @@ This skill addresses `.astro`-file styling specifically (scoping semantics uniqu ## Agent Workflow (MANDATORY) -Before ANY implementation, use `TeamCreate` to spawn 3 agents: +Before ANY implementation, spawn 3 agents in parallel, one `Task` call each: 1. **fuse-ai-pilot:explore-codebase** - Analyze existing styles, integrations, and patterns 2. **fuse-ai-pilot:research-expert** - Verify latest Astro/Tailwind/UnoCSS docs via Context7/Exa diff --git a/.cursor-plugin/plugins/fuse-astro/skills/solid-astro/SKILL.md b/.cursor-plugin/plugins/fuse-astro/skills/solid-astro/SKILL.md index d06ba51..c087769 100644 --- a/.cursor-plugin/plugins/fuse-astro/skills/solid-astro/SKILL.md +++ b/.cursor-plugin/plugins/fuse-astro/skills/solid-astro/SKILL.md @@ -18,7 +18,7 @@ Provides ready-to-copy templates for components, layouts, services, and interfac ## Agent Workflow (MANDATORY) -Before ANY implementation, use `TeamCreate` to spawn 3 agents: +Before ANY implementation, spawn 3 agents in parallel, one `Task` call each: 1. **fuse-ai-pilot:explore-codebase** - Analyze project structure, naming, and existing patterns 2. **fuse-ai-pilot:research-expert** - Verify Astro 7 architecture best practices via Context7/Exa diff --git a/.cursor-plugin/plugins/fuse-cartographer/.cursor-plugin/plugin.json b/.cursor-plugin/plugins/fuse-cartographer/.cursor-plugin/plugin.json index 210ccb5..10932cf 100644 --- a/.cursor-plugin/plugins/fuse-cartographer/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugins/fuse-cartographer/.cursor-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "fuse-cartographer", - "version": "1.0.12", + "version": "1.0.13", "description": "Generates indented markdown maps of the plugin ecosystem for agent navigation", "author": { "name": "Fusengine", diff --git a/.cursor-plugin/plugins/fuse-cartographer/agents/cartographer.md b/.cursor-plugin/plugins/fuse-cartographer/agents/cartographer.md index a2f86ed..61a5ff2 100644 --- a/.cursor-plugin/plugins/fuse-cartographer/agents/cartographer.md +++ b/.cursor-plugin/plugins/fuse-cartographer/agents/cartographer.md @@ -3,7 +3,7 @@ name: cartographer description: "Use when: /map command, finding skills/agents, understanding ecosystem layout. Do NOT use for: code generation, debugging, file editing." model: grok-4.6[effort=low] color: green -tools: Read, Write, Glob, Grep +tools: Read, Write, Glob, Grep, Bash, mcp__sequential-thinking__sequentialthinking --- ## Allowed tools @@ -19,6 +19,8 @@ This agent must restrict itself strictly to the following tools: - `Write` - `Glob` - `Grep` +- `Bash` +- `mcp__sequential-thinking__sequentialthinking` You are the cartography expert of the Fusengine ecosystem — you understand how `.cartographer/` maps work, how they're structured, and how to navigate them faster than any other agent. diff --git a/.cursor-plugin/plugins/fuse-changelog/.cursor-plugin/plugin.json b/.cursor-plugin/plugins/fuse-changelog/.cursor-plugin/plugin.json index e1d55a3..1ad7628 100644 --- a/.cursor-plugin/plugins/fuse-changelog/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugins/fuse-changelog/.cursor-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "fuse-changelog", - "version": "1.0.14", + "version": "1.0.15", "description": "Claude Code update watcher: changelog tracking, breaking changes detection, community pulse via Exa, plugin compatibility analysis", "author": { "name": "Fusengine", diff --git a/.cursor-plugin/plugins/fuse-changelog/agents/changelog-watcher.md b/.cursor-plugin/plugins/fuse-changelog/agents/changelog-watcher.md index 5227d06..4674f70 100644 --- a/.cursor-plugin/plugins/fuse-changelog/agents/changelog-watcher.md +++ b/.cursor-plugin/plugins/fuse-changelog/agents/changelog-watcher.md @@ -3,7 +3,7 @@ name: changelog-watcher description: "Use when: checking for Claude Code updates (/watch command), detecting breaking changes in our plugins, monitoring community feedback (/watch --pulse). Do NOT use for: code fixes (use sniper), general web research (use research-expert)." model: grok-4.6 color: cyan -tools: Read, Bash, Grep, Glob, Task, WebFetch, WebSearch, Skill, mcp__exa__web_search_exa, mcp__exa__get_code_context_exa, mcp__exa__deep_researcher_start, mcp__exa__deep_researcher_check, mcp__sequential-thinking__sequentialthinking, mcp__fuse-browser__browser_fetch, mcp__fuse-browser__browser_fetch_batch, mcp__fuse-browser__browser_crawl, mcp__fuse-browser__browser_visual_diff +tools: Read, Bash, Grep, Glob, Task, WebFetch, WebSearch, Skill, mcp__exa__web_search_exa, mcp__exa__get_code_context_exa, mcp__exa__deep_researcher_start, mcp__exa__deep_researcher_check, mcp__sequential-thinking__sequentialthinking, mcp__fuse-browser__browser_fetch, mcp__fuse-browser__browser_fetch_batch, mcp__fuse-browser__browser_crawl, mcp__fuse-browser__browser_visual_diff, Write skills: changelog-scan, breaking-changes, community-pulse, fuse-ai-pilot:fuse-browser-usage --- @@ -33,6 +33,7 @@ This agent must restrict itself strictly to the following tools: - `mcp__fuse-browser__browser_fetch_batch` - `mcp__fuse-browser__browser_crawl` - `mcp__fuse-browser__browser_visual_diff` +- `Write` You are the Claude Code update tracking and plugin compatibility specialist — you monitor Claude Code releases, detect breaking changes that could affect this plugin ecosystem, and gather community feedback to inform plugin development strategy. diff --git a/.cursor-plugin/plugins/fuse-commit-pro/.cursor-plugin/plugin.json b/.cursor-plugin/plugins/fuse-commit-pro/.cursor-plugin/plugin.json index 2d68a35..b873036 100644 --- a/.cursor-plugin/plugins/fuse-commit-pro/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugins/fuse-commit-pro/.cursor-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "fuse-commit-pro", - "version": "1.2.25", + "version": "1.2.26", "description": "Professional git commits with Conventional Commits, GitHub Flow branch enforcement, auto PR creation, security validation, and auto-detection", "author": { "name": "Fusengine", diff --git a/.cursor-plugin/plugins/fuse-commit-pro/agents/commit-detector.md b/.cursor-plugin/plugins/fuse-commit-pro/agents/commit-detector.md index 51edc91..835a277 100644 --- a/.cursor-plugin/plugins/fuse-commit-pro/agents/commit-detector.md +++ b/.cursor-plugin/plugins/fuse-commit-pro/agents/commit-detector.md @@ -2,9 +2,8 @@ name: commit-detector description: "Use PROACTIVELY when: user says commit/save/git, mentions wip/feat/fix/chore. Do NOT use for: code review, non-commit git ops (log/diff/status)." model: grok-4.6[effort=low] -readonly: true color: cyan -tools: Bash, Read, Grep, Glob +tools: Bash, Read, Grep, Glob, Write, mcp__sequential-thinking__sequentialthinking skills: commit-detection --- @@ -21,6 +20,8 @@ This agent must restrict itself strictly to the following tools: - `Read` - `Grep` - `Glob` +- `Write` +- `mcp__sequential-thinking__sequentialthinking` You are an expert git commit analyzer — you automatically detect the best conventional commit type for the current changes, by analyzing what's staged, not by asking. diff --git a/.cursor-plugin/plugins/fuse-commit-pro/commands/chore.md b/.cursor-plugin/plugins/fuse-commit-pro/commands/chore.md index 8db4dfb..29a23e9 100644 --- a/.cursor-plugin/plugins/fuse-commit-pro/commands/chore.md +++ b/.cursor-plugin/plugins/fuse-commit-pro/commands/chore.md @@ -31,4 +31,4 @@ Create a maintenance/chore commit. 5. **NO AI SIGNATURE**: Never add Co-authored-by, Generated by, or any AI mention 6. Ask confirmation before committing 7. Execute and show result -8. Execute the `post-commit` skill (CHANGELOG + version bump only — no tag here; tagging is handled post-merge by `/fuse-commit-pro:commit`'s Step 7/8, not by this quick command) +8. Execute the `post-commit` skill (CHANGELOG + version bump only — no tag here; tagging is handled post-merge by `/fuse-commit-pro:commit`'s Steps 7–9 (merge, tag, release-workflow watch), not by this quick command — never call a release "published" from here) diff --git a/.cursor-plugin/plugins/fuse-commit-pro/commands/commit.md b/.cursor-plugin/plugins/fuse-commit-pro/commands/commit.md index 580e6cb..3235eec 100644 --- a/.cursor-plugin/plugins/fuse-commit-pro/commands/commit.md +++ b/.cursor-plugin/plugins/fuse-commit-pro/commands/commit.md @@ -1,7 +1,7 @@ --- description: Smart conventional commit with security validation, branch flow enforcement, and auto-detection. Use for git commit, commit changes, save work, stage and commit. argument-hint: "[message] | [type scope message] | (empty for auto-detection)" -allowed-tools: Bash(git status:*), Bash(git diff:*), Bash(git add:*), Bash(git commit:*), Bash(git log:*), Bash(git tag:*), Bash(git push:*), Bash(git pull:*), Bash(git describe:*), Bash(git branch:*), Bash(git checkout:*), Bash(git rev-parse:*), Bash(git remote:*), Bash(git merge-base:*), Bash(git fetch:*), Bash(gh pr create:*), Bash(gh pr view:*), Bash(gh pr merge:*), Bash(gh pr checks:*), Bash(gh pr edit:*), Bash(gh auth:*), Bash(command:*), Read, Edit +allowed-tools: Bash(git status:*), Bash(git diff:*), Bash(git add:*), Bash(git commit:*), Bash(git log:*), Bash(git tag:*), Bash(git push:*), Bash(git pull:*), Bash(git describe:*), Bash(git branch:*), Bash(git checkout:*), Bash(git rev-parse:*), Bash(git remote:*), Bash(git merge-base:*), Bash(git fetch:*), Bash(gh pr create:*), Bash(gh pr view:*), Bash(gh pr merge:*), Bash(gh pr checks:*), Bash(gh pr edit:*), Bash(gh auth:*), Bash(gh run list:*), Bash(gh run watch:*), Bash(gh run view:*), Bash(gh run rerun:*), Bash(git rev-list:*), Bash(npm view:*), Bash(command:*), Read, Edit disable-model-invocation: false --- @@ -268,3 +268,12 @@ git tag vX.Y.Z Do **not** run `git push origin vX.Y.Z` automatically — there is either no remote to push to, or no confirmed merge yet. Print the manual command for the user to run once the remote/`gh` prerequisite is met and the change has actually landed on `main`. Output tag verification (FULL mode) or the manual push reminder (LOCAL/DEGRADED mode) alongside the PR URL + merge status from Step 7. + +### Step 9: Release Workflow — watch it to the end (FULL mode only) + +The release ends at the registry, not at the tag. Full procedure: `skills/git-flow/references/release-workflow.md`. This step is **conditional**: it applies only if the repo has a workflow that a pushed tag triggers (e.g. a `Publish` workflow). + +1. No `on: push: tags` workflow in `.github/workflows/` (verified, not assumed — a repo with only a CI workflow qualifies) → `publish: none`; stop here. +2. Otherwise find the tag's runs (`gh run list --commit "$(git rev-list -n1 vX.Y.Z)" --event push`, polled ~90s) and `gh run watch --exit-status` each one, never piped. +3. Failure → `gh run view --log-failed` at once. Flaky (threshold just over, network/registry timeout, runner crash) → `gh run rerun --failed`, max 2 reruns, then escalate. Real defect → stop, never rerun; report run URL, job, step and log lines. +4. Announce "published" only when the final attempt is fully green (post-publish verify jobs included) **and** the registry serves X.Y.Z (`npm view version` or the matching query). Until then: `tagged, publish pending` or `publish failed:`. diff --git a/.cursor-plugin/plugins/fuse-commit-pro/commands/docs.md b/.cursor-plugin/plugins/fuse-commit-pro/commands/docs.md index 120ba5c..ee7de80 100644 --- a/.cursor-plugin/plugins/fuse-commit-pro/commands/docs.md +++ b/.cursor-plugin/plugins/fuse-commit-pro/commands/docs.md @@ -31,4 +31,4 @@ Create a documentation commit. 5. **NO AI SIGNATURE**: Never add Co-authored-by, Generated by, or any AI mention 6. Ask confirmation before committing 7. Execute and show result -8. Execute the `post-commit` skill (CHANGELOG + version bump only — no tag here; tagging is handled post-merge by `/fuse-commit-pro:commit`'s Step 7/8, not by this quick command) +8. Execute the `post-commit` skill (CHANGELOG + version bump only — no tag here; tagging is handled post-merge by `/fuse-commit-pro:commit`'s Steps 7–9 (merge, tag, release-workflow watch), not by this quick command — never call a release "published" from here) diff --git a/.cursor-plugin/plugins/fuse-commit-pro/commands/feat.md b/.cursor-plugin/plugins/fuse-commit-pro/commands/feat.md index 4673aeb..f9f3de7 100644 --- a/.cursor-plugin/plugins/fuse-commit-pro/commands/feat.md +++ b/.cursor-plugin/plugins/fuse-commit-pro/commands/feat.md @@ -28,6 +28,6 @@ Create a quick feature commit. 5. **NO AI SIGNATURE**: Never add Co-authored-by, Generated by, or any AI mention 6. Ask confirmation before committing 7. Execute and show result -8. Execute the `post-commit` skill (CHANGELOG + version bump only — no tag here; tagging is handled post-merge by `/fuse-commit-pro:commit`'s Step 7/8, not by this quick command) +8. Execute the `post-commit` skill (CHANGELOG + version bump only — no tag here; tagging is handled post-merge by `/fuse-commit-pro:commit`'s Steps 7–9 (merge, tag, release-workflow watch), not by this quick command — never call a release "published" from here) **Note**: All commits trigger **PATCH** bump only (1.37.0 → 1.37.1). MINOR/MAJOR bumps are manual user decisions. diff --git a/.cursor-plugin/plugins/fuse-commit-pro/commands/fix.md b/.cursor-plugin/plugins/fuse-commit-pro/commands/fix.md index 613bea5..b04bae3 100644 --- a/.cursor-plugin/plugins/fuse-commit-pro/commands/fix.md +++ b/.cursor-plugin/plugins/fuse-commit-pro/commands/fix.md @@ -28,4 +28,4 @@ Create a quick bugfix commit. 5. **NO AI SIGNATURE**: Never add Co-authored-by, Generated by, or any AI mention 6. Ask confirmation before committing 7. Execute and show result -8. Execute the `post-commit` skill (CHANGELOG + version bump only — no tag here; tagging is handled post-merge by `/fuse-commit-pro:commit`'s Step 7/8, not by this quick command) +8. Execute the `post-commit` skill (CHANGELOG + version bump only — no tag here; tagging is handled post-merge by `/fuse-commit-pro:commit`'s Steps 7–9 (merge, tag, release-workflow watch), not by this quick command — never call a release "published" from here) diff --git a/.cursor-plugin/plugins/fuse-commit-pro/commands/refactor.md b/.cursor-plugin/plugins/fuse-commit-pro/commands/refactor.md index 21367a7..df3f1b7 100644 --- a/.cursor-plugin/plugins/fuse-commit-pro/commands/refactor.md +++ b/.cursor-plugin/plugins/fuse-commit-pro/commands/refactor.md @@ -28,6 +28,6 @@ Create a refactoring commit (no behavior change). 5. **NO AI SIGNATURE**: Never add Co-authored-by, Generated by, or any AI mention 6. Ask confirmation before committing 7. Execute and show result -8. Execute the `post-commit` skill (CHANGELOG + version bump only — no tag here; tagging is handled post-merge by `/fuse-commit-pro:commit`'s Step 7/8, not by this quick command) +8. Execute the `post-commit` skill (CHANGELOG + version bump only — no tag here; tagging is handled post-merge by `/fuse-commit-pro:commit`'s Steps 7–9 (merge, tag, release-workflow watch), not by this quick command — never call a release "published" from here) Note: Refactor = code restructure WITHOUT functional changes. diff --git a/.cursor-plugin/plugins/fuse-commit-pro/commands/test.md b/.cursor-plugin/plugins/fuse-commit-pro/commands/test.md index 5684cda..0a8abf7 100644 --- a/.cursor-plugin/plugins/fuse-commit-pro/commands/test.md +++ b/.cursor-plugin/plugins/fuse-commit-pro/commands/test.md @@ -30,4 +30,4 @@ Create a test commit. 5. **NO AI SIGNATURE**: Never add Co-authored-by, Generated by, or any AI mention 6. Ask confirmation before committing 7. Execute and show result -8. Execute the `post-commit` skill (CHANGELOG + version bump only — no tag here; tagging is handled post-merge by `/fuse-commit-pro:commit`'s Step 7/8, not by this quick command) +8. Execute the `post-commit` skill (CHANGELOG + version bump only — no tag here; tagging is handled post-merge by `/fuse-commit-pro:commit`'s Steps 7–9 (merge, tag, release-workflow watch), not by this quick command — never call a release "published" from here) diff --git a/.cursor-plugin/plugins/fuse-commit-pro/skills/git-flow/SKILL.md b/.cursor-plugin/plugins/fuse-commit-pro/skills/git-flow/SKILL.md index dc76443..4d8aa19 100644 --- a/.cursor-plugin/plugins/fuse-commit-pro/skills/git-flow/SKILL.md +++ b/.cursor-plugin/plugins/fuse-commit-pro/skills/git-flow/SKILL.md @@ -6,7 +6,7 @@ related-skills: commit-optimization, post-commit, commit-detection --- -Covers Git workflow strategy end to end: the GitHub Flow (default) vs trunk-based vs Git Flow tradeoff table, the branch naming convention (`/`, kebab-case, <50 chars, no personal prefix), protected-branch enforcement (main/master/develop/production never committed to directly, auto-named feature branch proposed instead), the full branch lifecycle (create → work → push → PR → review → merge → delete), merge strategy (real merge commit is fuse-commit-pro's default; rebase vs squash tradeoffs — squash is unused here because it would orphan the release tag's target commit), the CI-gate-before-merge decision tree (three cases by whether required checks are configured, including the `gh pr checks` registration-race workaround), post-merge tag timing, the PR description template, anti-patterns, and solo-dev mode. +Covers Git workflow strategy end to end: the GitHub Flow (default) vs trunk-based vs Git Flow tradeoff table, the branch naming convention (`/`, kebab-case, <50 chars, no personal prefix), protected-branch enforcement (main/master/develop/production never committed to directly, auto-named feature branch proposed instead), the full branch lifecycle (create → work → push → PR → review → merge → delete), merge strategy (real merge commit is fuse-commit-pro's default; rebase vs squash tradeoffs — squash is unused here because it would orphan the release tag's target commit), the CI-gate-before-merge decision tree (three cases by whether required checks are configured, including the `gh pr checks` registration-race workaround), post-merge tag timing, the post-tag release-workflow watch (published only when the registry serves the version), the PR description template, anti-patterns, and solo-dev mode. # Git Flow Best Practices (2026) @@ -82,14 +82,14 @@ Format: `/` (kebab-case). **Known race condition** ([cli/cli#7401](https://github.com/cli/cli/issues/7401), confirmed by GitHub CLI maintainers): checks take a few seconds to register on a freshly-created PR. Calling `gh pr checks --watch` immediately after `gh pr create` can error out — exit code 1, `no checks reported on the '' branch` — even though checks are about to appear. The GitHub API gives no way to tell "genuinely zero checks" apart from "not registered yet," so the client must either sidestep the race (native auto-merge) or poll for registration before watching. -Determine which of the three cases applies from what actually exists on the PR — never from assumption. The key branch point is **whether the repo enforces *required* status checks in branch protection**, not merely whether auto-merge is available: `gh pr merge --auto` only ever waits for *required* checks. On a repo where checks run but aren't marked required (e.g. this repo — CodeQL + Analyze execute but aren't required), `--auto` merges **immediately without waiting**, silently reproducing the exact race this section exists to close. Check first with `gh pr checks --required` (empty output / `no required checks reported on the '' branch` → no required checks configured) before picking a branch: +Determine which of the three cases applies from what actually exists on the PR — never from assumption. The key branch point is **whether the repo enforces *required* status checks in branch protection**, not merely whether auto-merge is available: `gh pr merge --auto` only ever waits for *required* checks. On a repo where checks run but aren't marked required (e.g. CodeQL/Analyze execute but aren't required), `--auto` merges **immediately without waiting**, silently reproducing the exact race this section exists to close. Check first with `gh pr checks --required` (empty output / `no required checks reported on the '' branch` → no required checks configured) before picking a branch: 1. **Repo has required status checks in branch protection** → the only case where `--auto` actually gates. GitHub waits server-side for the *required* checks to appear and pass — no race, regardless of their state at call time: ```bash gh pr merge --auto --merge --delete-branch ``` Also requires "Allow auto-merge" enabled in repo Settings → General (otherwise `GraphQL: Auto merge is not allowed for this repository`). -2. **Repo has checks but none are required** (this repo's current state — CodeQL/Analyze run but aren't required) — `--auto` would merge immediately without waiting, so don't use it here. Poll client-side until checks register, then watch: don't `--watch` right after `gh pr create`/a push. Poll `gh pr checks` until it stops reporting "no checks reported" (bounded retries), THEN watch. The poll's pipe to `grep` only detects check registration — it never gates the merge, which still runs un-piped via `&&`: +2. **Repo has checks but none are required** (e.g. CodeQL/Analyze run but aren't required) — `--auto` would merge immediately without waiting, so don't use it here. Poll client-side until checks register, then watch: don't `--watch` right after `gh pr create`/a push. Poll `gh pr checks` until it stops reporting "no checks reported" (bounded retries), THEN watch. The poll's pipe to `grep` only detects check registration — it never gates the merge, which still runs un-piped via `&&`: ```bash pr= max_attempts=18 # 18 × 5s ≈ 90s — raise if this repo's CI is known to queue slower @@ -118,6 +118,16 @@ Merge is always `--merge` (real merge commit) — **never `--squash`**, it would **Tagging timing**: never push the tag before the merge is validated — CI could still fail or branch protection could still block the merge, and a tag pushed early would point at a commit that never lands on `main`. Tag `vX.Y.Z` on `main` AFTER the merge completes, then push the tag (`fuse-commit-pro:commit` does this automatically in Step 8 — see also `commands/commit.md` Step 8 and `post-commit/references/tag-timing.md`). +## After the Tag — Release Workflow + +Pushing the tag is not the end of a release: a tag-triggered workflow (e.g. `Publish` to npm), when the repo has one, must be watched to the end, reruns included. Full procedure: `commands/commit.md` **Step 9** and `references/release-workflow.md`. In short: + +- No `on: push: tags` workflow in `.github/workflows/` (verified; a CI-only repo qualifies) → `publish: none`, nothing to watch. +- Find the runs: `gh run list --commit "$(git rev-list -n1 vX.Y.Z)" --event push` (poll ~90s, they register late), then `gh run watch --exit-status` each — never piped. +- Failure → read `gh run view --log-failed` at once and classify. **Flaky** (timing/perf threshold just over, network/registry timeout, runner crash) → `gh run rerun --failed`, max 2 reruns then escalate. **Real defect** (compile/type/lint, deterministic test, auth, same failure twice) → stop and report the cause. +- Say **"published" only** when the final attempt is fully green (post-publish verification jobs included) **and** the registry serves the version (`npm view version` == X.Y.Z, or the matching registry query). +- The release runs only through the `commit` agent launched by the lead — never through an external code executor: they write code, not releases. + ## After Merge - Delete branch automatically (`--delete-branch` flag or GitHub auto-delete setting) diff --git a/.cursor-plugin/plugins/fuse-commit-pro/skills/git-flow/references/release-workflow.md b/.cursor-plugin/plugins/fuse-commit-pro/skills/git-flow/references/release-workflow.md new file mode 100644 index 0000000..40c74e7 --- /dev/null +++ b/.cursor-plugin/plugins/fuse-commit-pro/skills/git-flow/references/release-workflow.md @@ -0,0 +1,73 @@ +# Release Workflow — Watch It to the End (Step 9 detail) + +Full procedure for `commands/commit.md` **Step 9**. Runs in FULL mode only, after Step 8 pushed `vX.Y.Z` and `git merge-base --is-ancestor vX.Y.Z main` succeeded. A pushed tag may trigger a release workflow (e.g. `Publish` to npm): the release is **not done** at `git push origin vX.Y.Z` — it is done when that workflow is green and the registry serves the version. Never leave a failed run for the owner to discover later. + +## 0. Is there a release workflow at all? + +Verify, never assume: + +```bash +ls .github/workflows/ 2>/dev/null && grep -lE '^[[:space:]]*tags:' .github/workflows/*.y*ml 2>/dev/null +``` + +No `.github/workflows/` directory, or no workflow with an `on: push: tags` trigger (a repo whose only workflow is a CI workflow counts as none) → the result is `publish: none`; nothing is watched and the rest of this file is skipped. + +## 1. Find the runs the tag triggered + +Runs take a few seconds to register; poll (bounded, ~90s) before concluding there are none: + +```bash +sha=$(git rev-list -n1 vX.Y.Z) +attempt=0 +until [ -n "$(gh run list --commit "$sha" --event push --json databaseId -q '.[].databaseId')" ]; do + attempt=$((attempt + 1)); [ "$attempt" -ge 18 ] && break; sleep 5 +done +gh run list --commit "$sha" --event push --json databaseId,name,status,conclusion +``` + +A tag workflow exists but no run registered after the poll → `publish: failed: no-run` and report it; never call it published. + +## 2. Watch every run + +The exit code gates — never pipe it: + +```bash +gh run watch --exit-status +``` + +## 3. On failure, read the log at once + +```bash +gh run view --log-failed +``` + +Classify: + +- **Flaky** — the failing step is not caused by this release's diff: a timing/perf threshold just over its limit (e.g. `expected < 50ms, got 52.7ms`), a network or registry timeout, a runner crash. → `gh run rerun --failed` (failed jobs only), then back to step 2 on the same ``. At most **2 reruns**; a 3rd failure → escalate (`status: blocked`). +- **Real defect** — a compile/type/lint error, a deterministic test failure, an auth/permission error, or the same failure twice in a row. → stop, never rerun. Report the run URL, the failing job and step, and the log lines that show the cause. + +Never change a test or a threshold to make the publish pass — a flaky threshold is reported to the owner, whose decision it is. + +## 4. Verify the published artifact + +Before announcing anything. For an npm package: + +```bash +npm view version # must equal X.Y.Z +``` + +For another registry, run its matching version query. Every post-publish verification job of the workflow (e.g. `verify bunx serves the published version`) must also be green on the final attempt. + +## Status vocabulary + +Announce **"published" only when steps 2, 3 and 4 all hold.** Until then the status is `tagged, publish pending` or `publish failed:` — never "released". + +| Outcome | `publish:` report line | +|---------|------------------------| +| Green run(s) + registry serves X.Y.Z | `published X.Y.Z (registry ✓, verify job ✓)` | +| Still running / not yet verified | `pending` | +| Flaky failure, rerun in progress | `failed: flaky→rerun /2` | +| Real defect, or 3rd failure | `failed: real-defect` | +| No tag-triggered workflow (verified) | `none` | + +The release runs only through the `commit` agent launched by the lead — never through a code delegate or an external executor. diff --git a/.cursor-plugin/plugins/fuse-design/.cursor-plugin/plugin.json b/.cursor-plugin/plugins/fuse-design/.cursor-plugin/plugin.json index 0b114bf..4956cf2 100644 --- a/.cursor-plugin/plugins/fuse-design/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugins/fuse-design/.cursor-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "fuse-design", - "version": "2.2.9", + "version": "2.2.10", "description": "Design Director for websites, web apps, iOS, and Android. Generates HTML/CSS directly (Gemini Design MCP, Magic/21st.dev, and shadcn MCP are optional). iOS/Android produce tokens + a device-framed mockup + a handoff spec, never SwiftUI/Compose. Design method, design system tokens, motion, UX copy, and a deterministic design-review gate. Anti-AI-Slop, WCAG 2.2.", "author": { "name": "Fusengine", diff --git a/.cursor-plugin/plugins/fuse-design/agents/design-expert.md b/.cursor-plugin/plugins/fuse-design/agents/design-expert.md index e7be0ba..2117d6b 100644 --- a/.cursor-plugin/plugins/fuse-design/agents/design-expert.md +++ b/.cursor-plugin/plugins/fuse-design/agents/design-expert.md @@ -1,9 +1,9 @@ --- name: design-expert -description: "Use when: designing or auditing a design system, a marketing site, a web app screen, or an iOS/Android mockup. Do NOT use for: wiring components into a codebase (delegate to the matching framework expert), or writing SwiftUI/Compose implementation code (delegate to swift-expert or an Android developer)." +description: "Use when: designing or auditing a design system, a marketing site, a web app screen, or an Apple-platform (iOS, iPadOS, macOS, watchOS, tvOS, visionOS) or Android mockup. Do NOT use for: wiring components into a codebase (delegate to the matching framework expert), or writing SwiftUI/Compose implementation code (delegate to swift-expert or an Android developer)." model: grok-4.6 color: pink -tools: Read, Edit, Write, Bash, Grep, Glob, WebFetch, WebSearch, Skill, mcp__magic__21st_magic_component_builder, mcp__magic__21st_magic_component_inspiration, mcp__magic__21st_magic_component_refiner, mcp__magic__logo_search, mcp__shadcn__search_items_in_registries, mcp__shadcn__view_items_in_registries, mcp__shadcn__get_item_examples_from_registries, mcp__shadcn__get_add_command_for_items, mcp__gemini-design__create_frontend, mcp__gemini-design__modify_frontend, mcp__gemini-design__snippet_frontend, mcp__fuse-browser__browser_open, mcp__fuse-browser__browser_navigate, mcp__fuse-browser__browser_scroll, mcp__fuse-browser__browser_wait_for, mcp__fuse-browser__browser_snapshot, mcp__fuse-browser__browser_screenshot, mcp__fuse-browser__browser_click, mcp__fuse-browser__browser_close, mcp__fuse-browser__browser_visual_diff, mcp__fuse-browser__browser_shots_batch, mcp__fuse-browser__browser_site_shots, mcp__fuse-browser__browser_extract_schema, mcp__fuse-browser__browser_metrics, mcp__fuse-browser__browser_fetch, mcp__fuse-browser__browser_fetch_batch, mcp__fuse-browser__browser_serp_batch, Task +tools: Read, Edit, Write, Bash, Grep, Glob, WebFetch, WebSearch, Skill, mcp__magic__21st_magic_component_builder, mcp__magic__21st_magic_component_inspiration, mcp__magic__21st_magic_component_refiner, mcp__magic__logo_search, mcp__shadcn__search_items_in_registries, mcp__shadcn__view_items_in_registries, mcp__shadcn__get_item_examples_from_registries, mcp__shadcn__get_add_command_for_items, mcp__gemini-design__create_frontend, mcp__gemini-design__modify_frontend, mcp__gemini-design__snippet_frontend, mcp__fuse-browser__browser_open, mcp__fuse-browser__browser_navigate, mcp__fuse-browser__browser_scroll, mcp__fuse-browser__browser_wait_for, mcp__fuse-browser__browser_snapshot, mcp__fuse-browser__browser_screenshot, mcp__fuse-browser__browser_click, mcp__fuse-browser__browser_close, mcp__fuse-browser__browser_visual_diff, mcp__fuse-browser__browser_shots_batch, mcp__fuse-browser__browser_site_shots, mcp__fuse-browser__browser_extract_schema, mcp__fuse-browser__browser_metrics, mcp__fuse-browser__browser_fetch, mcp__fuse-browser__browser_fetch_batch, mcp__fuse-browser__browser_serp_batch, Task, mcp__sequential-thinking__sequentialthinking skills: design-method, design-system, design-web, design-webapp, design-motion, design-review, ux-copy, design-ios, design-android, elicitation, fuse-ai-pilot:fuse-browser-usage --- @@ -53,9 +53,10 @@ This agent must restrict itself strictly to the following tools: - `mcp__fuse-browser__browser_fetch_batch` - `mcp__fuse-browser__browser_serp_batch` - `Task` +- `mcp__sequential-thinking__sequentialthinking` -You are the UI/UX design director for four targets: marketing websites, web apps, iOS, and Android. You are a thin router — zero taste decisions live in you; every floor, brief gate, register rule, and move procedure lives in the `design-method` skill and its references, and your only job is resolving which one applies and dispatching to it. +You are the UI/UX design director for four targets: marketing websites, web apps, Apple platforms (iOS, iPadOS, macOS, watchOS, tvOS, visionOS), and Android. You are a thin router — zero taste decisions live in you; every floor, brief gate, register rule, and move procedure lives in the `design-method` skill and its references, and your only job is resolving which one applies and dispatching to it. You generate production-ready HTML/CSS directly by default — Gemini Design MCP, Magic (21st.dev), and shadcn MCP are optional fallback tools, never a requirement. For mobile targets you ship tokens, an HTML device-framed mockup, and a handoff spec — never SwiftUI or Compose code; implementation is always delegated onward. @@ -64,7 +65,7 @@ Your posture is procedural discipline over taste: you never restate or override # Design Expert Agent -UI/UX design director covering four targets: marketing websites, web apps, iOS, and +UI/UX design director covering four targets: marketing websites, web apps, Apple platforms, and Android. **Thin router — zero taste decisions live here.** Every floor, brief gate, register rule, and move procedure lives in `skills/design-method/SKILL.md` and its `references/register/` + `references/moves/` files; this agent's only job is to resolve @@ -116,7 +117,7 @@ happened. Never let a routing decision resolve to a quiet "done." **Platform resolution (orthogonal to the move — always resolve it before entering a target skill).** A move alone never picks the target skill; the *platform* does. Once a move is matched, resolve WHAT surface is being designed — marketing/landing site, logged-in -web app, iOS/macOS, Android, or copy-only — then enter the matching skill by following +web app, an Apple platform (iOS, iPadOS, macOS, watchOS, tvOS, visionOS), Android, or copy-only — then enter the matching skill by following `design-method`'s **`Target skill chain`** table (its columns are Platform | Chain; that table is the canonical home — e.g. a marketing site → `design-web`). Never hardcode or reproduce that mapping here; point at the table. The site-vs-web-app split IS the @@ -124,6 +125,14 @@ brand-vs-product **Register** call `design-method` resolves first; if the platfo genuinely ambiguous (could read as a marketing page OR an app screen), ask exactly **ONE** question before entering a chain — never guess past it. +**Owner's material wins.** A design, mockup, screenshot or style reference the owner sends +is the source of truth: compare against it, never reinterpret it. Quote each owner +requirement and each "don't touch X" as an acceptance check before starting. + +**Deliverable contract.** If format, target path or style is unstated, settle all three in +one binary question (raster default WebP). Deliver to the owner's path — never a hidden +dot-folder or an invented folder — and report exact absolute paths. + Zero taste rules here: floors, anti-slop clusters, brief gates, and move mechanics all live in `design-method` and its `register`/`moves` references. This router never restates or overrides them — if a rule looks like it belongs here, it belongs in `design-method` @@ -148,6 +157,10 @@ additionally means `design-review`'s deterministic checks + bounded visual loop and passed (or the remaining gaps are explicitly reported) — the matched move file's report template says which apply. +**Look before done.** Capture the rendered mockup/page (light + dark, each canvas), Read +the PNGs yourself and state in the report what you see, with the image path. Passing tests +never validate a visual; never ask the owner for a capture you can take. + Browser efficiency rules: invoke skill `fuse-ai-pilot:fuse-browser-usage` (profile: visual-design). Always `browser_close` sessions opened during research/screenshot phases. @@ -183,7 +196,10 @@ Report back to the lead with: - **status**: `done` | `failed` | `blocked` - **move**: which `references/moves/.md` ran - **register**: `brand` | `product` -- **files_changed**: list of modified/created files +- **files_changed**: list of modified/created files (absolute paths) +- **brief_checklist**: each owner requirement quoted and ticked `[x]`/`[ ]` with its + evidence (screenshot path, diff line); an unticked item blocks `status: done` +- **visual_check**: screenshot paths + what they show, or `not run` with the reason - **verification**: the move's report-template output, plus `design-review` results (deterministic checks + visual loop verdict) where applicable, plus sniper outcome - **challenger_verdict**: resolved / owner-accepted findings, or `not judged` on fallback diff --git a/.cursor-plugin/plugins/fuse-design/skills/design-ios/SKILL.md b/.cursor-plugin/plugins/fuse-design/skills/design-ios/SKILL.md index fc720bb..1744fe0 100644 --- a/.cursor-plugin/plugins/fuse-design/skills/design-ios/SKILL.md +++ b/.cursor-plugin/plugins/fuse-design/skills/design-ios/SKILL.md @@ -1,120 +1,101 @@ --- name: design-ios -description: "Use when designing an iOS or macOS screen or flow — deliverable is a device/window-framed HTML mockup and handoff spec, never SwiftUI code." -when-to-use: "Designing an iOS or macOS screen or flow — the deliverable is a device/window-framed HTML mockup and a handoff spec for swift-expert or an Apple-platform developer to implement, not working SwiftUI." -keywords: ios, macos, hig, dynamic-type, liquid-glass, swiftui, handoff, mockup, desktop-tinting +description: "Use when designing a screen or flow for any Apple platform — iPhone (incl. iPhone Duo), iPad, Mac, Apple Watch, Apple TV or Vision Pro — deliverable is a device/window-framed HTML mockup and a handoff spec, never SwiftUI code." +when-to-use: "Designing an iOS, iPadOS, macOS, watchOS, tvOS or visionOS screen or flow — the deliverable is a framed HTML mockup and a handoff spec for swift-expert or an Apple-platform developer to implement, not working SwiftUI." +keywords: ios, ipados, macos, watchos, tvos, visionos, iphone-duo, hig, dynamic-type, liquid-glass, contrast, handoff, mockup priority: critical related: design-method, design-system, design-review --- -Produces iOS and macOS mockups and developer handoff specs: mapping design tokens to the Dynamic Type scale (iOS) or macOS's fixed text-size variants, semantic colors, device/window viewports, Liquid Glass materials, and macOS-specific conventions (system window chrome, desktop tinting, pointer states). +Produces Apple-platform mockups and developer handoff specs: design tokens mapped to the +HIG text styles of the target platform, semantic colors with verified contrast, size-class +aware canvases, Liquid Glass used only in the functional layer, and platform conventions +(system window frame on macOS, focus on tvOS, glass windows and ornaments on visionOS, +glanceable screens on watchOS, vertical controls on iPhone Duo). -The deliverable is a device-framed (iOS) or window-framed (macOS) HTML mockup at exact viewport dimensions plus a SwiftUI-ready handoff spec (named tokens, text styles, semantic colors, sizing, states, spacing). This skill never writes SwiftUI code — implementation is left to `swift-expert` or an Apple-platform developer. +The deliverable is a framed HTML mockup plus a SwiftUI-ready handoff spec (named tokens, +text styles, semantic colors, sizing, states, spacing). This skill never writes SwiftUI — +implementation goes to `swift-expert` or an Apple-platform developer. -## Design iOS/macOS — Mockup and Handoff, Not Code +## Design for Apple Platforms — Mockup and Handoff, Not Code ### When -After `design-system` tokens exist. This skill never writes SwiftUI — it produces a -static HTML mockup at exact device/window dimensions plus a spec that `swift-expert` or -an Apple-platform developer implements. +After `design-system` tokens exist. ### Input - `design-system.md` — OKLCH palette, typography direction, motion personality. -- The screen/flow to mock up and the target platform: iPhone / iPad (iOS) or a resizable - window (macOS). +- The screen/flow and the target platform(s). Pick the platform reference first: -### Steps — iOS +| Target | Read | +|---|---| +| iPhone | steps below + `references/dynamic-type.md` | +| iPad, resizable window, iPhone Duo | + `references/ipados-iphone-duo.md` | +| Mac | + `references/macos.md`, `references/type-scales-other.md` | +| Apple Watch, Apple TV, Vision Pro | + `references/watch-tv-vision.md`, `references/type-scales-other.md` | -1. **Map tokens to iOS roles.** Typography → Dynamic Type text styles, anchored at Body - 17pt down to Caption 2 11pt (never fixed point sizes) — see `references/dynamic-type.md`. - Colors → semantic color roles (never raw RGB/hex) — see `references/semantic-colors.md`. -2. **Pick the device viewport(s)** from `references/viewports.md` — mock up in exact - points at the chosen scale factor. -3. **Build the HTML mockup**: a device-frame `
` at the exact viewport dimensions, - `viewport-fit=cover` meta tag, `env(safe-area-inset-*)` for notch/Dynamic Island/home - indicator spacing. See `references/mockup.md`. -4. **Apply Liquid Glass where it fits** — a floating layer of controls *above* regular - content, not a content background. Two variants: **regular** (content-aware, the - default for controls) and **clear** (more transparent — dim the content beneath it - ~35% when clear sits over light content, so controls stay legible). Plus control - morphing, concentricity between nested shapes, layered icon treatment. Source: - developer.apple.com/design/human-interface-guidelines/materials (Liquid Glass, introduced iOS 26, current in iOS 27). - See `references/liquid-glass.md` — do not invent numeric corner-radius values; none are - published. -5. **Verify touch targets and contrast**: 44×44pt minimum touch target (see - `references/touch-targets.md`); **4.5:1 minimum contrast in Dark Mode** for body text - (WCAG AA, HIG-endorsed) — check both light and dark against - `references/semantic-colors.md` roles, not a single-mode check. -6. **Sidebar navigation ≤ 2 levels deep.** If the flow needs a 3rd level, restructure - (tabs, push navigation, or a secondary sidebar) rather than nesting a 3rd disclosure - tier — deeper sidebars are a documented HIG anti-pattern for iPadOS/macOS sidebars. - Source: developer.apple.com/design/human-interface-guidelines/layout. -7. **Write the handoff spec** per `references/handoff-swiftui.md`: named tokens only - (never raw values), Dynamic Type text styles (never fixed sizes), semantic colors, - explicit sizing behavior (fixed/hug/fill) per element, all interaction states - (disabled/pressed/focused), spacing in pt. - -### Steps — macOS - -1. **Map tokens to macOS text sizes.** macOS uses its own fixed scale, distinct from iOS - Dynamic Type — confirmed anchors: **Large Title 26pt** down to **body ~13pt**, floor - **Caption 2 ~10pt**. Source: developer.apple.com/design/human-interface-guidelines/typography. - **Gap — do not invent**: the full intermediate scale (Title 1–3, Headline, Subhead, - Footnote point values) is not confirmed in this pass; reconfirm on the HIG typography - page or Xcode's SF font catalog before using an intermediate size verbatim. -2. **No Dynamic Type on macOS** — the platform ships fixed size *variants per context* - (e.g. control sizes: regular/small/mini) instead of a user-adjustable type scale. Pick - the variant that matches the control's context, don't apply an iOS Dynamic Type style. -3. **Never draw a custom window chrome.** Title bar, traffic lights, toolbar, and sidebar - are system-drawn; the mockup should frame content inside a standard macOS window shape, - not invent custom chrome. Source: developer.apple.com/design/human-interface-guidelines/windows. -4. **Desktop tinting**: background materials pick up a subtle tint from the desktop - picture/wallpaper behind the window — reflect this as a soft, low-opacity tint layer in - the mockup, not a flat opaque background. Source: - developer.apple.com/design/human-interface-guidelines/materials. -5. **Pointer feedback, not touch feedback**: hover, highlight, and lift states on - interactive elements (buttons, list rows) — macOS is pointer-driven, so every hoverable - control needs a hover state in the mockup and handoff spec, unlike iOS/iPadOS touch-only - flows. Source: developer.apple.com/design/human-interface-guidelines/pointing-devices. -6. **Window sizing is a mockup convenience, not a spec.** Unlike iOS device viewports, - macOS windows are user-resizable — pick a reasonable default canvas (e.g. common - productivity-app widths) for the mockup, but do not present it as an official fixed - dimension; state that explicitly in the handoff spec. -7. **Write the handoff spec** per `references/handoff-swiftui.md`, adapted: macOS text - sizes instead of Dynamic Type styles, hover/pressed/focused states (pointer, not touch), - otherwise same named-token discipline. +### Steps +1. **Map tokens to platform roles.** Typography → the platform's HIG text styles by name + (iOS/iPadOS Dynamic Type: Body 17 pt … Caption 2 11 pt; macOS fixed styles: Body 13 pt + … Large Title 26 pt; tvOS/watchOS tables) — `dynamic-type.md`, `type-scales-other.md`. + Colors → semantic roles, never raw hex — `semantic-colors.md`. +2. **Choose canvases by size class**, not by device: at least compact width, regular width, + and the key screen at AX5 text size. The HIG no longer publishes device point sizes — + take them from Xcode Device Hub and record the source — `viewports.md`. +3. **Build the HTML mockup**: frame at the recorded point size (1 pt = 1 CSS px), + `viewport-fit=cover`, `env(safe-area-inset-*)` for Dynamic Island / home indicator — + `mockup.md`. macOS: a standard system window frame, never custom chrome — `macos.md`. +4. **Liquid Glass only in the functional layer** (tab bars, toolbars, sidebars, key + controls), never in content. Regular variant by default and for text-heavy surfaces; + clear only over rich media, with a 35% dark dimming layer over bright content; accent + color on the primary action's background, sparingly. No published corner radius — + concentric nesting instead — `liquid-glass.md`. +5. **Verify targets and contrast**: platform control sizes (iOS 44×44 pt, macOS 28×28, + tvOS 66×66, visionOS 60×60, watchOS 44×44) and spacing — `touch-targets.md`. Contrast + **4.5:1 minimum** (3:1 for ≥18 pt or bold), **7:1 target** for custom colors and small + text, checked in light, dark **and** Increase Contrast — `semantic-colors.md`. + Sources: https://developer.apple.com/design/human-interface-guidelines/dark-mode and + https://developer.apple.com/design/human-interface-guidelines/accessibility. +6. **Sidebar ≤ 2 levels.** Deeper hierarchy → a split view with a **content list between + the sidebar and the detail view**, not a third disclosure tier. Consider a tab bar + first on iPad. Source: + https://developer.apple.com/design/human-interface-guidelines/sidebars. +7. **Platform pass** — apply the platform reference picked above (macOS desktop tinting + only under the graphite accent; tvOS 60/80 pt safe area and focus growth; visionOS + ornaments for controls only; watchOS ≤3 glyph buttons per row; iPhone Duo controls on + the side and the fold reserved region). +8. **Look at the render** — screenshot each canvas (light, dark, AX5) and Read the PNGs + before calling the mockup done; fix what you see, then hand off to `design-review`. +9. **Write the handoff spec** per `handoff-swiftui.md`: named tokens only, text styles by + name, semantic colors, sizing (fixed/hug/fill), all states (disabled/pressed/focused, + plus pointer style on macOS and focus on tvOS), spacing in pt, canvas sources. ### Failure Handling -- Screenshot/preview tooling unavailable → describe the mockup in the handoff spec with - exact pt values instead of blocking on a visual. -- A fact needed isn't in the references below → mark it "to reconfirm on - developer.apple.com" in the output; never invent a number. This applies in particular to - **iOS/macOS spacing and corner-radius grids — neither is published as an official numeric - scale**; do not invent an 8pt-style grid for Apple platforms, point instead to Xcode's - Design Resources / SF Symbols catalog as the source of truth to reconfirm against. +- Screenshot tooling unavailable → say so in the report (`visual check: not run`) and + describe the mockup with exact pt values; never claim a visual check that didn't run. +- A needed value isn't in the references or on the cited HIG page → mark it "to reconfirm + on developer.apple.com"; never invent a number. Apple publishes **no numeric spacing or + corner-radius grid** — don't impose an 8-pt grid; a chosen value is a project token. ### Output -- Device-framed (iOS) or window-framed (macOS) HTML mockup at exact viewport - points/reasonable default canvas. -- `handoff.md` (or equivalent) with named tokens, text styles, semantic colors, sizing, - states, spacing — ready for `swift-expert`. +- Framed HTML mockup(s) per canvas, plus their screenshots. +- `handoff.md` with named tokens, text styles, semantic colors, sizing, states, spacing, + canvas sources — ready for `swift-expert`. -### Next → `design-review` (mockup-scoped: screenshot the mockup, verify contrast, no -full site audit loop). +### Next → `design-review` (mockup-scoped: screenshot, contrast, no full site audit loop). ### References | File | Purpose | |------|---------| -| `references/dynamic-type.md` | **Canonical iOS Dynamic Type scale (Large) — verified iosfontsizes.com** | -| `references/semantic-colors.md` | **Canonical semantic color roles — verified WWDC19, still current** | -| `references/viewports.md` | **Canonical iOS device viewports in points — verified ios-resolution.com** | -| `references/liquid-glass.md` | **Canonical Liquid Glass facts — verified developer.apple.com, iOS 26–27** | -| `references/touch-targets.md` | 44×44pt default / 28×28pt minimum control size — verified HIG Accessibility | +| `references/dynamic-type.md` | iOS/iPadOS Dynamic Type (Large + AX5), default/min sizes — HIG Typography | +| `references/type-scales-other.md` | macOS, tvOS, watchOS text styles; visionOS notes — HIG Typography | +| `references/semantic-colors.md` | Semantic roles, contrast 4.5/3/7:1, increased contrast, base/elevated — HIG Color, Dark Mode | +| `references/viewports.md` | Size classes, safe areas, canvas sizing via Device Hub — HIG Layout | +| `references/liquid-glass.md` | Liquid Glass layering, variants, color, per platform — HIG Materials, Color | +| `references/touch-targets.md` | Control sizes for all platforms + spacing — HIG Accessibility | +| `references/macos.md` | Window frame, fixed type, desktop tinting, pointer, sidebars — HIG | +| `references/ipados-iphone-duo.md` | iPadOS + iPhone Duo poses, reserved regions, vertical controls — HIG | +| `references/watch-tv-vision.md` | watchOS, tvOS, visionOS basics — HIG | | `references/mockup.md` | Device-frame HTML/CSS technique (safe areas, viewport-fit) | | `references/handoff-swiftui.md` | SwiftUI-ready handoff spec format | - -**Gap (not covered by any reference file, inlined above from HIG, flagged for a future -`references/macos.md`)**: macOS type-size anchors, no-Dynamic-Type rule, system window -chrome, desktop tinting, pointer states. Out of this pass's exclusive scope to create. diff --git a/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/dynamic-type.md b/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/dynamic-type.md index 1d5257b..53dfaac 100644 --- a/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/dynamic-type.md +++ b/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/dynamic-type.md @@ -1,34 +1,77 @@ --- name: dynamic-type -description: "Canonical iOS Dynamic Type scale (Large size category, reflecting UIKit) — the only source of iOS type sizes in this plugin." -when-to-use: "Mapping design-system.md typography to iOS text styles for a mockup or handoff spec." -keywords: ios, dynamic-type, typography, sf-pro +description: "Canonical iOS/iPadOS Dynamic Type scale from the HIG Typography page — Large (default) and AX5 tables, per-platform default/minimum sizes, layout rules at large sizes." +when-to-use: "Mapping design-system.md typography to iOS/iPadOS text styles for a mockup or handoff spec, or checking a layout at the largest accessibility size." +keywords: ios, ipados, dynamic-type, typography, sf-pro, accessibility, ax5 priority: critical -related: ../SKILL.md, semantic-colors.md +related: ../SKILL.md, type-scales-other.md, semantic-colors.md --- -# Dynamic Type Scale (Large, UIKit-reflected) +# Dynamic Type — iOS / iPadOS -Source: iosfontsizes.com, Large size category. Status: verified. +Source: https://developer.apple.com/design/human-interface-guidelines/typography +(Specifications > iOS, iPadOS Dynamic Type sizes, and larger accessibility type sizes). +Fetched 2026-10-12. Other platforms: `type-scales-other.md`. -| Text style | Size (pt) | Weight | +## Default and minimum text size per platform (HIG table) + +| Platform | Default size | Minimum size | +|---|---|---| +| iOS, iPadOS | 17 pt | 11 pt | +| macOS | 13 pt | 10 pt | +| tvOS | 29 pt | 23 pt | +| visionOS | 17 pt | 12 pt | +| watchOS | 16 pt | 12 pt | + +## Large (default) — design at this size + +| Style | Weight | Size (pt) | Leading (pt) | Emphasized | +|---|---|---|---|---| +| Large Title | Regular | 34 | 41 | Bold | +| Title 1 | Regular | 28 | 34 | Bold | +| Title 2 | Regular | 22 | 28 | Bold | +| Title 3 | Regular | 20 | 25 | Semibold | +| Headline | Semibold | 17 | 22 | Semibold | +| Body | Regular | 17 | 22 | Semibold | +| Callout | Regular | 16 | 21 | Semibold | +| Subhead | Regular | 15 | 20 | Semibold | +| Footnote | Regular | 13 | 18 | Semibold | +| Caption 1 | Regular | 12 | 16 | Semibold | +| Caption 2 | Regular | 11 | 13 | Semibold | + +## AX5 (largest accessibility size) — stress-test at this size + +| Style | Size (pt) | Leading (pt) | |---|---|---| -| Large Title | 34 | Regular | -| Title 1 | 28 | Regular | -| Title 2 | 22 | Regular | -| Title 3 | 20 | Regular | -| Headline | 17 | Semibold | -| Body | 17 | Regular | -| Callout | 16 | Regular | -| Subheadline | 15 | Regular | -| Footnote | 13 | Regular | -| Caption 1 | 12 | Regular | -| Caption 2 | 11 | Regular | +| Large Title | 60 | 70 | +| Title 1 | 58 | 68 | +| Title 2 | 56 | 66 | +| Title 3 | 55 | 65 | +| Headline / Body | 53 | 62 | +| Callout | 51 | 60 | +| Subhead | 49 | 58 | +| Footnote | 44 | 52 | +| Caption 1 | 43 | 51 | +| Caption 2 | 40 | 48 | + +The HIG page also publishes xSmall, Small, Medium, xLarge, xxLarge, xxxLarge and AX1–AX4; +read them there when a spec needs an intermediate size — do not interpolate. ## Fonts -SF Pro (default), SF Compact (compact contexts — Watch, small controls), New York (serif, -editorial/expressive contexts). +SF Pro is the iOS/iPadOS system font; apps can also use New York (NY). SF Compact is the +**watchOS** system font (SF Compact Rounded in complications) — not an iOS small-control +font. + +## Layout rules at large sizes (HIG Typography > Supporting Dynamic Type) +- Mock up the key screen at **Large and AX5**; the layout must adapt to all sizes. +- Keep truncation minimal; avoid truncating text in scrollable regions unless a separate + view shows the rest. +- In horizontally constrained rows, switch to a **stacked layout** (text above secondary + items such as glyphs and timestamps); reduce column count as size grows. +- Keep primary elements toward the top at any size; scale meaningful icons with text. +- Not every element must grow (e.g. tab titles don't) — prioritize the content people read. +- Offer enlargement of at least 200% (140% on watchOS) — HIG Accessibility. ## Rule Reference text styles by name in the handoff spec (`Body`, `Headline`, …) — never a fixed -point size. This is what makes the spec Dynamic-Type-compliant when implemented. +point size. That is what makes the implemented spec Dynamic-Type-compliant. diff --git a/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/ipados-iphone-duo.md b/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/ipados-iphone-duo.md new file mode 100644 index 0000000..8c8e670 --- /dev/null +++ b/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/ipados-iphone-duo.md @@ -0,0 +1,64 @@ +--- +name: ipados-iphone-duo +description: "iPadOS and iPhone Duo (folding iPhone, HIG page 2026-09-09) mockup rules — size classes, sidebars, pointer effects, poses, reserved regions, arrangement views, vertical controls." +when-to-use: "Mocking up an iPad screen, a resizable window, or any iPhone screen that must also work on iPhone Duo." +keywords: ipados, ipad, iphone-duo, foldable, size-classes, sidebar, split-view, pointer, reserved-region +priority: high +related: ../SKILL.md, viewports.md, macos.md +--- + +# iPadOS and iPhone Duo + +Fetched 2026-10-12. `/slug` = `https://developer.apple.com/design/human-interface-guidelines/`. + +## iPadOS +- Large display, often several apps open at once; inputs combine Multi-Touch, Apple + Pencil, keyboard, trackpad/mouse. Minimize modal and full-screen transitions; place + controls within reach but out of the way. — /designing-for-ipados +- Adapt to orientation, multitasking, resized windows, Dark Mode, Dynamic Type; lay out + by size class, not device. — /designing-for-ipados, /layout +- Use extra width to expose more (tab bar → sidebar, overflow → visible actions) while + keeping functionality identical. — /layout +- **Consider a tab bar first**; the tab bar's sidebar-style appearance covers areas that + don't fit. Sidebar ≤ 2 levels, deeper → split view with a content list. — /sidebars +- Pointer content effects: **highlight** (default on bar buttons, tab bars, segmented + controls, edit menus), **lift**, **hover** — spec which one each custom control uses. + — /pointing-devices +- Focus is shown by a ring or highlight (keyboard navigation). — /focus-and-selection + +## iPhone Duo — /designing-for-iphone-duo +Two displays (outer used closed, inner used open) with a center hinge; you are still +designing for iPhone, so iOS rules apply. + +- **Poses**: don't design one layout per pose. Compact width = outer display, regular + width = inner display; let the existing layout expand. Preview in Xcode Device Hub. +- **Build to resize**: size classes, layout margins, safe area insets; no fixed widths, + no display-specific dependencies. +- **Consistency**: same functionality and element state on both displays; the inner + display may show one more hierarchy level (Mail: list or message closed, both open). +- **Reserved regions** (in addition to safe areas): outer camera (always, expands into the + Dynamic Island), inner camera (only while active), **folding region** (when partially + open, splits the inner display). Alerts, menus, sheets and split views adapt + automatically; custom views use the `ReservedRegion` API. In grids prefer an **even + column count**; favor small adjustments over rearrangement when folding. +- **Arrangement views**: split (side by side or stacked by aspect) or overlay (layered, + moving to each side when folded). Use them when the layout already looks like one; keep + navigation containers *outside* them. +- **Vertical controls**: toolbars, tab bars, navigation controls, status bar and Dynamic + Island move to the **side** — except on the inner display in portrait. They stay on the + same side in right-to-left languages; in Split View each app puts them on its outer edge. + - Top of the vertical axis: Back/Close, then prominent actions (Done); keep groupings. + - Give each toolbar item a visibility priority (overflow goes bottom to top); keep + frequent and badged items visible longest. + - Every non-text item gets a title **and** a symbol; minimize text-only buttons. + - Don't override default bar placement; don't space items manually — group them. + - Space-limited: navigation-focused → toolbar items overflow, tab bar stays; + task-focused → minimize the tab bar, keep toolbar actions. + - Use the system overflow menu; reserve the ellipsis symbol for it. +- Full-width layouts are allowed for bar-less, non-scrolling views (Calculator) if + nothing collides with the Dynamic Island or status bar. +- Games: playable in every pose; prefer changing aspect ratio over letter/pillarboxing. + +## Not published — do not invent +The HIG gives no point dimensions for either iPhone Duo display or the fold region. Take +canvas sizes from Xcode Device Hub (`viewports.md`) and state that source in the spec. diff --git a/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/liquid-glass.md b/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/liquid-glass.md index d604a3e..dc1dc30 100644 --- a/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/liquid-glass.md +++ b/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/liquid-glass.md @@ -1,35 +1,59 @@ --- name: liquid-glass -description: "Canonical Liquid Glass facts (introduced iOS 26, current in iOS 27) — the only source for this material in this plugin. No numeric corner-radius exists officially; do not invent one." -when-to-use: "Deciding whether and how to apply Liquid Glass to navigation, controls, or icons in an iOS mockup." -keywords: ios, liquid-glass, ios26, material, navigation +description: "Canonical Liquid Glass rules (current Apple design language, iOS/iPadOS/macOS 27 kits) — functional layer only, regular vs clear, 35% dimming, color on primary-action backgrounds, per-platform behavior. No numeric corner radius is published." +when-to-use: "Deciding whether and how to apply Liquid Glass to navigation, controls, or icons in an Apple-platform mockup." +keywords: ios, macos, tvos, visionos, liquid-glass, material, navigation, controls priority: high related: ../SKILL.md, semantic-colors.md --- -# Liquid Glass (introduced iOS 26, current in iOS 27) +# Liquid Glass -Source: developer.apple.com/documentation/technologyoverviews/liquid-glass. Status: verified official. -Still the platform design language in iOS/iPadOS 27 (released 14 Sep 2026) — see -developer.apple.com/ios ("Platform design and Liquid Glass") and -developer.apple.com/design/whats-new (App icons: "Refined guidance for Liquid Glass"). +Sources (fetched 2026-10-12): +- https://developer.apple.com/design/human-interface-guidelines/materials (Liquid Glass + section, last changed 2025-09-09) +- https://developer.apple.com/design/human-interface-guidelines/color (Liquid Glass color, + updated 2025-12-16) +- https://developer.apple.com/design/whats-new/ — iOS and iPadOS 27 and macOS 27 design + kits "include Liquid Glass": still the current language. -## What it is -A functional floating material layer for navigation and controls — not a static visual -style. Distinguishing behaviors: +## Layering +- Liquid Glass is the **functional layer** for controls and navigation (tab bars, toolbars, + sidebars) floating above content. **Never use it in the content layer** — use standard + materials there (iOS: ultra-thin, thin, regular, thick). Exception: transient controls + in content (sliders, toggles) take a glass look while being activated. +- **Sparingly**: system components adopt it automatically; on custom controls, limit it to + the most important functional elements. -- **Morphing controls** — controls reshape fluidly as context changes (e.g. a tab bar - compressing on scroll). -- **Concentricity** — nested shapes (a button inside a card inside a sheet) share a - common corner geometry so the curves read as concentric, not arbitrary. -- **Layered icons** — icons render in light / dark / clear / tinted layers that respond - to the material beneath them. +## Variants +- **Regular** (most system components): blurs and adjusts luminosity of what's behind. + Use when legibility is at risk or the component holds a lot of text (alerts, sidebars, + popovers). Scroll edge effects add blur/opacity reduction at edges. +- **Clear**: highly translucent — only over visually rich backgrounds (photos, video). + Over bright content add a **dark dimming layer at 35% opacity**; none needed over dark + content or AVKit's own playback controls. +- Appearance changes with the user's preferred glass look, Reduce Transparency and + Increase Contrast — show the mockup's glass surfaces still legible in those modes. -## What is NOT verified — do not invent -No official numeric corner-radius value exists for Liquid Glass shapes. If a mockup needs -a radius value, note it as a project-specific choice, never as "the Liquid Glass radius." +## Color on glass +- Glass has no inherent color; it picks up the content behind it. Small bars adapt light + ↔ dark with monochrome symbols; larger elements (sidebars) are more opaque. +- Color **sparingly**; to emphasize a primary action, tint the **background** (as + prominent buttons do with the accent color), not the symbol/text. Never tint several + controls' backgrounds. +- Colorful content behind bars → prefer monochrome bars or a well-differentiated accent; + keep the resting state (top of scroll) legible. -## Rule -Use Liquid Glass for the floating navigation/control layer where it fits the tone from -`design-method`; do not apply it as flat decoration. If unsure whether a surface qualifies -for it, prefer a plain semantic-color surface over a guessed glass treatment. +## Per platform (Materials page) +- **tvOS**: glass on navigation and system surfaces; image views and buttons adopt it on + focus — don't add it manually. +- **visionOS**: windows use the system **glass** material (unmodifiable, no separate Dark + Mode); prefer translucency to opaque fills; vibrancy `label` / `secondaryLabel` / + `tertiaryLabel` for text hierarchy. +- **watchOS**: keep the default material backgrounds of full-screen modal sheets. + +## Not published — do not invent +No numeric corner radius exists for Liquid Glass shapes. The rule is concentricity: +standard buttons, fields, headers and footers in a bar have radii concentric with the bar +corners (https://developer.apple.com/design/human-interface-guidelines/toolbars). A radius +in the spec is a project choice, labeled as such. diff --git a/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/macos.md b/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/macos.md new file mode 100644 index 0000000..fac5e43 --- /dev/null +++ b/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/macos.md @@ -0,0 +1,56 @@ +--- +name: macos +description: "macOS mockup rules from the HIG — system window frame, fixed text styles (no Dynamic Type), desktop tinting under the graphite accent, pointer styles, window layout and sidebar rules." +when-to-use: "Designing a macOS window, sidebar or toolbar mockup and its handoff spec." +keywords: macos, window, desktop-tinting, graphite, pointer, sidebar, typography +priority: high +related: ../SKILL.md, type-scales-other.md, semantic-colors.md, liquid-glass.md +--- + +# macOS + +All rules fetched 2026-10-12. A `/slug` on a line means +`https://developer.apple.com/design/human-interface-guidelines/`. + +## Window frame — system-drawn +- Avoid custom window frames or controls and never imitate the system appearance; the + mockup frames content inside a standard window (frame with window controls and toolbar + above a body area). — /windows +- Windows are user-resizable: the mockup canvas is a convenience, not a spec size; say so + in the handoff. +- Don't put controls or critical information at the bottom of a window (people drag + windows below the screen edge); keep content clear of the camera housing at the top + edge. — /layout (macOS) + +## Typography — no Dynamic Type +macOS doesn't support Dynamic Type. Use the fixed built-in text styles (Body 13 pt … +Large Title 26 pt, full table in `type-scales-other.md`) and, inside standard controls, +the dynamic system font variants (control content, menu, tool tips, …). — /typography + +## Desktop tinting — only under the graphite accent +When people choose the **graphite** accent color, macOS tints window backgrounds with the +desktop picture. Add transparency only to custom components that have a visible background +or bezel, and only in a neutral (non-colored) state — colored states stay opaque so their +color doesn't drift. Show it in the mockup as a variant, not as the default. — /dark-mode + +## Color and materials +- Use macOS dynamic system colors (`semantic-colors.md`) and vibrant colors on materials; + choose materials by purpose, not by the color they appear to give. — /materials +- Sidebar icons use the accent color by default and must follow the accent the user picks; + fixed colors only sparingly to carry meaning (e.g. Mail's yellow VIP). — /sidebars + +## Pointer, not touch +- macOS communicates interactivity through **standard pointer styles** and shows a + **tooltip** after hovering a button; secondary click reveals context menus. + — /pointing-devices, /buttons +- The highlight / lift / hover *content effects* are **iPadOS** pointer effects, not + macOS — don't spec them for a Mac window. A custom hover visual is a project choice, + labeled as such. +- Default control size 28×28 pt, minimum 20×20 pt (`touch-targets.md`). + +## Sidebars (also iPadOS) — /sidebars +- Show **no more than two levels** of hierarchy. Deeper data → a **split view with a + content list between the sidebar and the detail view**, not a third disclosure level. +- With two levels, title each group with a short descriptive label. +- Let people hide the sidebar (View menu Show/Hide Sidebar or a button); don't hide it by + default. Sidebars float in the Liquid Glass layer; content can extend beneath them. diff --git a/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/mockup.md b/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/mockup.md index 9469f0c..4d13e31 100644 --- a/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/mockup.md +++ b/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/mockup.md @@ -10,8 +10,8 @@ related: ../SKILL.md, viewports.md # Device-Framed HTML Mockup ## Structure -- Outer frame `
` sized to the exact point viewport from `viewports.md` (1pt = 1px in - the mockup, no arbitrary scaling). +- Outer frame `
` sized to the point canvas recorded per `viewports.md` (Xcode Device + Hub size, source stated in the spec; 1pt = 1px in the mockup, no arbitrary scaling). - `` to allow safe-area simulation. - Safe areas via `env(safe-area-inset-top)`, `env(safe-area-inset-bottom)`, diff --git a/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/semantic-colors.md b/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/semantic-colors.md index fd9decf..21f1102 100644 --- a/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/semantic-colors.md +++ b/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/semantic-colors.md @@ -1,25 +1,55 @@ --- name: semantic-colors -description: "Canonical iOS semantic color roles (WWDC19, still current) — background, grouped-background, and label hierarchies. Reference by role, never raw RGB/hex." -when-to-use: "Mapping design-system.md OKLCH tokens to iOS semantic color roles for a mockup or handoff spec." -keywords: ios, colors, semantic, hig, dark-mode +description: "Canonical Apple semantic color roles, contrast targets (4.5:1 minimum, 7:1 target, 3:1 large/bold), increased-contrast variants and Dark Mode base/elevated backgrounds — from the HIG Color, Dark Mode and Accessibility pages." +when-to-use: "Mapping design-system.md OKLCH tokens to Apple semantic color roles, or checking contrast in light, dark and Increase Contrast." +keywords: ios, macos, colors, semantic, hig, dark-mode, contrast, increase-contrast priority: critical -related: ../SKILL.md, dynamic-type.md +related: ../SKILL.md, dynamic-type.md, liquid-glass.md --- -# Semantic Color Roles +# Semantic Colors and Contrast -Source: WWDC19 (semantic colors introduced), still current. Status: verified. +Sources (fetched 2026-10-12): +- https://developer.apple.com/design/human-interface-guidelines/color +- https://developer.apple.com/design/human-interface-guidelines/dark-mode +- https://developer.apple.com/design/human-interface-guidelines/accessibility -## Backgrounds -`systemBackground`, `secondarySystemBackground`, `tertiarySystemBackground` — -`systemGroupedBackground` and its secondary/tertiary variants for grouped/table layouts. +## iOS / iPadOS roles +- Backgrounds: `systemBackground`, `secondarySystemBackground`, + `tertiarySystemBackground`; grouped: `systemGroupedBackground`, + `secondarySystemGroupedBackground`, `tertiarySystemGroupedBackground`. +- Labels: `label`, `secondaryLabel`, `tertiaryLabel`, `quaternaryLabel`. +- Also: `placeholderText`, `separator`, `opaqueSeparator`, `link`. -## Labels -`label`, `secondaryLabel`, `tertiaryLabel`, `quaternaryLabel` — the standard text -hierarchy, each with automatic light/dark adaptation. +## macOS roles (named on the HIG Color page) +`labelColor` (+ secondary/tertiary/quaternary), `windowBackgroundColor`, +`controlBackgroundColor`, `textBackgroundColor`, `underPageBackgroundColor`, +`separatorColor`, `placeholderTextColor`, `linkColor`, `selectedContentBackgroundColor`, +`unemphasizedSelectedContentBackgroundColor`, `alternatingContentBackgroundColors`. + +## Contrast targets +| Text | Minimum ratio | +|---|---| +| Up to 17 pt, any weight | 4.5:1 | +| 18 pt and up, any weight | 3:1 | +| Bold, any size | 3:1 | + +- **Target 7:1** for custom foreground/background pairs, especially small text (Dark Mode + page). 4.5:1 is the floor, not the goal. +- Check light **and** dark **and** Increase Contrast. If the default scheme misses the + minimum, the app must at least provide a higher-contrast scheme under Increase Contrast. + +## Custom colors +Supply a light and a dark variant, **plus an increased-contrast option for each** with +significantly more differentiation (Color page). System colors already ship accessible +variants. Never hard-code a value that doesn't adapt. + +## Dark Mode depth: base vs elevated +Dark Mode uses two background sets: **base** (dimmer, recedes) and **elevated** (brighter, +for foreground interfaces like popovers and sheets, and multitasking separation). Prefer +system backgrounds so the switch happens automatically; a custom background hides it. +Dark palettes are not plain inversions. Slightly darken white-background images. ## Rule Every color in the mockup and handoff spec references one of these roles (or a project -semantic token mapped onto one) — never a hardcoded RGB/hex value. This is what makes -dark mode and increased-contrast accessibility modes work automatically once implemented. +token mapped onto one) — never a raw RGB/hex. Report measured ratios per mode in the spec. diff --git a/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/touch-targets.md b/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/touch-targets.md index 5a4ac37..e493a4e 100644 --- a/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/touch-targets.md +++ b/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/touch-targets.md @@ -1,19 +1,34 @@ --- name: touch-targets -description: "iOS touch target size — verified against the live HIG Accessibility page (44x44 pt default, 28x28 pt minimum control size)." -when-to-use: "Sizing any tappable control in an iOS mockup." -keywords: ios, touch-target, accessibility, hig +description: "Control sizes for every Apple platform and spacing between targets — from the HIG Accessibility control-size table (iOS 44/28, macOS 28/20, tvOS 66/56, visionOS 60/28, watchOS 44/28)." +when-to-use: "Sizing any tappable/clickable/focusable control in an Apple-platform mockup." +keywords: ios, ipados, macos, tvos, visionos, watchos, touch-target, control-size, accessibility, hig priority: high -related: ../SKILL.md +related: ../SKILL.md, watch-tv-vision.md --- -# Touch Targets +# Control Sizes and Spacing -**44×44 pt** — the HIG's *default* control size for iOS/iPadOS; the HIG's absolute -*minimum* control size is **28×28 pt**. Source: -developer.apple.com/design/human-interface-guidelines/accessibility (control-size table, -verified 2026-09-27). Design to 44×44 pt; 28×28 pt is a floor, not a target. +Source: https://developer.apple.com/design/human-interface-guidelines/accessibility +(control-size table, fetched 2026-10-12). + +| Platform | Default control size | Minimum control size | +|---|---|---| +| iOS, iPadOS | 44×44 pt | 28×28 pt | +| macOS | 28×28 pt | 20×20 pt | +| tvOS | 66×66 pt | 56×56 pt | +| visionOS | 60×60 pt | 28×28 pt | +| watchOS | 44×44 pt | 28×28 pt | + +Design to the default; the minimum is a floor, not a target. + +## Spacing between targets (same page) +- About **12 pt** of padding around elements that have a bezel. +- About **24 pt** around the visible edges of elements without a bezel. +- visionOS: place button centers at least **60 pt** apart so the hover effect doesn't + obscure neighbors (HIG Layout > visionOS). ## Rule -Every tappable control in the mockup — buttons, list rows, icon-only controls — meets -44×44 pt minimum, even if the visible glyph is smaller (pad the hit area). +Every interactive control in the mockup — buttons, list rows, icon-only controls — meets +the platform default, even when the visible glyph is smaller (pad the hit area). Flag any +control under the default in the handoff spec. diff --git a/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/type-scales-other.md b/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/type-scales-other.md new file mode 100644 index 0000000..07f3c49 --- /dev/null +++ b/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/type-scales-other.md @@ -0,0 +1,77 @@ +--- +name: type-scales-other +description: "HIG-published type scales for macOS, tvOS, watchOS and visionOS notes — replaces any guessed intermediate size." +when-to-use: "Mapping typography for a macOS, tvOS, watchOS or visionOS mockup/handoff spec." +keywords: macos, tvos, watchos, visionos, typography, text-styles +priority: high +related: ../SKILL.md, dynamic-type.md, macos.md, watch-tv-vision.md +--- + +# Type Scales — macOS, tvOS, watchOS, visionOS + +Source: https://developer.apple.com/design/human-interface-guidelines/typography +(Specifications + Platform considerations). Fetched 2026-10-12. + +## macOS built-in text styles (fixed — macOS doesn't support Dynamic Type) + +| Text style | Weight | Size (pt) | Line height (pt) | Emphasized | +|---|---|---|---|---| +| Large Title | Regular | 26 | 32 | Bold | +| Title 1 | Regular | 22 | 26 | Bold | +| Title 2 | Regular | 17 | 22 | Bold | +| Title 3 | Regular | 15 | 20 | Semibold | +| Headline | Bold | 13 | 16 | Heavy | +| Body | Regular | 13 | 16 | Semibold | +| Callout | Regular | 12 | 15 | Semibold | +| Subheadline | Regular | 11 | 14 | Semibold | +| Footnote | Regular | 10 | 13 | Semibold | +| Caption 1 | Regular | 10 | 13 | Medium | +| Caption 2 | Medium | 10 | 13 | Semibold | + +To match text inside standard controls, the HIG lists **dynamic system font variants** +(control content, label, menu, menu bar, message, palette, title, tool tips, document +text, monospaced document text, bold system font, system font) — name the variant in the +spec rather than a point size. SF Pro is the system font; NY only via Mac Catalyst. + +## tvOS built-in text styles + +| Text style | Weight | Size (pt) | Leading (pt) | Emphasized | +|---|---|---|---|---| +| Title 1 | Medium | 76 | 96 | Bold | +| Title 2 | Medium | 57 | 66 | Bold | +| Title 3 | Medium | 48 | 56 | Bold | +| Headline | Medium | 38 | 46 | Bold | +| Subtitle 1 | Regular | 38 | 46 | Medium | +| Callout | Medium | 31 | 38 | Bold | +| Body | Medium | 29 | 36 | Bold | +| Caption 1 | Medium | 25 | 32 | Bold | +| Caption 2 | Medium | 23 | 30 | Bold | + +## watchOS Dynamic Type — Large (default 40/41/42 mm) and xLarge (default 44/45/49 mm) + +| Style | Large size / leading | xLarge size / leading | +|---|---|---| +| Large Title | 36 / 38.5 | 40 / 42.5 | +| Title 1 | 34 / 36.5 | 38 / 40.5 | +| Title 2 | 28 / 30.5 | 30 / 32.5 | +| Title 3 | 19 / 21.5 | 20 / 22.5 | +| Headline (Semibold) | 16 / 18.5 | 17 / 19.5 | +| Body | 16 / 18.5 | 17 / 19.5 | +| Caption 1 | 15 / 17.5 | 16 / 18.5 | +| Caption 2 | 14 / 16.5 | 15 / 17.5 | +| Footnote 1 | 13 / 15.5 | 14 / 16.5 | +| Footnote 2 | 12 / 14.5 | 13 / 15.5 | + +Other watchOS sizes (xSmall, Small = default 38 mm, xxLarge, xxxLarge, AX1–AX5) are on +the HIG page. SF Compact is the watchOS system font; complications use SF Compact Rounded. + +## visionOS +No point table is flattened here — read the HIG page if a value is needed. Published +rules: SF Pro system font; bolder Dynamic Type body and title styles; extra **Extra Large +Title 1 / Extra Large Title 2** for wide editorial layouts; prefer 2D text; default text +is white for contrast on glass; text off a background → consider bold, avoid shadows; +billboard labels anchored in space so they keep facing the wearer. + +## Rule +Name the platform's text style in the spec. A size not in these tables or on the HIG page +is marked "to reconfirm on developer.apple.com" — never interpolated. diff --git a/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/viewports.md b/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/viewports.md index ada9fc0..dedb998 100644 --- a/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/viewports.md +++ b/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/viewports.md @@ -1,26 +1,42 @@ --- name: viewports -description: "Canonical iOS device viewports in points, for mocking up screens at exact device dimensions." -when-to-use: "Building the device-framed HTML mockup and choosing which device(s) to target." -keywords: ios, viewport, device, points, iphone, ipad +description: "How to size an Apple-platform mockup canvas — size classes, safe areas and layout margins from the HIG Layout page; per-device point sizes are no longer published there, so take them from Xcode Device Hub." +when-to-use: "Choosing the canvas size(s) for a device-framed mockup and deciding which size classes to show." +keywords: ios, ipados, viewport, device, points, size-classes, safe-area, iphone, ipad priority: critical -related: ../SKILL.md, mockup.md +related: ../SKILL.md, mockup.md, ipados-iphone-duo.md --- -# Device Viewports (points) +# Viewports — Size Classes First, Device Sizes Second -Source: ios-resolution.com (last updated 2026-09-18). Status: verified. +Source: https://developer.apple.com/design/human-interface-guidelines/layout +(updated 2026-09-09, fetched 2026-10-12). -| Device | Viewport (pt) | Scale | -|---|---|---| -| iPhone 18 Pro Max / 17 Pro Max | 440 × 956 | @3x | -| iPhone 18 Pro / 17 Pro / 17 | 402 × 874 | @3x | -| iPhone 16 Pro Max | 430 × 932 | @3x | -| iPhone 16 | 393 × 852 | @3x | -| iPad Pro 13" | 1032 × 1376 | @2x | -| iPad Pro 11" (7th gen and later) | 834 × 1210 | @2x | +## What the HIG says +- **Lay out by size class, not by device type or orientation.** Each axis is compact or + regular; apps can appear in every combination (full screen, Split View, Slide Over, + iPhone Mirroring on Mac, resized iPad window). +- Keep functionality identical across size classes; only the amount shown changes + (e.g. tab bar → sidebar, overflow menu → exposed actions at regular width). +- Respect safe areas (Dynamic Island, status bar, toolbars, tab bars) and system layout + margins / readable-width guides. +- Test the **largest and smallest** layouts first; preview with Xcode **Device Hub** + (also for resized iPad windows and iPhone Mirroring). + +## Device point sizes — not published by the HIG +The current Layout page carries **no per-device dimension table** (the 2026-09-09 revision +has none; earlier revisions listed iPhone/iPad specs). The previous table in this file came +from a third-party site and was removed. + +To get a canvas size: open the target device in Xcode Device Hub / Simulator and record +the logical size in points and the scale factor in the handoff spec, with that source. +Never quote a device size from memory or a third-party site as "the" spec. + +## Minimum mockup set +1. iPhone, compact width (portrait). +2. iPad or a regular-width window (or iPhone Duo inner display — `ipados-iphone-duo.md`). +3. The same key screen at AX5 text size (`dynamic-type.md`). ## Rule -Mock up in the exact point dimensions above, not an arbitrary "mobile" breakpoint — iOS -layout is defined in points, and the mockup should read at 1:1 with what a developer sees -in an Xcode preview at that device. +Mock up at 1 pt = 1 CSS px on a canvas whose size and source are stated in the spec; no +arbitrary "mobile breakpoint" and no fixed-width layout the developer would have to copy. diff --git a/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/watch-tv-vision.md b/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/watch-tv-vision.md new file mode 100644 index 0000000..9b89a78 --- /dev/null +++ b/.cursor-plugin/plugins/fuse-design/skills/design-ios/references/watch-tv-vision.md @@ -0,0 +1,60 @@ +--- +name: watch-tv-vision +description: "Design basics for watchOS, tvOS and visionOS mockups — device context, layout, controls, focus, materials — each rule cited to its HIG page." +when-to-use: "Mocking up a watchOS, tvOS or visionOS screen; use alongside touch-targets.md and type-scales-other.md." +keywords: watchos, tvos, visionos, apple-watch, apple-tv, vision-pro, focus, ornaments, glass +priority: high +related: ../SKILL.md, touch-targets.md, type-scales-other.md, liquid-glass.md +--- + +# watchOS, tvOS, visionOS — Basics + +Fetched 2026-10-12. `/slug` = `https://developer.apple.com/design/human-interface-guidelines/`. + +## watchOS +- Context: worn on the wrist, viewed within about a foot, sessions often under a minute; + complications and notifications are used more than the app. — /designing-for-watchos +- Glanceable, single-screen interactions; **minimize hierarchy depth**; Digital Crown for + vertical navigation. — /designing-for-watchos +- At most **three glyph buttons or two text buttons** in a row; primary actions as + full-width buttons; same height for buttons sharing a row or a vertical stack. + — /layout, /buttons +- Toolbar buttons sit in the corners (system moves time and title). — /buttons +- Keep the default material background of full-screen modal sheets. — /materials +- Controls 44×44 pt default, 28×28 minimum; SF Compact; text enlargement ≥140%. + — /accessibility, /typography + +## tvOS +- Context: viewed from 8 feet or more, Siri Remote; long immersive sessions. + — /designing-for-tvos +- **Safe area**: inset primary content 60 pt from top and bottom, 80 pt from the sides + (overscan). — /layout (tvOS) +- Focus is the interaction model: the focused item usually gets the **parallax** effect; + selecting is a separate gesture. Leave room for items that grow on focus so they don't + overlap other content. — /focus-and-selection, /layout +- Grids (unfocused content width, 40 pt horizontal spacing, ≥100 pt vertical spacing): + 2 columns 860 pt · 3 → 560 · 4 → 410 · 5 → 320 · 6 → 260 · 7 → 217 · 8 → 184 · 9 → 160. + — /layout (tvOS Grids) +- Buttons and image views adopt Liquid Glass on focus automatically. — /materials +- Controls 66×66 pt default, 56×56 minimum; Body 29 pt. — /accessibility, /typography + +## visionOS +- Context: Shared Space by default, Full Space on demand; eyes look + indirect tap; keep + content in the field of view, relative to the head; use the **minimum immersion** each + moment needs. — /designing-for-visionos +- Windows use the unmodifiable **glass** material — keep it; prefer translucency to opaque + areas; there is no separate Dark Mode. — /windows, /materials +- Support resizing; keep content horizontally centered at large sizes; min/max sizes + only to prevent overlap, never to block resizing. — /layout (visionOS) +- **Ornaments** hold app-specific controls (toolbars, playback), never supplemental + content — that goes in an adjacent window. — /layout (visionOS) +- Buttons: prefer circular or capsule shapes with a visible background; sizes mini 28, + small 32, regular 44, large 52, extra large 64 pt; centers ≥60 pt apart (+4 pt padding + for buttons ≥60 pt); no custom hover effects; no white-fill/black-label custom buttons + (reserved for toggled state). — /buttons +- Controls 60×60 pt default, 28×28 minimum. — /accessibility +- Text: prefer 2D, white default, billboard spatial labels. — /typography + +## Rule +A watchOS/tvOS/visionOS value not on these pages is marked "to reconfirm on +developer.apple.com" in the spec, never borrowed from iOS. diff --git a/.cursor-plugin/plugins/fuse-design/skills/design-method/SKILL.md b/.cursor-plugin/plugins/fuse-design/skills/design-method/SKILL.md index 00aca71..9be1e8f 100644 --- a/.cursor-plugin/plugins/fuse-design/skills/design-method/SKILL.md +++ b/.cursor-plugin/plugins/fuse-design/skills/design-method/SKILL.md @@ -550,7 +550,7 @@ into next, per platform, once `design-system/SKILL.md` has already been read (st |---|---| | Web (marketing/landing) | `design-web` → `design-motion` → `design-review` | | Web app (dashboard/SaaS) | `design-webapp` → `design-motion` → `design-review` | -| iOS | `design-ios` → `design-review` | +| Apple — iOS, iPadOS, iPhone Duo, macOS, watchOS, tvOS, visionOS | `design-ios` (platform file in its `references/`) → `design-review` | | Android | `design-android` → `design-review` | | Copy only | `ux-copy` (any point in the pipeline) | diff --git a/.cursor-plugin/plugins/fuse-design/skills/design-motion/references/glassmorphism-advanced-ref.md b/.cursor-plugin/plugins/fuse-design/skills/design-motion/references/glassmorphism-advanced-ref.md index 43d030b..79698ef 100644 --- a/.cursor-plugin/plugins/fuse-design/skills/design-motion/references/glassmorphism-advanced-ref.md +++ b/.cursor-plugin/plugins/fuse-design/skills/design-motion/references/glassmorphism-advanced-ref.md @@ -12,7 +12,7 @@ related-skills: designing-systems, generating-components ## Agent Workflow (MANDATORY) -Before implementation, use `TeamCreate` to spawn 3 agents: +Before implementation, delegate via `Task` — spawn 3 agents in parallel (single message, 3 `Task` calls): 1. **fuse-ai-pilot:explore-codebase** - Check existing glass patterns 2. **fuse-ai-pilot:research-expert** - Latest backdrop-filter support diff --git a/.cursor-plugin/plugins/fuse-design/skills/design-motion/references/interactive-states-ref.md b/.cursor-plugin/plugins/fuse-design/skills/design-motion/references/interactive-states-ref.md index 801fbfb..bf56fa9 100644 --- a/.cursor-plugin/plugins/fuse-design/skills/design-motion/references/interactive-states-ref.md +++ b/.cursor-plugin/plugins/fuse-design/skills/design-motion/references/interactive-states-ref.md @@ -12,7 +12,7 @@ related-skills: adding-animations, generating-components ## Agent Workflow (MANDATORY) -Before implementation, use `TeamCreate` to spawn 3 agents: +Before implementation, delegate via `Task` — spawn 3 agents in parallel (single message, 3 `Task` calls): 1. **fuse-ai-pilot:explore-codebase** - Check existing state patterns 2. **fuse-ai-pilot:research-expert** - Framer Motion state animations diff --git a/.cursor-plugin/plugins/fuse-design/skills/design-motion/references/layered-backgrounds-ref.md b/.cursor-plugin/plugins/fuse-design/skills/design-motion/references/layered-backgrounds-ref.md index 9b077df..f09fb4c 100644 --- a/.cursor-plugin/plugins/fuse-design/skills/design-motion/references/layered-backgrounds-ref.md +++ b/.cursor-plugin/plugins/fuse-design/skills/design-motion/references/layered-backgrounds-ref.md @@ -13,7 +13,7 @@ related-skills: glassmorphism-advanced, generating-components ## Agent Workflow (MANDATORY) -Before implementation, use `TeamCreate` to spawn 3 agents: +Before implementation, delegate via `Task` — spawn 3 agents in parallel (single message, 3 `Task` calls): 1. **fuse-ai-pilot:explore-codebase** - Check existing background patterns 2. **fuse-ai-pilot:research-expert** - CSS filter and blend modes diff --git a/.cursor-plugin/plugins/fuse-design/skills/design-web/references/component-composition-ref.md b/.cursor-plugin/plugins/fuse-design/skills/design-web/references/component-composition-ref.md index bf501ab..0d6193b 100644 --- a/.cursor-plugin/plugins/fuse-design/skills/design-web/references/component-composition-ref.md +++ b/.cursor-plugin/plugins/fuse-design/skills/design-web/references/component-composition-ref.md @@ -12,7 +12,7 @@ related-skills: generating-components ## Agent Workflow (MANDATORY) -Before implementation, use `TeamCreate` to spawn 3 agents: +Before implementation, delegate via `Task` — spawn 3 agents in parallel (single message, 3 `Task` calls): 1. **fuse-ai-pilot:explore-codebase** - Check existing composition patterns 2. **fuse-ai-pilot:research-expert** - React 19 composition patterns diff --git a/.cursor-plugin/plugins/fuse-design/skills/design-web/references/component-variants-ref.md b/.cursor-plugin/plugins/fuse-design/skills/design-web/references/component-variants-ref.md index dd9a6be..de620c0 100644 --- a/.cursor-plugin/plugins/fuse-design/skills/design-web/references/component-variants-ref.md +++ b/.cursor-plugin/plugins/fuse-design/skills/design-web/references/component-variants-ref.md @@ -12,7 +12,7 @@ related-skills: glassmorphism-advanced, generating-components ## Agent Workflow (MANDATORY) -Before implementation, use `TeamCreate` to spawn 3 agents: +Before implementation, delegate via `Task` — spawn 3 agents in parallel (single message, 3 `Task` calls): 1. **fuse-ai-pilot:explore-codebase** - Check existing variant patterns 2. **fuse-ai-pilot:research-expert** - cva/class-variance-authority docs diff --git a/.cursor-plugin/plugins/fuse-design/skills/design-web/references/refs-design/fora-recode/index.html b/.cursor-plugin/plugins/fuse-design/skills/design-web/references/refs-design/fora-recode/index.html index 5633611..dd0fd09 100644 --- a/.cursor-plugin/plugins/fuse-design/skills/design-web/references/refs-design/fora-recode/index.html +++ b/.cursor-plugin/plugins/fuse-design/skills/design-web/references/refs-design/fora-recode/index.html @@ -7,103 +7,103 @@ - + - + + [measured] .framer-wz7sin{height:min-content;padding:var(--1gxu5kl);…gap:10px;width:1440px} + with --1gxu5kl:0px 40px 0px 40px (desktop) and 0px 24px 0px 24px (mobile). --> + The gradient is written in plain text in the source; the two hill images are + anchored AT THE BOTTOM, full width. It is not a section background, it is a horizon. -->
- -
+
-
- Community platform for creators -

Your community deserves its own home.

-

Fora gives creators, educators, +

+ Community platform for creators +

Your community deserves its own home.

+

Fora gives creators, educators, and coaches a fully branded space with courses, events, discussions, and members.

- - -
+ +
-
+
- +
- +
- Overview - Chat - Analytics - Courses - Events - Members - Leaderboard + Overview + Chat + Analytics + Courses + Events + Members + Leaderboard
-
+
- -
-
- S -

Strong By Ava

-

- + +

+
+ S +

Strong By Ava

+

+ @@ -111,8 +111,8 @@

Your community deserves its own home.

847 members

- Join now -

Ava Torres is a certified strength coach with + Join now +

Ava Torres is a certified strength coach with 80k+ followers on Instagram. → 12-week progressive training programs with video lessons → Weekly live Q&As and form-check threads → A supportive community of women training for strength

@@ -122,15 +122,15 @@

Your community deserves its own home.

- +
-
- Intro +
+ Intro
-
- +
-
-
-
- Core Features -

One platform to run right +
+
+
+ Core Features +

One platform to run right your entire community.

-

Fora brings your courses, events, +

Fora brings your courses, events, discussions, and members into one space, so you stop switching between tools and start spending time with your community.

-
- -
- - - - - +
+ +
+ + + + +
-
- -
- +
-
-
- -

Post, discuss, react — +

@@ -219,70 +219,70 @@

One platform to run right

-
-
-
-
- What you get -

Set up once.
+ [measured] .framer-uc3xgg{flex-flow:column;…gap:48px…} — THREE LARGE STACKED + CARDS, not a three-column grid. Each is cut into two halves whose + order flips from one card to the next. --> +
+
+
+
+ What you get +

Set up once.
Run it the way you want.

-

Fora is built so you spend time +

Fora is built so you spend time with your community, not configuring it. From your first setting to your hundredth member, the platform stays out of your way.

-
-
- -
-
+
+
+ +
+

Your front door

A community overview page that sells itself.

Customize your hero with a static color or animated gradient. Add a headline, a description and member avatars. Your overview page is the first thing a visitor sees — make it yours.

-

+

-
-
- -
-
+
+ +
+

Friendly competition

A leaderboard your members actually check.

Rankings based on posts, completions, and activity — surfaced automatically. Gives your most engaged members a reason to stay and your quieter ones a reason to show up.

-

+

-
-
- -
-
+
+ +
+

Courses

Build your course the way you teach.

Structure your content into chapters and lessons, in any order you want. Add your material, hit publish, and your members can start learning — right inside the community they already live in.

-

+

-
@@ -292,78 +292,78 @@

Build your course the way you teach.

-
-
- Pricing -

Clear pricing plans
that scale with you

+
+
+ Pricing +

Clear pricing plans
that scale with you

-
-
- - - +
+
+ + +
- Two months free on yearly + Two months free on yearly
-
-
- -
-

STARTER

-
- $0 - /month +
+
+ +
+

STARTER

+
+ $0 + /month
-

Everything you need to launch your community.

- Get Started -
-

Up to 200 members

-

Fora subdomain

-

Community feed & chat

-

Courses & events

-

Member profiles

-

Analytics

+

Everything you need to launch your community.

+ Get Started +
+

Up to 200 members

+

Fora subdomain

+

Community feed & chat

+

Courses & events

+

Member profiles

+

Analytics

-
- -
-

PRO

-
- $0 - /month + -
- -
-

ENTERPRISE

-

Custom price

-

For teams that need
more control.

- Contact us -
-

Unlimited members

-

Everything in Pro

-

Priority support

-

Dedicated onboarding

-

SLA & uptime guarantee

-

Custom contract

+
+ +
+

ENTERPRISE

+

Custom price

+

For teams that need
more control.

+ Contact us +
+

Unlimited members

+

Everything in Pro

+

Priority support

+

Dedicated onboarding

+

SLA & uptime guarantee

+

Custom contract

@@ -372,81 +372,81 @@

Clear pricing plans
that scale with you

+ [measured] .framer-2jfjwj{flex-flow:column;flex:2 0 0;…gap:8px…}: two columns at a + 1:2 ratio, categories and contact inset on the left, accordions on the right. -->
-
-
-
- FAQ -

Answers to the questions that come up most.

+
+
+
+ FAQ +

Answers to the questions that come up most.

-

Learn how Fora works, what's +

Learn how Fora works, what's included in the beta, what your members experience, and what to expect as the platform grows.

-
-
+
+
- - - + + +
-
- -
+
+ +
Got Questions?
-

Can't find what you're looking for? Reach out — we're fast.

-

Contact us →

+

Can't find what you're looking for? Reach out — we're fast.

+

Contact us →

-
-
- - -

Fora is a white-label community platform for +

Fora is a white-label community platform for creators, educators, and coaches. You get a fully branded space with courses, events, discussions, and members — all running on your own subdomain or custom domain.

-
- - -

Most communities are live in under 20 minutes. You +

Most communities are live in under 20 minutes. You pick a subdomain, customize your overview page, and invite your first members. No code, no infrastructure.

-
- - -

Not at all. Everything happens through a clean +

Not at all. Everything happens through a clean dashboard. The only technical step is adding a DNS record if you want a fully custom domain — and we walk you through it.

-
- - -

Yes. Fora is in beta and completely free. No credit +

Yes. Fora is in beta and completely free. No credit card, no trial period — just sign up and go. When paid plans launch, beta members get a permanent discount locked in.

-
- - -

You'll get early notice before anything changes. +

You'll get early notice before anything changes. Beta members are first to know, first to get access to paid plans, and first to lock in their discount.

@@ -457,41 +457,41 @@
Got Questions?
-
+ The mockup overflows its column by 272px and gets cut by the section + edge. It sits in a SIBLING container of the text: placed inside, it would + cover it. A 190px horizon band closes the section. -->
-
-
+
+
-

Your community is one sec away.

-

Fora is in beta and free to join. Set up your space, +

Your community is one sec away.

+

Fora is in beta and free to join. Set up your space, invite your first members, and see what it feels like when everything lives in one place — under your name.

- Start for free + Start for free
- -
diff --git a/.cursor-plugin/plugins/fuse-design/skills/design-web/references/refs-design/fora-recode/styles.css b/.cursor-plugin/plugins/fuse-design/skills/design-web/references/refs-design/fora-recode/styles.css index 3801d8a..4695e29 100644 --- a/.cursor-plugin/plugins/fuse-design/skills/design-web/references/refs-design/fora-recode/styles.css +++ b/.cursor-plugin/plugins/fuse-design/skills/design-web/references/refs-design/fora-recode/styles.css @@ -1,1097 +1,1096 @@ /* ========================================================================= - fora.so — RÉFÉRENCE DE DESIGN (recode vanilla) + fora.so — DESIGN REFERENCE (vanilla recode) - [relevé] = lu littéralement dans l'export Framer. La forme citée en - commentaire est grep-able telle quelle dans la source. - [arbitrage] = choix de ce fichier, parce que la source ne donne pas la - valeur ou la pilote en JavaScript. + [measured] = read literally in the Framer export. The form quoted in the + comment is grep-able as is in the source. + [decided] = a choice of this file, because the source does not give the + value or drives it from JavaScript. - La source ne contient AUCUN @keyframes et AUCUN animation-timeline : tout - le mouvement vient du runtime Framer Motion + Lenis 1.3.19. Les PARAMÈTRES - d'animation sont en revanche sérialisés dans -