wize-dev-kit 0.16.0 → 0.17.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/AGENTS.md +37 -0
- package/ARCH.md +77 -24
- package/CHANGELOG.md +14 -0
- package/DECISIONS.md +27 -1
- package/README.es.md +296 -0
- package/README.md +3 -2
- package/README.pt-BR.md +294 -0
- package/ROSTER.md +11 -3
- package/adapters/README.md +9 -7
- package/adapters/antigravity/README.md +5 -5
- package/adapters/claude-code/README.md +1 -1
- package/adapters/codex/README.md +5 -5
- package/adapters/codex/adapter.yaml +1 -1
- package/adapters/codex/render.js +1 -1
- package/adapters/continue/README.md +5 -5
- package/adapters/cursor/README.md +2 -2
- package/adapters/generic/README.md +1 -1
- package/adapters/hermes/README.md +23 -0
- package/adapters/hermes/adapter.yaml +8 -0
- package/adapters/hermes/render.js +17 -0
- package/adapters/kimi-code/README.md +5 -5
- package/adapters/kimi-code/render.js +2 -2
- package/adapters/kiro/README.md +30 -0
- package/adapters/kiro/adapter.yaml +8 -0
- package/adapters/kiro/render.js +21 -0
- package/adapters/opencode/README.md +3 -3
- package/adapters/opencode/render.js +27 -1
- package/adapters/windsurf/README.md +3 -3
- package/docs/harnesses/antigravity.md +20 -0
- package/docs/harnesses/antigravity.pt-BR.md +20 -0
- package/docs/harnesses/claude-code.md +23 -0
- package/docs/harnesses/claude-code.pt-BR.md +23 -0
- package/docs/harnesses/codex.md +21 -0
- package/docs/harnesses/codex.pt-BR.md +21 -0
- package/docs/harnesses/continue.md +21 -0
- package/docs/harnesses/continue.pt-BR.md +21 -0
- package/docs/harnesses/cursor.md +22 -0
- package/docs/harnesses/cursor.pt-BR.md +22 -0
- package/docs/harnesses/generic.md +20 -0
- package/docs/harnesses/generic.pt-BR.md +20 -0
- package/docs/harnesses/hermes.md +26 -0
- package/docs/harnesses/hermes.pt-BR.md +26 -0
- package/docs/harnesses/kimi-code.md +19 -0
- package/docs/harnesses/kimi-code.pt-BR.md +19 -0
- package/docs/harnesses/kiro.md +26 -0
- package/docs/harnesses/kiro.pt-BR.md +26 -0
- package/docs/harnesses/opencode.md +31 -0
- package/docs/harnesses/opencode.pt-BR.md +31 -0
- package/docs/harnesses/windsurf.md +22 -0
- package/docs/harnesses/windsurf.pt-BR.md +22 -0
- package/package.json +1 -1
- package/schemas/agent.schema.json +2 -2
- package/schemas/workflow.schema.json +1 -1
- package/src/app-overlay/wize-app-release-channels/workflow.md +2 -0
- package/src/app-overlay/wize-app-scaffold/workflow.md +2 -0
- package/src/app-overlay/wize-app-store-listing/workflow.md +2 -0
- package/src/builder-skills/wize-create-agent/workflow.md +2 -0
- package/src/builder-skills/wize-create-skill/workflow.md +2 -0
- package/src/builder-skills/wize-create-workflow/workflow.md +2 -0
- package/src/core-skills/wize-advanced-elicitation/skill.md +2 -0
- package/src/core-skills/wize-brainstorming/skill.md +2 -0
- package/src/core-skills/wize-customize/skill.md +116 -0
- package/src/core-skills/wize-editorial-review-prose/skill.md +94 -0
- package/src/core-skills/wize-editorial-review-structure/skill.md +99 -0
- package/src/core-skills/wize-grill/skill.md +77 -0
- package/src/core-skills/wize-index-docs/skill.md +119 -0
- package/src/core-skills/wize-pre-pr-check/skill.md +134 -0
- package/src/core-skills/wize-review-adversarial/skill.md +3 -0
- package/src/core-skills/wize-review-edge-case-hunter/skill.md +115 -0
- package/src/core-skills/wize-shard-doc/skill.md +2 -0
- package/src/core-skills/wize-spec/assets/headless-schemas.md +39 -0
- package/src/core-skills/wize-spec/assets/spec-template.md +40 -0
- package/src/core-skills/wize-spec/customize.toml +20 -0
- package/src/core-skills/wize-spec/skill.md +112 -0
- package/src/method-skills/1-analysis/wize-agent-analyst/agent.yaml +3 -0
- package/src/method-skills/1-analysis/wize-document-project/documentation-requirements.csv +12 -0
- package/src/method-skills/1-analysis/wize-document-project/templates/api-contracts-template.md +38 -0
- package/src/method-skills/1-analysis/wize-document-project/templates/architecture-template.md +54 -0
- package/src/method-skills/1-analysis/wize-document-project/templates/component-inventory-template.md +40 -0
- package/src/method-skills/1-analysis/wize-document-project/templates/contribution-guide-template.md +34 -0
- package/src/method-skills/1-analysis/wize-document-project/templates/data-models-template.md +36 -0
- package/src/method-skills/1-analysis/wize-document-project/templates/deep-dive-template.md +312 -0
- package/src/method-skills/1-analysis/wize-document-project/templates/deployment-guide-template.md +42 -0
- package/src/method-skills/1-analysis/wize-document-project/templates/development-guide-template.md +61 -0
- package/src/method-skills/1-analysis/wize-document-project/templates/index-template.md +185 -0
- package/src/method-skills/1-analysis/wize-document-project/templates/project-overview-template.md +110 -0
- package/src/method-skills/1-analysis/wize-document-project/templates/project-scan-report-schema.json +159 -0
- package/src/method-skills/1-analysis/wize-document-project/templates/source-tree-template.md +142 -0
- package/src/method-skills/1-analysis/wize-document-project/workflow.md +213 -20
- package/src/method-skills/1-analysis/wize-domain-research/customize.toml +14 -0
- package/src/method-skills/1-analysis/wize-domain-research/domain-steps/step-01-init.md +49 -0
- package/src/method-skills/1-analysis/wize-domain-research/domain-steps/step-02-domain-analysis.md +39 -0
- package/src/method-skills/1-analysis/wize-domain-research/domain-steps/step-03-competitive-landscape.md +39 -0
- package/src/method-skills/1-analysis/wize-domain-research/domain-steps/step-04-regulatory-focus.md +39 -0
- package/src/method-skills/1-analysis/wize-domain-research/domain-steps/step-05-technical-trends.md +39 -0
- package/src/method-skills/1-analysis/wize-domain-research/domain-steps/step-06-research-synthesis.md +43 -0
- package/src/method-skills/1-analysis/wize-domain-research/research.template.md +31 -0
- package/src/method-skills/1-analysis/wize-domain-research/workflow.md +58 -0
- package/src/method-skills/1-analysis/wize-market-research/customize.toml +14 -0
- package/src/method-skills/1-analysis/wize-market-research/research.template.md +31 -0
- package/src/method-skills/1-analysis/wize-market-research/steps/step-01-init.md +57 -0
- package/src/method-skills/1-analysis/wize-market-research/steps/step-02-customer-behavior.md +39 -0
- package/src/method-skills/1-analysis/wize-market-research/steps/step-03-customer-pain-points.md +37 -0
- package/src/method-skills/1-analysis/wize-market-research/steps/step-04-customer-decisions.md +39 -0
- package/src/method-skills/1-analysis/wize-market-research/steps/step-05-competitive-analysis.md +37 -0
- package/src/method-skills/1-analysis/wize-market-research/steps/step-06-research-completion.md +47 -0
- package/src/method-skills/1-analysis/wize-market-research/workflow.md +66 -0
- package/src/method-skills/1-analysis/wize-prfaq/workflow.md +152 -11
- package/src/method-skills/1-analysis/wize-product-brief/workflow.md +92 -19
- package/src/method-skills/1-analysis/wize-refresh-knowledge/workflow.md +129 -0
- package/src/method-skills/1-analysis/wize-research/workflow.md +39 -12
- package/src/method-skills/1-analysis/wize-technical-research/customize.toml +14 -0
- package/src/method-skills/1-analysis/wize-technical-research/research.template.md +31 -0
- package/src/method-skills/1-analysis/wize-technical-research/technical-steps/step-01-init.md +49 -0
- package/src/method-skills/1-analysis/wize-technical-research/technical-steps/step-02-technical-overview.md +45 -0
- package/src/method-skills/1-analysis/wize-technical-research/technical-steps/step-03-integration-patterns.md +39 -0
- package/src/method-skills/1-analysis/wize-technical-research/technical-steps/step-04-architectural-patterns.md +39 -0
- package/src/method-skills/1-analysis/wize-technical-research/technical-steps/step-05-implementation-research.md +42 -0
- package/src/method-skills/1-analysis/wize-technical-research/technical-steps/step-06-research-synthesis.md +46 -0
- package/src/method-skills/1-analysis/wize-technical-research/workflow.md +60 -0
- package/src/method-skills/1-analysis/wize-trigger-map/workflow.md +82 -16
- package/src/method-skills/2-plan-workflows/wize-create-prd/workflow.md +135 -23
- package/src/method-skills/2-plan-workflows/wize-edit-prd/workflow.md +110 -0
- package/src/method-skills/2-plan-workflows/wize-ux-design/workflow.md +134 -28
- package/src/method-skills/2-plan-workflows/wize-ux-scenarios/workflow.md +93 -15
- package/src/method-skills/2-plan-workflows/wize-validate-prd/workflow.md +108 -12
- package/src/method-skills/3-solutioning/wize-check-implementation-readiness/workflow.md +103 -11
- package/src/method-skills/3-solutioning/wize-create-architecture/architecture-decision-template.md +41 -0
- package/src/method-skills/3-solutioning/wize-create-architecture/customize.toml +20 -0
- package/src/method-skills/3-solutioning/wize-create-architecture/steps/step-01-init.md +95 -0
- package/src/method-skills/3-solutioning/wize-create-architecture/steps/step-01b-continue.md +32 -0
- package/src/method-skills/3-solutioning/wize-create-architecture/steps/step-02-context.md +126 -0
- package/src/method-skills/3-solutioning/wize-create-architecture/steps/step-03-starter.md +110 -0
- package/src/method-skills/3-solutioning/wize-create-architecture/steps/step-04-decisions.md +129 -0
- package/src/method-skills/3-solutioning/wize-create-architecture/steps/step-05-patterns.md +109 -0
- package/src/method-skills/3-solutioning/wize-create-architecture/steps/step-06-structure.md +97 -0
- package/src/method-skills/3-solutioning/wize-create-architecture/steps/step-07-validation.md +124 -0
- package/src/method-skills/3-solutioning/wize-create-architecture/steps/step-08-complete.md +59 -0
- package/src/method-skills/3-solutioning/wize-create-architecture/workflow.md +55 -48
- package/src/method-skills/3-solutioning/wize-create-epics-and-stories/workflow.md +154 -15
- package/src/method-skills/3-solutioning/wize-design-system/workflow.md +184 -22
- package/src/method-skills/3-solutioning/wize-nfr-principles/workflow.md +145 -17
- package/src/method-skills/3-solutioning/wize-project-context/workflow.md +120 -0
- package/src/method-skills/3-solutioning/wize-tech-vision/workflow.md +130 -22
- package/src/method-skills/4-implementation/wize-agent-dev/persona.md +12 -0
- package/src/method-skills/4-implementation/wize-changelog/workflow.md +184 -0
- package/src/method-skills/4-implementation/wize-checkpoint-preview/workflow.md +117 -0
- package/src/method-skills/4-implementation/wize-code-review/customize.toml +21 -0
- package/src/method-skills/4-implementation/wize-code-review/steps/step-01-gather-context.md +64 -0
- package/src/method-skills/4-implementation/wize-code-review/steps/step-02-review.md +40 -0
- package/src/method-skills/4-implementation/wize-code-review/steps/step-03-triage.md +43 -0
- package/src/method-skills/4-implementation/wize-code-review/steps/step-04-present.md +100 -0
- package/src/method-skills/4-implementation/wize-code-review/workflow.md +54 -12
- package/src/method-skills/4-implementation/wize-correct-course/workflow.md +93 -0
- package/src/method-skills/4-implementation/wize-create-story/workflow.md +154 -10
- package/src/method-skills/4-implementation/wize-dev-story/workflow.md +185 -17
- package/src/method-skills/4-implementation/wize-investigate/workflow.md +123 -0
- package/src/method-skills/4-implementation/wize-quick-dev/workflow.md +136 -18
- package/src/method-skills/4-implementation/wize-release/workflow.md +162 -0
- package/src/method-skills/4-implementation/wize-retrospective/workflow.md +114 -10
- package/src/method-skills/4-implementation/wize-sprint-planning/workflow.md +78 -11
- package/src/method-skills/4-implementation/wize-sprint-status/workflow.md +45 -11
- package/src/method-skills/module.yaml +28 -0
- package/src/orchestrator-skills/module.yaml +7 -1
- package/src/orchestrator-skills/wize/skill.md +164 -0
- package/src/orchestrator-skills/wize-check/skill.md +98 -0
- package/src/orchestrator-skills/wize-help/skill.md +227 -67
- package/src/orchestrator-skills/wize-onboarding/workflow.md +78 -14
- package/src/orchestrator-skills/wize-orchestrator/agent.yaml +2 -0
- package/src/orchestrator-skills/wize-orchestrator/persona.md +44 -3
- package/src/orchestrator-skills/wize-party-mode/workflow.md +2 -0
- package/src/security-overlay/_shared/allowlist.js +154 -0
- package/src/security-overlay/_shared/backlog.js +169 -0
- package/src/security-overlay/_shared/cli-runner.js +87 -0
- package/src/security-overlay/_shared/cvss.js +108 -0
- package/src/security-overlay/_shared/detect.js +125 -0
- package/src/security-overlay/_shared/install-script.js +205 -0
- package/src/security-overlay/_shared/invoke-phase.js +86 -0
- package/src/security-overlay/_shared/owasp.js +56 -0
- package/src/security-overlay/_shared/partial.js +225 -0
- package/src/security-overlay/_shared/preflight.js +175 -0
- package/src/security-overlay/_shared/scope-gate.js +172 -0
- package/src/security-overlay/_shared/scope-parser.js +147 -0
- package/src/security-overlay/agents/red-teamer/agent.yaml +54 -0
- package/src/security-overlay/agents/red-teamer/persona.md +49 -0
- package/src/security-overlay/data/common.txt +115 -0
- package/src/security-overlay/data/owasp-top10.json +15 -0
- package/src/security-overlay/data/tool-allowlist.json +31 -0
- package/src/security-overlay/skills/wize-sec-enumerate/scripts/run-enumerate.js +180 -0
- package/src/security-overlay/skills/wize-sec-enumerate/skill.md +34 -0
- package/src/security-overlay/skills/wize-sec-exploit/data/common.txt +117 -0
- package/src/security-overlay/skills/wize-sec-exploit/scripts/run-ffuf.js +147 -0
- package/src/security-overlay/skills/wize-sec-exploit/scripts/run-nikto.js +145 -0
- package/src/security-overlay/skills/wize-sec-exploit/scripts/run-nuclei.js +176 -0
- package/src/security-overlay/skills/wize-sec-exploit/scripts/run-sqlmap.js +139 -0
- package/src/security-overlay/skills/wize-sec-pentest/scripts/run-pipeline.js +184 -0
- package/src/security-overlay/skills/wize-sec-pentest/skill.md +54 -0
- package/src/security-overlay/skills/wize-sec-recon/scripts/run-gitleaks.js +139 -0
- package/src/security-overlay/skills/wize-sec-recon/scripts/run-osv.js +227 -0
- package/src/security-overlay/skills/wize-sec-recon/scripts/run-recon.js +162 -0
- package/src/security-overlay/skills/wize-sec-recon/skill.md +37 -0
- package/src/security-overlay/skills/wize-sec-report/scripts/render-report.js +1033 -0
- package/src/security-overlay/skills/wize-sec-scope/scripts/generate-scope.js +106 -0
- package/src/security-overlay/skills/wize-sec-scope/skill.md +52 -0
- package/src/tea-skills/wize-qa-generate-e2e-tests/workflow.md +121 -0
- package/src/tea-skills/wize-tea-design/workflow.md +107 -13
- package/src/tea-skills/wize-tea-gate/workflow.md +118 -25
- package/src/tea-skills/wize-tea-nfr/workflow.md +107 -14
- package/src/tea-skills/wize-tea-review/workflow.md +123 -13
- package/src/tea-skills/wize-tea-risk/workflow.md +113 -10
- package/src/tea-skills/wize-tea-trace/workflow.md +86 -12
- package/src/web-overlay/wize-web-deploy/workflow.md +2 -0
- package/src/web-overlay/wize-web-scaffold/workflow.md +2 -0
- package/src/web-overlay/wize-web-seo-audit/workflow.md +2 -0
- package/tools/check-eli5-all-adapters.js +3 -2
- package/tools/installer/baseline.js +138 -0
- package/tools/installer/commands/agent.js +197 -0
- package/tools/installer/commands/doctor.js +321 -0
- package/tools/installer/commands/document-project.js +93 -0
- package/tools/installer/commands/sync.js +45 -0
- package/tools/installer/commands/update.js +172 -0
- package/tools/installer/document-project/batch-scanner.js +93 -0
- package/tools/installer/document-project/classify.js +170 -0
- package/tools/installer/document-project/modes/deep-dive.js +196 -0
- package/tools/installer/document-project/modes/full-rescan.js +15 -0
- package/tools/installer/document-project/modes/initial-scan.js +100 -0
- package/tools/installer/document-project/modes/quick.js +211 -0
- package/tools/installer/document-project/render-index.js +101 -0
- package/tools/installer/document-project/state.js +110 -0
- package/tools/installer/onboarding.js +14 -20
- package/tools/installer/render-shared.js +159 -15
- package/tools/installer/setup-helpers.js +2 -0
- package/tools/installer/validators/run-all.js +3 -2
- package/tools/installer/version-check.js +117 -0
- package/tools/installer/wize-cli.js +501 -70
|
@@ -1,24 +1,101 @@
|
|
|
1
1
|
---
|
|
2
|
+
|
|
2
3
|
code: wize-create-epics-and-stories
|
|
4
|
+
description: "Use quando a arquitetura estiver definida e precisar fatiar o escopo em epics e stories com acceptance criteria."
|
|
3
5
|
name: Create Epics and Stories
|
|
4
6
|
phase: 3-solutioning
|
|
5
7
|
owner: wize-agent-architect # Tony Stark
|
|
6
|
-
status:
|
|
8
|
+
status: ready
|
|
7
9
|
---
|
|
8
10
|
|
|
9
11
|
# Create Epics and Stories
|
|
10
12
|
|
|
11
|
-
**Goal.** Slice the PRD + architecture into epics (each ships value) and stories (each is one focused PR-sized unit).
|
|
13
|
+
**Goal.** Slice the PRD + architecture into **epics** (each ships value end-to-end) and **stories** (each is one focused PR-sized unit Shuri can implement and Hawkeye can test).
|
|
14
|
+
|
|
15
|
+
Tony drives. Output lands in `.wize/solutioning/epics/` and `.wize/solutioning/stories/`.
|
|
16
|
+
|
|
17
|
+
> **No estimates.** Epics and stories never carry a time or effort estimate (hours, days, story points, S/M/L/XL) — at any step. AI development speed has made them noise that only burns time and tokens. The only sizing question is binary: **does a story fit one PR?** If not, slice it.
|
|
18
|
+
|
|
19
|
+
When slicing raises decisions the PRD doesn't answer — priority order, sequencing, protected behaviors, what's out of a story — offer a short `wize-grill` pass with the user instead of guessing. Decisions land in the epic/story fields; unresolved ones become open questions with owners.
|
|
12
20
|
|
|
13
21
|
## Inputs
|
|
14
|
-
|
|
22
|
+
|
|
23
|
+
Read central docs first, then expand by dependency — don't load unrelated files for padding:
|
|
24
|
+
|
|
25
|
+
- `AGENTS.md` + `.wize/config/project.toml` — active profiles, languages, conventions.
|
|
26
|
+
- `.wize/planning/prd.md` — the AC source (never reword ACs downstream).
|
|
15
27
|
- `.wize/solutioning/architecture.md`
|
|
28
|
+
- `.wize/planning/ux/ux-design/` (every story references one or more screens)
|
|
29
|
+
- `.wize/knowledge/document-project/` — brownfield baseline, if present.
|
|
16
30
|
|
|
17
31
|
## Outputs
|
|
32
|
+
|
|
18
33
|
- `.wize/solutioning/epics/{NN}-{slug}.md`
|
|
19
|
-
- `.wize/solutioning/stories/{NN}
|
|
34
|
+
- `.wize/solutioning/stories/{epic-NN}/{story-id}.md`
|
|
35
|
+
|
|
36
|
+
## Epic shape
|
|
37
|
+
|
|
38
|
+
An epic:
|
|
39
|
+
- Ships **value** on its own (a user can do the thing after this epic, even if the next one improves it).
|
|
40
|
+
- Lasts 1–3 sprints when in flight.
|
|
41
|
+
- Has 3–10 stories.
|
|
42
|
+
- Has a single trigger-map row as its anchor.
|
|
43
|
+
|
|
44
|
+
Epic file:
|
|
45
|
+
|
|
46
|
+
```markdown
|
|
47
|
+
---
|
|
48
|
+
epic_id: 01-onboarding
|
|
49
|
+
status: ready
|
|
50
|
+
owner: Tony Stark + Maria Hill
|
|
51
|
+
linked_prd: E01
|
|
52
|
+
trigger_map_row: 1
|
|
53
|
+
priority: 1
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
# Epic 01: Sign-up + first invite
|
|
57
|
+
|
|
58
|
+
## Outcome
|
|
59
|
+
A first-time team admin signs up, lands in onboarding, and invites at least one teammate within 5 minutes (trigger-map row 1 + 2).
|
|
60
|
+
|
|
61
|
+
## Stories
|
|
62
|
+
- E01-S01: Sign-up empty + happy path (AC-01-1, AC-01-2)
|
|
63
|
+
- E01-S02: Sign-up error states (AC-01-3, AC-01-4)
|
|
64
|
+
- E01-S03: Onboarding step 1 — invite first teammate (AC-02-1, AC-02-2)
|
|
65
|
+
- E01-S04: Email delivery + retry (AC-02-3)
|
|
66
|
+
- E01-S05: Team list empty + with first member (AC-03-1, AC-03-2)
|
|
67
|
+
|
|
68
|
+
## Dependencies
|
|
69
|
+
- Design tokens by Mantis (S0 — already done)
|
|
70
|
+
- Resend account configured (Tony, before S04)
|
|
71
|
+
|
|
72
|
+
## Success
|
|
73
|
+
All ACs of all stories PASS gate. Telemetry shows `teammate_invited` ≥ 80% of `signup_completed` users within 24h in the beta cohort.
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Story shape — INVEST
|
|
77
|
+
|
|
78
|
+
Each story passes:
|
|
79
|
+
- **I**ndependent — can be implemented without waiting for another in-flight story.
|
|
80
|
+
- **N**egotiable — wording can move; intent stays.
|
|
81
|
+
- **V**aluable — a real outcome to a real user (or a clear test path that proves a slice).
|
|
82
|
+
- **S**mall — fits in one PR, tests included. This is the *only* sizing test; no time or point estimate (see **No estimates** above).
|
|
83
|
+
- **T**estable — every AC is observable.
|
|
84
|
+
|
|
85
|
+
If a story is XL, slice it before merging it to `stories/`.
|
|
20
86
|
|
|
21
|
-
##
|
|
87
|
+
## Slicing patterns (Tony's defaults)
|
|
88
|
+
|
|
89
|
+
| Pattern | When |
|
|
90
|
+
|---|---|
|
|
91
|
+
| Walking skeleton | When you need the full user path to exist (even with stubs) before going deep on any single screen. |
|
|
92
|
+
| By user role | Admin vs member often slice naturally. |
|
|
93
|
+
| By acceptance criterion | One AC = one PR when ACs are independent. |
|
|
94
|
+
| By happy / error path | Ship happy path first; error states next story. |
|
|
95
|
+
| By back-end / front-end | Avoid unless the back-end can ship usable without UI; otherwise it bundles. |
|
|
96
|
+
| By feature flag | When a story partially ships, use a flag and write the flag retirement story now. |
|
|
97
|
+
|
|
98
|
+
## Story file template
|
|
22
99
|
|
|
23
100
|
```markdown
|
|
24
101
|
---
|
|
@@ -26,23 +103,85 @@ story_id: E01-S03
|
|
|
26
103
|
epic: 01-onboarding
|
|
27
104
|
status: ready-for-dev
|
|
28
105
|
priority: 2
|
|
29
|
-
|
|
30
|
-
|
|
106
|
+
linked_screens: [onboarding-step-1, invite-modal]
|
|
107
|
+
linked_acs: [AC-02-1, AC-02-2]
|
|
31
108
|
---
|
|
32
109
|
|
|
33
|
-
# Story:
|
|
110
|
+
# Story: Onboarding step 1 — invite first teammate
|
|
34
111
|
|
|
35
112
|
## Context
|
|
36
|
-
|
|
113
|
+
Comes right after sign-up. The user lands here with no team yet. The screen is the moment-of-truth from S1: if the user invites a teammate here, the product earned its value moment.
|
|
114
|
+
|
|
115
|
+
## Sources of truth (Shuri reads before coding)
|
|
116
|
+
- `AGENTS.md` + `.wize/config/project.toml` · `.wize/knowledge/document-project/*`.
|
|
117
|
+
- `prd.md` (AC source) · `architecture.md` · `ux-design/onboarding-step-1.md` · parent epic `01-onboarding.md`.
|
|
118
|
+
- The TEA test contract for this story · related code + tests already on this path.
|
|
37
119
|
|
|
38
120
|
## Acceptance criteria
|
|
39
|
-
- AC-1
|
|
40
|
-
- AC-2
|
|
121
|
+
- **AC-02-1:** Given a new admin on `/onboarding`, When they enter a valid email and click "Send invite", Then a `teammate_invited` event fires and the screen advances to "Invite sent" within 1s.
|
|
122
|
+
- **AC-02-2:** Given an invalid email, When the user blurs the field, Then error text appears (200ms) identifying which rule failed.
|
|
41
123
|
|
|
42
|
-
##
|
|
43
|
-
-
|
|
124
|
+
## Restrictions
|
|
125
|
+
- **Out of scope:** bulk invite → E01-S07; custom invite message → E02-S03.
|
|
126
|
+
- **Protected behaviors:** existing sign-up + session flow must not change.
|
|
127
|
+
- **Compatibility:** `(team_id, email)` idempotency key — don't break existing invite rows.
|
|
128
|
+
- **Security:** validate email at the server boundary; auth context required on `inviteTeammate`.
|
|
44
129
|
|
|
45
130
|
## Notes for Shuri (Dev)
|
|
46
|
-
- Touch points:
|
|
47
|
-
-
|
|
131
|
+
- Touch points: `app/(onboarding)/invite/page.tsx`, new server action `inviteTeammate`, `lib/email/send-invite.ts`.
|
|
132
|
+
- Reuse `Button`, `Input`, `Banner` from design system.
|
|
133
|
+
- Add `data-testid="invite-form"`, `"invite-email"`, `"invite-cta"` (Hawkeye depends on these).
|
|
134
|
+
|
|
135
|
+
## Validation contract
|
|
136
|
+
- **AC → test:** AC-02-1 → E2E `invite happy path` + unit `validateInviteEmail`; AC-02-2 → unit `invalid email` + component error-state.
|
|
137
|
+
- **Required checks:** the unit/integration/E2E split Hawkeye declares below, plus lint, format, type-check, build. Authz asserted on the server action.
|
|
138
|
+
- **States:** loading, empty, error rendered and asserted.
|
|
139
|
+
|
|
140
|
+
## Notes for Hawkeye (TEA)
|
|
141
|
+
- Tests required: 2 unit (validation), 1 integration (server action calls mailer with right args), 1 E2E (happy path on Playwright).
|
|
142
|
+
- Mocks: outbound email via MSW; auth context via fixture.
|
|
143
|
+
- NFR sample: response p95 ≤ 800ms locally (NFR 1.A allows up to 1s end-to-end).
|
|
144
|
+
|
|
145
|
+
## Done means
|
|
146
|
+
Every AC has a passing test (mapped above), gate PASS/CONCERNS, story `status: ready-for-review`, knowledge axes updated if touched.
|
|
48
147
|
```
|
|
148
|
+
|
|
149
|
+
## Steps
|
|
150
|
+
|
|
151
|
+
### 1. From PRD backbone → epics
|
|
152
|
+
|
|
153
|
+
Each backbone story in the PRD becomes one epic. Name epics by outcome, not by feature: "Sign-up + first invite," not "Auth screens."
|
|
154
|
+
|
|
155
|
+
### 2. From scenarios → stories
|
|
156
|
+
|
|
157
|
+
For each epic, walk the linked scenarios in `ux-scenarios.md`. Slice into stories by the patterns above. Aim for 3–7 stories per epic.
|
|
158
|
+
|
|
159
|
+
### 3. ACs map exactly
|
|
160
|
+
|
|
161
|
+
Every story declares the AC IDs it advances (from PRD). The union of stories per epic equals the AC set of that epic — no gaps, no overlap.
|
|
162
|
+
|
|
163
|
+
### 3.5 Fill the contract fields
|
|
164
|
+
|
|
165
|
+
Each story carries its own **sources of truth**, **restrictions** (out-of-scope + protected behaviors + compatibility + security), and a **validation contract** (AC → test map + required checks). These aren't optional prose — they are what makes AC → code → test → gate traceable. A story missing them is not ready for dev.
|
|
166
|
+
|
|
167
|
+
### 4. Slice check (no estimates)
|
|
168
|
+
|
|
169
|
+
Don't estimate stories — size them by one question: does each fit a single PR? Anything that doesn't gets sliced before it lands in `stories/`. If most stories feel too big to slice cleanly, the slicing pattern is too coarse; revisit it.
|
|
170
|
+
|
|
171
|
+
### 5. Hand off
|
|
172
|
+
|
|
173
|
+
- Mark all epics + stories `status: ready-for-dev`.
|
|
174
|
+
- Trigger `wize-check-implementation-readiness` (Tony, with Hawkeye on risk profile).
|
|
175
|
+
- After ready, Hill runs sprint planning.
|
|
176
|
+
|
|
177
|
+
## Anti-patterns Tony rejects
|
|
178
|
+
|
|
179
|
+
- **Stories without AC links.** No traceability → no gate later.
|
|
180
|
+
- **Stories that "ship a back-end."** Bundle with the front-end consumer unless a different team uses it independently.
|
|
181
|
+
- **XL stories.** Slice further or split into two PRs.
|
|
182
|
+
- **"Epic" that is one story.** Then it's a story.
|
|
183
|
+
- **Stories that share `testid` namespace.** They'll collide.
|
|
184
|
+
|
|
185
|
+
## Hand-off
|
|
186
|
+
|
|
187
|
+
> Epics and stories at `.wize/solutioning/`. 5 epics, 28 stories. All have ACs from the PRD. Run `wize-check-implementation-readiness`; Hawkeye, `tea-risk.md` next.
|
|
@@ -1,36 +1,198 @@
|
|
|
1
1
|
---
|
|
2
|
+
|
|
2
3
|
code: wize-design-system
|
|
4
|
+
description: "Use quando o UX design estiver avançando e precisar estabelecer a baseline do design system (tokens, componentes, grids)."
|
|
3
5
|
name: Design System
|
|
4
6
|
phase: 3-solutioning
|
|
5
7
|
owner: wize-agent-ux-designer # Mantis (WDS Freya — Phase 7)
|
|
6
8
|
absorbs: "WDS Freya — Phase 7 (Design System)"
|
|
7
|
-
status:
|
|
9
|
+
status: ready
|
|
8
10
|
---
|
|
9
11
|
|
|
10
12
|
# Design System
|
|
11
13
|
|
|
12
|
-
**Goal.** Establish design tokens and a baseline component library
|
|
14
|
+
**Goal.** Establish design tokens and a baseline component library Shuri implements consistently. Mantis defines what; Tony picks the runtime; Shuri builds. Hawkeye verifies a11y and consistency at gate.
|
|
15
|
+
|
|
16
|
+
Mantis drives. Output lands in `.wize/solutioning/design-system/`.
|
|
13
17
|
|
|
14
18
|
## Inputs
|
|
15
|
-
|
|
19
|
+
|
|
20
|
+
- `.wize/planning/ux/ux-design/` (every component the specs use)
|
|
21
|
+
- `.wize/planning/nfr-principles.md` (a11y and perf budgets)
|
|
22
|
+
- Overlay playbooks (active):
|
|
23
|
+
- `web-overlay/playbooks/wcag-aa.md`, `responsive-breakpoints.md`, `semantic-html.md`
|
|
24
|
+
- `app-overlay/playbooks/apple-hig.md`, `material-design-3.md`, `touch-targets-and-gestures.md`
|
|
16
25
|
|
|
17
26
|
## Outputs
|
|
18
|
-
|
|
19
|
-
- `.wize/solutioning/design-system/
|
|
20
|
-
- `.wize/solutioning/design-system/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
27
|
+
|
|
28
|
+
- `.wize/solutioning/design-system/tokens.json` — single source of truth.
|
|
29
|
+
- `.wize/solutioning/design-system/components/{Component}.md` — one per component.
|
|
30
|
+
- `.wize/solutioning/design-system/README.md` — index + theming guide.
|
|
31
|
+
|
|
32
|
+
## Tokens (the only acceptable way to ship styles)
|
|
33
|
+
|
|
34
|
+
Mantis defines the tokens; Tony picks the runtime (Tailwind, CSS modules, Vanilla Extract, Compose theme, SwiftUI tokens). The names below are framework-agnostic.
|
|
35
|
+
|
|
36
|
+
### Color (semantic + raw scale)
|
|
37
|
+
|
|
38
|
+
| Semantic | Light | Dark | Contrast pair |
|
|
39
|
+
|---|---|---|---|
|
|
40
|
+
| `surface.base` | #FFFFFF | #0B0F14 | text.primary |
|
|
41
|
+
| `surface.raised` | #F5F7FA | #121821 | text.primary |
|
|
42
|
+
| `text.primary` | #0B0F14 | #E5E7EB | surface.base |
|
|
43
|
+
| `text.secondary` | #4B5563 | #9CA3AF | surface.base |
|
|
44
|
+
| `accent.brand` | #6F49FF | #8B6FFF | text.onAccent |
|
|
45
|
+
| `text.onAccent` | #FFFFFF | #FFFFFF | accent.brand |
|
|
46
|
+
| `success` | #058E5C | #34D399 | text.onSuccess |
|
|
47
|
+
| `warning` | #C9621E | #F59E0B | text.onWarning |
|
|
48
|
+
| `error` | #B42318 | #FCA5A5 | text.onError |
|
|
49
|
+
| `border.default` | #E5E7EB | #2A313A | — |
|
|
50
|
+
| `border.focus` | accent.brand | accent.brand | — |
|
|
51
|
+
|
|
52
|
+
Validate every pair against WCAG AA (≥ 4.5:1 normal, ≥ 3:1 large). Run before you commit.
|
|
53
|
+
|
|
54
|
+
### Typography
|
|
55
|
+
|
|
56
|
+
| Token | Family | Size | Weight | Line | Letter |
|
|
57
|
+
|---|---|---|---|---|---|
|
|
58
|
+
| `display.l` | Inter Display | clamp(2.5rem, 5vw, 3.5rem) | 700 | 1.05 | -0.02em |
|
|
59
|
+
| `display.m` | Inter Display | clamp(2rem, 4vw, 2.5rem) | 700 | 1.1 | -0.01em |
|
|
60
|
+
| `heading.l` | Inter | clamp(1.5rem, 3vw, 2rem) | 600 | 1.2 | -0.01em |
|
|
61
|
+
| `heading.m` | Inter | 1.25rem | 600 | 1.3 | 0 |
|
|
62
|
+
| `heading.s` | Inter | 1rem | 600 | 1.4 | 0 |
|
|
63
|
+
| `body.l` | Inter | 1.125rem | 400 | 1.6 | 0 |
|
|
64
|
+
| `body.m` | Inter | 1rem | 400 | 1.55 | 0 |
|
|
65
|
+
| `body.s` | Inter | 0.875rem | 400 | 1.5 | 0 |
|
|
66
|
+
| `caption` | Inter | 0.75rem | 500 | 1.4 | 0.01em |
|
|
67
|
+
|
|
68
|
+
Use rem for body; clamp() for fluid headings (see `responsive-breakpoints.md`).
|
|
69
|
+
|
|
70
|
+
### Spacing scale (4px base, geometric)
|
|
71
|
+
|
|
72
|
+
`0` 0 · `1` 4 · `2` 8 · `3` 12 · `4` 16 · `5` 24 · `6` 32 · `7` 48 · `8` 64 · `9` 96 · `10` 128
|
|
73
|
+
|
|
74
|
+
### Radius
|
|
75
|
+
|
|
76
|
+
`none` 0 · `sm` 4 · `md` 8 · `lg` 12 · `xl` 16 · `pill` 999.
|
|
77
|
+
|
|
78
|
+
### Elevation
|
|
79
|
+
|
|
80
|
+
| Token | Light | Dark (tonal) |
|
|
81
|
+
|---|---|---|
|
|
82
|
+
| `e1` | 0 1px 2px rgba(0,0,0,.06) | surface.raised |
|
|
83
|
+
| `e2` | 0 2px 4px rgba(0,0,0,.08) | surface.raised + 4% |
|
|
84
|
+
| `e3` | 0 4px 12px rgba(0,0,0,.10) | surface.raised + 8% |
|
|
85
|
+
| `e4` | 0 12px 24px rgba(0,0,0,.12) | surface.raised + 12% |
|
|
86
|
+
|
|
87
|
+
App overlay: prefer tonal elevation per Material 3.
|
|
88
|
+
|
|
89
|
+
### Motion
|
|
90
|
+
|
|
91
|
+
| Token | Duration | Easing |
|
|
92
|
+
|---|---|---|
|
|
93
|
+
| `motion.micro` | 100ms | `ease-out` |
|
|
94
|
+
| `motion.transition` | 200ms | `cubic-bezier(0.2, 0, 0, 1)` |
|
|
95
|
+
| `motion.page` | 300ms | `cubic-bezier(0.4, 0, 0.2, 1)` |
|
|
96
|
+
| `motion.spring.subtle` | (spring) | mass 1, stiff 350, damp 30 |
|
|
97
|
+
|
|
98
|
+
Honor `prefers-reduced-motion`. Replace transforms with fades.
|
|
99
|
+
|
|
100
|
+
## Components — the baseline set
|
|
101
|
+
|
|
102
|
+
Each component has its own `.md` doc with: purpose, anatomy, states (default/hover/focus/active/disabled/loading), variants, accessibility, do/don't, snippets.
|
|
103
|
+
|
|
104
|
+
| Component | Mandatory states | Notes |
|
|
105
|
+
|---|---|---|
|
|
106
|
+
| Button | default, hover, focus, active, disabled, loading | variants: primary, secondary, tertiary, destructive, ghost |
|
|
107
|
+
| Input | default, focus, error, disabled, success | always has visible label |
|
|
108
|
+
| Select | default, open, focus, disabled | native first; custom only when needed |
|
|
109
|
+
| Textarea | as Input | auto-grow optional |
|
|
110
|
+
| Checkbox | unchecked, checked, indeterminate, focus, disabled | native input + custom skin |
|
|
111
|
+
| Radio | unchecked, checked, focus, disabled | grouped under fieldset |
|
|
112
|
+
| Toggle/Switch | off, on, focus, disabled | `role="switch" aria-checked` |
|
|
113
|
+
| Card | default, raised, interactive | elevation tokens |
|
|
114
|
+
| Modal / Dialog | open, closing | focus trap + ESC + restore |
|
|
115
|
+
| Sheet (app) | half / full | drag handle |
|
|
116
|
+
| Tabs | active, inactive, focus | keyboard arrows |
|
|
117
|
+
| Accordion | collapsed, expanded, focus | `<details>` when possible |
|
|
118
|
+
| Toast / Snackbar | info, success, warning, error | `role="status"` or `alert` |
|
|
119
|
+
| Tooltip | hidden, visible | `aria-describedby`, touch alt |
|
|
120
|
+
| Menu | closed, open, focus | keyboard navigation |
|
|
121
|
+
| Dropdown | (synonym of Menu / Combobox) | follow ARIA combobox |
|
|
122
|
+
| Badge | default, success, warning, error | contrast ≥ 4.5:1 |
|
|
123
|
+
| Avatar | image, initials, placeholder | 1:1 ratio, alt text |
|
|
124
|
+
| Skeleton | static, shimmer | respect reduced-motion |
|
|
125
|
+
| Empty state | default | message + primary action |
|
|
126
|
+
| Loading | spinner / progress | accessible announcement |
|
|
127
|
+
|
|
128
|
+
## Component template (one per component)
|
|
129
|
+
|
|
130
|
+
```markdown
|
|
131
|
+
---
|
|
132
|
+
component: Button
|
|
133
|
+
status: ready
|
|
134
|
+
owner: Mantis
|
|
135
|
+
linked_screens: [signup-empty, team-list-empty, …]
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
# Button
|
|
139
|
+
|
|
140
|
+
## Purpose
|
|
141
|
+
Trigger an action. Never use for navigation between routes.
|
|
142
|
+
|
|
143
|
+
## Anatomy
|
|
144
|
+
[icon?] [label] [icon?] · padding by size · radius `md`
|
|
145
|
+
|
|
146
|
+
## Variants
|
|
147
|
+
- `primary` — main action; one per screen region.
|
|
148
|
+
- `secondary` — alternative action.
|
|
149
|
+
- `tertiary` — text-only.
|
|
150
|
+
- `destructive` — irreversible action.
|
|
151
|
+
- `ghost` — minimal chrome, e.g., toolbar.
|
|
152
|
+
|
|
153
|
+
## Sizes
|
|
154
|
+
- `sm` (height 32, label `body.s`)
|
|
155
|
+
- `md` (height 40, label `body.m`)
|
|
156
|
+
- `lg` (height 48, label `body.m`)
|
|
157
|
+
|
|
158
|
+
## States
|
|
159
|
+
|
|
160
|
+
| State | Treatment |
|
|
161
|
+
|---|---|
|
|
162
|
+
| default | accent.brand bg, text.onAccent label |
|
|
163
|
+
| hover | accent.brand 10% darker |
|
|
164
|
+
| focus | 2px outline `border.focus`, offset 2px |
|
|
165
|
+
| active | accent.brand 15% darker |
|
|
166
|
+
| disabled | opacity 0.4, `aria-disabled="true"`, cursor not-allowed |
|
|
167
|
+
| loading | spinner replaces icon; label unchanged; click ignored |
|
|
168
|
+
|
|
169
|
+
## Accessibility
|
|
170
|
+
- Native `<button>`.
|
|
171
|
+
- `aria-label` when icon-only.
|
|
172
|
+
- Visible focus ring always (don't override).
|
|
173
|
+
- 24×24 px hit area minimum (web), 44pt (iOS), 48dp (Android).
|
|
174
|
+
- Min contrast on label ≥ 4.5:1.
|
|
175
|
+
|
|
176
|
+
## Don't
|
|
177
|
+
- Use `<div onclick>`.
|
|
178
|
+
- Remove the focus ring without replacement.
|
|
179
|
+
- Use destructive for "Continue".
|
|
180
|
+
- Stack > 2 primary buttons on a screen.
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Theming + overlays
|
|
184
|
+
|
|
185
|
+
- **Web overlay:** tokens emit as CSS custom properties; dark mode toggled via `[data-theme="dark"]` on `<html>`.
|
|
186
|
+
- **App overlay (iOS):** tokens as SwiftUI environment values; dark mode auto.
|
|
187
|
+
- **App overlay (Android):** tokens as Compose `MaterialTheme` extensions; honor `dynamicColorScheme` when allowed.
|
|
188
|
+
|
|
189
|
+
## Anti-patterns Mantis rejects
|
|
190
|
+
|
|
191
|
+
- **Hex in components.** Everything via tokens.
|
|
192
|
+
- **One-off components shipped without doc.** Add to the system or refuse to merge.
|
|
193
|
+
- **Component matrix without states.** A button without disabled+loading isn't a button.
|
|
194
|
+
- **Component that fails axe.** Failed at definition; don't ship.
|
|
195
|
+
|
|
196
|
+
## Hand-off
|
|
197
|
+
|
|
198
|
+
> Tokens + 20 components at `.wize/solutioning/design-system/`. Tony picks the runtime (Tailwind / Vanilla Extract / SwiftUI tokens / Compose theme); Shuri implements. Hawkeye references this in `tea-design.md`: a11y + visual regression hooks point at these tokens.
|
|
@@ -1,33 +1,161 @@
|
|
|
1
1
|
---
|
|
2
|
+
|
|
2
3
|
code: wize-nfr-principles
|
|
4
|
+
description: "Use quando o PRD estiver validado e precisar definir os princípios de NFR (perf, segurança, confiabilidade, acessibilidade, custo) que guiarão a arquitetura."
|
|
3
5
|
name: NFR Principles
|
|
4
|
-
phase:
|
|
6
|
+
phase: 3-solutioning
|
|
5
7
|
owner: wize-agent-solution-strategist # Nick Fury
|
|
6
|
-
status:
|
|
8
|
+
status: ready
|
|
7
9
|
---
|
|
8
10
|
|
|
9
11
|
# NFR Principles
|
|
10
12
|
|
|
11
|
-
**Goal.** Define non-functional non-negotiables Tony must design against and Hawkeye must verify.
|
|
13
|
+
**Goal.** Define non-functional non-negotiables Tony must design against and Hawkeye must verify. Hill defers to this when sizing scope. Mantis respects the a11y/perf bars in UX specs. Shuri implements with these targets in hand.
|
|
14
|
+
|
|
15
|
+
Fury drives. Output lands in `.wize/planning/nfr-principles.md`.
|
|
16
|
+
|
|
17
|
+
## Inputs
|
|
18
|
+
|
|
19
|
+
- `.wize/planning/prd.md`
|
|
20
|
+
- `.wize/planning/tech-vision.md`
|
|
21
|
+
- `.wize/planning/brief.md` (compliance constraints, audience implications)
|
|
22
|
+
- Overlay perf playbooks if active:
|
|
23
|
+
- `web-overlay/playbooks/web-perf-budgets.md`
|
|
24
|
+
- `app-overlay/playbooks/mobile-perf-budgets.md`
|
|
25
|
+
- `web-overlay/playbooks/wcag-aa.md`
|
|
26
|
+
- `app-overlay/playbooks/apple-hig.md`, `material-design-3.md`
|
|
27
|
+
|
|
28
|
+
## Outputs
|
|
12
29
|
|
|
13
|
-
## Output
|
|
14
30
|
- `.wize/planning/nfr-principles.md`
|
|
15
31
|
|
|
16
|
-
## Categories
|
|
17
|
-
|
|
18
|
-
- **
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
32
|
+
## Categories (always cover these six)
|
|
33
|
+
|
|
34
|
+
For each, write **non-negotiable** + **stretch** + **deferred** (with trigger). Use the playbooks as starting points; **tighten** if PRD demands, never loosen below playbook recommendations.
|
|
35
|
+
|
|
36
|
+
### 1. Performance
|
|
37
|
+
|
|
38
|
+
| Tier | Targets |
|
|
39
|
+
|---|---|
|
|
40
|
+
| Non-negotiable | LCP ≤ 2.5s mobile, INP ≤ 200ms, CLS ≤ 0.1 (web) — cold start ≤ 1.5s mid-range (app) |
|
|
41
|
+
| Stretch | LCP ≤ 1.8s, INP ≤ 100ms |
|
|
42
|
+
| Deferred | Server-side LCP for edge regions — revisit when audience > 30% non-NA |
|
|
43
|
+
|
|
44
|
+
### 2. Security
|
|
45
|
+
|
|
46
|
+
| Tier | Items |
|
|
47
|
+
|---|---|
|
|
48
|
+
| Non-negotiable | OWASP Top 10 covered; auth via {{vendor}}; tokens never logged; secrets via {{provider}}; RLS on every table with user_id |
|
|
49
|
+
| Stretch | SOC2 type-I controls in place by {{date}} |
|
|
50
|
+
| Deferred | SOC2 type-II — revisit at $1M ARR |
|
|
51
|
+
|
|
52
|
+
### 3. Reliability
|
|
53
|
+
|
|
54
|
+
| Tier | Targets |
|
|
55
|
+
|---|---|
|
|
56
|
+
| Non-negotiable | 99.9% uptime in primary region; error budget 0.1%/month; retries idempotent with deduplication key |
|
|
57
|
+
| Stretch | 99.95% uptime |
|
|
58
|
+
| Deferred | Multi-region active/active — revisit per tech-vision deferred |
|
|
59
|
+
|
|
60
|
+
### 4. Maintainability
|
|
61
|
+
|
|
62
|
+
| Tier | Items |
|
|
63
|
+
|---|---|
|
|
64
|
+
| Non-negotiable | Lint + format on commit; > 80% test coverage on logic modules; ADRs for every architectural decision; deps audited monthly |
|
|
65
|
+
| Stretch | < 5% files over 300 LOC; cyclomatic complexity < 15 per function |
|
|
66
|
+
| Deferred | Auto-doc generation — revisit when API consumers > 3 |
|
|
67
|
+
|
|
68
|
+
### 5. Accessibility
|
|
69
|
+
|
|
70
|
+
| Tier | Items |
|
|
71
|
+
|---|---|
|
|
72
|
+
| Non-negotiable | WCAG 2.2 AA on every shipped page; keyboard-complete; axe in CI |
|
|
73
|
+
| Stretch | AAA on critical flows (signup, billing) |
|
|
74
|
+
| Deferred | Full screen-reader manual audit every release — revisit at next compliance review |
|
|
75
|
+
|
|
76
|
+
### 6. Cost
|
|
77
|
+
|
|
78
|
+
| Tier | Targets |
|
|
79
|
+
|---|---|
|
|
80
|
+
| Non-negotiable | Total infra ≤ ${{X}}/month under {{load}}; degradation strategy documented for 10× spike |
|
|
81
|
+
| Stretch | Cost-per-active-user ≤ ${{Y}} |
|
|
82
|
+
| Deferred | Per-feature cost attribution — revisit when finance asks |
|
|
83
|
+
|
|
84
|
+
## Steps
|
|
85
|
+
|
|
86
|
+
### 1. Read the playbooks first
|
|
87
|
+
|
|
88
|
+
If web/app overlays are active, the perf and a11y playbooks already hold real targets calibrated to mid-range device + 3G fast. Use them as starting point.
|
|
89
|
+
|
|
90
|
+
### 2. Tighten by audience
|
|
91
|
+
|
|
92
|
+
Mid-range mobile is the playbook baseline. If your PRD audience is *more* constrained (emerging markets, kiosk hardware, healthcare older devices), tighten. Don't loosen.
|
|
93
|
+
|
|
94
|
+
### 3. Map every non-negotiable to a verifier
|
|
95
|
+
|
|
96
|
+
Every non-negotiable must answer the question: *Who and how do we verify this on every release?*
|
|
97
|
+
|
|
98
|
+
- LCP → `web-perf-budgets.md` lighthouse-ci config.
|
|
99
|
+
- WCAG → axe in CI + Hawkeye review.
|
|
100
|
+
- Uptime → SLO defined in `.wize/solutioning/observability.md` (Tony).
|
|
101
|
+
- Error budget → tracked in {{tool}}.
|
|
102
|
+
|
|
103
|
+
A non-negotiable with no verifier is a wish.
|
|
104
|
+
|
|
105
|
+
### 4. Tell the story (one paragraph)
|
|
106
|
+
|
|
107
|
+
Open the doc with a paragraph: *why these numbers, and what trade-offs they imply.* Future readers re-litigate non-negotiables every six months; the story saves that hour.
|
|
108
|
+
|
|
109
|
+
### 5. Hand off
|
|
110
|
+
|
|
111
|
+
Mark `status: aligned`. Tony reads before architecture; Hawkeye reads before risk profile.
|
|
112
|
+
|
|
113
|
+
## Output template
|
|
23
114
|
|
|
24
|
-
## Template
|
|
25
115
|
```markdown
|
|
26
|
-
|
|
116
|
+
---
|
|
117
|
+
status: aligned
|
|
118
|
+
owner: Nick Fury
|
|
119
|
+
created: YYYY-MM-DD
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
# NFR Principles — {{project_name}}
|
|
123
|
+
|
|
124
|
+
## Why these numbers
|
|
125
|
+
|
|
126
|
+
{{One paragraph: target audience, country mix, device class, compliance frame. Why we picked these targets specifically.}}
|
|
127
|
+
|
|
128
|
+
## Performance
|
|
129
|
+
| Tier | Targets | Verifier |
|
|
130
|
+
|---|---|---|
|
|
131
|
+
| Non-negotiable | LCP ≤ 2.5s mobile (CWV), INP ≤ 200ms, CLS ≤ 0.1 | lighthouse-ci + web-vitals beacon |
|
|
132
|
+
| Stretch | LCP ≤ 1.8s | same |
|
|
133
|
+
| Deferred | Multi-region LCP — trigger: EU DAU > 5k | — |
|
|
27
134
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
135
|
+
## Security
|
|
136
|
+
…
|
|
137
|
+
|
|
138
|
+
## Reliability
|
|
139
|
+
…
|
|
140
|
+
|
|
141
|
+
## Maintainability
|
|
142
|
+
…
|
|
143
|
+
|
|
144
|
+
## Accessibility
|
|
145
|
+
…
|
|
146
|
+
|
|
147
|
+
## Cost
|
|
32
148
|
…
|
|
33
149
|
```
|
|
150
|
+
|
|
151
|
+
## Anti-patterns Fury rejects
|
|
152
|
+
|
|
153
|
+
- **Targets without numbers.** "Fast." Wrong. "p95 server response ≤ 200ms."
|
|
154
|
+
- **Stretch targets that are actually goals.** If you must hit it, it's non-negotiable.
|
|
155
|
+
- **No verifier.** Every non-negotiable answers *who verifies, with what tool, on what cadence*.
|
|
156
|
+
- **Loosening below the playbook.** Tightening is fine. Loosening is a smell — escalate.
|
|
157
|
+
- **Cost left blank.** Cost is always an NFR.
|
|
158
|
+
|
|
159
|
+
## Hand-off
|
|
160
|
+
|
|
161
|
+
> NFRs at `.wize/planning/nfr-principles.md`. Tony, architecture must respect items 1.A and 4.A from day one (perf and ADR discipline). Hawkeye, your gate policy can stay advisory but NFR gate per epic is mandatory. Hill, scope must keep the budget headroom for item 6.A.
|