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.
Files changed (123) hide show
  1. package/.agents/hr-workflows/hr-ad-distributor.md +18 -0
  2. package/.agents/hr-workflows/hr-candidate-sourcer.md +18 -0
  3. package/.agents/hr-workflows/hr-endorsement-synthesizer.md +18 -0
  4. package/.agents/hr-workflows/hr-intake-specifier.md +18 -0
  5. package/.agents/hr-workflows/hr-interview-auditor.md +18 -0
  6. package/.agents/hr-workflows/hr-jd-drafter.md +18 -0
  7. package/.agents/hr-workflows/hr-pipeline-translator.md +18 -0
  8. package/.agents/pm-workflows/pm-action-item-mapper.md +18 -0
  9. package/.agents/pm-workflows/pm-backlog-auditor.md +18 -0
  10. package/.agents/pm-workflows/pm-context-summarizer.md +18 -0
  11. package/.agents/pm-workflows/pm-design-system-auditor.md +18 -0
  12. package/.agents/pm-workflows/pm-effort-estimator.md +18 -0
  13. package/.agents/pm-workflows/pm-newsletter-generator.md +18 -0
  14. package/.agents/pm-workflows/pm-progress-translator.md +18 -0
  15. package/.agents/pm-workflows/pm-release-note-drafter.md +18 -0
  16. package/.agents/pm-workflows/pm-risk-detector.md +18 -0
  17. package/.agents/pm-workflows/pm-story-augmenter.md +18 -0
  18. package/.agents/pm-workflows/pm-task-specifier.md +18 -0
  19. package/.agents/workflows/accessibility-audit.md +30 -0
  20. package/.agents/workflows/ask.md +44 -0
  21. package/.agents/workflows/audit-tech-debt.md +31 -0
  22. package/.agents/workflows/changelog.md +31 -0
  23. package/.agents/workflows/clean-code-audit.md +31 -0
  24. package/.agents/workflows/code-review.md +38 -0
  25. package/.agents/workflows/competitive-analysis.md +46 -0
  26. package/.agents/workflows/design-requirements-to-architecture.md +31 -0
  27. package/.agents/workflows/design-system-review.md +113 -0
  28. package/.agents/workflows/dev-team-sub-max.md +57 -0
  29. package/.agents/workflows/dev-team-sub-pro.md +57 -0
  30. package/.agents/workflows/dev-team.md +52 -0
  31. package/.agents/workflows/feature-orchestrator.md +43 -0
  32. package/.agents/workflows/init.md +31 -0
  33. package/.agents/workflows/mission-architect.md +31 -0
  34. package/.agents/workflows/onboard-dev.md +31 -0
  35. package/.agents/workflows/plan-quick.md +33 -0
  36. package/.agents/workflows/plan.md +31 -0
  37. package/.agents/workflows/pr-automator.md +44 -0
  38. package/.agents/workflows/pr-design-review-init.md +57 -0
  39. package/.agents/workflows/qa-handover.md +40 -0
  40. package/.agents/workflows/reflexion-loop-sub-max.md +46 -0
  41. package/.agents/workflows/reflexion-loop-sub-pro.md +45 -0
  42. package/.agents/workflows/reflexion-loop.md +66 -0
  43. package/.agents/workflows/regression-bug-fix.md +31 -0
  44. package/.agents/workflows/security-audit.md +31 -0
  45. package/.agents/workflows/standup-daily-summary.md +31 -0
  46. package/.agents/workflows/strategy-target-evaluation.md +31 -0
  47. package/.agents/workflows/style-logic-exporter.md +84 -0
  48. package/.agents/workflows/ui-spec-generator.md +156 -0
  49. package/.agents/workflows/verify-changes.md +31 -0
  50. package/.agents/workflows/vertical-slice.md +52 -0
  51. package/.agents/workflows/weekly-leadership-report.md +39 -0
  52. package/.ai/agent-surfaces.json +1235 -0
  53. package/.ai/hooks/README.md +32 -0
  54. package/.ai/hooks/build-requires-approved-spec.json +10 -0
  55. package/.ai/hooks/deploy-requires-review.json +11 -0
  56. package/.ai/hooks/no-ai-approve-deploy.json +10 -0
  57. package/.ai/hooks/protected-paths.json +10 -0
  58. package/.ai/hr-skills/hr-ad-distributor.md +61 -0
  59. package/.ai/hr-skills/hr-candidate-sourcer.md +69 -0
  60. package/.ai/hr-skills/hr-endorsement-synthesizer.md +82 -0
  61. package/.ai/hr-skills/hr-intake-specifier.md +71 -0
  62. package/.ai/hr-skills/hr-interview-auditor.md +60 -0
  63. package/.ai/hr-skills/hr-jd-drafter.md +61 -0
  64. package/.ai/hr-skills/hr-pipeline-translator.md +58 -0
  65. package/.ai/pm-skills/pm-action-item-mapper.md +61 -0
  66. package/.ai/pm-skills/pm-backlog-auditor.md +57 -0
  67. package/.ai/pm-skills/pm-context-summarizer.md +61 -0
  68. package/.ai/pm-skills/pm-effort-estimator.md +79 -0
  69. package/.ai/pm-skills/pm-newsletter-generator.md +60 -0
  70. package/.ai/pm-skills/pm-progress-translator.md +59 -0
  71. package/.ai/pm-skills/pm-release-note-drafter.md +58 -0
  72. package/.ai/pm-skills/pm-risk-detector.md +58 -0
  73. package/.ai/pm-skills/pm-story-augmenter.md +70 -0
  74. package/.ai/pm-skills/pm-task-specifier.md +70 -0
  75. package/.ai/policies/diagnosis-first.md +26 -0
  76. package/.ai/policies/four-pillars.md +72 -0
  77. package/.ai/policies/user-sovereignty.md +25 -0
  78. package/.ai/skills/accessibility-auditor.md +105 -0
  79. package/.ai/skills/agent-optimizer.md +99 -0
  80. package/.ai/skills/ask.md +200 -0
  81. package/.ai/skills/capacity-planner.md +60 -0
  82. package/.ai/skills/changelog-generator.md +131 -0
  83. package/.ai/skills/clean-code.md +136 -0
  84. package/.ai/skills/code-review-checklist.md +103 -0
  85. package/.ai/skills/codebase-onboarding-intelligence.md +130 -0
  86. package/.ai/skills/competitive-analysis.md +114 -0
  87. package/.ai/skills/daily-standup.md +106 -0
  88. package/.ai/skills/design-system-review.md +308 -0
  89. package/.ai/skills/dev-team-local.md +52 -0
  90. package/.ai/skills/dev-team-orchestrator.md +289 -0
  91. package/.ai/skills/dev-team-sub-max.md +369 -0
  92. package/.ai/skills/dev-team-sub-pro.md +288 -0
  93. package/.ai/skills/dummy-skill.md +28 -0
  94. package/.ai/skills/feature-design-assistant.md +134 -0
  95. package/.ai/skills/feature-orchestrator.md +163 -0
  96. package/.ai/skills/knowledge-manager.md +103 -0
  97. package/.ai/skills/mission-architect.md +86 -0
  98. package/.ai/skills/mission-control.md +102 -0
  99. package/.ai/skills/operational-boundaries.md +94 -0
  100. package/.ai/skills/planning-expert-quick.md +164 -0
  101. package/.ai/skills/planning-expert.md +390 -0
  102. package/.ai/skills/pr-automator.md +431 -0
  103. package/.ai/skills/product-strategist.md +123 -0
  104. package/.ai/skills/qa-handover-generator.md +182 -0
  105. package/.ai/skills/reflexion-loop-local.md +39 -0
  106. package/.ai/skills/reflexion-loop-sub-max.md +214 -0
  107. package/.ai/skills/reflexion-loop-sub-pro.md +164 -0
  108. package/.ai/skills/reflexion-loop.md +119 -0
  109. package/.ai/skills/regression-bug-fix.md +95 -0
  110. package/.ai/skills/security-audit.md +97 -0
  111. package/.ai/skills/solutioning-facilitator.md +338 -0
  112. package/.ai/skills/style-logic-exporter.md +115 -0
  113. package/.ai/skills/technical-debt-auditor.md +119 -0
  114. package/.ai/skills/ui-spec-generator.md +78 -0
  115. package/.ai/skills/verification-auditor.md +101 -0
  116. package/.ai/skills/vertical-slice-decomposer.md +335 -0
  117. package/.ai/skills/visual-verifier.md +134 -0
  118. package/.ai/skills/weekly-leadership-report.md +224 -0
  119. package/.ai/skills.graph.json +1550 -0
  120. package/LICENSE +21 -0
  121. package/README.md +58 -0
  122. package/dist/mcp-server.mjs +5203 -0
  123. 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.