docs(33-14): validation map
This commit is contained in:
@@ -3,9 +3,9 @@ phase: "33"
|
||||
slug: "seo-output-audit-and-content"
|
||||
# status lifecycle: draft (seeded by plan-phase) → validated (set by validate-phase §6)
|
||||
# audit-milestone §5.5 distinguishes NOT-VALIDATED (draft) from PARTIAL (validated + nyquist_compliant: false) (#2117)
|
||||
status: draft
|
||||
nyquist_compliant: false
|
||||
wave_0_complete: false
|
||||
status: validated
|
||||
nyquist_compliant: true
|
||||
wave_0_complete: true
|
||||
created: "2026-10-28"
|
||||
---
|
||||
|
||||
@@ -42,36 +42,37 @@ Filled by the planner per task. Decision → test map from research:
|
||||
|
||||
| Decision | Behavior | Test Type | Automated Command | File Exists | Status |
|
||||
|----------|----------|-----------|-------------------|-------------|--------|
|
||||
| D-30 | index + per-type files, stable numbering after delete, lastmod only on real change | integration | `go test ./... -run 'TestSitemapIndex\|TestStableNumbering\|TestLastmod'` (sm-sitemap-plugin) | ❌ W0 | ⬜ pending |
|
||||
| D-31 | image ≤1000/url, news 2-day window, IndexNow ping on diff | unit + integration | `go test ./... -run 'TestImageSitemap\|TestNewsSitemap\|TestIndexNow'` | ❌ W0 | ⬜ pending |
|
||||
| D-32 | no priority/changefreq/XSL; url items migrated | integration | `go test ./... -run TestMigrateDefinitions` | ❌ W0 | ⬜ pending |
|
||||
| D-95/D-24 | SEO filter excludes noindex/canonicalised/redirected; sitemap works without SEO | integration | `go test ./... -run 'TestFilterExcludes\|TestNoFilter'` | ❌ W0 | ⬜ pending |
|
||||
| D-33 | registry pages resolve; route report upserts | integration | `go test ./... -run TestRegistry` (sm-seo-plugin) | ❌ W0 | ⬜ pending |
|
||||
| D-43..46 | @graph per kind with @id links; invalid custom JSON-LD refused | unit | `go test ./classes/schema/...` | ❌ W0 | ⬜ pending |
|
||||
| D-55..57 | alternates only for translated locales; x-default = default | integration | `go test ./... -run TestAlternates` | ❌ W0 | ⬜ pending |
|
||||
| D-40..42 | `?page=1` → 301; form normalisation; suffix templates | integration | `go test ./... -run TestPagination` | ❌ W0 | ⬜ pending |
|
||||
| D-50/51 | H1→H2 on every write path; command dry run | integration | `go test ./... -run TestHeadingConversion` (Journal) | ❌ W0 | ⬜ pending |
|
||||
| D-70 | build fails for indexable `ssr:false` / `.client.vue`; passes when noindex | build smoke | fixture playground builds (expect exit 1/0) | ❌ W0 | ⬜ pending |
|
||||
| D-20a/D-08/D-103 | middleware 301/410, X-Robots-Tag, verification file at root, cache purge | SSR smoke | `node testing/smoke-ssr.mjs --expect testing/expect-seo.txt` | ❌ W0 | ⬜ pending |
|
||||
| D-43 (layer) | exactly one ld+json script, one canonical | SSR smoke | same expect file | ❌ W0 | ⬜ pending |
|
||||
| D-80/81/52 | one anchor per card, H2 cards, no generic anchor | SSR smoke + unit | journal layer `pnpm test` + smoke | ❌ W0 | ⬜ pending |
|
||||
| D-14 | crawler finds planted issues; each issue has a tool or `fix: code` | integration | `go test ./... -run TestCrawler` | ❌ W0 | ⬜ pending |
|
||||
| D-10 | every new admin operation has an MCP tool | unit | `go test -short ./... -run TestEveryAdminOperationHasTool` | ✅ (extend) | ⬜ pending |
|
||||
| D-82/83 | autolink rules; outbound rel | unit | `pnpm test` (vue-seo-layer / journal layer) | ❌ W0 | ⬜ pending |
|
||||
| D-72 | bm serves `Disallow: /` and noindex | smoke | `curl -sI` in check script | ❌ W0 | ⬜ pending |
|
||||
| D-90/D-106 | framework additions generic and additive | gate | `scripts/check-phase33.sh --marker --additive` | ❌ W0 | ⬜ pending |
|
||||
| D-30 | index + per-type files, stable numbering after delete, lastmod only on real change | integration + unit | sm-sitemap-plugin: `go test -count=1 -run 'TestSitemapIndex\|TestStableNumbering\|TestLastmod\|TestExtraDuplicates' .`; `go test -short ./classes -run 'TestAssignSlots\|TestRealChanges\|TestWriteURLSet'` | ✅ | ✅ green |
|
||||
| D-31 | image ≤1000/url, news 2-day window, IndexNow ping on diff | unit + integration | sm-sitemap-plugin: `go test -count=1 -run 'TestImageSitemap\|TestNewsSitemap\|TestIndexNow' .`; `go test -short ./classes -run 'TestWriteImageURLSet\|TestNewsLimits\|TestIndexNowBatches\|TestIndexNowOutcome'` | ✅ | ✅ green |
|
||||
| D-32 | no priority/changefreq/XSL; url items migrated | integration + unit | sm-sitemap-plugin: `go test -count=1 -run TestMigrateDefinitions .`; `go test -short ./classes -run TestWriteURLSet` | ✅ | ✅ green |
|
||||
| D-95/D-24 | SEO filter excludes noindex/canonicalised/redirected; sitemap works without SEO | integration | sm-sitemap-plugin `go test -count=1 -run 'TestFilterExcludes\|TestNoFilter' .`; sm-seo-plugin `go test -count=1 -run 'TestSitemapFilterTracer\|TestFilterReasons' .` | ✅ | ✅ green |
|
||||
| D-33 | registry pages resolve; route report upserts | integration + unit | sm-seo-plugin `go test -count=1 -run 'TestRegistry\|TestRegistryTimestampsUTC\|TestRouteReport' .`; vue-seo-layer `npm run test` (routes.test.ts, locale copies left out) | ✅ | ✅ green |
|
||||
| D-43..46 | @graph per kind with @id links; invalid custom JSON-LD refused | unit + integration | sm-seo-plugin `go test -short ./classes/schema/...`; `go test -count=1 -run 'TestGraphTracer\|TestGraphPerKind\|TestCustomJSONLD' .`; elements `npm run test` (schema, graph) | ✅ | ✅ green |
|
||||
| D-55..57 | alternates only for translated locales; x-default = default | unit + integration | sm-seo-plugin `go test -short ./classes -run TestAlternates`; `go test -count=1 -run TestPagedAlternates .`; sm-sitemap-plugin `go test -count=1 -run TestHreflangAlternates .` | ✅ | ✅ green |
|
||||
| D-40..42 | `?page=1` → 301; form normalisation; suffix templates | unit + integration | sm-seo-plugin `go test -short ./classes -run 'TestParsePage\|TestPageLocation'`; `go test -count=1 -run TestPagination .`; vue-seo-layer usePagination.test.ts | ✅ | ✅ green |
|
||||
| D-50/51 | H1→H2 on every write path; command dry run | unit + integration | sm-journal-plugin `go test -short ./classes -run 'TestConvertH1\|TestConvertContentH1\|TestConvertTranslationH1'`; `go test -count=1 -run 'TestHeadingConversion\|TestFixHeadingsCommand' .`; vue-journal-layer postTitle.test.ts | ✅ | ✅ green |
|
||||
| D-70 | build fails for indexable `ssr:false` / `.client.vue`; passes when noindex; rendered comparison | build smoke + integration | vue-seo-layer `npm run guard:check`; sm-seo-plugin `go test -count=1 -run 'TestRenderSkipped\|TestChromeRenderer' .`, `go test -short ./classes/crawl -run 'TestCompareRendered\|TestAllowRequest\|TestResolverRules\|TestNewRenderer'` | ✅ | ✅ green |
|
||||
| D-20a/D-08/D-103 | middleware 301/410, X-Robots-Tag, verification file at root, cache purge | SSR smoke | vue-seo-layer `npm run smoke:ssr` and `npm run purge:check` | ✅ | ✅ green |
|
||||
| D-43 (layer) | exactly one ld+json script, one canonical | SSR smoke | vue-seo-layer `npm run smoke:ssr` (expect-seo.txt); demo `SMOKE_SEO_STRICT=1 scripts/smoke-seo.sh` (33-14 rehearsal) | ✅ | ✅ green |
|
||||
| D-80/81/52 | one anchor per card, H2 cards, no generic anchor | SSR smoke + unit | vue-journal-layer `npm run test` and its five smoke expectation files (check-phase33.sh --layers); vue-faq-layer block.test.ts; sm-journal-plugin editor outline/forms tests | ✅ | ✅ green |
|
||||
| D-14 | crawler finds planted issues; each issue has a tool or `fix: code` | unit + integration | sm-seo-plugin `go test -short ./classes/crawl/...`; `go test -count=1 -run 'TestCrawlerTracer\|TestCrawlerChecks' .` | ✅ | ✅ green |
|
||||
| D-10 | every new admin operation has an MCP tool | unit | sm-seo-plugin `go test -short -run TestEveryAdminOperationHasTool .`; sm-sitemap-plugin `go test -count=1 -run TestSitemapTools .`; sm-journal-plugin `go test -count=1 -run TestJournalSettingsTools .` | ✅ | ✅ green |
|
||||
| D-82/83 | autolink rules; outbound rel | unit + integration | sm-seo-plugin `go test -short ./classes -run 'TestValidAutolinkURL\|TestNormalizeAutolink'`, `go test -count=1 -run 'TestAutolinks\|TestLinkSuggestions' .`; vue-seo-layer and vue-journal-layer `npm run test` | ✅ | ✅ green |
|
||||
| D-72 | bm serves `Disallow: /` and noindex | smoke | sm-bm-app `scripts/check-noindex.sh` (33-12) | ✅ | ✅ green |
|
||||
| D-90/D-106 | framework additions generic and additive | gate | `scripts/check-phase33.sh --marker --additive --compat` | ✅ | ✅ green |
|
||||
| SC-4 | unit tests for the phase's code | gate | `scripts/check-phase33.sh --all` (required test names per repository in the go, plugins, layers and docker stages) | ✅ | ✅ green |
|
||||
|
||||
*Status: ⬜ pending · ✅ green · ❌ red · ⚠️ flaky*
|
||||
*Status key: ✅ green · ❌ red · ⚠️ flaky; no row is pending* (filled by plan 33-14 from `scripts/check-phase33.sh --all` on 2026-11-04, Docker and Chromium on the host)
|
||||
|
||||
---
|
||||
|
||||
## Wave 0 Requirements
|
||||
|
||||
- [ ] `scripts/check-phase33.sh` — stage engine from check-phase32.sh plus a `layers` stage
|
||||
- [ ] sm-sitemap-plugin: retire `classes/golden_test.go` + `testdata/*.golden`; multi-type, multi-locale fixtures
|
||||
- [ ] vue-seo-layer: `.playground`, `testing/` (smoke-ssr, fixture-api, nuxt-server), fixture resolve answers
|
||||
- [ ] Build-guard fixture playgrounds (indexable ssr:false → fail; noindex → pass; `.client.vue` → fail)
|
||||
- [ ] Crawler httptest site with planted issues
|
||||
- [x] `scripts/check-phase33.sh` — stage engine from check-phase32.sh plus a `layers` stage
|
||||
- [x] sm-sitemap-plugin: retire `classes/golden_test.go` + `testdata/*.golden`; multi-type, multi-locale fixtures
|
||||
- [x] vue-seo-layer: `.playground`, `testing/` (smoke-ssr, fixture-api, nuxt-server), fixture resolve answers
|
||||
- [x] Build-guard fixture playgrounds (indexable ssr:false → fail; noindex → pass; `.client.vue` → fail)
|
||||
- [x] Crawler httptest site with planted issues
|
||||
|
||||
---
|
||||
|
||||
@@ -87,11 +88,11 @@ Filled by the planner per task. Decision → test map from research:
|
||||
|
||||
## Validation Sign-Off
|
||||
|
||||
- [ ] All tasks have `<automated>` verify or Wave 0 dependencies
|
||||
- [ ] Sampling continuity: no 3 consecutive tasks without automated verify
|
||||
- [ ] Wave 0 covers all MISSING references
|
||||
- [ ] No watch-mode flags
|
||||
- [ ] Feedback latency < 120s
|
||||
- [ ] `nyquist_compliant: true` set in frontmatter
|
||||
- [x] All tasks have `<automated>` verify or Wave 0 dependencies
|
||||
- [x] Sampling continuity: no 3 consecutive tasks without automated verify
|
||||
- [x] Wave 0 covers all MISSING references
|
||||
- [x] No watch-mode flags
|
||||
- [x] Feedback latency < 120s
|
||||
- [x] `nyquist_compliant: true` set in frontmatter
|
||||
|
||||
**Approval:** pending
|
||||
**Approval:** automated map green (33-14, 2026-11-04); the manual-only rows above are checked at and after the release.
|
||||
|
||||
Reference in New Issue
Block a user