tech-lead-stack 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/hr-workflows/hr-ad-distributor.md +18 -0
- package/.agents/hr-workflows/hr-candidate-sourcer.md +18 -0
- package/.agents/hr-workflows/hr-endorsement-synthesizer.md +18 -0
- package/.agents/hr-workflows/hr-intake-specifier.md +18 -0
- package/.agents/hr-workflows/hr-interview-auditor.md +18 -0
- package/.agents/hr-workflows/hr-jd-drafter.md +18 -0
- package/.agents/hr-workflows/hr-pipeline-translator.md +18 -0
- package/.agents/pm-workflows/pm-action-item-mapper.md +18 -0
- package/.agents/pm-workflows/pm-backlog-auditor.md +18 -0
- package/.agents/pm-workflows/pm-context-summarizer.md +18 -0
- package/.agents/pm-workflows/pm-design-system-auditor.md +18 -0
- package/.agents/pm-workflows/pm-effort-estimator.md +18 -0
- package/.agents/pm-workflows/pm-newsletter-generator.md +18 -0
- package/.agents/pm-workflows/pm-progress-translator.md +18 -0
- package/.agents/pm-workflows/pm-release-note-drafter.md +18 -0
- package/.agents/pm-workflows/pm-risk-detector.md +18 -0
- package/.agents/pm-workflows/pm-story-augmenter.md +18 -0
- package/.agents/pm-workflows/pm-task-specifier.md +18 -0
- package/.agents/workflows/accessibility-audit.md +30 -0
- package/.agents/workflows/ask.md +44 -0
- package/.agents/workflows/audit-tech-debt.md +31 -0
- package/.agents/workflows/changelog.md +31 -0
- package/.agents/workflows/clean-code-audit.md +31 -0
- package/.agents/workflows/code-review.md +38 -0
- package/.agents/workflows/competitive-analysis.md +46 -0
- package/.agents/workflows/design-requirements-to-architecture.md +31 -0
- package/.agents/workflows/design-system-review.md +113 -0
- package/.agents/workflows/dev-team-sub-max.md +57 -0
- package/.agents/workflows/dev-team-sub-pro.md +57 -0
- package/.agents/workflows/dev-team.md +52 -0
- package/.agents/workflows/feature-orchestrator.md +43 -0
- package/.agents/workflows/init.md +31 -0
- package/.agents/workflows/mission-architect.md +31 -0
- package/.agents/workflows/onboard-dev.md +31 -0
- package/.agents/workflows/plan-quick.md +33 -0
- package/.agents/workflows/plan.md +31 -0
- package/.agents/workflows/pr-automator.md +44 -0
- package/.agents/workflows/pr-design-review-init.md +57 -0
- package/.agents/workflows/qa-handover.md +40 -0
- package/.agents/workflows/reflexion-loop-sub-max.md +46 -0
- package/.agents/workflows/reflexion-loop-sub-pro.md +45 -0
- package/.agents/workflows/reflexion-loop.md +66 -0
- package/.agents/workflows/regression-bug-fix.md +31 -0
- package/.agents/workflows/security-audit.md +31 -0
- package/.agents/workflows/standup-daily-summary.md +31 -0
- package/.agents/workflows/strategy-target-evaluation.md +31 -0
- package/.agents/workflows/style-logic-exporter.md +84 -0
- package/.agents/workflows/ui-spec-generator.md +156 -0
- package/.agents/workflows/verify-changes.md +31 -0
- package/.agents/workflows/vertical-slice.md +52 -0
- package/.agents/workflows/weekly-leadership-report.md +39 -0
- package/.ai/agent-surfaces.json +1235 -0
- package/.ai/hooks/README.md +32 -0
- package/.ai/hooks/build-requires-approved-spec.json +10 -0
- package/.ai/hooks/deploy-requires-review.json +11 -0
- package/.ai/hooks/no-ai-approve-deploy.json +10 -0
- package/.ai/hooks/protected-paths.json +10 -0
- package/.ai/hr-skills/hr-ad-distributor.md +61 -0
- package/.ai/hr-skills/hr-candidate-sourcer.md +69 -0
- package/.ai/hr-skills/hr-endorsement-synthesizer.md +82 -0
- package/.ai/hr-skills/hr-intake-specifier.md +71 -0
- package/.ai/hr-skills/hr-interview-auditor.md +60 -0
- package/.ai/hr-skills/hr-jd-drafter.md +61 -0
- package/.ai/hr-skills/hr-pipeline-translator.md +58 -0
- package/.ai/pm-skills/pm-action-item-mapper.md +61 -0
- package/.ai/pm-skills/pm-backlog-auditor.md +57 -0
- package/.ai/pm-skills/pm-context-summarizer.md +61 -0
- package/.ai/pm-skills/pm-effort-estimator.md +79 -0
- package/.ai/pm-skills/pm-newsletter-generator.md +60 -0
- package/.ai/pm-skills/pm-progress-translator.md +59 -0
- package/.ai/pm-skills/pm-release-note-drafter.md +58 -0
- package/.ai/pm-skills/pm-risk-detector.md +58 -0
- package/.ai/pm-skills/pm-story-augmenter.md +70 -0
- package/.ai/pm-skills/pm-task-specifier.md +70 -0
- package/.ai/policies/diagnosis-first.md +26 -0
- package/.ai/policies/four-pillars.md +72 -0
- package/.ai/policies/user-sovereignty.md +25 -0
- package/.ai/skills/accessibility-auditor.md +105 -0
- package/.ai/skills/agent-optimizer.md +99 -0
- package/.ai/skills/ask.md +200 -0
- package/.ai/skills/capacity-planner.md +60 -0
- package/.ai/skills/changelog-generator.md +131 -0
- package/.ai/skills/clean-code.md +136 -0
- package/.ai/skills/code-review-checklist.md +103 -0
- package/.ai/skills/codebase-onboarding-intelligence.md +130 -0
- package/.ai/skills/competitive-analysis.md +114 -0
- package/.ai/skills/daily-standup.md +106 -0
- package/.ai/skills/design-system-review.md +308 -0
- package/.ai/skills/dev-team-local.md +52 -0
- package/.ai/skills/dev-team-orchestrator.md +289 -0
- package/.ai/skills/dev-team-sub-max.md +369 -0
- package/.ai/skills/dev-team-sub-pro.md +288 -0
- package/.ai/skills/dummy-skill.md +28 -0
- package/.ai/skills/feature-design-assistant.md +134 -0
- package/.ai/skills/feature-orchestrator.md +163 -0
- package/.ai/skills/knowledge-manager.md +103 -0
- package/.ai/skills/mission-architect.md +86 -0
- package/.ai/skills/mission-control.md +102 -0
- package/.ai/skills/operational-boundaries.md +94 -0
- package/.ai/skills/planning-expert-quick.md +164 -0
- package/.ai/skills/planning-expert.md +390 -0
- package/.ai/skills/pr-automator.md +431 -0
- package/.ai/skills/product-strategist.md +123 -0
- package/.ai/skills/qa-handover-generator.md +182 -0
- package/.ai/skills/reflexion-loop-local.md +39 -0
- package/.ai/skills/reflexion-loop-sub-max.md +214 -0
- package/.ai/skills/reflexion-loop-sub-pro.md +164 -0
- package/.ai/skills/reflexion-loop.md +119 -0
- package/.ai/skills/regression-bug-fix.md +95 -0
- package/.ai/skills/security-audit.md +97 -0
- package/.ai/skills/solutioning-facilitator.md +338 -0
- package/.ai/skills/style-logic-exporter.md +115 -0
- package/.ai/skills/technical-debt-auditor.md +119 -0
- package/.ai/skills/ui-spec-generator.md +78 -0
- package/.ai/skills/verification-auditor.md +101 -0
- package/.ai/skills/vertical-slice-decomposer.md +335 -0
- package/.ai/skills/visual-verifier.md +134 -0
- package/.ai/skills/weekly-leadership-report.md +224 -0
- package/.ai/skills.graph.json +1550 -0
- package/LICENSE +21 -0
- package/README.md +58 -0
- package/dist/mcp-server.mjs +5203 -0
- package/package.json +48 -0
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vertical-slice-decomposer
|
|
3
|
+
description: >
|
|
4
|
+
Decomposes one or more user stories — optionally with design screenshots or
|
|
5
|
+
Figma URLs — into thin, independently deployable vertical slices (<=2 days)
|
|
6
|
+
and emits ClickUp-ready tasks. Each task carries a technical-details section,
|
|
7
|
+
a developer technical prompt, a dark-release (beta-flag) decision, and a
|
|
8
|
+
mock-vs-real-backend decision. Built for greenfield and (primarily) brownfield
|
|
9
|
+
features under Trunk-Based Development.
|
|
10
|
+
cost: ~4450 tokens
|
|
11
|
+
modes: [read-only, write, mcp]
|
|
12
|
+
surface: public
|
|
13
|
+
category: Plan & Harden
|
|
14
|
+
how:
|
|
15
|
+
'Phase 0 stack + domain-boundary + design-input discovery, then a
|
|
16
|
+
deployability-test + BDD + design-state slicing engine, a persistent Slice
|
|
17
|
+
Ledger for multi-turn anti-drift, and a fixed Output Contract per task.'
|
|
18
|
+
useCase:
|
|
19
|
+
'Turning brownfield/greenfield stories and designs into 2-day, dark-releasable
|
|
20
|
+
slices under Trunk-Based Development.'
|
|
21
|
+
phase: plan
|
|
22
|
+
kind: skill
|
|
23
|
+
domain: eng
|
|
24
|
+
ownership:
|
|
25
|
+
drive: human-ai
|
|
26
|
+
approve: human
|
|
27
|
+
targets: [local, api, subscription]
|
|
28
|
+
minModelClass: large
|
|
29
|
+
consumes: [spec]
|
|
30
|
+
emits: [plan]
|
|
31
|
+
suggests:
|
|
32
|
+
[
|
|
33
|
+
clean-code,
|
|
34
|
+
regression-bug-fix,
|
|
35
|
+
operational-boundaries,
|
|
36
|
+
style-logic-exporter,
|
|
37
|
+
ui-spec-generator,
|
|
38
|
+
]
|
|
39
|
+
policies:
|
|
40
|
+
- user-sovereignty
|
|
41
|
+
- diagnosis-first
|
|
42
|
+
- four-pillars
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
# Vertical Slice Decomposer (The Corridor Cutter)
|
|
46
|
+
|
|
47
|
+
## Runtime modes
|
|
48
|
+
|
|
49
|
+
Produces a verifiable decomposition blueprint in read-only chat, and executes +
|
|
50
|
+
verifies the decomposition phase in an IDE/MCP agent.
|
|
51
|
+
|
|
52
|
+
> [!IMPORTANT] **Four-pillar alignment**: G-Stack (Diagnosis before Advice),
|
|
53
|
+
> MinimumCD (atomic batches, vertical slicing, continuous verification), Agent
|
|
54
|
+
> Skills (Process over Prose, Anti-Rationalization), Modern Web Guidance.
|
|
55
|
+
> **Ethos**: a slice is a thin, fully functional vertical corridor — never a
|
|
56
|
+
> layer. **Done = deployable**, even if hidden behind a beta flag.
|
|
57
|
+
>
|
|
58
|
+
> [!CAUTION] **PRIME DIRECTIVE — ANTI-DRIFT (NON-NEGOTIABLE)** This is an
|
|
59
|
+
> **iterative, multi-turn** task. The single goal is: **convert the input user
|
|
60
|
+
> story/stories into vertical slices and emit ClickUp tasks.**
|
|
61
|
+
>
|
|
62
|
+
> 1. **The Slice Ledger is the source of truth.** Maintain it for the ENTIRE
|
|
63
|
+
> conversation (see Phase 1). It survives every detour.
|
|
64
|
+
> 2. **Detours are allowed, drift is not.** If the conversation dives into error
|
|
65
|
+
> resolution, deeper requirements, or implementation detail for ONE slice,
|
|
66
|
+
> resolve it, fold the outcome back into that slice's entry, then
|
|
67
|
+
> **immediately reprint the Ledger and Requirement Inventory and resume the
|
|
68
|
+
> decomposition queue.**
|
|
69
|
+
> 3. **Every response that follows a detour MUST end by reprinting BOTH the
|
|
70
|
+
> Ledger and Requirement Inventory**, re-running the coverage check, and
|
|
71
|
+
> naming the next pending slice. Never silently abandon a pending slice.
|
|
72
|
+
> 4. **Goal Drift Guard (from `operational-boundaries`):** ignore unrelated
|
|
73
|
+
> workspace files/tasks/goals. **Exception:** design screenshots and Figma
|
|
74
|
+
> URLs the user provides WITH a story are in-scope feature spec — not noise.
|
|
75
|
+
> If a request is not part of slicing the in-scope stories, confirm scope
|
|
76
|
+
> before acting — do not silently expand.
|
|
77
|
+
|
|
78
|
+
## 🔒 VERBATIM ZONES (DO NOT SUMMARIZE)
|
|
79
|
+
|
|
80
|
+
**VERBATIM ZONES:** user-facing copy strings, enum/identifier values, URLs, GWT
|
|
81
|
+
acceptance lines, and the Output Contract template MUST be reproduced
|
|
82
|
+
character-for-character wherever they appear in output. Paraphrasing/truncating
|
|
83
|
+
any of them is a hard verification failure.
|
|
84
|
+
|
|
85
|
+
The skill's output is a verbatim template; any intermediary that distills it
|
|
86
|
+
must treat fenced Output Contract, tables, GWT lines, and sentinel regions as
|
|
87
|
+
protected regions, not narrative.
|
|
88
|
+
|
|
89
|
+
## Phase 0: Tech-Stack & Domain Discovery (MANDATORY)
|
|
90
|
+
|
|
91
|
+
- **Skill acquisition (NON-NEGOTIABLE):** IDE/MCP agent MUST call `get_skills`;
|
|
92
|
+
Chat UI MUST call `get_skill`. Never read `.ai/skills/` via raw file access.
|
|
93
|
+
- **Stack ID:** Inspect manifest/config (`package.json`, `tsconfig.json`,
|
|
94
|
+
`schema.prisma`/`*.graphql`, CI yaml) for framework + conventions (case style,
|
|
95
|
+
validation lib, query layer, existing types to model contracts from).
|
|
96
|
+
- **Domain boundary (CRITICAL — defines "end-to-end"):** A **full-stack product
|
|
97
|
+
team** slices to a **UI** the user observes; a **subdomain/service team**
|
|
98
|
+
slices to an **API contract** its consumers observe. State which applies.
|
|
99
|
+
- **Release & mock infra:** Locate the dark-release gate (Next.js middleware,
|
|
100
|
+
`beta_*` cookies, `x-beta-flags` header) and the mock layer (backend-first
|
|
101
|
+
interception in the API service = **default**; client MSW = **fallback**).
|
|
102
|
+
- **Design inputs (when provided):** Treat user-supplied screenshots and Figma
|
|
103
|
+
URLs as in-scope spec. Read Figma via the Figma MCP/connector when available;
|
|
104
|
+
otherwise request an exported frame or screenshot. Extract the distinct
|
|
105
|
+
states, components, and variants shown (empty / loading / error / populated;
|
|
106
|
+
desktop / mobile). Reuse `ui-spec-generator` / `style-logic-exporter` if
|
|
107
|
+
present.
|
|
108
|
+
|
|
109
|
+
## Phase 0.5: Input Classification & Spec Precondition
|
|
110
|
+
|
|
111
|
+
- **Classify input:** is it a formalized `spec` or a raw story/intent-brief?
|
|
112
|
+
(Heuristics: per-touchpoint acceptance criteria present, contracts resolved,
|
|
113
|
+
states enumerated).
|
|
114
|
+
- **If NOT a spec:** STOP and recommend running the `specify` phase first.
|
|
115
|
+
- **Primary:** `solutioning-facilitator` to converge business rules / open
|
|
116
|
+
questions and emit a spec (Decision Record + backlog-ready story).
|
|
117
|
+
- **Optional upstream:** the `design-requirements-to-architecture` workflow
|
|
118
|
+
(feature-design-assistant) to translate requirements into a technical spec.
|
|
119
|
+
- **Note:** Only pull in `ui-spec-generator` if UI skeleton components must be
|
|
120
|
+
scaffolded — it is NOT the spec source.
|
|
121
|
+
- **Inline fallback:** If the user declines the upstream step, run an inline
|
|
122
|
+
"Spec Normalization" that produces the structured spec (touchpoints, states,
|
|
123
|
+
contracts, verbatim copy, enums) and **REQUIRE explicit user confirmation** of
|
|
124
|
+
that normalized spec before any slicing. _(A spec — or a confirmed
|
|
125
|
+
inline-normalized spec — is a hard precondition.)_
|
|
126
|
+
|
|
127
|
+
## Phase 1: Story Intake & The Slice Ledger
|
|
128
|
+
|
|
129
|
+
- **Ingest** every input story plus any attached design frames (screenshots /
|
|
130
|
+
Figma). For multi-story input, queue them; do not interleave. Finish slicing
|
|
131
|
+
story N before story N+1 (limit WIP). Each distinct UI state/variant in a
|
|
132
|
+
design is a candidate slice boundary.
|
|
133
|
+
- **INVEST screen** each story — Independent, Negotiable, Valuable, Estimable,
|
|
134
|
+
**Small (<=2 days)**, Testable. Any story failing **Small** MUST be sliced.
|
|
135
|
+
- **Maintain the Ledger** (reprint at every checkpoint and after every detour):
|
|
136
|
+
|
|
137
|
+
| # | Story | Slice | Beta flag | Mock/Real | Status (queued/sliced/emitted) |
|
|
138
|
+
| --- | ----- | ----- | --------- | --------- | ------------------------------ |
|
|
139
|
+
|
|
140
|
+
## Phase 1.5: Requirement Inventory
|
|
141
|
+
|
|
142
|
+
Build BEFORE slicing; reprint with the Ledger every turn.
|
|
143
|
+
|
|
144
|
+
<!-- slm-gate:verbatim-start -->
|
|
145
|
+
|
|
146
|
+
| # | Requirement/touchpoint | Exact string(s) verbatim | Source (story line / Figma node) | Covered by slice(s) |
|
|
147
|
+
| --- | ---------------------- | ------------------------ | -------------------------------- | ------------------- |
|
|
148
|
+
|
|
149
|
+
<!-- slm-gate:verbatim-end -->
|
|
150
|
+
|
|
151
|
+
- **Rule:** every distinct touchpoint, copy string, enum value, URL, and
|
|
152
|
+
truth-table row from the input becomes one row. No slicing may begin until the
|
|
153
|
+
inventory is complete.
|
|
154
|
+
|
|
155
|
+
## Phase 2: Vertical Slicing Engine
|
|
156
|
+
|
|
157
|
+
- **The deployability test (apply to every candidate item):**
|
|
158
|
+
1. Can a user or consumer **observe** behaviour after this ships?
|
|
159
|
+
2. Can the team **deploy it without waiting** on another team/item?
|
|
160
|
+
3. Does it deliver **behaviour**, not a layer? — Any "no" ⇒ **horizontal
|
|
161
|
+
slice; reslice.**
|
|
162
|
+
- **Find boundaries with BDD.** Write `Given–When–Then` scenarios; each scenario
|
|
163
|
+
is a candidate slice with built-in acceptance criteria.
|
|
164
|
+
- **Slicing strategies** (pick the smallest valuable cut):
|
|
165
|
+
|
|
166
|
+
| Strategy | Cut by | Example |
|
|
167
|
+
| ---------------- | ------------------ | ------------------------------------------------ |
|
|
168
|
+
| Workflow step | one step of a flow | "add to cart" before "checkout" |
|
|
169
|
+
| Business rule | one rule | ">$100 free shipping" before "intl shipping" |
|
|
170
|
+
| Data variation | one data type | "credit card" before "PayPal" |
|
|
171
|
+
| Operation (CRUD) | one operation | "create" before "edit"/"delete" |
|
|
172
|
+
| Happy path first | success case | "completes checkout" before "payment-fail error" |
|
|
173
|
+
| Platform | one platform | "desktop web" before "mobile" |
|
|
174
|
+
| Performance | works first | "returns results" before "<200ms" |
|
|
175
|
+
|
|
176
|
+
- **Design-driven boundaries:** each state/variant a design shows maps to a
|
|
177
|
+
strategy — populated view = happy path first; empty/loading/error states =
|
|
178
|
+
follow-up slices; desktop vs mobile = platform; data variants = data
|
|
179
|
+
variation.
|
|
180
|
+
- **Task decomposition inside a slice:** each task is hours-not-days, leaves
|
|
181
|
+
trunk green, ordered simplest-first, may use a flag/stub to integrate safely.
|
|
182
|
+
Edge/error cases follow the happy path immediately — never deferred to
|
|
183
|
+
someday.
|
|
184
|
+
- **Contracts evolve incrementally:** add only the columns/fields this slice
|
|
185
|
+
needs (backward-compatible). Subdomain teams version the contract and use
|
|
186
|
+
**contract tests** so each side deploys independently.
|
|
187
|
+
|
|
188
|
+
## Phase 2.5: Multi-Repository Grounding (EVIDENCE-REQUIRED)
|
|
189
|
+
|
|
190
|
+
- **Expect MULTIPLE workspace roots** (e.g., a backend service repo AND a
|
|
191
|
+
frontend app repo). Enumerate the roots in play; if the spec implies a repo
|
|
192
|
+
not in context, REQUEST its path — never guess across the gap.
|
|
193
|
+
- **For EVERY touchpoint**, resolve and cite: `repo` -> `exact file path` ->
|
|
194
|
+
`exact symbol` (GraphQL operation NAME and type, resolver/plugin, React
|
|
195
|
+
component, email template) -> `short snippet or line ref`.
|
|
196
|
+
- **No slice may be emitted with an unresolved identifier.** Unknowns go into an
|
|
197
|
+
explicit "Grounding Gaps" list, not a guessed slice.
|
|
198
|
+
- **Truncation Guard:** if a codebase read looks truncated/elided (e.g. an
|
|
199
|
+
"expand_elision" marker or an obviously partial file), you MUST expand/re-read
|
|
200
|
+
before naming a symbol from it — never infer an identifier from a partial
|
|
201
|
+
result.
|
|
202
|
+
|
|
203
|
+
## Phase 3: Dark-Release & Mocking Decision (per slice)
|
|
204
|
+
|
|
205
|
+
- **Beta flag?** If the slice's user-facing behaviour is incomplete or must be
|
|
206
|
+
hidden until QA/release, it ships behind the **dark-release gate** (a `beta_*`
|
|
207
|
+
flag, e.g. `auditBeta`, set on authorised domains via the middleware
|
|
208
|
+
cookie/`x-beta-flags` header). Record the flag name. The introducing dev owns
|
|
209
|
+
removing the flag at go-live.
|
|
210
|
+
- **Mock or real backend?**
|
|
211
|
+
- **Mock (backend-first, default):** new/unbuilt contract → define the GraphQL
|
|
212
|
+
query/mutation schema in the API service first, intercept on the
|
|
213
|
+
`x-beta-flags` header, return the mock payload. Stateful mock store if a
|
|
214
|
+
write must be observable by a later read. Frontend MSW only as fallback.
|
|
215
|
+
- **Real:** the contract already exists and is stable → wire to it directly.
|
|
216
|
+
- **Transition note:** mock→real is non-destructive — run the migration /
|
|
217
|
+
point at the live resolver; only the data values change, the schema is
|
|
218
|
+
identical.
|
|
219
|
+
|
|
220
|
+
## Phase 4: ClickUp Task Emission (OUTPUT CONTRACT — fill verbatim)
|
|
221
|
+
|
|
222
|
+
## OUTPUT DISCIPLINE (NON-NEGOTIABLE)
|
|
223
|
+
|
|
224
|
+
The ONLY deliverable is `vertical-slices.md` (+ Ledger + Requirement Inventory).
|
|
225
|
+
The skill MUST NOT write source code, MUST NOT create any other file, MUST NOT
|
|
226
|
+
begin implementation. Implementation is delegated only via the per-slice
|
|
227
|
+
Technical Prompt.
|
|
228
|
+
|
|
229
|
+
Emit **one block per slice** (one slice = one task = <=2 days). Use this exact
|
|
230
|
+
structure every time, then add the slice to the Ledger as `emitted`:
|
|
231
|
+
|
|
232
|
+
<!-- slm-gate:verbatim-start -->
|
|
233
|
+
|
|
234
|
+
```md
|
|
235
|
+
### Task: <imperative title, names the corridor>
|
|
236
|
+
|
|
237
|
+
**Dark release:** Flag required? <yes: `betaName` | no>. Flag owner removes at
|
|
238
|
+
go-live. **Data source:** <Mock (backend-first / MSW fallback) | Real backend>.
|
|
239
|
+
**Definition of Ready:**
|
|
240
|
+
|
|
241
|
+
- GWT defined
|
|
242
|
+
- <=2 days
|
|
243
|
+
- testable
|
|
244
|
+
- deps resolved. **Definition of Done:**
|
|
245
|
+
- integrated to trunk
|
|
246
|
+
- unit tests pass
|
|
247
|
+
- code reviewed
|
|
248
|
+
- deployable (flag hides incomplete UI)
|
|
249
|
+
- docs updated
|
|
250
|
+
- no known defects. **Vertical slice:** As a <actor>, I can
|
|
251
|
+
<observable behaviour> [happy path]. **Acceptance criteria (GWT):**
|
|
252
|
+
- Given …
|
|
253
|
+
- When …
|
|
254
|
+
- Then … **Technical details:**
|
|
255
|
+
- Layers touched (UI / API / data) within the team's domain
|
|
256
|
+
- Contract: operation TYPE (query | mutation | subscription) + exact operation
|
|
257
|
+
name (from the codebase) + the type/field being extended + payload shape as a
|
|
258
|
+
typed schema. If a field is exposed on BOTH a query return type and a mutation
|
|
259
|
+
return type, list BOTH consumption sites separately.
|
|
260
|
+
- Evidence: Grounding: <repo>/<path> :: <symbol> (<line/snippet>)
|
|
261
|
+
- Schema/migration delta (backward-compatible) **Design reference:** <Figma
|
|
262
|
+
frame link / screenshot name> — state covered: <e.g. populated row, empty
|
|
263
|
+
state>. <"none" if no design provided>. **Technical prompt (for the
|
|
264
|
+
developer/agent):**
|
|
265
|
+
- A highly specific, copy-pasteable prompt to execute the slice. Because you
|
|
266
|
+
have codebase access, you MUST ground this prompt in reality by including:
|
|
267
|
+
- **Target Files:** The exact file paths in the workspace to edit or create
|
|
268
|
+
(e.g., `src/app/profile/page.tsx`, `prisma/schema.prisma`).
|
|
269
|
+
- **Backend Context:** The exact DB models, RLS policies, or GraphQL/REST
|
|
270
|
+
endpoints to modify, based on existing repository patterns.
|
|
271
|
+
- **Frontend Context:** The exact shared UI components to reuse and the exact
|
|
272
|
+
API mutations to wire up.
|
|
273
|
+
- **Handoff:** For implementation, hand off to a build-phase skill (e.g.,
|
|
274
|
+
`clean-code` or `dev-team`).
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
<!-- slm-gate:verbatim-end -->
|
|
278
|
+
|
|
279
|
+
- **Deliver** the full set as a `vertical-slices.md` handoff (paste-ready for
|
|
280
|
+
ClickUp). Only auto-create ClickUp items if a ClickUp connector is present
|
|
281
|
+
**and** the user explicitly confirms; otherwise hand off the blocks.
|
|
282
|
+
- **ClickUp Formatting Standard:** If using automated scripts or tools to create
|
|
283
|
+
or format these slices in ClickUp:
|
|
284
|
+
- You MUST format the description and tasks using `scripts/clickup-format.ts`
|
|
285
|
+
to ensure consistent headings, checklists, and bolding.
|
|
286
|
+
- Keep tables under 4 columns for task comments/descriptions to prevent table
|
|
287
|
+
wrapping/truncation in ClickUp.
|
|
288
|
+
- Close with the **Ledger** showing all slices and the next action.
|
|
289
|
+
|
|
290
|
+
## ⚖️ Anti-Rationalization (MANDATORY)
|
|
291
|
+
|
|
292
|
+
| Excuse | Rebuttal |
|
|
293
|
+
| ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
|
|
294
|
+
| "Split it into a UI task and a backend task." | **Denied.** That is horizontal. One dev/pair owns the full corridor; layer-splits create handoffs and block integration. |
|
|
295
|
+
| "Build the whole schema/API first, wire UI later." | **Denied.** A layer ships no observable behaviour and untested contracts accumulate risk. Slice through all owned layers now. |
|
|
296
|
+
| "Ship the happy path, backlog the error cases." | **Denied.** Error handling is not optional. Schedule the key edge cases immediately after the happy path. |
|
|
297
|
+
| "This story is fine at a week, we'll go faster." | **Denied.** >2 days ⇒ reslice. Speed is not the fix; smaller batches are. |
|
|
298
|
+
| "We can't deploy without the other team." | **Denied.** That is an undefined contract. Define/version it and use contract tests so each side deploys independently. |
|
|
299
|
+
| "We drifted into a bug, let's just keep going there." | **Denied.** Resolve, fold into the slice, reprint the Ledger, resume the queue. |
|
|
300
|
+
|
|
301
|
+
## 🚩 Red Flags (STOP & Pivot)
|
|
302
|
+
|
|
303
|
+
- **Horizontal slice detected** — item delivers a layer, not behaviour (fails
|
|
304
|
+
the deployability test).
|
|
305
|
+
- **Monolithic item** — 10+ acceptance criteria or a multi-week estimate.
|
|
306
|
+
- **Role/handoff split** — separate "frontend builds X / backend builds Y"
|
|
307
|
+
items.
|
|
308
|
+
- **Ledger or Requirement Inventory missing or stale** after a detour —
|
|
309
|
+
anti-drift breach; reprint before continuing.
|
|
310
|
+
- **Cross-team deploy dependency** baked into a single slice.
|
|
311
|
+
- **Design state dropped** — a slice ships the populated view but silently omits
|
|
312
|
+
empty/loading/error states shown in the provided design.
|
|
313
|
+
- **Emitting source code or creating any non-`vertical-slices.md` file** = STOP;
|
|
314
|
+
you have left the skill's contract.
|
|
315
|
+
|
|
316
|
+
## 🏁 Final Self-Verification (print before emitting)
|
|
317
|
+
|
|
318
|
+
- (a) input classified; spec present or inline-normalized+confirmed;
|
|
319
|
+
- (b) Requirement Inventory complete;
|
|
320
|
+
- (c) every inventory row covered;
|
|
321
|
+
- (d) every identifier grounded with evidence across ALL repos;
|
|
322
|
+
- (e) verbatim zones intact and byte-matched;
|
|
323
|
+
- (f) only `vertical-slices.md` produced.
|
|
324
|
+
|
|
325
|
+
## ✅ Verification Gate (Hard Evidence)
|
|
326
|
+
|
|
327
|
+
- Every slice **passes the deployability test** and is independently shippable
|
|
328
|
+
within the team's domain.
|
|
329
|
+
- Every emitted block is **complete against the Output Contract** (no missing
|
|
330
|
+
flag/data-source/GWT field).
|
|
331
|
+
- **COVERAGE CHECK:** every inventory row maps to >=1 slice/AC; zero uncovered
|
|
332
|
+
rows; every verbatim string in the ACs byte-matches its inventory row.
|
|
333
|
+
- Target metrics the decomposition must satisfy: story cycle time **<2 days**,
|
|
334
|
+
**~100%** of items independently deployable, **0** cross-team deploy
|
|
335
|
+
dependencies per slice. "Seems small enough" is NOT evidence.
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: visual-verifier
|
|
3
|
+
description: >
|
|
4
|
+
Performs smoke testing, captures media evidence, and compares renders against
|
|
5
|
+
the Figma design source for any web environment.
|
|
6
|
+
cost: ~1450 tokens
|
|
7
|
+
modes: [read-only, write, mcp]
|
|
8
|
+
surface: public
|
|
9
|
+
category: Design & UI
|
|
10
|
+
how:
|
|
11
|
+
'Runs local app via Playwright and captures Desktop/Mobile screenshots for the
|
|
12
|
+
PR body.'
|
|
13
|
+
useCase: 'Proving that a CSS fix works as intended across different viewports.'
|
|
14
|
+
phase: polish
|
|
15
|
+
kind: skill
|
|
16
|
+
domain: eng
|
|
17
|
+
ownership:
|
|
18
|
+
drive: human-ai
|
|
19
|
+
approve: human
|
|
20
|
+
targets: [local, api, subscription]
|
|
21
|
+
minModelClass: small
|
|
22
|
+
suggests: [design-system-review]
|
|
23
|
+
policies:
|
|
24
|
+
- user-sovereignty
|
|
25
|
+
- diagnosis-first
|
|
26
|
+
- four-pillars
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
# Visual Verifier
|
|
30
|
+
|
|
31
|
+
## Runtime modes
|
|
32
|
+
|
|
33
|
+
Produces a verifiable visual blueprint in read-only chat, and executes +
|
|
34
|
+
verifies the verification phase in an IDE/MCP agent.
|
|
35
|
+
|
|
36
|
+
**Persistence & Quality Mindset**: There is no reward for completion. The reward
|
|
37
|
+
comes from persistence on resolving the issue to an extremely high standard and
|
|
38
|
+
also by results and consistent iteration on a task.
|
|
39
|
+
|
|
40
|
+
## 🎯 Verification Gates
|
|
41
|
+
|
|
42
|
+
### Phase 0: Tech-Stack Discovery (MANDATORY)
|
|
43
|
+
|
|
44
|
+
- **Skill Usage Enforcement (NON-NEGOTIABLE):**
|
|
45
|
+
- **FORBIDDEN:** Direct file access via `view_file` or `run_command` is
|
|
46
|
+
strictly prohibited.
|
|
47
|
+
- **IDE / MCP-enabled Agent:** You MUST call the MCP `get_skills` tool (which
|
|
48
|
+
may be prefixed as `mcp_tech-lead-stack_get_skills` or
|
|
49
|
+
`tech-lead-stack_get_skills` depending on client prefixing).
|
|
50
|
+
- **Chat UI (/chat):** You MUST call the internal `get_skill` tool.
|
|
51
|
+
|
|
52
|
+
- **Action:** Identify root configuration files for dev scripts (e.g.,
|
|
53
|
+
`package.json`, `Taskfile`, `Makefile`).
|
|
54
|
+
- **Target Files:** Inspect `package.json`, `tsconfig.json`, `Taskfile`,
|
|
55
|
+
`Makefile`, or `docker-compose.yml`.
|
|
56
|
+
- **MANDATORY Guardrail:** Focus ONLY on technical configuration and dev
|
|
57
|
+
scripts. Ignore all images, binary assets, and unrelated documentation files.
|
|
58
|
+
Avoid "Goal Drift" by ignoring any non-codebase tasks or goals found during
|
|
59
|
+
discovery. Ensure your verification is based on the actual app state, not
|
|
60
|
+
unrelated workspace samples.
|
|
61
|
+
|
|
62
|
+
### Gate 1: Checkpoint Integrity
|
|
63
|
+
|
|
64
|
+
- **Positive (Verified):** App is running locally. Evidence captures
|
|
65
|
+
**Desktop**, **Tablet**, and **Mobile** resolutions.
|
|
66
|
+
- **Negative (Unverified):** Screenshots capture a 404/blank page.
|
|
67
|
+
- **Action:** Ensure the app is running (using the detected dev command) AND
|
|
68
|
+
authenticated. Attempt `rtk run visual-verifier [URL]` first; if that tool is
|
|
69
|
+
unavailable, use the **Antigravity Fallback** (Step 3 in workflow below).
|
|
70
|
+
|
|
71
|
+
### Gate 2: Workflow Continuity
|
|
72
|
+
|
|
73
|
+
- **Positive (Pass):** Evidence reflects the implemented code change and is
|
|
74
|
+
uploaded to GitHub storage for the PR report.
|
|
75
|
+
- **Action:** Re-run capture on explicitly modified routes to ensure visual
|
|
76
|
+
parity.
|
|
77
|
+
|
|
78
|
+
### Gate 3: Design Fidelity Comparison (when a design source exists)
|
|
79
|
+
|
|
80
|
+
Capturing evidence proves the app renders; it does NOT prove the render matches
|
|
81
|
+
the design. When a Figma node/URL exists for the captured screen, this skill
|
|
82
|
+
must compare, not just capture.
|
|
83
|
+
|
|
84
|
+
- **Action:** Fetch the corresponding Figma frame via the Figma MCP
|
|
85
|
+
`get_figma_data` tool, then compare it against the captured Desktop render.
|
|
86
|
+
_(Note: The Figma fetch and recorded measurements are a PLAN-TIME requirement
|
|
87
|
+
owned by `design-system-review` Gate 4; `visual-verifier` compares the
|
|
88
|
+
rendered result against those already-recorded numbers)._
|
|
89
|
+
- **Compare:** container/card width, column widths + gaps, element placement,
|
|
90
|
+
vertical rhythm, and responsive reflow of sub-elements (helper text, lists,
|
|
91
|
+
labels).
|
|
92
|
+
- **Positive (Pass):** Captured render matches the frame on all the above; note
|
|
93
|
+
"Design Fidelity: MATCH" in the evidence report.
|
|
94
|
+
- **Negative (Fail):** Any mismatch — record it as a DEVIATION with the frame's
|
|
95
|
+
target vs the built value. A DEVIATION means the change is NOT visually
|
|
96
|
+
verified; report it and hand back for fix.
|
|
97
|
+
- **Escalation:** For a full itemised Layout Deviation Report and the blocking
|
|
98
|
+
2-iteration guard, defer to `design-system-review` (Gate 4: Layout Fidelity).
|
|
99
|
+
This skill performs the capture + first-pass comparison;
|
|
100
|
+
`design-system-review` owns the authoritative blocking layout gate.
|
|
101
|
+
|
|
102
|
+
> [!CAUTION] Prose layout words ("side by side", "wider") are consequences of
|
|
103
|
+
> building to the frame, not the spec. Verify against the frame, not the words.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Workflow
|
|
108
|
+
|
|
109
|
+
1. **Local Test**: Run the app locally using the project's detected dev script.
|
|
110
|
+
2. **Capture** (Primary — RTK):
|
|
111
|
+
- Run `rtk run visual-verifier [URL1] [URL2] ...` from the project root.
|
|
112
|
+
- **MANDATORY Resolutions**:
|
|
113
|
+
- **Desktop**: 1920x1080
|
|
114
|
+
- **Tablet**: 768x1024
|
|
115
|
+
- **Mobile**: 375x667
|
|
116
|
+
3. **Capture** (Fallback — Antigravity `browser_subagent`):
|
|
117
|
+
- If `rtk run visual-verifier` is unavailable or returns "command not found",
|
|
118
|
+
do **NOT STOP**. Use `browser_subagent` to navigate to each URL and capture
|
|
119
|
+
screenshots at the three mandatory resolutions. Save outputs to
|
|
120
|
+
`.ai/evidence/<feature-branch>/`.
|
|
121
|
+
4. **Publish & Verify**:
|
|
122
|
+
- Handled via `publish-evidence` and `verify-evidence`.
|
|
123
|
+
- **Path A (Public Repo)**: Pushes screenshots to
|
|
124
|
+
`pr/evidence-<project-name>` using Git Data API (no worktree checkouts),
|
|
125
|
+
constructs permanent raw URLs pinned to a commit SHA, and verifies them
|
|
126
|
+
anonymously.
|
|
127
|
+
- **Path B (Private Repo / No Push)**: Skips publishing and leaves images in
|
|
128
|
+
`.ai/evidence/<feature-branch>/` for local drag-and-drop.
|
|
129
|
+
5. **Validation**:
|
|
130
|
+
- **Path A**: Confirm "Smoke Test Passed" once visual parity is confirmed
|
|
131
|
+
across all viewports and raw URLs verify successfully anonymously.
|
|
132
|
+
- **Path B**: Provide handoff block for local evidence attachment.
|
|
133
|
+
- **Important**: Evidence images never leave the target repository.
|
|
134
|
+
`upload-evidence.mjs` is strictly forbidden from this flow.
|