sdd-jc-methodology 0.2.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/.claude/commands/sdd-archive.md +122 -0
- package/.claude/commands/sdd-constitution.md +240 -0
- package/.claude/commands/sdd-execute.md +132 -0
- package/.claude/commands/sdd-propose.md +149 -0
- package/.claude/commands/sdd-seo.md +251 -0
- package/.claude/commands/sdd-specify.md +264 -0
- package/.claude/commands/sdd-test.md +128 -0
- package/.claude/commands/sdd-validate.md +165 -0
- package/.claude/skills/api-design-principles/SKILL.md +528 -0
- package/.claude/skills/api-design-principles/assets/api-design-checklist.md +155 -0
- package/.claude/skills/api-design-principles/assets/rest-api-template.py +182 -0
- package/.claude/skills/api-design-principles/references/graphql-schema-design.md +583 -0
- package/.claude/skills/api-design-principles/references/rest-best-practices.md +408 -0
- package/.claude/skills/aws-serverless/SKILL.md +323 -0
- package/.claude/skills/brainstorming/SKILL.md +96 -0
- package/.claude/skills/error-handling-patterns/SKILL.md +641 -0
- package/.claude/skills/frontend-design/LICENSE.txt +177 -0
- package/.claude/skills/frontend-design/SKILL.md +272 -0
- package/.claude/skills/nestjs-expert/SKILL.md +552 -0
- package/.claude/skills/product-manager-toolkit/SKILL.md +351 -0
- package/.claude/skills/product-manager-toolkit/references/prd_templates.md +317 -0
- package/.claude/skills/product-manager-toolkit/scripts/customer_interview_analyzer.py +441 -0
- package/.claude/skills/product-manager-toolkit/scripts/rice_prioritizer.py +296 -0
- package/.claude/skills/react-doctor/AGENTS.md +15 -0
- package/.claude/skills/react-doctor/SKILL.md +19 -0
- package/.claude/skills/shadcn-ui/SKILL.md +1677 -0
- package/.claude/skills/shadcn-ui/references/learn.md +145 -0
- package/.claude/skills/shadcn-ui/references/official-ui-reference.md +1725 -0
- package/.claude/skills/shadcn-ui/references/reference.md +586 -0
- package/.claude/skills/shadcn-ui/references/ui-reference.md +1578 -0
- package/.claude/skills/stitch-design/README.md +50 -0
- package/.claude/skills/stitch-design/SKILL.md +84 -0
- package/.claude/skills/stitch-design/examples/DESIGN.md +22 -0
- package/.claude/skills/stitch-design/examples/enhanced-prompt.md +28 -0
- package/.claude/skills/stitch-design/references/design-mappings.md +45 -0
- package/.claude/skills/stitch-design/references/prompt-keywords.md +114 -0
- package/.claude/skills/stitch-design/references/tool-schemas.md +76 -0
- package/.claude/skills/stitch-design/workflows/edit-design.md +44 -0
- package/.claude/skills/stitch-design/workflows/generate-design-md.md +63 -0
- package/.claude/skills/stitch-design/workflows/text-to-design.md +47 -0
- package/.claude/skills/systematic-debugging/CREATION-LOG.md +119 -0
- package/.claude/skills/systematic-debugging/SKILL.md +296 -0
- package/.claude/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/.claude/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/.claude/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/.claude/skills/systematic-debugging/find-polluter.sh +63 -0
- package/.claude/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/.claude/skills/systematic-debugging/test-academic.md +14 -0
- package/.claude/skills/systematic-debugging/test-pressure-1.md +58 -0
- package/.claude/skills/systematic-debugging/test-pressure-2.md +68 -0
- package/.claude/skills/systematic-debugging/test-pressure-3.md +69 -0
- package/.claude/skills/tailwind-design-system/SKILL.md +874 -0
- package/.claude/skills/ui-ux-pro-max/SKILL.md +377 -0
- package/.claude/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/.claude/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/.claude/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/.claude/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/.claude/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/.claude/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/.claude/skills/ui-ux-pro-max/data/styles.csv +68 -0
- package/.claude/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/.claude/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/.claude/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/.claude/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/.claude/skills/ui-ux-pro-max/scripts/core.py +253 -0
- package/.claude/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/.claude/skills/ui-ux-pro-max/scripts/search.py +114 -0
- package/.claude/skills/vercel-react-best-practices/AGENTS.md +2934 -0
- package/.claude/skills/vercel-react-best-practices/SKILL.md +136 -0
- package/.claude/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/.claude/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/.claude/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/.claude/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/.claude/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/.claude/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/.claude/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/.claude/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/.claude/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/.claude/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/.claude/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/.claude/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/.claude/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/.claude/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/.claude/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/.claude/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/.claude/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/.claude/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/.claude/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/.claude/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/.claude/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/.claude/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/.claude/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/.claude/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/.claude/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/.claude/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/.claude/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/.claude/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/.claude/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/.claude/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/.claude/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/.claude/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/.claude/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/.claude/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/.claude/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/.claude/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/.claude/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/.claude/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/.claude/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/.claude/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/.claude/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/.claude/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/.claude/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/.claude/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/.claude/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/.claude/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/.claude/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/.claude/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/.claude/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/.claude/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/.claude/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/.claude/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/.claude/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/.mcp.json.example +12 -0
- package/CHANGELOG.md +61 -0
- package/LICENSE +21 -0
- package/README.md +571 -0
- package/assets/jc-fox-mark.svg +10 -0
- package/assets/jc-methodology-badge.png +0 -0
- package/bin/sdd-jc.js +379 -0
- package/package.json +43 -0
- package/scripts/gsc_verify.py +162 -0
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
# SEO Setup & Audit via Google Search Console
|
|
2
|
+
|
|
3
|
+
Provision Google Search Console access for a domain via a Google Cloud service account, then run a full SEO audit (index coverage, sitemaps, structured data, search analytics) and generate an audit report under the spec path. Produces `seo-setup-report.md` and `seo-audit-report.md`.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
/sdd-seo <site-domain>
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
**Examples:**
|
|
12
|
+
|
|
13
|
+
- `/sdd-seo calismiledesign.com`
|
|
14
|
+
- `/sdd-seo seo/calismiledesign.com`
|
|
15
|
+
- `/sdd-seo agrosmartco.com`
|
|
16
|
+
|
|
17
|
+
## Arguments
|
|
18
|
+
|
|
19
|
+
- `$ARGUMENTS` — Either a bare apex domain (e.g. `example.com`) or a relative path under `docs/specs/` (e.g. `seo/example.com`). When a bare domain is given, the spec path defaults to `docs/specs/seo/<domain>/`.
|
|
20
|
+
|
|
21
|
+
## Prerequisites
|
|
22
|
+
|
|
23
|
+
The user must provide (or confirm) once per Google Cloud project:
|
|
24
|
+
|
|
25
|
+
1. A Google Cloud service account JSON key file, absolute path.
|
|
26
|
+
2. Three APIs enabled in that GCP project:
|
|
27
|
+
- **Site Verification API** (`siteverification.googleapis.com`)
|
|
28
|
+
- **Search Console API** (`searchconsole.googleapis.com`)
|
|
29
|
+
- **Web Search Indexing API** is **NOT required** — Google only honors it for `JobPosting` and `BroadcastEvent` schemas; do not push users to enable it for generic content sites.
|
|
30
|
+
3. DNS provider access for the target domain (to add a TXT record).
|
|
31
|
+
4. The GSC MCP server configured in `~/.claude.json` or project `.mcp.json` with:
|
|
32
|
+
```json
|
|
33
|
+
"gsc": {
|
|
34
|
+
"command": "npx",
|
|
35
|
+
"args": ["-y", "@mikusnuz/gsc-mcp"],
|
|
36
|
+
"env": {
|
|
37
|
+
"GSC_SERVICE_ACCOUNT_KEY_PATH": "<absolute path to JSON key>"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
If `GSC_SITE_URL` is set, prefer the `sc-domain:` form (e.g. `sc-domain:example.com`) over the URL-prefix form.
|
|
42
|
+
5. A local helper for the Site Verification API. The `gsc` MCP does **not** expose Site Verification endpoints (no `getToken`, no `verify`) — it only wraps the Search Console API. Use the bundled `scripts/gsc_verify.py` from `sdd-jc-methodology` (depends on `google-auth` and `google-api-python-client`). Invoke it as:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
GSC_KEY_PATH=/abs/path/to/key.json python3 scripts/gsc_verify.py get <domain>
|
|
46
|
+
GSC_KEY_PATH=/abs/path/to/key.json python3 scripts/gsc_verify.py verify <domain>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
If any prerequisite is missing, stop and report exactly what is missing and how to obtain it.
|
|
50
|
+
|
|
51
|
+
## Tool Inventory
|
|
52
|
+
|
|
53
|
+
| Phase | Endpoint | Source |
|
|
54
|
+
|---|---|---|
|
|
55
|
+
| 1.1 Get TXT token | `siteVerification.webResource.getToken` | Site Verification API (helper script) |
|
|
56
|
+
| 1.3 Verify ownership | `siteVerification.webResource.insert` | Site Verification API (helper script) |
|
|
57
|
+
| 1.4 Add property | `sites_add` | `gsc` MCP |
|
|
58
|
+
| 1.5 Confirm | `sites_list` | `gsc` MCP |
|
|
59
|
+
| 2.1 Sitemaps | `sitemaps_list`, `sitemaps_submit` | `gsc` MCP |
|
|
60
|
+
| 2.2 Index coverage | `url_inspection_inspect` | `gsc` MCP |
|
|
61
|
+
| 2.4 Analytics | `search_analytics_query` | `gsc` MCP |
|
|
62
|
+
| 2.5 Render | raw `curl -A Googlebot/2.1` | shell |
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Behavior
|
|
67
|
+
|
|
68
|
+
### Phase 0: Setup
|
|
69
|
+
|
|
70
|
+
1. Resolve the spec path. If `$ARGUMENTS` is a bare domain, set `SPEC_PATH = seo/<domain>`. Otherwise treat `$ARGUMENTS` as the literal spec path.
|
|
71
|
+
2. Create directory `docs/specs/$SPEC_PATH/` if it does not exist.
|
|
72
|
+
3. Read the constitutional templates and project context as defined in `sdd-specify`:
|
|
73
|
+
- `docs/specs/general-setup/`
|
|
74
|
+
- `docs/prd.md`
|
|
75
|
+
- `docs/system-design/design.md` or `docs/system-design.md`
|
|
76
|
+
- `docs/detailed-design/detailed-design.md` or `docs/detailed-design.md`
|
|
77
|
+
- Root `CLAUDE.md`
|
|
78
|
+
4. Confirm the GSC MCP is reachable. If not, stop and report.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
### Phase 1: Verify & Add Property
|
|
83
|
+
|
|
84
|
+
**Role:** SEO Engineer — register the service account as a verified owner of the domain in Google Search Console.
|
|
85
|
+
|
|
86
|
+
#### Step 1.1 — Generate the DNS TXT token
|
|
87
|
+
|
|
88
|
+
Call the Site Verification API to obtain the verification token for `sc-domain:<domain>`. Present the user with the exact TXT record to add:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
Type: TXT
|
|
92
|
+
Host: @ (root of <domain>)
|
|
93
|
+
Value: google-site-verification=<token>
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
#### Step 1.2 — Wait for DNS propagation
|
|
97
|
+
|
|
98
|
+
Ask the user to confirm the TXT record is live, then verify with a DNS lookup before proceeding. Do not loop silently — fail clearly if propagation has not happened after a reasonable check.
|
|
99
|
+
|
|
100
|
+
#### Step 1.3 — Verify ownership
|
|
101
|
+
|
|
102
|
+
Call the Site Verification API `verify` endpoint. On success, the service account becomes an owner of the property.
|
|
103
|
+
|
|
104
|
+
#### Step 1.4 — Add the property to Search Console
|
|
105
|
+
|
|
106
|
+
Verification alone does not add the property to Search Console for the service account. Explicitly call `sites_add` with `sc-domain:<domain>` so the property appears in `sites_list` with `permissionLevel: siteOwner`.
|
|
107
|
+
|
|
108
|
+
#### Step 1.5 — Write `seo-setup-report.md`
|
|
109
|
+
|
|
110
|
+
Produce `docs/specs/$SPEC_PATH/seo-setup-report.md` documenting:
|
|
111
|
+
|
|
112
|
+
1. Document Control (date, domain, service account email, GCP project)
|
|
113
|
+
2. Prerequisites checked
|
|
114
|
+
3. DNS TXT record value installed
|
|
115
|
+
4. Verification result
|
|
116
|
+
5. `sites_list` confirmation output
|
|
117
|
+
6. Notes / caveats
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
### Phase 2: Audit
|
|
122
|
+
|
|
123
|
+
**Role:** Technical SEO Auditor — measure the state of the domain in Google's index.
|
|
124
|
+
|
|
125
|
+
Use `systematic-debugging` when results are inconsistent with site reality.
|
|
126
|
+
|
|
127
|
+
Skill preference for any UX/UI recommendations:
|
|
128
|
+
|
|
129
|
+
- `ui-ux-pro-max` if available
|
|
130
|
+
- otherwise `frontend-design`
|
|
131
|
+
|
|
132
|
+
#### Step 2.1 — Sitemap audit
|
|
133
|
+
|
|
134
|
+
1. List submitted sitemaps via `sitemaps_list`.
|
|
135
|
+
2. If none submitted but `https://<domain>/sitemap.xml` or `/sitemap-index.xml` exists, propose submission with `sitemaps_submit` and ask before submitting.
|
|
136
|
+
3. Fetch each sitemap with `curl -sL` and enumerate URLs.
|
|
137
|
+
|
|
138
|
+
#### Step 2.2 — Index coverage
|
|
139
|
+
|
|
140
|
+
For every URL in the sitemap (cap at 25 for cost; sample evenly across locales and sections), call `url_inspection_inspect`. Bucket each URL into:
|
|
141
|
+
|
|
142
|
+
- `PASS` — Submitted and indexed
|
|
143
|
+
- `NEUTRAL` — Discovered – currently not indexed
|
|
144
|
+
- `NEUTRAL` — URL is unknown to Google
|
|
145
|
+
- `NEUTRAL` — Page with redirect
|
|
146
|
+
- `FAIL` — anything else (e.g. blocked, server error, soft 404)
|
|
147
|
+
|
|
148
|
+
Record `googleCanonical`, `userCanonical`, `pageFetchState`, `crawledAs`, `lastCrawlTime` for each.
|
|
149
|
+
|
|
150
|
+
#### Step 2.3 — Structured data audit
|
|
151
|
+
|
|
152
|
+
From `url_inspection_inspect.richResultsResult`, collect every rich-result item flagged with `WARNING` or `ERROR`. For each, fetch the page with a Googlebot user agent and extract the offending JSON-LD block so the report can show the exact bad value and the exact corrected value.
|
|
153
|
+
|
|
154
|
+
Common findings to surface:
|
|
155
|
+
|
|
156
|
+
- `VideoObject.uploadDate` missing time or timezone (use ISO 8601 `YYYY-MM-DDTHH:MM:SS±HH:MM`)
|
|
157
|
+
- `Product`, `Review`, `Organization` missing required fields
|
|
158
|
+
|
|
159
|
+
#### Step 2.4 — Search analytics
|
|
160
|
+
|
|
161
|
+
Call `search_analytics_query` for the last 28 days (or last 90 if available), grouped by:
|
|
162
|
+
|
|
163
|
+
- `query` (top 25)
|
|
164
|
+
- `page` (top 25)
|
|
165
|
+
- `country` (top 10)
|
|
166
|
+
- `device` (all)
|
|
167
|
+
|
|
168
|
+
If the property is newly verified and returns no rows, record that explicitly and note that data typically appears within 2–7 days.
|
|
169
|
+
|
|
170
|
+
#### Step 2.5 — Render audit
|
|
171
|
+
|
|
172
|
+
For 2–3 sampled pages, fetch them with `curl -sL -A "Googlebot/2.1"` and measure:
|
|
173
|
+
|
|
174
|
+
- HTML size in bytes
|
|
175
|
+
- Visible text length in characters and word count
|
|
176
|
+
- Whether the main content is present in server-rendered HTML (vs JS-only)
|
|
177
|
+
|
|
178
|
+
This separates "thin content" failures from "JS render" failures.
|
|
179
|
+
|
|
180
|
+
#### Step 2.6 — Internal linking quick check
|
|
181
|
+
|
|
182
|
+
Fetch the homepage and count anchor links to each sitemap URL. URLs with zero internal links from the homepage are flagged as orphan-like.
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
### Phase 3: Write `seo-audit-report.md`
|
|
187
|
+
|
|
188
|
+
Generate `docs/specs/$SPEC_PATH/seo-audit-report.md` using `docs/specs/general-setup/validation-report.md` as the format source where it fits.
|
|
189
|
+
|
|
190
|
+
Required sections:
|
|
191
|
+
|
|
192
|
+
1. Document Control
|
|
193
|
+
2. Executive Summary — one-paragraph verdict + 3–5 bullet headline findings.
|
|
194
|
+
3. Index Coverage Table — every audited URL with its bucket and last crawl time.
|
|
195
|
+
4. Sitemap Status
|
|
196
|
+
5. Structured Data Findings — exact broken JSON-LD blocks with corrected versions.
|
|
197
|
+
6. Search Analytics Summary — top queries / pages / devices / countries, or an explicit "no data yet" note.
|
|
198
|
+
7. Render Audit
|
|
199
|
+
8. Internal Linking Findings
|
|
200
|
+
9. Remediation Plan — prioritized (High / Medium / Low) actionable items, each scoped enough that an implementer can execute it without further discovery.
|
|
201
|
+
10. Re-audit Schedule — when to run `/sdd-seo <domain>` again.
|
|
202
|
+
|
|
203
|
+
The report title must be `# SEO Audit Report — <domain>`.
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
### Phase 4: Generate a Fix Prompt
|
|
208
|
+
|
|
209
|
+
Append to the audit report a section titled `## Implementation Prompt` containing a fenced, copy-paste prompt that can be handed to Claude Code (or any engineer) inside the site's codebase to fix every High-severity finding. The prompt must:
|
|
210
|
+
|
|
211
|
+
- Reference each finding by ID from the remediation plan.
|
|
212
|
+
- Include exact JSON-LD before/after snippets where structured data is broken.
|
|
213
|
+
- Include exact URL pairs for hreflang corrections.
|
|
214
|
+
- End with "Show me a diff of every change before applying. Do not deploy until I approve."
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
### Phase 5: Present & Approve
|
|
219
|
+
|
|
220
|
+
Present a short summary of:
|
|
221
|
+
|
|
222
|
+
- Setup status (Phase 1 outcome).
|
|
223
|
+
- Audit headline findings and counts per bucket.
|
|
224
|
+
- The number of High / Medium / Low remediation items.
|
|
225
|
+
- Paths to the two generated reports.
|
|
226
|
+
|
|
227
|
+
Ask the user whether to also run the same flow against any other properties under the same service account.
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## Verification Checklist
|
|
232
|
+
|
|
233
|
+
After the command completes, verify:
|
|
234
|
+
|
|
235
|
+
- [ ] `docs/specs/$SPEC_PATH/seo-setup-report.md` exists and references the actual TXT token used.
|
|
236
|
+
- [ ] `docs/specs/$SPEC_PATH/seo-audit-report.md` exists with all required sections.
|
|
237
|
+
- [ ] `sites_list` shows the property with `permissionLevel: siteOwner`.
|
|
238
|
+
- [ ] Every URL in the sitemap is either audited or explicitly excluded with a reason.
|
|
239
|
+
- [ ] Every structured-data warning is reproduced with the exact bad value and the exact fix.
|
|
240
|
+
- [ ] The implementation prompt is self-contained and would not require this conversation to execute.
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Error Handling
|
|
245
|
+
|
|
246
|
+
- If the Site Verification API returns `failedVerification`, do not retry blindly — surface the underlying reason (TXT not visible, wrong record, DNSSEC lag) and stop.
|
|
247
|
+
- If `sites_add` fails with 403, the service account is not yet a verified owner — return to Phase 1.
|
|
248
|
+
- If `sites_list` returns empty after a successful `sites_add`, the MCP cached an old session — instruct the user to restart Claude Code or the `gsc` MCP and retry.
|
|
249
|
+
- If `search_analytics_query` returns no rows for a newly verified property, this is expected. Do not mark as failure.
|
|
250
|
+
- If the Indexing API is suggested as a fix, decline it for non-`JobPosting`/`BroadcastEvent` content and explain why.
|
|
251
|
+
- If a skill is unavailable, fall back to the next documented skill and note it in the report.
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
# Generate SDD for Module
|
|
2
|
+
|
|
3
|
+
Generate a clear Spec-Driven Development document set for one bounded module, feature, bugfix, or enhancement inside `docs/specs/`.
|
|
4
|
+
|
|
5
|
+
The goal is not to create long documents. The goal is to make the intended behavior, design choices, implementation tasks, and verification path easy to review before code is written.
|
|
6
|
+
|
|
7
|
+
If `proposal.md` already exists for the same spec path, treat it as the approved intent and convert it into full requirements, design, and tasks. If no proposal exists, create the spec directly from the user's request and repository context.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
/sdd-specify <spec-path>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
**Examples:**
|
|
16
|
+
|
|
17
|
+
- `/sdd-specify loan`
|
|
18
|
+
- `/sdd-specify enhancements/renewals`
|
|
19
|
+
- `/sdd-specify admin/user-management`
|
|
20
|
+
|
|
21
|
+
## Arguments
|
|
22
|
+
|
|
23
|
+
- `$ARGUMENTS` — Relative path under `docs/specs/` where the spec should live. It may be a flat module name or a nested taxonomy path.
|
|
24
|
+
|
|
25
|
+
## Output
|
|
26
|
+
|
|
27
|
+
Create or update these files under `docs/specs/$ARGUMENTS/`:
|
|
28
|
+
|
|
29
|
+
- `proposal.md` — optional prior intent document created by `/sdd-propose`
|
|
30
|
+
- `requirements.md` — what behavior must exist and why it matters
|
|
31
|
+
- `design.md` — how the behavior will be implemented within the current architecture
|
|
32
|
+
- `tasks.md` — small executable tasks linked to requirements and design sections
|
|
33
|
+
|
|
34
|
+
Use the lightest useful depth:
|
|
35
|
+
|
|
36
|
+
| Depth | Use For | Documentation Style |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| Lite | Small bugfixes, copy updates, narrow UI tweaks | Short sections, focused requirements, one or a few tasks |
|
|
39
|
+
| Standard | Normal features and enhancements | Full requirements, scenarios, design decisions, task breakdown |
|
|
40
|
+
| Full | Risky, cross-cutting, API, data, auth, or migration work | Include alternatives, rollout, risks, observability, rollback |
|
|
41
|
+
|
|
42
|
+
Lite mode still requires testable requirements, scenarios, and done criteria.
|
|
43
|
+
|
|
44
|
+
## Behavior
|
|
45
|
+
|
|
46
|
+
### Step 0: Setup
|
|
47
|
+
|
|
48
|
+
1. Create directory `docs/specs/$ARGUMENTS/` if it does not exist.
|
|
49
|
+
2. Read `docs/specs/$ARGUMENTS/proposal.md` if it exists.
|
|
50
|
+
3. Read the constitutional templates in `docs/specs/general-setup/`:
|
|
51
|
+
- `requirements.md`
|
|
52
|
+
- `design.md`
|
|
53
|
+
- `task.md`
|
|
54
|
+
4. Read project-level reference context:
|
|
55
|
+
- `docs/prd.md`
|
|
56
|
+
- `docs/system-design/design.md`
|
|
57
|
+
- `docs/detailed-design/detailed-design.md`
|
|
58
|
+
- Root `CLAUDE.md`
|
|
59
|
+
- Package-level `CLAUDE.md` files if they exist
|
|
60
|
+
5. Read nearby or dependent specs under `docs/specs/` that overlap with the requested path.
|
|
61
|
+
6. Respect the repository's current package layout and naming conventions instead of assuming a fixed stack.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
### Phase 1: Requirements (`requirements.md`)
|
|
66
|
+
|
|
67
|
+
**Role:** Product Owner — define what is being built and why.
|
|
68
|
+
|
|
69
|
+
#### Step 1.1 — Explore
|
|
70
|
+
|
|
71
|
+
Use `brainstorming` and, when helpful, `product-manager-toolkit` to clarify:
|
|
72
|
+
|
|
73
|
+
- user problem and target actors
|
|
74
|
+
- scope boundaries and dependencies
|
|
75
|
+
- primary flows and feature areas
|
|
76
|
+
- success metrics and constraints
|
|
77
|
+
|
|
78
|
+
#### Step 1.2 — Write
|
|
79
|
+
|
|
80
|
+
Generate `requirements.md` using `docs/specs/general-setup/requirements.md` as the format source.
|
|
81
|
+
|
|
82
|
+
Minimum content:
|
|
83
|
+
|
|
84
|
+
1. Document Control
|
|
85
|
+
2. Executive Summary
|
|
86
|
+
3. Glossary
|
|
87
|
+
4. System Context & Scope
|
|
88
|
+
5. Stakeholders / Personas
|
|
89
|
+
6. Functional Requirements
|
|
90
|
+
7. Non-Functional Requirements
|
|
91
|
+
8. Requirement ID Index
|
|
92
|
+
|
|
93
|
+
Guidelines:
|
|
94
|
+
|
|
95
|
+
- follow the repo's established requirement ID pattern from `general-setup`
|
|
96
|
+
- align with `docs/prd.md`
|
|
97
|
+
- align with `proposal.md` when present
|
|
98
|
+
- reference existing specs when this work extends another feature
|
|
99
|
+
- use measurable, testable language
|
|
100
|
+
- separate goals from requirements
|
|
101
|
+
- write behavior contracts, not implementation plans
|
|
102
|
+
- include concrete scenarios for key requirements using `GIVEN`, `WHEN`, `THEN`, and optional `AND`
|
|
103
|
+
- make requirement strength explicit with `SHALL`, `MUST`, `SHOULD`, or `MAY` where useful
|
|
104
|
+
|
|
105
|
+
Recommended requirement shape:
|
|
106
|
+
|
|
107
|
+
```markdown
|
|
108
|
+
### Requirement: Short Behavior Name
|
|
109
|
+
|
|
110
|
+
The system SHALL provide the observable behavior.
|
|
111
|
+
|
|
112
|
+
#### Scenario: Main case
|
|
113
|
+
|
|
114
|
+
- GIVEN the relevant starting state
|
|
115
|
+
- WHEN the triggering action happens
|
|
116
|
+
- THEN the expected outcome occurs
|
|
117
|
+
- AND any required side effect is visible
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Avoid putting internal class names, library choices, or step-by-step implementation details in requirements. Those belong in `design.md` or `tasks.md`.
|
|
121
|
+
|
|
122
|
+
If `proposal.md` includes a Requirement Delta Preview, convert it into full requirements:
|
|
123
|
+
|
|
124
|
+
- `ADDED` items become new requirements and scenarios
|
|
125
|
+
- `MODIFIED` items become updated behavior descriptions with before/after context
|
|
126
|
+
- `REMOVED` items become explicit deprecation or removal requirements with migration notes when relevant
|
|
127
|
+
|
|
128
|
+
#### Step 1.3 — Present & Approve
|
|
129
|
+
|
|
130
|
+
Present a summary and ask the user to approve or request changes before moving on.
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
### Phase 2: Design (`design.md`)
|
|
135
|
+
|
|
136
|
+
**Role:** System Architect — define how the feature will be built.
|
|
137
|
+
|
|
138
|
+
#### Step 2.1 — Explore
|
|
139
|
+
|
|
140
|
+
Use `brainstorming` to explore trade-offs before writing.
|
|
141
|
+
|
|
142
|
+
If the work includes meaningful UI/UX impact, use this skill preference:
|
|
143
|
+
|
|
144
|
+
- `ui-ux-pro-max` if available
|
|
145
|
+
- otherwise `frontend-design` + `stitch-design`
|
|
146
|
+
|
|
147
|
+
Use additional technical skills as needed:
|
|
148
|
+
|
|
149
|
+
- `nestjs-expert`
|
|
150
|
+
- `api-design-principles`
|
|
151
|
+
- `shadcn-ui`
|
|
152
|
+
- `tailwind-design-system`
|
|
153
|
+
- `vercel-react-best-practices`
|
|
154
|
+
- `error-handling-patterns`
|
|
155
|
+
- `aws-serverless`
|
|
156
|
+
|
|
157
|
+
#### Step 2.2 — Write
|
|
158
|
+
|
|
159
|
+
Generate `design.md` using `docs/specs/general-setup/design.md` as the format source.
|
|
160
|
+
|
|
161
|
+
Minimum content:
|
|
162
|
+
|
|
163
|
+
1. Document Control
|
|
164
|
+
2. Executive Summary
|
|
165
|
+
3. Architecture Overview
|
|
166
|
+
4. Extended Directory Structure
|
|
167
|
+
5. Data Model
|
|
168
|
+
6. API Design
|
|
169
|
+
7. Backend Module Design
|
|
170
|
+
8. Frontend / UX Component Architecture
|
|
171
|
+
9. Shared Contracts or Package Extensions
|
|
172
|
+
10. Design Decisions
|
|
173
|
+
|
|
174
|
+
Guidelines:
|
|
175
|
+
|
|
176
|
+
- extend existing architecture rather than replacing it
|
|
177
|
+
- use current repo paths and package names
|
|
178
|
+
- include UI/UX decisions when the feature affects screens, flows, or components
|
|
179
|
+
- tie design sections back to requirements explicitly
|
|
180
|
+
- record meaningful trade-offs and rejected alternatives for non-trivial decisions
|
|
181
|
+
- call out data, API, security, error-handling, observability, and rollback concerns when relevant
|
|
182
|
+
- keep design decisions practical enough that an implementer can act without re-discovery
|
|
183
|
+
|
|
184
|
+
#### Step 2.3 — Present & Approve
|
|
185
|
+
|
|
186
|
+
Present a summary and ask the user to approve or request changes before moving on.
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
### Phase 3: Tasks (`tasks.md`)
|
|
191
|
+
|
|
192
|
+
**Role:** Tech Lead — define the implementation plan.
|
|
193
|
+
|
|
194
|
+
#### Step 3.1 — Explore
|
|
195
|
+
|
|
196
|
+
Use `brainstorming` to determine sequencing, dependencies, parallelization, and test strategy.
|
|
197
|
+
|
|
198
|
+
#### Step 3.2 — Write
|
|
199
|
+
|
|
200
|
+
Generate `tasks.md` using `docs/specs/general-setup/task.md` as the format source.
|
|
201
|
+
|
|
202
|
+
Each task should include:
|
|
203
|
+
|
|
204
|
+
- status
|
|
205
|
+
- size
|
|
206
|
+
- dependencies
|
|
207
|
+
- requirements covered
|
|
208
|
+
- design references
|
|
209
|
+
- scope
|
|
210
|
+
- tests
|
|
211
|
+
- done criteria
|
|
212
|
+
- relevant skills
|
|
213
|
+
|
|
214
|
+
Skill inventory should use real, available skills only.
|
|
215
|
+
|
|
216
|
+
Task quality rules:
|
|
217
|
+
|
|
218
|
+
- one task should be small enough to complete and verify in one focused session
|
|
219
|
+
- every task must reference the requirements it satisfies
|
|
220
|
+
- every task must include a concrete verification command or manual check
|
|
221
|
+
- tasks should avoid broad instructions like "implement feature" without scoped subtasks
|
|
222
|
+
- tasks may be grouped by phase, but dependencies must remain explicit
|
|
223
|
+
|
|
224
|
+
Preferred UI/UX skill rule:
|
|
225
|
+
|
|
226
|
+
- use `ui-ux-pro-max` when available for UI-heavy tasks
|
|
227
|
+
- otherwise use `frontend-design` and/or `stitch-design`
|
|
228
|
+
|
|
229
|
+
#### Step 3.3 — Present & Approve
|
|
230
|
+
|
|
231
|
+
Present a summary and ask the user to approve or request changes.
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## Verification Checklist
|
|
236
|
+
|
|
237
|
+
After all three documents are approved, verify:
|
|
238
|
+
|
|
239
|
+
- [ ] All 3 files exist with non-empty content
|
|
240
|
+
- [ ] All documents follow `docs/specs/general-setup/` conventions
|
|
241
|
+
- [ ] The chosen depth is appropriate for the risk and size of the work
|
|
242
|
+
- [ ] Requirements describe observable behavior, not implementation details
|
|
243
|
+
- [ ] Key requirements include Given/When/Then scenarios
|
|
244
|
+
- [ ] Every requirement appears in at least one task
|
|
245
|
+
- [ ] Every task references requirements and design sections
|
|
246
|
+
- [ ] Every task has clear done criteria and verification guidance
|
|
247
|
+
- [ ] The task dependency graph has no circular dependencies
|
|
248
|
+
- [ ] The spec path matches the repo's chosen taxonomy under `docs/specs/`
|
|
249
|
+
- [ ] Only real, available skills are referenced in tasks
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Review Handoff
|
|
254
|
+
|
|
255
|
+
When the spec is ready, present a short handoff summary:
|
|
256
|
+
|
|
257
|
+
1. Spec path and chosen depth: Lite, Standard, or Full
|
|
258
|
+
2. Problem being solved
|
|
259
|
+
3. Requirements and key scenarios
|
|
260
|
+
4. Important design decisions and risks
|
|
261
|
+
5. Task count and recommended first task
|
|
262
|
+
6. Open questions or assumptions that still need user confirmation
|
|
263
|
+
|
|
264
|
+
If a proposal existed, mention whether the generated spec stayed aligned with it or changed based on implementation discovery.
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Test SDD Implementation
|
|
2
|
+
|
|
3
|
+
Run automated and, when needed, manual tests against a spec path's implementation. Produce `test-report.md` with results, requirement coverage, scenario traceability, and failures.
|
|
4
|
+
|
|
5
|
+
Testing should prove the behavior promised in `requirements.md`, not only increase test count.
|
|
6
|
+
|
|
7
|
+
## Usage
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
/sdd-test <spec-path>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
**Examples:**
|
|
14
|
+
|
|
15
|
+
- `/sdd-test loan`
|
|
16
|
+
- `/sdd-test enhancements/renewals`
|
|
17
|
+
|
|
18
|
+
## Arguments
|
|
19
|
+
|
|
20
|
+
- `$ARGUMENTS` — Relative path under `docs/specs/` that contains `requirements.md`, `design.md`, and `tasks.md`.
|
|
21
|
+
|
|
22
|
+
## Output
|
|
23
|
+
|
|
24
|
+
Create or update `docs/specs/$ARGUMENTS/test-report.md` with:
|
|
25
|
+
|
|
26
|
+
- commands run and their results
|
|
27
|
+
- requirement-to-test matrix
|
|
28
|
+
- scenario coverage status
|
|
29
|
+
- failures and remediation steps
|
|
30
|
+
- accepted gaps with reasons when full automation is not practical
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Behavior
|
|
35
|
+
|
|
36
|
+
### Phase 0: Load Context
|
|
37
|
+
|
|
38
|
+
1. Read:
|
|
39
|
+
- `docs/specs/$ARGUMENTS/requirements.md`
|
|
40
|
+
- `docs/specs/$ARGUMENTS/design.md`
|
|
41
|
+
- `docs/specs/$ARGUMENTS/tasks.md`
|
|
42
|
+
2. Read project-level context:
|
|
43
|
+
- `docs/prd.md`
|
|
44
|
+
- `docs/system-design/design.md`
|
|
45
|
+
- `docs/detailed-design/detailed-design.md`
|
|
46
|
+
- root and package-level `CLAUDE.md` files
|
|
47
|
+
3. Identify backend, frontend, and end-to-end scope from the design and tasks.
|
|
48
|
+
4. Extract key requirements and Given/When/Then scenarios from `requirements.md`.
|
|
49
|
+
|
|
50
|
+
### Phase 1: Unit Tests
|
|
51
|
+
|
|
52
|
+
- Create or improve backend unit tests where needed.
|
|
53
|
+
- Create or improve frontend unit tests where needed.
|
|
54
|
+
- Map tests back to requirements and scenarios.
|
|
55
|
+
- Prefer focused tests that prove one behavior clearly over broad tests with unclear intent.
|
|
56
|
+
|
|
57
|
+
Use skills as needed:
|
|
58
|
+
|
|
59
|
+
- `nestjs-expert`
|
|
60
|
+
- `systematic-debugging`
|
|
61
|
+
- `vercel-react-best-practices`
|
|
62
|
+
- `react-doctor`
|
|
63
|
+
|
|
64
|
+
### Phase 2: Integration Tests
|
|
65
|
+
|
|
66
|
+
- Create or improve API integration tests where relevant.
|
|
67
|
+
- Validate auth, request/response shape, and major flows.
|
|
68
|
+
- Cover cross-module behavior that cannot be proven by unit tests alone.
|
|
69
|
+
|
|
70
|
+
### Phase 3: End-to-End Tests
|
|
71
|
+
|
|
72
|
+
- Create or improve E2E tests for user-visible workflows.
|
|
73
|
+
- If the work is UI-heavy, prefer `ui-ux-pro-max` when available.
|
|
74
|
+
- Otherwise use `frontend-design` and the system design doc as the UX reference.
|
|
75
|
+
- Use E2E tests for critical user journeys, not every small component state.
|
|
76
|
+
|
|
77
|
+
### Phase 4: Coverage & Traceability
|
|
78
|
+
|
|
79
|
+
Create a requirement-to-test matrix so every key requirement has test evidence or an explicit gap.
|
|
80
|
+
|
|
81
|
+
Recommended matrix columns:
|
|
82
|
+
|
|
83
|
+
| Requirement | Scenario | Test Type | Test File or Command | Result | Gap or Notes |
|
|
84
|
+
|---|---|---|---|---|---|
|
|
85
|
+
|
|
86
|
+
### Phase 5: Generate Test Report
|
|
87
|
+
|
|
88
|
+
Create `docs/specs/$ARGUMENTS/test-report.md`.
|
|
89
|
+
|
|
90
|
+
The report must include:
|
|
91
|
+
|
|
92
|
+
1. Document Control
|
|
93
|
+
2. Summary
|
|
94
|
+
3. Backend Unit Tests
|
|
95
|
+
4. Frontend Unit Tests
|
|
96
|
+
5. Integration Tests
|
|
97
|
+
6. E2E Tests
|
|
98
|
+
7. Coverage & Traceability
|
|
99
|
+
8. Remediation
|
|
100
|
+
9. Accepted Gaps, if any
|
|
101
|
+
|
|
102
|
+
### Phase 6: Report to User
|
|
103
|
+
|
|
104
|
+
Present overall test status, test counts, requirement coverage, scenario gaps, and top failures. If failures exist, ask whether to fix failures, add missing tests, fix all, or keep only the report.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## UX Testing Guidance
|
|
109
|
+
|
|
110
|
+
When a spec includes meaningful UI/UX behavior, verify more than raw functionality:
|
|
111
|
+
|
|
112
|
+
- flow clarity
|
|
113
|
+
- responsive behavior
|
|
114
|
+
- state transitions
|
|
115
|
+
- accessibility basics
|
|
116
|
+
- visual consistency with `docs/system-design/design.md`
|
|
117
|
+
|
|
118
|
+
If `ui-ux-pro-max` is unavailable, use `frontend-design` plus the system design document as the fallback reference.
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Testing Rules
|
|
123
|
+
|
|
124
|
+
- Do not mark a requirement covered just because related code exists.
|
|
125
|
+
- Do not hide missing coverage; record it as an explicit gap with remediation.
|
|
126
|
+
- Prefer repository-specific test commands over hardcoded framework assumptions.
|
|
127
|
+
- If a test is flaky, record the flake and avoid treating it as passing evidence until stabilized.
|
|
128
|
+
- If no automated test is practical, document the manual verification steps and why automation was deferred.
|