wize-dev-kit 0.19.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCH.md +2 -2
- package/CHANGELOG.md +26 -0
- package/README.es.md +12 -2
- package/README.md +11 -2
- package/README.pt-BR.md +12 -2
- package/package.json +1 -1
- package/src/app-overlay/module.yaml +4 -1
- package/src/app-overlay/wize-app-store-review/workflow.md +75 -0
- package/src/core-skills/module.yaml +6 -0
- package/src/core-skills/wize-debt/skill.md +89 -0
- package/src/core-skills/wize-subtract/skill.md +91 -0
- package/src/method-skills/4-implementation/wize-agent-dev/persona.md +2 -1
- package/src/method-skills/4-implementation/wize-code-review/steps/step-02-review.md +4 -0
- package/src/method-skills/4-implementation/wize-code-review/steps/step-03-triage.md +7 -1
- package/src/method-skills/4-implementation/wize-code-review/steps/step-04-present.md +2 -0
- package/src/method-skills/4-implementation/wize-code-review/workflow.md +1 -1
- package/src/method-skills/4-implementation/wize-retrospective/workflow.md +23 -0
- package/src/orchestrator-skills/wize/skill.md +1 -1
- package/src/orchestrator-skills/wize-help/skill.md +1 -1
- package/tools/check-skills-all-adapters.js +87 -0
- package/tools/installer/render-shared.js +28 -0
- package/tools/installer/validators/run-all.js +8 -0
package/ARCH.md
CHANGED
|
@@ -261,8 +261,8 @@ wize-dev-kit sync # regera adapters IDE
|
|
|
261
261
|
|
|
262
262
|
### Wize App Development (overlay)
|
|
263
263
|
|
|
264
|
-
- Workflows extras: `wize-app-scaffold` (RN/Expo/Flutter/native), `wize-app-release-channels`, `wize-app-store-listing
|
|
265
|
-
- Artefatos extras: `mobile-store-listing.md`, `app-perms-and-privacy.md`, `release-channels.md`.
|
|
264
|
+
- Workflows extras: `wize-app-scaffold` (RN/Expo/Flutter/native), `wize-app-release-channels`, `wize-app-store-listing`, `wize-app-store-review` (publication gate).
|
|
265
|
+
- Artefatos extras: `mobile-store-listing.md`, `app-store-review-report.md`, `app-perms-and-privacy.md`, `release-channels.md`.
|
|
266
266
|
- Hawkeye playbook: Detox/Maestro patterns.
|
|
267
267
|
- Mantis playbook: HIG/Material 3, touch targets, gestures, permissions UX.
|
|
268
268
|
|
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,32 @@ Format inspired by [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
7
7
|
> **0.10.0 and earlier are in Brazilian Portuguese** and are kept verbatim as a
|
|
8
8
|
> historical record (not back-translated).
|
|
9
9
|
|
|
10
|
+
## [0.21.0] — 2026-09-25
|
|
11
|
+
|
|
12
|
+
**Less code, and a way to verify it.** Four changes put the kit's reuse discipline to work *after* the code is written, not only while it is being written: a deletion-first review (`/wize-subtract`) wired as a fourth layer of `wize-code-review`, a ledger for deliberate shortcuts (`/wize-debt` + the `wize-debt:` marker), the code ladder promoted into the generated `AGENTS.md` (always-on in every harness), and code accounting in the retrospective. Inspired by [Ponytail](https://github.com/DietrichGebert/ponytail) by Dietrich Gebert (credited in all 3 READMEs).
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- **`/wize-subtract`** (core skill) — over-engineering-only review of a diff: one line per finding (`delete:`, `stdlib:`, `native:`, `yagni:`, `shrink:`), ranked by lines saved, closing with `net: -<N> lines possible.` Names the replacement for every cut, verifies reuse claims against the codebase, and never flags tests, trust-boundary validation, security or accessibility. Lists findings; does not apply them.
|
|
17
|
+
- **`/wize-debt`** (core skill) — harvests every `wize-debt:` marker (ceiling + upgrade path) into one ledger, so a deferral can't quietly become permanent. Flags markers that name no trigger as `no-trigger` rot risk. Read-only.
|
|
18
|
+
- **`wize-code-review` runs a fourth layer: the Subtraction Hunter** — alongside the Blind Hunter, Edge Case Hunter and Acceptance Auditor on every code PR. Triage classifies its findings (`patch` for code this diff introduced, `defer` for pre-existing code, `dismiss` when a requirement or a safety floor protects it) and the summary reports the cuts and `net: -N lines possible`.
|
|
19
|
+
- **Code accounting in `wize-retrospective`** — lines added/removed/net, files touched, dependencies added, new abstractions, `wize-debt:` markers added vs retired, and the complexity delta, all measured from git over the sprint window and reported as numbers in the retro doc.
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- **The generated `AGENTS.md` now carries the code ladder** — YAGNI → already-here → stdlib → native → installed dependency → one-liner → minimum, plus the anti-over-engineering rules (no unrequested abstractions or dependencies, deletion over addition, boring over clever, fewest files, bug fix = root cause) and the safety floor (trust-boundary validation, data-loss handling, security, accessibility, tests on non-trivial logic). The ladder is now **always-on** in every harness that reads `AGENTS.md`, instead of living only inside the implementation skills. Existing installs: delete the kit-generated `AGENTS.md` and re-run `npx wize-dev-kit sync` to regenerate it.
|
|
24
|
+
- **Shuri's persona** — the blanket "no TODO" rule becomes "no *vague* TODO": a deliberate shortcut with a known ceiling ships with a `wize-debt:` marker naming ceiling and upgrade trigger, or it doesn't ship. Shuri also runs `/wize-subtract` on her own diff before opening the PR.
|
|
25
|
+
|
|
26
|
+
### Fixed
|
|
27
|
+
|
|
28
|
+
- **Validator: descriptions with escaped quotes** — the kit's frontmatter parser reads double-quoted scalars with `/^"([^"]*)"$/`, so a `description` containing `\"` was parsed with its wrapping quotes and re-escaped on render (visible in every harness). `npm run validate` now fails that pattern, with the fix spelled out.
|
|
29
|
+
|
|
30
|
+
## [0.20.0] — 2026-09-18
|
|
31
|
+
|
|
32
|
+
### Added
|
|
33
|
+
|
|
34
|
+
- **`wize-app-store-review`** (app overlay workflow) — the publication gate the app-overlay was missing. Hawkeye audits the app's code and metadata as an App Store reviewer **after** `wize-app-store-listing` and **before** prod go-live via `wize-app-release-channels`: top rejection risks first (permissions, privacy manifest, IAP/restore, sign-in compliance, metadata mismatch, minimum functionality), compliance checklist by area with conditional Guideline checks (1.2 UGC, 4.3(b) spam, 4.5.3 Apple services), fixed report structure (executive summary, risk register P0–P3, detailed findings, reviewer-experience checklist, suggested "App Review Notes" for App Store Connect), then a fix pass handed to Shuri. Gate rule: no prod submission while any P0/P1 is open (or the user documents a `WAIVED`). Adapted from [awesome-copilot's apple-appstore-reviewer](https://github.com/github/awesome-copilot/blob/main/skills/apple-appstore-reviewer/SKILL.md) (MIT, credited in the READMEs). New artifact: `.wize/planning/app/app-store-review-report.md` (also registered in `wize-help`/`wize` ship stages and `ARCH.md`).
|
|
35
|
+
|
|
10
36
|
## [0.19.0] — 2026-09-18
|
|
11
37
|
|
|
12
38
|
### Added
|
package/README.es.md
CHANGED
|
@@ -33,7 +33,7 @@ Es **file-first y zero-runtime**: los agentes son skills en Markdown que tu IDE
|
|
|
33
33
|
|---|---|
|
|
34
34
|
| **Wize Dev Core** | Ciclo completo (análisis → plan → solución → implementación) + Test Architect + UX Whiteport + Agent Builder. Siempre instalado. |
|
|
35
35
|
| **Wize Web Dev** *(overlay)* | Scaffolds web, SEO, analytics, playbook WCAG para Mantis, Playwright/Vitest para Hawkeye. |
|
|
36
|
-
| **Wize App Development** *(overlay)* | Scaffolds móviles, ficha de tienda, directrices de plataforma (HIG / Material 3), Detox/Maestro para Hawkeye. |
|
|
36
|
+
| **Wize App Development** *(overlay)* | Scaffolds móviles, ficha de tienda, gate de revisión de App Store (auditoría de rechazo al publicar), directrices de plataforma (HIG / Material 3), Detox/Maestro para Hawkeye. |
|
|
37
37
|
| **Wize Security** *(overlay)* | **Pentester de IA.** Pipeline de pentest file-first (recon → enumerate → SAST → DAST → report) conducido por **Natasha Romanoff**, la persona `red-teamer`, con gate de alcance, clasificación OWASP/CVSS e informe ejecutivo. |
|
|
38
38
|
|
|
39
39
|
---
|
|
@@ -170,7 +170,14 @@ Transversales:
|
|
|
170
170
|
/wize-correct-course Re-planifica cuando un gate falla o el loop se
|
|
171
171
|
estanca (auto-disparado por la guarda de max-cycles;
|
|
172
172
|
también manual).
|
|
173
|
-
/wize-code-review Revisión adversarial antes del gate TEA de Hawkeye
|
|
173
|
+
/wize-code-review Revisión adversarial antes del gate TEA de Hawkeye
|
|
174
|
+
(4 capas: ciega, casos-límite, sustracción, auditoría de AC).
|
|
175
|
+
/wize-subtract Revisión de diff enfocada solo en over-engineering:
|
|
176
|
+
lista de cortes (delete / stdlib / native / yagni /
|
|
177
|
+
shrink) + el total de líneas ahorrables. También es capa.
|
|
178
|
+
/wize-debt Cosecha cada atajo deliberado marcado con `wize-debt:`
|
|
179
|
+
(techo + ruta de upgrade) en un ledger único, para que
|
|
180
|
+
"después" no se vuelva "nunca".
|
|
174
181
|
/wize-party-mode Wizer reúne multi-persona para decisiones difíciles.
|
|
175
182
|
```
|
|
176
183
|
|
|
@@ -272,6 +279,9 @@ npx wize-dev-kit version-check [--json] # instalada vs. más reciente (con cach
|
|
|
272
279
|
- [BMAD Method](https://github.com/bmad-code-org/BMAD-METHOD) por Brian (BMad) Madison — ciclo ágil de IA, personas de agentes, patrón de instalador, sistema de módulos.
|
|
273
280
|
- [Whiteport Design Studio expansion](https://github.com/bmad-code-org/bmad-method-wds-expansion) — metodología UX-first, panteón nórdico (Saga, Freya), estructura de fases.
|
|
274
281
|
- [No AI Slop](https://github.com/petergyang/no-ai-slop) por Peter Yang — higiene de escrita que elimina patrones de AI slop sin aplanar la voz del autor; la inspiración para `/wize-no-ai-slop`.
|
|
282
|
+
- [apple-appstore-reviewer (awesome-copilot)](https://github.com/github/awesome-copilot/blob/main/skills/apple-appstore-reviewer/SKILL.md) — auditoría con mentalidad de reviewer para la submisión a App Store; la inspiración para `wize-app-store-review` (gate de publicación del overlay).
|
|
283
|
+
- [ELI5](https://github.com/dreambigou/eli5) por Andrew Ou — explicaciones calibradas al oyente; inspiración de `/wize-eli5`.
|
|
284
|
+
- [Ponytail](https://github.com/DietrichGebert/ponytail) por Dietrich Gebert — revisión orientada a la eliminación (`/wize-subtract`), el marcador de atajo `wize-debt:` con su ledger, y el encuadre medido de "menos código" detrás de la contabilidad de código de la retrospectiva. La reuse ladder del kit comparte los mismos peldaños.
|
|
275
285
|
|
|
276
286
|
Wize Development Kit es una **adaptación independiente** — no afiliada ni respaldada por los autores de BMAD o WDS. Los nombres de personas Marvel se usan como referencias creativas bajo uso nominativo justo.
|
|
277
287
|
|
package/README.md
CHANGED
|
@@ -33,7 +33,7 @@ It is **file-first and zero-runtime**: the agents are Markdown skills your IDE r
|
|
|
33
33
|
|---|---|
|
|
34
34
|
| **Wize Dev Core** | Full lifecycle (analysis → plan → solution → implementation) + Test Architect + Whiteport UX + Agent Builder. Always installed. |
|
|
35
35
|
| **Wize Web Dev** *(overlay)* | Web scaffolds, SEO, analytics, WCAG playbook for Mantis, Playwright/Vitest for Hawkeye. |
|
|
36
|
-
| **Wize App Development** *(overlay)* | Mobile scaffolds, store listing, platform guidelines (HIG / Material 3), Detox/Maestro for Hawkeye. |
|
|
36
|
+
| **Wize App Development** *(overlay)* | Mobile scaffolds, store listing, App Store review gate (rejection-risk audit at publication), platform guidelines (HIG / Material 3), Detox/Maestro for Hawkeye. |
|
|
37
37
|
| **Wize Security** *(overlay)* | **AI Pentester.** File-first pentest pipeline (recon → enumerate → SAST → DAST → report) driven by **Natasha Romanoff**, the `red-teamer` persona, with a scope gate, OWASP/CVSS classification, and a stakeholder report. |
|
|
38
38
|
|
|
39
39
|
---
|
|
@@ -169,7 +169,14 @@ Cross-cutting:
|
|
|
169
169
|
opening a PR — fail fast, zero CI runner cost.
|
|
170
170
|
/wize-correct-course Re-plan when a gate fails or a loop stalls (auto-
|
|
171
171
|
triggered by the max-cycles guard; also manual).
|
|
172
|
-
/wize-code-review Adversarial peer review before Hawkeye's TEA gate
|
|
172
|
+
/wize-code-review Adversarial peer review before Hawkeye's TEA gate
|
|
173
|
+
(4 layers: blind, edge case, subtraction, AC audit).
|
|
174
|
+
/wize-subtract Over-engineering-only review of a diff: ranked
|
|
175
|
+
delete-list (delete / stdlib / native / yagni /
|
|
176
|
+
shrink) + the net lines saved. Also a review layer.
|
|
177
|
+
/wize-debt Harvest every deliberate `wize-debt:` shortcut
|
|
178
|
+
(ceiling + upgrade path) into one ledger, so a
|
|
179
|
+
deferral can't quietly become permanent.
|
|
173
180
|
/wize-party-mode Wizer convenes multi-persona for hard calls.
|
|
174
181
|
```
|
|
175
182
|
|
|
@@ -271,6 +278,8 @@ npx wize-dev-kit version-check [--json] # installed vs latest (cached; scriptab
|
|
|
271
278
|
- [Whiteport Design Studio expansion](https://github.com/bmad-code-org/bmad-method-wds-expansion) — UX-first methodology, Norse pantheon (Saga, Freya), phase structure.
|
|
272
279
|
- [ELI5](https://github.com/dreambigou/eli5) by Andrew Ou — audience-calibrated explanations; the inspiration for `/wize-eli5`.
|
|
273
280
|
- [No AI Slop](https://github.com/petergyang/no-ai-slop) by Peter Yang — writing hygiene that removes AI-slop patterns without flattening the writer's voice; the inspiration for `/wize-no-ai-slop` (Peggy Carter & Mantis apply it to end-user-facing prose).
|
|
281
|
+
- [awesome-copilot's apple-appstore-reviewer](https://github.com/github/awesome-copilot/blob/main/skills/apple-appstore-reviewer/SKILL.md) — reviewer-mindset audit for App Store submission; the inspiration for `wize-app-store-review` (the app-overlay publication gate).
|
|
282
|
+
- [Ponytail](https://github.com/DietrichGebert/ponytail) by Dietrich Gebert — deletion-first review (`/wize-subtract`), the `wize-debt:` shortcut marker and its ledger, and the measured "less code" framing behind the retrospective's code accounting. The kit's reuse ladder shares its rungs.
|
|
274
283
|
|
|
275
284
|
Wize Development Kit is an **independent adaptation** — not affiliated with or endorsed by BMAD or WDS authors. Marvel persona names are used as creative references under nominative fair use.
|
|
276
285
|
|
package/README.pt-BR.md
CHANGED
|
@@ -33,7 +33,7 @@ O Wize Development Kit (WDK) é uma **stack de agentes de IA** instalável que r
|
|
|
33
33
|
|---|---|
|
|
34
34
|
| **Wize Dev Core** | Ciclo completo (análise → plano → solução → implementação) + Test Architect + UX Whiteport + Agent Builder. Sempre instalado. |
|
|
35
35
|
| **Wize Web Dev** *(overlay)* | Scaffolds web, SEO, analytics, playbook WCAG para o Mantis, Playwright/Vitest para o Hawkeye. |
|
|
36
|
-
| **Wize App Development** *(overlay)* | Scaffolds mobile, listagem em loja, diretrizes de plataforma (HIG / Material 3), Detox/Maestro para o Hawkeye. |
|
|
36
|
+
| **Wize App Development** *(overlay)* | Scaffolds mobile, listagem em loja, gate de revisão da App Store (auditoria de rejeição no momento da publicação), diretrizes de plataforma (HIG / Material 3), Detox/Maestro para o Hawkeye. |
|
|
37
37
|
| **Wize Security** *(overlay)* | **Pentester de IA.** Pipeline de pentest file-first (recon → enumerate → SAST → DAST → report) conduzido por **Natasha Romanoff**, a persona `red-teamer`, com gate de escopo, classificação OWASP/CVSS e relatório executivo. |
|
|
38
38
|
|
|
39
39
|
---
|
|
@@ -172,7 +172,14 @@ Transversais:
|
|
|
172
172
|
/wize-correct-course Re-planeja quando um gate falha ou o loop trava
|
|
173
173
|
(auto-disparado pela guarda de max-cycles; também
|
|
174
174
|
manual).
|
|
175
|
-
/wize-code-review Revisão adversarial antes do gate TEA do Hawkeye
|
|
175
|
+
/wize-code-review Revisão adversarial antes do gate TEA do Hawkeye
|
|
176
|
+
(4 camadas: cega, casos-limite, subtração, auditoria de AC).
|
|
177
|
+
/wize-subtract Revisão de diff focada só em over-engineering: lista
|
|
178
|
+
de cortes (delete / stdlib / native / yagni / shrink)
|
|
179
|
+
+ o total de linhas economizáveis. Também é uma camada.
|
|
180
|
+
/wize-debt Colhe todo atalho deliberado marcado com `wize-debt:`
|
|
181
|
+
(teto + caminho de upgrade) num ledger único, para que
|
|
182
|
+
"depois" não vire "nunca".
|
|
176
183
|
/wize-party-mode Wizer reúne multi-persona para decisões difíceis.
|
|
177
184
|
```
|
|
178
185
|
|
|
@@ -273,6 +280,9 @@ npx wize-dev-kit version-check [--json] # instalada vs. mais recente (com cache
|
|
|
273
280
|
- [BMAD Method](https://github.com/bmad-code-org/BMAD-METHOD) por Brian (BMad) Madison — ciclo ágil de IA, personas de agentes, padrão de instalador, sistema de módulos.
|
|
274
281
|
- [Whiteport Design Studio expansion](https://github.com/bmad-code-org/bmad-method-wds-expansion) — metodologia UX-first, panteão nórdico (Saga, Freya), estrutura de fases.
|
|
275
282
|
- [No AI Slop](https://github.com/petergyang/no-ai-slop) por Peter Yang — higiene de escrita que elimina padrões de AI slop sem achatar a voz do autor; a inspiração para `/wize-no-ai-slop`.
|
|
283
|
+
- [apple-appstore-reviewer (awesome-copilot)](https://github.com/github/awesome-copilot/blob/main/skills/apple-appstore-reviewer/SKILL.md) — auditoria com mentalidade de reviewer para submissão na App Store; a inspiração para `wize-app-store-review` (gate de publicação do overlay de app).
|
|
284
|
+
- [ELI5](https://github.com/dreambigou/eli5) por Andrew Ou — explicações calibradas ao ouvinte; inspiração do `/wize-eli5`.
|
|
285
|
+
- [Ponytail](https://github.com/DietrichGebert/ponytail) por Dietrich Gebert — revisão orientada a deleção (`/wize-subtract`), o marcador de atalho `wize-debt:` com seu ledger, e o enquadramento medido de "menos código" por trás da contabilidade de código da retrospectiva. A reuse ladder do kit compartilha os mesmos degraus.
|
|
276
286
|
|
|
277
287
|
O Wize Development Kit é uma **adaptação independente** — não afiliada nem endossada pelos autores do BMAD ou do WDS. Os nomes de personas Marvel são referências criativas sob uso nominativo justo.
|
|
278
288
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "wize-dev-kit",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.21.0",
|
|
5
5
|
"description": "Full-lifecycle AI-assisted development kit with Test Architect and Whiteport Design Studio embedded. Inspired by BMAD Method and WDS.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"ai",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
code: app-overlay
|
|
2
2
|
name: "Wize App Development (overlay)"
|
|
3
|
-
description: "Mobile-stack extension: scaffolds (RN/Expo/Flutter/native), store-listing, release channels, HIG/Material 3 playbook for Mantis, Detox/Maestro playbook for Hawkeye."
|
|
3
|
+
description: "Mobile-stack extension: scaffolds (RN/Expo/Flutter/native), store-listing, App Store review gate, release channels, HIG/Material 3 playbook for Mantis, Detox/Maestro playbook for Hawkeye."
|
|
4
4
|
default_selected: false
|
|
5
5
|
required: false
|
|
6
6
|
overlay_of: method
|
|
@@ -17,6 +17,7 @@ stack_catalog:
|
|
|
17
17
|
# Extra artifacts:
|
|
18
18
|
artifacts:
|
|
19
19
|
- ".wize/planning/app/mobile-store-listing.md"
|
|
20
|
+
- ".wize/planning/app/app-store-review-report.md"
|
|
20
21
|
- ".wize/planning/app/app-perms-and-privacy.md"
|
|
21
22
|
- ".wize/planning/app/release-channels.md"
|
|
22
23
|
|
|
@@ -27,6 +28,8 @@ skills:
|
|
|
27
28
|
description: "Define release channel strategy (dev/preview/prod, EAS branches, beta tracks)."
|
|
28
29
|
- code: wize-app-store-listing
|
|
29
30
|
description: "Draft store listing copy + screenshots brief + ASO keywords."
|
|
31
|
+
- code: wize-app-store-review
|
|
32
|
+
description: "Publication gate: audit the app as an App Store reviewer, prioritize rejection risks (P0–P3), draft reviewer notes; block prod channels while P0/P1 stay open."
|
|
30
33
|
|
|
31
34
|
agent_playbooks:
|
|
32
35
|
wize-agent-ux-designer:
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
|
|
3
|
+
code: wize-app-store-review
|
|
4
|
+
description: "Use no momento da publicação do app (antes de submeter para a App Store): audita código e metadados como um reviewer da Apple, prioriza riscos de rejeição e redige as reviewer notes."
|
|
5
|
+
name: App Store Review Gate
|
|
6
|
+
overlay: app
|
|
7
|
+
owner: wize-agent-test-architect # Hawkeye is the gatekeeper; Shuri owns the fix pass
|
|
8
|
+
status: ready
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# App Store Review Gate
|
|
12
|
+
|
|
13
|
+
**Goal.** Audit the app's source code and metadata from an **App Store reviewer's** point of view and produce a prioritized rejection-risk report — so the submission passes fast approval with minimal re-review risk. Fits in the publication flow: run **after** `wize-app-store-listing` (listing drafted) and **before** going live in prod via `wize-app-release-channels`.
|
|
14
|
+
|
|
15
|
+
Adapted to the Wize method from the [awesome-copilot apple-appstore-reviewer skill](https://github.com/github/awesome-copilot/blob/main/skills/apple-appstore-reviewer/SKILL.md) (MIT) — credited in the README.
|
|
16
|
+
|
|
17
|
+
## Rules of the pass
|
|
18
|
+
|
|
19
|
+
- **Change no code in this pass.** Hawkeye reviews and reports; fixes land after, via Shuri.
|
|
20
|
+
- Never invent features or claim something exists without evidence in code/config.
|
|
21
|
+
- Distinguish **assumptions** from **Unverified** items that need the smallest specific evidence.
|
|
22
|
+
- The [App Store Review Guidelines](https://developer.apple.com/app-store/review/guidelines/) change — verify current wording when network is available before quoting a guideline.
|
|
23
|
+
|
|
24
|
+
## Output
|
|
25
|
+
|
|
26
|
+
- `.wize/planning/app/app-store-review-report.md`
|
|
27
|
+
|
|
28
|
+
## Steps
|
|
29
|
+
|
|
30
|
+
### 1. Identify the app's core
|
|
31
|
+
|
|
32
|
+
- What is the app's primary purpose? Top 3 user flows?
|
|
33
|
+
- What's required to use it (account, permissions, purchase)?
|
|
34
|
+
- Build system: SwiftUI/UIKit, RN/Expo/Flutter, iOS min version, dependencies.
|
|
35
|
+
|
|
36
|
+
### 2. Flag top rejection risks first (P0/P1)
|
|
37
|
+
|
|
38
|
+
Scan for:
|
|
39
|
+
|
|
40
|
+
- Missing/wrong `NS*UsageDescription` strings for permissions actually requested; vague justifications ("need camera"); launch-time permission asks without context.
|
|
41
|
+
- Privacy: data collection without disclosure, tracking/fingerprinting, missing PrivacyInfo.xcprivacy, missing privacy policy link.
|
|
42
|
+
- Broken IAP flows: subscription without visible restore purchases, misleading pricing, digital features gated behind external payments.
|
|
43
|
+
- Login walls without justification; "Sign in with Apple" compliance when third-party social logins exist; account deletion accessible in-app where applicable.
|
|
44
|
+
- Metadata mismatch with `wize-app-store-listing` output (listing copy vs actual behavior — misaligned copy is a rejection magnet).
|
|
45
|
+
- Claims needing substantiation (health, medical, financial, safety) without proper framing.
|
|
46
|
+
- Minimum functionality: empty states, placeholder screens, dead ends, broken network flows.
|
|
47
|
+
|
|
48
|
+
### 3. Compliance checklist by area
|
|
49
|
+
|
|
50
|
+
Systematically check: **Privacy & tracking → Permissions & entitlements → Monetization (IAP/Subscriptions) → Account & authentication → Content/UGC/external links → Technical stability → UX & reviewability.**
|
|
51
|
+
|
|
52
|
+
Conditional checks, only when relevant: **UGC (Guideline 1.2)** — filtering, reporting, blocking, published contact info, effective content-removal path; **Spam/differentiation (Guideline 4.3(b))** — only when the shipped experience appears indistinguishable from widely available products; **Apple services (Guideline 4.5.3)** — inspect actual triggers/content/stop controls for Live Activities used in messaging, never infer violation from API use alone. Report only applicable findings.
|
|
53
|
+
|
|
54
|
+
### 4. Write the report (fixed structure)
|
|
55
|
+
|
|
56
|
+
1. **Executive summary** (5–10 bullets): app purpose in one line, top 3 approval risks, top 3 fast wins.
|
|
57
|
+
2. **Risk register** (table): Priority (P0 blocker / P1 high / P2 medium / P3 low) · Area · Finding · Why review might reject · Evidence (file, symbol, screen, config) · Recommendation · Effort (S/M/L) · Confidence (High/Med/Low).
|
|
58
|
+
3. **Detailed findings** grouped by the areas above; each with what you saw, why it's an issue, concrete change, and how to verify.
|
|
59
|
+
4. **Reviewer experience checklist:** install & launch, first-run clarity, required permissions, core feature access, purchase/restore path, links/support/legal pages, edge cases (offline, empty state).
|
|
60
|
+
5. **Suggested "App Review Notes"** draft for App Store Connect: steps to reach key features, test account credentials (placeholders), unusual permission justifications, gated content + how to test IAP, demo mode.
|
|
61
|
+
|
|
62
|
+
### 5. Fix pass (after the report, on request)
|
|
63
|
+
|
|
64
|
+
- Hawkeye hands the prioritized register to **Shuri** for concrete fixes: code changes, permission-prompt/paywall/privacy wording samples, and a pre-submission checklist before re-riding the gate.
|
|
65
|
+
|
|
66
|
+
## Severity definitions
|
|
67
|
+
|
|
68
|
+
- **P0 — blocker:** very likely rejection, or app is non-functional for review.
|
|
69
|
+
- **P1 — high:** common rejection reason or serious reviewer friction.
|
|
70
|
+
- **P2 — medium:** risky pattern, unclear compliance, or quality concern.
|
|
71
|
+
- **P3 — low:** polish and improvements.
|
|
72
|
+
|
|
73
|
+
## Gate rule
|
|
74
|
+
|
|
75
|
+
No submission to production channels (`wize-app-release-channels` prod) while any **P0 or P1** is open in the register. Re-run or swipe-pass with `WAIVED` (documented in the report) if the user accepts the residual risk. **Unverified** items are not violations — list the minimal evidence needed.
|
|
@@ -31,10 +31,16 @@ skills:
|
|
|
31
31
|
- code: wize-review-adversarial
|
|
32
32
|
name: "Adversarial Review"
|
|
33
33
|
description: "Red-team review of artifacts — challenges assumptions, surfaces edge cases."
|
|
34
|
+
- code: wize-subtract
|
|
35
|
+
name: "Subtract"
|
|
36
|
+
description: "Over-engineering-only review of a diff: what to delete, simplify, or replace with stdlib/native — ranked delete-list plus the net lines saved."
|
|
34
37
|
- code: wize-spec
|
|
35
38
|
name: "Spec"
|
|
36
39
|
description: "Distills any intent input into a canonical five-field spec kernel + companions."
|
|
37
40
|
- code: wize-pre-pr-check
|
|
38
41
|
name: "Pre-PR Check"
|
|
39
42
|
description: "Quando for abrir um Pull Request ou PR leia — gate local para lint, format, build e testes rápidos antes de submeter código."
|
|
43
|
+
- code: wize-debt
|
|
44
|
+
name: "Debt Ledger"
|
|
45
|
+
description: "Harvests every deliberate `wize-debt:` shortcut (ceiling + upgrade path) into one ledger so deferrals don't rot into \"never\"."
|
|
40
46
|
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
|
|
3
|
+
code: wize-debt
|
|
4
|
+
description: "Use quando precisar colher os atalhos deliberados espalhados no código (marcadores wize-debt:) num ledger único, para que o adiamento não vire esquecimento permanente."
|
|
5
|
+
name: Debt Ledger
|
|
6
|
+
module: core
|
|
7
|
+
status: ready
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Debt Ledger
|
|
11
|
+
|
|
12
|
+
**Goal.** Every deliberate shortcut with a known ceiling is marked in code as a `wize-debt:` comment naming its ceiling and its upgrade path. This skill harvests every marker into one ledger, so a deferral can't quietly become permanent.
|
|
13
|
+
|
|
14
|
+
Reads and reports. Changes nothing.
|
|
15
|
+
|
|
16
|
+
## When to run
|
|
17
|
+
|
|
18
|
+
- Before the retrospective (`wize-retrospective`) — the debt marker count is a sprint metric.
|
|
19
|
+
- Before a release (`wize-release`).
|
|
20
|
+
- When the user says "what did we defer", "list the shortcuts", "debt ledger", "what's marked wize-debt", "/wize-debt".
|
|
21
|
+
|
|
22
|
+
## The marker
|
|
23
|
+
|
|
24
|
+
```js
|
|
25
|
+
// wize-debt: single-threaded — upgrade to a queue when the second worker lands
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
# wize-debt: O(n²) scan — index it if the list passes ~10k rows
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
- **ceiling** — the limit we knowingly accepted (global lock, O(n²) scan, naive heuristic, in-memory only, retry-less call).
|
|
33
|
+
- **upgrade path** — the trigger to revisit. Prefer an **event or threshold** ("when the second worker lands", "if rows pass 10k") over a date — a date rots silently.
|
|
34
|
+
|
|
35
|
+
A deliberate shortcut **without** a marker is the real problem: nobody remembers it. Vague TODOs (`// TODO: improve this`) are not a ceiling and not an upgrade path — they are noise, and they do not belong in the ledger.
|
|
36
|
+
|
|
37
|
+
## Steps
|
|
38
|
+
|
|
39
|
+
### 1. Scan
|
|
40
|
+
|
|
41
|
+
Grep the repo for the marker, skipping `node_modules`, `.git`, build output and vendored code:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
grep -rnE '(#|//|<!--|/\*|--) ?wize-debt:' . \
|
|
45
|
+
--exclude-dir=node_modules --exclude-dir=.git --exclude-dir=dist --exclude-dir=build
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Each hit is one ledger row. The `wize-debt:` prefix keeps prose that merely mentions the convention out of the ledger.
|
|
49
|
+
|
|
50
|
+
### 2. Build the ledger
|
|
51
|
+
|
|
52
|
+
One row per marker, grouped by file:
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
<file>:L<line> — <what was simplified>. ceiling: <limit>. upgrade: <trigger>.
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Optional owner per row, when the user asks for one:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
git blame -L<line>,<line> --date=short -- <file> | head -1
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 3. Flag the rot
|
|
65
|
+
|
|
66
|
+
Any marker that names no trigger gets the tag `no-trigger`. Those are the ones that silently rot — say so explicitly rather than hiding them in the list.
|
|
67
|
+
|
|
68
|
+
### 4. Report
|
|
69
|
+
|
|
70
|
+
End with the count:
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
<N> markers, <M> no-trigger.
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Nothing found: `Clean ledger — no wize-debt markers.`
|
|
77
|
+
|
|
78
|
+
Write it to `.wize/implementation/debt.md` **only when asked**; otherwise it is a one-shot report in the conversation.
|
|
79
|
+
|
|
80
|
+
## Rules
|
|
81
|
+
|
|
82
|
+
- **Read-only.** Never edits the code, never removes a marker, never "fixes" one. Revisiting a ceiling is a separate change with its own review.
|
|
83
|
+
- **A marker is not a TODO.** The ledger tracks shortcuts with a named ceiling and trigger. Missing behavior, unfinished work, or "improve later" notes are not debt rows.
|
|
84
|
+
- **`no-trigger` markers are the finding.** A ceiling with no upgrade path is the definition of rot — surface it, don't normalize it.
|
|
85
|
+
- **Skip generated and vendored code.** Markers in `dist/`, `node_modules/`, or vendored trees are noise.
|
|
86
|
+
|
|
87
|
+
## Hand-off
|
|
88
|
+
|
|
89
|
+
> Debt ledger complete. `<N>` marker(s), `<M>` no-trigger. Next: feed the count into `wize-retrospective`, or fix a ceiling via `wize-quick-dev`.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
|
|
3
|
+
code: wize-subtract
|
|
4
|
+
description: "Use quando um diff ou PR precisar de revisão focada em over-engineering — o que dá para deletar, simplificar ou trocar por stdlib/nativo, com a lista de cortes e o total de linhas economizáveis."
|
|
5
|
+
name: Subtract
|
|
6
|
+
module: core
|
|
7
|
+
status: ready
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Subtract
|
|
11
|
+
|
|
12
|
+
**Goal.** Review a diff with one lens only: **unnecessary complexity**. Answer the question the other review layers don't ask — *what can be deleted, and what replaces it?* The best outcome for a diff is that it gets shorter.
|
|
13
|
+
|
|
14
|
+
This complements `wize-code-review` (correctness, edge cases, acceptance criteria) and `wize-tea-review` (AC fulfillment). Subtract hunts bloat. It **lists** findings; it does not apply them.
|
|
15
|
+
|
|
16
|
+
## When to run
|
|
17
|
+
|
|
18
|
+
- Before opening a PR, once the diff is complete.
|
|
19
|
+
- As the **Subtraction Hunter** layer inside `wize-code-review` (runs on every code PR).
|
|
20
|
+
- When the user says "review for over-engineering", "what can we delete", "is this too much code", "simplify this", "/wize-subtract".
|
|
21
|
+
|
|
22
|
+
## When NOT to run
|
|
23
|
+
|
|
24
|
+
- As a replacement for correctness or security review — those are out of scope here.
|
|
25
|
+
- On generated code, vendored code, or lockfiles.
|
|
26
|
+
- When the diff is already minimal: say so and stop (see "Clean diff").
|
|
27
|
+
|
|
28
|
+
## Inputs
|
|
29
|
+
|
|
30
|
+
- The diff (PR, branch, commit range, or staged changes).
|
|
31
|
+
- Read access to the codebase — reuse claims must be verified, not guessed.
|
|
32
|
+
|
|
33
|
+
## Output
|
|
34
|
+
|
|
35
|
+
One line per finding, ranked by lines saved (biggest cut first):
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
path/to/file:L<line>: <tag> <what to cut>. <what replaces it>.
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Tags:
|
|
42
|
+
|
|
43
|
+
- `delete:` — dead code, unused flexibility, speculative feature. Replacement: nothing.
|
|
44
|
+
- `stdlib:` — a hand-rolled thing the standard library ships. Name the function.
|
|
45
|
+
- `native:` — a dependency or code doing what the platform/framework already does. Name the feature.
|
|
46
|
+
- `yagni:` — an abstraction with one implementation, config nobody sets, a layer with one caller.
|
|
47
|
+
- `shrink:` — same logic, fewer lines. Show the shorter form.
|
|
48
|
+
|
|
49
|
+
End with the only metric that matters: `net: -<N> lines possible.`
|
|
50
|
+
|
|
51
|
+
**Clean diff:** `Lean already. Ship.` and stop.
|
|
52
|
+
|
|
53
|
+
## Rules
|
|
54
|
+
|
|
55
|
+
- **One line per finding.** Location, what to cut, what replaces it. The review's own output obeys the ladder — no essays.
|
|
56
|
+
- **Name the replacement.** "This looks complex" is not a finding. `stdlib:` must name the function; `native:` must name the feature; `yagni:`/`delete:` must name what already exists or state that nothing replaces it.
|
|
57
|
+
- **Complexity only.** Correctness bugs, security holes, and performance problems are out of scope — route them to `wize-code-review`, don't smuggle them in here.
|
|
58
|
+
- **Never flag the floor.** Tests on non-trivial logic are the kit's minimum, not bloat. Validation at trust boundaries, data-loss handling, security, accessibility, and anything explicitly requested are **never** on the chopping block.
|
|
59
|
+
- **Verify before claiming.** "Already in this codebase" requires the existing helper/pattern to be named; "the stdlib does it" requires the function to exist in the target language/runtime.
|
|
60
|
+
- **Read before cutting.** Trace the real flow the change touches. The shortest diff in the wrong place is not lazy — it's a second bug.
|
|
61
|
+
- **Report only.** Do not apply the findings. Applying them is a separate, reviewable change (usually `wize-quick-dev`).
|
|
62
|
+
|
|
63
|
+
## Steps
|
|
64
|
+
|
|
65
|
+
### 1. Read the diff against the codebase
|
|
66
|
+
|
|
67
|
+
For every hunk, know what it touches and who calls it. Claims about reuse need the surrounding code read, not recalled.
|
|
68
|
+
|
|
69
|
+
### 2. Walk the ladder backwards
|
|
70
|
+
|
|
71
|
+
For each hunk, stop at the first question that holds:
|
|
72
|
+
|
|
73
|
+
1. Does this need to exist at all? → `delete:` (replacement: nothing).
|
|
74
|
+
2. Does it duplicate something already here? → `yagni:` or `delete:`, naming the existing helper/pattern.
|
|
75
|
+
3. Does the standard library do it? → `stdlib:`, naming the function.
|
|
76
|
+
4. Does the platform or framework do it? → `native:`, naming the feature.
|
|
77
|
+
5. Is a dependency doing one small thing? → `native:` / `shrink:`, naming what replaces it.
|
|
78
|
+
6. Same logic in fewer lines? → `shrink:`, showing the shorter form.
|
|
79
|
+
7. Is it configuration, an interface, or a layer with a single caller? → `yagni:`.
|
|
80
|
+
|
|
81
|
+
### 3. Rank and totalize
|
|
82
|
+
|
|
83
|
+
Sort by estimated lines removed (descending). Sum them: `net: -<N> lines possible.`
|
|
84
|
+
|
|
85
|
+
### 4. Hand back
|
|
86
|
+
|
|
87
|
+
Present the list as-is. Findings that contradict an explicit requirement or the safety floor are dropped out loud — say which and why, so the omission is visible.
|
|
88
|
+
|
|
89
|
+
## Hand-off
|
|
90
|
+
|
|
91
|
+
> Subtraction review complete for `{change}`. `{count}` finding(s), `net: -{N} lines possible.` Next: apply via `wize-quick-dev`, or continue to `wize-code-review` for correctness.
|
|
@@ -11,6 +11,7 @@ I am **Shuri**. Wakandan technologist. I implement the story Tony wrote, against
|
|
|
11
11
|
3. **Red → green → refactor.** Tests first; minimum code to pass; clean.
|
|
12
12
|
4. **Security & perf.** I think about both at write-time, not at review-time.
|
|
13
13
|
5. **Commit with AC IDs.** Every commit cites the story acceptance criteria it advances.
|
|
14
|
+
6. **Subtract before I push.** Before opening the PR I run `/wize-subtract` on my own diff — my code climbs the ladder too, and the review's best outcome is a shorter diff.
|
|
14
15
|
|
|
15
16
|
## Before I write new code (the reuse ladder)
|
|
16
17
|
|
|
@@ -34,7 +35,7 @@ At the "green" step, before typing a new function, I walk this ladder in order a
|
|
|
34
35
|
|
|
35
36
|
- I won't change architecture without an ADR from Tony.
|
|
36
37
|
- I won't waive a Hawkeye gate without Wizer's approval logged.
|
|
37
|
-
- I won't ship
|
|
38
|
+
- I won't ship a vague TODO for someone else. A **deliberate shortcut with a known ceiling** is a different thing: it gets a `wize-debt:` marker naming its ceiling and its upgrade trigger (harvested by `/wize-debt`) — or it doesn't ship.
|
|
38
39
|
|
|
39
40
|
## Quick-dev mode
|
|
40
41
|
|
|
@@ -9,6 +9,7 @@ failed_layers: ''
|
|
|
9
9
|
- Speak in `{communication_language}`.
|
|
10
10
|
- The Blind Hunter subagent receives **only** the diff — no project context.
|
|
11
11
|
- The Edge Case Hunter subagent receives the diff and project read access.
|
|
12
|
+
- The Subtraction Hunter subagent receives the diff and project read access.
|
|
12
13
|
- The Acceptance Auditor subagent receives the diff, spec, and context docs.
|
|
13
14
|
- All review subagents run at the same model capability as the current session.
|
|
14
15
|
|
|
@@ -26,6 +27,9 @@ This step is an instance of Wizer's subagent fan-out pattern (see `wize-orchestr
|
|
|
26
27
|
- **Edge Case Hunter** — receives `{diff_output}` and read access to the project. Invoke via `wize-review-edge-case-hunter`.
|
|
27
28
|
Prompt: "Walk every branching path and boundary condition in this diff. Report only unhandled edge cases as a JSON array."
|
|
28
29
|
|
|
30
|
+
- **Subtraction Hunter** — receives `{diff_output}` and read access to the project. Invoke via `wize-subtract`.
|
|
31
|
+
Prompt: "Review this diff for over-engineering only. One line per finding: `path:L<line>: <tag> <what to cut>. <what replaces it>.` Tags: delete | stdlib | native | yagni | shrink. Rank by lines saved. End with `net: -<N> lines possible.` Never flag tests, validation, security, or accessibility."
|
|
32
|
+
|
|
29
33
|
- **Acceptance Auditor** (only if `{review_mode}` = `"full"`) — receives `{diff_output}`, `{spec_file}` content, and context docs.
|
|
30
34
|
Prompt: "Review this diff against the spec. Check for violations of acceptance criteria, deviations from spec intent, and missing behavior. Output findings as a Markdown list with AC/constraint reference and evidence."
|
|
31
35
|
|
|
@@ -10,11 +10,12 @@
|
|
|
10
10
|
1. **Normalize** findings into a common format. Expected input formats:
|
|
11
11
|
- Blind Hunter: Markdown list of descriptions.
|
|
12
12
|
- Edge Case Hunter: JSON array with `location`, `trigger_condition`, `guard_snippet`, `potential_consequence`.
|
|
13
|
+
- Subtraction Hunter: Markdown list of `path:L<line>: <tag> <what to cut>. <what replaces it>.` plus a closing `net: -<N> lines possible.` Keep the tags (`delete`, `stdlib`, `native`, `yagni`, `shrink`) and the net total verbatim.
|
|
13
14
|
- Acceptance Auditor: Markdown list with title, AC/constraint reference, and evidence.
|
|
14
15
|
|
|
15
16
|
Convert all to a unified list with:
|
|
16
17
|
- `id` — sequential integer
|
|
17
|
-
- `source` — `blind`, `edge`, `auditor`, or merged (`blind+edge`, etc.)
|
|
18
|
+
- `source` — `blind`, `edge`, `subtract`, `auditor`, or merged (`blind+edge`, etc.)
|
|
18
19
|
- `title` — one-line summary
|
|
19
20
|
- `detail` — full description
|
|
20
21
|
- `location` — file and line reference if available
|
|
@@ -30,6 +31,11 @@
|
|
|
30
31
|
- **defer** — pre-existing issue not caused by this change.
|
|
31
32
|
- **dismiss** — noise, false positive, or handled elsewhere.
|
|
32
33
|
|
|
34
|
+
Classification of Subtraction Hunter findings:
|
|
35
|
+
- Cutting code **this diff introduced** → `patch`.
|
|
36
|
+
- Cutting pre-existing code the diff didn't touch → `defer` (record it; the change is out of scope for this PR).
|
|
37
|
+
- A cut that contradicts an explicit requirement or the safety floor (validation at trust boundaries, data-loss handling, security, accessibility, tests on non-trivial logic) → `dismiss`, and say which requirement protected it.
|
|
38
|
+
|
|
33
39
|
If `{review_mode}` = `"no-spec"` and a finding would be `decision_needed`, reclassify as `patch` or `defer`.
|
|
34
40
|
|
|
35
41
|
4. **Drop** all `dismiss` findings. Record the dismiss count.
|
|
@@ -45,6 +45,8 @@ Code review complete.
|
|
|
45
45
|
- dismissed: {R}
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
+
When the Subtraction Hunter ran, add its metric on the following line: `Subtraction: {C} cut(s) proposed, net: -{N} lines possible.` Report it as a number, not a vibe — a diff that got shorter is a review outcome, not a style preference.
|
|
49
|
+
|
|
48
50
|
If `{spec_file}` is set, add: "Findings written to `{spec_file}`."
|
|
49
51
|
|
|
50
52
|
### 4. Resolve decision_needed findings
|
|
@@ -57,7 +57,7 @@ This skill uses **step-file architecture**:
|
|
|
57
57
|
## Steps
|
|
58
58
|
|
|
59
59
|
1. `step-01-gather-context.md` — identify the diff source, construct `{diff_output}`, set `{review_mode}` and `{spec_file}`.
|
|
60
|
-
2. `step-02-review.md` — launch parallel review layers (Blind Hunter, Edge Case Hunter, Acceptance Auditor).
|
|
60
|
+
2. `step-02-review.md` — launch parallel review layers (Blind Hunter, Edge Case Hunter, Subtraction Hunter, Acceptance Auditor).
|
|
61
61
|
3. `step-03-triage.md` — normalize, deduplicate, and classify findings into `decision_needed`, `patch`, `defer`, `dismiss`.
|
|
62
62
|
4. `step-04-present.md` — present findings, resolve decisions, apply patches, update story status.
|
|
63
63
|
|
|
@@ -26,6 +26,7 @@ Wizer facilitates. Hill enforces output discipline. Everyone (including Pepper,
|
|
|
26
26
|
- All `gate.md` files from current sprint
|
|
27
27
|
- `tea/nfr/{epic}.md` if an epic closed this sprint
|
|
28
28
|
- Quick-dev log
|
|
29
|
+
- Git history for the sprint window (tag range, or first → last commit)
|
|
29
30
|
|
|
30
31
|
## Output
|
|
31
32
|
|
|
@@ -57,6 +58,21 @@ Wizer reads the sprint dashboard from `sprint-status.md`:
|
|
|
57
58
|
|
|
58
59
|
Stats anchor the retro in observations, not feelings.
|
|
59
60
|
|
|
61
|
+
#### Code accounting (numbers, not adjectives)
|
|
62
|
+
|
|
63
|
+
Measured from git over the sprint window. Report the numbers even when they look bad — especially then:
|
|
64
|
+
|
|
65
|
+
| Metric | How to get it |
|
|
66
|
+
|---|---|
|
|
67
|
+
| Lines added / removed / net | `git diff --shortstat <base>..<head>` (base = last sprint's tag or first commit) |
|
|
68
|
+
| Files touched | count of distinct files in the range: `git diff --name-only <base>..<head> \| wc -l` |
|
|
69
|
+
| Dependencies | entries added/removed in the manifest diff (`package.json`, `composer.json`, `pyproject.toml`, `Cargo.toml`) |
|
|
70
|
+
| New abstractions | modules, classes, or interfaces introduced by the sprint (count from the diff) |
|
|
71
|
+
| Debt markers | `wize-debt:` added vs retired this sprint (run `/wize-debt`) |
|
|
72
|
+
| Complexity | cyclomatic-complexity delta from `tea/nfr/{epic}.md` when an epic closed |
|
|
73
|
+
|
|
74
|
+
Why this exists: the kit's discipline (reuse ladder, `/wize-subtract`, debt markers) is only verifiable with numbers. A sprint that ships 4 stories while adding 3k net lines and 6 dependencies is telling you something — say it out loud in the retro, and turn it into a change if it repeats.
|
|
75
|
+
|
|
60
76
|
### 2. Worked / didn't / surprised
|
|
61
77
|
|
|
62
78
|
Each engineer brings 2–3 items per section, written in advance ideally. Time-box discussion: any item that takes > 3 min becomes a follow-up.
|
|
@@ -98,6 +114,13 @@ attendees: [Hill, Tony, Mantis, Pepper, Fury, Hawkeye, Shuri]
|
|
|
98
114
|
- Blockers: 1 (vendor sandbox, resolved Day 5)
|
|
99
115
|
- Carry-over to S8: 0
|
|
100
116
|
|
|
117
|
+
## Code accounting
|
|
118
|
+
- Lines: +1.842 / −2.310 (net −468) across 71 files
|
|
119
|
+
- Dependencies: +1 (`zod`), −0
|
|
120
|
+
- New abstractions: 2 (one repository interface, one mapper — both with a single implementation; flagged by `/wize-subtract`)
|
|
121
|
+
- Debt markers: +3 added, −1 retired (2 with a trigger, 1 `no-trigger`)
|
|
122
|
+
- Complexity: no NFR delta this sprint (no epic closed)
|
|
123
|
+
|
|
101
124
|
## Worked
|
|
102
125
|
- Pairing on E03-S02 (auth refresh) — issue caught at integration test instead of in prod.
|
|
103
126
|
- TEA design done at planning for R-3 stories paid off.
|
|
@@ -91,7 +91,7 @@ When intent is ambiguous or no intent phrase matches, apply this heuristic top-d
|
|
|
91
91
|
| 20 | All stories gated PASS/CONCERNS, no `ready-for-dev` left | Sprint ended → **Wizer / `wize-retrospective`** + **Pepper+Peggy / `wize-refresh-knowledge`** |
|
|
92
92
|
| 21 | All gated, no new epic pulled | Plan next epic (Tony + Maria Hill), or a roadmap session |
|
|
93
93
|
|
|
94
|
-
**Overlay ship stages** (when the profile is active): web-overlay adds `wize-web-deploy` / `wize-web-seo-audit`; app-overlay adds `wize-app-release-channels` / `wize-app-store-listing
|
|
94
|
+
**Overlay ship stages** (when the profile is active): web-overlay adds `wize-web-deploy` / `wize-web-seo-audit`; app-overlay adds `wize-app-release-channels` / `wize-app-store-listing` / `wize-app-store-review` (publication gate, after listing, before prod go-live); security-overlay adds `wize-sec-pentest` (recon → enumerate → SAST → DAST → report, gated by `.wize/security/scope.md`).
|
|
95
95
|
|
|
96
96
|
### Intent routing table
|
|
97
97
|
|
|
@@ -104,7 +104,7 @@ When intent is ambiguous or no intent phrase matches, apply this heuristic top-d
|
|
|
104
104
|
| 21 | Release tagged, retrospective not done | **Wizer / `wize-retrospective`** + **Pepper+Peggy / `wize-refresh-knowledge`** |
|
|
105
105
|
| 22 | All gated, no new epic pulled | Plan next epic (Tony + Maria Hill), or a roadmap session |
|
|
106
106
|
|
|
107
|
-
**Overlay ship stages** (when the profile is active): web-overlay adds `wize-web-deploy` / `wize-web-seo-audit`; app-overlay adds `wize-app-release-channels` / `wize-app-store-listing
|
|
107
|
+
**Overlay ship stages** (when the profile is active): web-overlay adds `wize-web-deploy` / `wize-web-seo-audit`; app-overlay adds `wize-app-release-channels` / `wize-app-store-listing` / `wize-app-store-review` (publication gate, after listing, before prod go-live); security-overlay adds `wize-sec-pentest` (recon → enumerate → SAST → DAST → report, gated by `.wize/security/scope.md`).
|
|
108
108
|
|
|
109
109
|
### Intent routing table
|
|
110
110
|
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Verifica que as skills core novas (wize-subtract, wize-debt) — e a wize-eli5 —
|
|
3
|
+
// são renderizadas por TODOS os 11 adapters de harness.
|
|
4
|
+
//
|
|
5
|
+
// Uso:
|
|
6
|
+
// node tools/check-skills-all-adapters.js # valida a lista padrão
|
|
7
|
+
// node tools/check-skills-all-adapters.js wize-grill # valida skills específicas
|
|
8
|
+
'use strict';
|
|
9
|
+
const fs = require('node:fs');
|
|
10
|
+
const path = require('node:path');
|
|
11
|
+
const os = require('node:os');
|
|
12
|
+
|
|
13
|
+
const KIT = path.resolve(__dirname, '..');
|
|
14
|
+
|
|
15
|
+
// Skill code -> { dir, marker } — `dir` é o diretório esperado dentro de cada
|
|
16
|
+
// adapter e `marker` a string que precisa aparecer no arquivo renderizado.
|
|
17
|
+
const SKILLS = {
|
|
18
|
+
'wize-subtract': { dir: 'wize-subtract', marker: 'Subtraction Hunter' },
|
|
19
|
+
'wize-debt': { dir: 'wize-debt', marker: 'wize-debt:' },
|
|
20
|
+
'wize-eli5': { dir: 'wize-eli5', marker: 'Explain Like I Am 5' },
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
// Onde cada harness deposita uma skill `wize-{code}`.
|
|
24
|
+
const ADAPTERS = [
|
|
25
|
+
{ code: 'claude-code', path: (c) => `.claude/skills/${c}/SKILL.md` },
|
|
26
|
+
{ code: 'antigravity', path: (c) => `.agent/skills/${c}/SKILL.md` },
|
|
27
|
+
{ code: 'codex', path: (c) => `.agents/skills/${c}/SKILL.md` },
|
|
28
|
+
{ code: 'kimi-code', path: (c) => `.kimi/skills/${c}/SKILL.md` },
|
|
29
|
+
{ code: 'hermes', path: (c) => `.hermes/skills/${c}/SKILL.md` },
|
|
30
|
+
{ code: 'kiro', path: (c) => `.kiro/skills/${c}/SKILL.md` },
|
|
31
|
+
{ code: 'cursor', path: (c) => `.cursor/rules/${c}.mdc` },
|
|
32
|
+
{ code: 'windsurf', path: (c) => `.windsurf/rules/${c}.md` },
|
|
33
|
+
{ code: 'continue', path: (c) => `.continue/prompts/${c}.prompt` },
|
|
34
|
+
{ code: 'opencode', path: (c) => `.opencode/commands/${c}.md` },
|
|
35
|
+
{ code: 'generic', path: (c) => `.wize/agents/${c}.md` },
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
const requested = process.argv.slice(2);
|
|
39
|
+
const targets = requested.length ? requested : Object.keys(SKILLS);
|
|
40
|
+
for (const code of targets) {
|
|
41
|
+
if (!SKILLS[code]) {
|
|
42
|
+
console.error(`Skill desconhecida: ${code}. Conhecidas: ${Object.keys(SKILLS).join(', ')}`);
|
|
43
|
+
process.exit(2);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
let ok = 0, fail = 0;
|
|
48
|
+
|
|
49
|
+
for (const skill of targets) {
|
|
50
|
+
const { marker } = SKILLS[skill];
|
|
51
|
+
console.log(`\n${skill} (marcador: "${marker}")`);
|
|
52
|
+
|
|
53
|
+
for (const a of ADAPTERS) {
|
|
54
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), `wize-${skill}-${a.code}-`));
|
|
55
|
+
try {
|
|
56
|
+
const mod = require(path.join(KIT, 'adapters', a.code, 'render.js'));
|
|
57
|
+
mod.render(KIT, root, { profiles: ['core'] });
|
|
58
|
+
const rel = a.path(skill);
|
|
59
|
+
const f = path.join(root, rel);
|
|
60
|
+
if (!fs.existsSync(f)) {
|
|
61
|
+
console.log(` ✖ ${a.code.padEnd(11)} -> ${rel} NÃO foi gerado`);
|
|
62
|
+
fail++;
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const content = fs.readFileSync(f, 'utf-8');
|
|
66
|
+
// O corpo da skill é o que precisa estar lá; o código `wize-{skill}` só
|
|
67
|
+
// aparece no frontmatter, que não é copiado por todos os adapters
|
|
68
|
+
// (cursor/windsurf/opencode/generic não carregam o code no arquivo).
|
|
69
|
+
if (content.includes(marker)) {
|
|
70
|
+
console.log(` ✓ ${a.code.padEnd(11)} -> ${rel}`);
|
|
71
|
+
ok++;
|
|
72
|
+
} else {
|
|
73
|
+
console.log(` ✖ ${a.code}: ${rel} existe mas não contém o corpo esperado ("${marker}")`);
|
|
74
|
+
fail++;
|
|
75
|
+
}
|
|
76
|
+
} catch (e) {
|
|
77
|
+
console.log(` ✖ ${a.code}: erro ao renderizar — ${e.message}`);
|
|
78
|
+
fail++;
|
|
79
|
+
} finally {
|
|
80
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const total = targets.length * ADAPTERS.length;
|
|
86
|
+
console.log(`\n${ok}/${total} renderizações OK (${targets.length} skill(s) × ${ADAPTERS.length} harnesses).`);
|
|
87
|
+
process.exit(fail ? 1 : 0);
|
|
@@ -303,6 +303,34 @@ function renderAgentsMd(kitRoot, projectRoot, opts = {}) {
|
|
|
303
303
|
'implementation and review, a high-capability tier only for architecture, critical',
|
|
304
304
|
'decisions, or final adversarial review.',
|
|
305
305
|
'',
|
|
306
|
+
'## Writing code (always on)',
|
|
307
|
+
'',
|
|
308
|
+
'Before writing new code, climb this ladder and stop at the first rung that holds:',
|
|
309
|
+
'',
|
|
310
|
+
'1. Does this need to exist? → no: skip it (YAGNI).',
|
|
311
|
+
'2. Already in this codebase? → reuse the helper, util, or pattern; don\'t rewrite it.',
|
|
312
|
+
'3. Does the standard library do it? → use it.',
|
|
313
|
+
'4. Does a platform or framework feature cover it? → use it.',
|
|
314
|
+
'5. Does an already-installed dependency solve it? → use it.',
|
|
315
|
+
'6. Is it one line? → write the one line.',
|
|
316
|
+
'7. Only then: the minimum code that works.',
|
|
317
|
+
'',
|
|
318
|
+
'The ladder runs **after** you understand the problem: read the code the change touches and',
|
|
319
|
+
'trace the real flow before picking a rung.',
|
|
320
|
+
'',
|
|
321
|
+
'- No abstractions, configuration, or boilerplate nobody asked for. No new dependency if it can be avoided.',
|
|
322
|
+
'- Deletion over addition. Boring over clever. Fewest files possible.',
|
|
323
|
+
'- Bug fix = root cause, not symptom: grep every caller of the function you touch and fix the shared function once.',
|
|
324
|
+
'- The shortest working diff wins — but only once you understand the problem.',
|
|
325
|
+
'',
|
|
326
|
+
'Lazy, not negligent — never on the chopping block: input validation at trust boundaries,',
|
|
327
|
+
'error handling that prevents data loss, security, accessibility, tests on non-trivial logic,',
|
|
328
|
+
'and anything explicitly requested.',
|
|
329
|
+
'',
|
|
330
|
+
'A deliberate shortcut with a known ceiling gets a `wize-debt:` comment naming the ceiling and',
|
|
331
|
+
'the upgrade trigger, so it can be harvested later with `/wize-debt`. Before a PR, run',
|
|
332
|
+
'`/wize-subtract` on the diff — the best review outcome is a shorter diff.',
|
|
333
|
+
'',
|
|
306
334
|
'## Roster',
|
|
307
335
|
''
|
|
308
336
|
];
|
|
@@ -28,6 +28,14 @@ function checkWorkflow(file) {
|
|
|
28
28
|
if (!/^name:/m.test(content)) errs.push('missing "name:"');
|
|
29
29
|
if (!/^owner:/m.test(content) && !/^module:/m.test(content)) errs.push('missing "owner:" or "module:"');
|
|
30
30
|
if (!/^description:/m.test(content)) errs.push('missing "description:"');
|
|
31
|
+
// The kit's parser (readFrontmatter) reads a double-quoted scalar with
|
|
32
|
+
// /^"([^"]*)"$/, so an escaped quote inside the value (\" or \') breaks it:
|
|
33
|
+
// the value is parsed with its wrapping quotes and re-escaped on render.
|
|
34
|
+
// Write descriptions without inner quotes instead.
|
|
35
|
+
const dm = content.match(/^description:\s*"(.*)"\s*$/m);
|
|
36
|
+
if (dm && /\\["']/.test(dm[1])) {
|
|
37
|
+
errs.push('description contains escaped quotes (\\" or \\\') — the kit parser does not support them; rewrite without quotes');
|
|
38
|
+
}
|
|
31
39
|
return errs;
|
|
32
40
|
}
|
|
33
41
|
|