jekyll-theme-zer0 1.24.0 → 1.26.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.
Files changed (157) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +124 -0
  3. data/README.md +4 -4
  4. data/_data/authors.yml +1 -0
  5. data/_data/backlog.yml +26 -1
  6. data/_data/features.yml +73 -45
  7. data/_data/feedback_types.yml +148 -0
  8. data/_data/navigation/README.md +16 -6
  9. data/_data/navigation/main.yml +0 -8
  10. data/_data/roadmap.yml +1 -0
  11. data/_includes/README.md +10 -7
  12. data/_includes/analytics/google-analytics.html +1 -0
  13. data/_includes/analytics/google-tag-manager-body.html +1 -0
  14. data/_includes/analytics/google-tag-manager-head.html +1 -0
  15. data/_includes/analytics/posthog.html +1 -0
  16. data/_includes/components/README.md +3 -1
  17. data/_includes/components/admin-links.html +63 -0
  18. data/_includes/components/admin-tabs.html +1 -0
  19. data/_includes/components/ai-chat.html +27 -5
  20. data/_includes/components/author-eeat.html +1 -0
  21. data/_includes/components/background-customizer.html +1 -0
  22. data/_includes/components/background-settings.html +36 -37
  23. data/_includes/components/component-showcase.html +1 -0
  24. data/_includes/components/cookie-consent.html +1 -0
  25. data/_includes/components/dev-shortcuts.html +1 -8
  26. data/_includes/components/env-switcher.html +90 -138
  27. data/_includes/components/feature-card.html +1 -1
  28. data/_includes/components/halfmoon.html +22 -41
  29. data/_includes/components/info-section.html +127 -130
  30. data/_includes/components/mermaid.html +1 -0
  31. data/_includes/components/nanobar.html +1 -0
  32. data/_includes/components/page-feedback.html +252 -0
  33. data/_includes/components/post-type-badge.html +1 -0
  34. data/_includes/components/preview-image.html +1 -0
  35. data/_includes/components/search-modal.html +1 -0
  36. data/_includes/components/searchbar.html +1 -0
  37. data/_includes/components/shortcuts-modal.html +1 -0
  38. data/_includes/components/theme-info.html +21 -30
  39. data/_includes/components/theme-preview-gallery.html +1 -0
  40. data/_includes/content/backlinks.html +1 -0
  41. data/_includes/content/giscus.html +1 -0
  42. data/_includes/content/intro.html +20 -62
  43. data/_includes/content/jsonld-faq.html +1 -0
  44. data/_includes/content/seo.html +1 -0
  45. data/_includes/content/sitemap.html +1 -0
  46. data/_includes/content/toc.html +1 -0
  47. data/_includes/core/color-mode-init.html +1 -0
  48. data/_includes/core/console-capture.html +89 -0
  49. data/_includes/core/footer.html +1 -0
  50. data/_includes/core/head.html +5 -0
  51. data/_includes/core/header.html +5 -15
  52. data/_includes/navigation/admin-nav.html +1 -0
  53. data/_includes/navigation/breadcrumbs.html +1 -0
  54. data/_includes/navigation/local-graph-fab.html +3 -9
  55. data/_includes/navigation/local-graph.html +4 -9
  56. data/_includes/navigation/navbar.html +1 -0
  57. data/_includes/navigation/sidebar-categories.html +56 -14
  58. data/_includes/navigation/sidebar-config.html +115 -0
  59. data/_includes/navigation/sidebar-folders.html +168 -62
  60. data/_includes/navigation/sidebar-left.html +29 -52
  61. data/_includes/navigation/sidebar-nav.html +30 -0
  62. data/_includes/navigation/sidebar-right.html +1 -0
  63. data/_includes/navigation/toc-fab.html +3 -9
  64. data/_includes/navigation/unified-drawer.html +7 -14
  65. data/_includes/obsidian/full-graph.html +1 -0
  66. data/_includes/setup/wizard.html +1 -0
  67. data/_includes/stats/stats-categories.html +1 -0
  68. data/_includes/stats/stats-header.html +1 -0
  69. data/_includes/stats/stats-metrics.html +1 -0
  70. data/_includes/stats/stats-overview.html +1 -0
  71. data/_includes/stats/stats-tags.html +1 -0
  72. data/_layouts/admin.html +1 -0
  73. data/_layouts/article.html +1 -0
  74. data/_layouts/author.html +1 -0
  75. data/_layouts/authors.html +1 -0
  76. data/_layouts/collection.html +1 -0
  77. data/_layouts/default.html +14 -37
  78. data/_layouts/home.html +1 -0
  79. data/_layouts/index.html +1 -0
  80. data/_layouts/landing.html +1 -0
  81. data/_layouts/news.html +1 -0
  82. data/_layouts/note.html +1 -0
  83. data/_layouts/notebook.html +1 -0
  84. data/_layouts/root.html +6 -2
  85. data/_layouts/search.html +1 -0
  86. data/_layouts/section.html +1 -0
  87. data/_layouts/setup.html +1 -0
  88. data/_layouts/sitemap-collection.html +1 -0
  89. data/_layouts/stats.html +1 -0
  90. data/_layouts/tag.html +1 -0
  91. data/_layouts/welcome.html +1 -0
  92. data/_plugins/author_pages_generator.rb +1 -0
  93. data/_plugins/obsidian_links.rb +1 -0
  94. data/_plugins/preview_image_generator.rb +1 -0
  95. data/_plugins/search_and_sitemap_generator.rb +1 -0
  96. data/_plugins/theme_version.rb +1 -0
  97. data/_sass/components/_author.scss +12 -1
  98. data/_sass/components/_footer.scss +22 -0
  99. data/_sass/components/_page-feedback.scss +276 -0
  100. data/_sass/components/_ui-enhancements.scss +9 -0
  101. data/_sass/core/_docs-layout.scss +3 -78
  102. data/_sass/core/_navbar.scss +10 -27
  103. data/_sass/core/_obsidian.scss +2 -2
  104. data/_sass/core/code-copy.scss +10 -0
  105. data/_sass/custom.scss +1 -0
  106. data/_sass/notebooks.scss +1 -0
  107. data/_sass/theme/_backgrounds.scss +7 -2
  108. data/_sass/tokens/_layers.scss +4 -0
  109. data/_sass/utilities/_layout.scss +11 -0
  110. data/assets/css/main.scss +3 -1
  111. data/assets/js/ai-chat.js +1 -0
  112. data/assets/js/author-profile.js +1 -0
  113. data/assets/js/auto-hide-nav.js +1 -0
  114. data/assets/js/back-to-top.js +1 -0
  115. data/assets/js/background-customizer.js +1 -0
  116. data/assets/js/code-copy.js +1 -0
  117. data/assets/js/halfmoon.js +23 -22
  118. data/assets/js/modules/navigation/gestures.js +1 -0
  119. data/assets/js/modules/navigation/keyboard.js +1 -0
  120. data/assets/js/modules/navigation/scroll-spy.js +1 -0
  121. data/assets/js/modules/navigation/sidebar-state.js +1 -0
  122. data/assets/js/modules/navigation/sidebar-visibility.js +1 -0
  123. data/assets/js/modules/navigation/smooth-scroll.js +1 -0
  124. data/assets/js/modules/theme/appearance.js +52 -16
  125. data/assets/js/nanobar-init.js +1 -0
  126. data/assets/js/navigation.js +1 -0
  127. data/assets/js/obsidian-graph.js +1 -0
  128. data/assets/js/obsidian-wiki-links.js +1 -0
  129. data/assets/js/page-feedback.js +660 -0
  130. data/assets/js/palette-generator.js +1 -0
  131. data/assets/js/particles-source.js +1 -0
  132. data/assets/js/search-modal.js +1 -0
  133. data/assets/js/setup-wizard.js +1 -0
  134. data/assets/js/share-actions.js +1 -0
  135. data/assets/js/skin-editor.js +1 -0
  136. data/assets/js/table-copy.js +1 -0
  137. data/assets/js/theme-customizer.js +1 -0
  138. data/scripts/analyze-commits.sh +1 -0
  139. data/scripts/bin/giscus-discussions +1 -0
  140. data/scripts/bin/install +1 -0
  141. data/scripts/bin/validate +1 -0
  142. data/scripts/build +1 -0
  143. data/scripts/content-review.rb +1 -0
  144. data/scripts/convert-notebooks.sh +4 -3
  145. data/scripts/fix-markdown-format.sh +1 -0
  146. data/scripts/generate-preview-images.sh +1 -0
  147. data/scripts/generate-roadmap.sh +1 -0
  148. data/scripts/install-preview-generator.sh +1 -0
  149. data/scripts/release +1 -0
  150. data/scripts/requirements.txt +11 -0
  151. data/scripts/setup.sh +1 -0
  152. data/scripts/tag-features +136 -0
  153. data/scripts/validate-features.rb +7 -0
  154. data/scripts/vendor-install.sh +1 -0
  155. metadata +13 -4
  156. data/_data/prompts.yml +0 -302
  157. data/_plugins/admin_page_urls.rb +0 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f65c3a0d1bdabc361ffa201b1ef8718b51d9d90ac9f562d465cbcf11da23cff3
4
- data.tar.gz: 5a688bea4feaf4b0408a072cf0d23dea6922aaab810dfea9e71f5e6d55147b29
3
+ metadata.gz: af7de9769f05880ab652483a7ff6109e79d04ff6404c71163822ce4cecac3d23
4
+ data.tar.gz: 7c968f45cbba4655ad0eb5aa25a55e7b5f178957d65036d47236ba7809592733
5
5
  SHA512:
6
- metadata.gz: 021abbb9996ad7419ce2d27e73ece0234e79f63b8fca7f9ce1619406f91d5e61eabe9ab352257dc09df144c45a75ffa79aa9ff4120c354384fdf3c65420d2557
7
- data.tar.gz: 01f76088c04901271942a073140c1ab38ac98bb1ed9ec2defa4d20cb532e331589415f341fa62a0dc34e20ad4a6194a6d9e34477e35d601a8e3593e96d830f22
6
+ metadata.gz: 3ec2a5423346be22b17120fc586396501218877b70373eae7df03395b4b91211e8d03cf45d79ec71ad717344eae248b967dd5e810092cbf045f0d796ffad1c61
7
+ data.tar.gz: 55ec85fa55c7ca9c918413e16c86d3a275301a0282a989039face47fad9b9e3dc27f5fcda6ff7eb5e74faf0a557e8307c43a059e2e2bd1ebf8df011e46e82b9c
data/CHANGELOG.md CHANGED
@@ -5,6 +5,129 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.26.0](https://github.com/bamr87/zer0-mistakes/compare/v1.25.0...v1.26.0) (2026-07-07)
9
+
10
+
11
+ ### Features
12
+
13
+ * **feedback:** runtime "Improve this page" capture → GitHub issue (logs + AI triage) ([#286](https://github.com/bamr87/zer0-mistakes/issues/286)) ([f7fb20d](https://github.com/bamr87/zer0-mistakes/commit/f7fb20df74c22df7eb823344121c60617f06c7b6))
14
+
15
+ ## [Unreleased]
16
+
17
+ ### Changed
18
+
19
+ - **CI test tiering** — the PR-blocking Playwright gate is now the new
20
+ `critical` project (118 `@critical`-tagged, user-facing tests: navigation,
21
+ search, mobile survival, theming baseline, security) instead of the full
22
+ 331-test `smoke` tier; the full smoke tier, the complete shell-suite
23
+ matrix, and the 9-skin pixel snapshots moved to a nightly workflow
24
+ (`nightly-extended.yml`) that files a sticky issue on failure instead of
25
+ blocking PRs. Install/deploy/site-generation shell suites run on PRs only
26
+ when install-related paths change (always nightly).
27
+
28
+ ### Added
29
+
30
+ - **Weekly agentic UI/UX audit** (`ui-audit.yml`) — a deterministic
31
+ Playwright sweep (`test/ui-audit/sweep.mjs`: screenshots, axe WCAG 2.1 AA,
32
+ console errors, overflow, broken internal links across critical routes ×
33
+ 3 viewports) interpreted by a read-only Claude Code agent
34
+ (`.claude/agents/ui-auditor.md`) against the component contract in
35
+ `docs/architecture/ui-components.md`; findings are filed as a
36
+ `source:ui-audit` issue feeding the continuous-evolution loop.
37
+
38
+ ## [1.25.0](https://github.com/bamr87/zer0-mistakes/compare/v1.24.0...v1.25.0) (2026-07-03)
39
+
40
+
41
+ ### Features
42
+
43
+ * **features:** reverse-traceability source tags — applied and enforced ([#270](https://github.com/bamr87/zer0-mistakes/issues/270)) ([f2c0c07](https://github.com/bamr87/zer0-mistakes/commit/f2c0c073c08bce62956a56b4b3e77d48a00ba309))
44
+ * **includes:** rebuild settings offcanvas into 3 coherent tabs ([#276](https://github.com/bamr87/zer0-mistakes/issues/276)) ([6d7fa5e](https://github.com/bamr87/zer0-mistakes/commit/6d7fa5e028a540576205462cb37797f6ee11c98a))
45
+ * **navigation:** collection-aware sidebar modes with shared resolver ([#273](https://github.com/bamr87/zer0-mistakes/issues/273)) ([104285f](https://github.com/bamr87/zer0-mistakes/commit/104285fbed2d27646549c9aa956dea5108d91f77))
46
+
47
+
48
+ ### Bug Fixes
49
+
50
+ * **features:** stop ZER0-061 card from swallowing every following card ([#268](https://github.com/bamr87/zer0-mistakes/issues/268)) ([46a604d](https://github.com/bamr87/zer0-mistakes/commit/46a604d1bf4331422b382bf895aeecae928fda70))
51
+ * **navigation:** remove redundant entries from navigation menus ([916eca2](https://github.com/bamr87/zer0-mistakes/commit/916eca269726c984c5c0c9dc9533c83d9975f906))
52
+ * **sass:** mobile audit — contain author card, restore consent z-order, grow tap targets ([#275](https://github.com/bamr87/zer0-mistakes/issues/275)) ([8ec9867](https://github.com/bamr87/zer0-mistakes/commit/8ec9867858ff87e9b8a6fcd4a68ec7e50582c3c1))
53
+
54
+ ## [Unreleased]
55
+
56
+ ### Changed
57
+
58
+ - **Settings panel rebuilt** — the navbar Settings offcanvas (`#info-section`)
59
+ is reorganized from four overlapping tabs (Settings / Environment /
60
+ Developer / Background) into three with one purpose each, guarded by the
61
+ new `test/visual/settings-panel.spec.js` smoke suite
62
+ (evidence: [`test/visual/evidence/settings-panel/`](test/visual/evidence/settings-panel/README.md)
63
+ — 4 tabs → 3, duplicate color-mode controls 6 → 3, dead search box
64
+ removed, admin links 0 → 4):
65
+ - **Appearance** consolidates every look-and-feel control exactly once:
66
+ color mode (one-click segmented control replacing the two-click
67
+ dropdown), theme skin, background toggle + layer opacity with inline
68
+ values, and the primary-color picker — now mounted *inside* the tab
69
+ instead of appended below the tab content where it duplicated the
70
+ color-mode buttons under every tab.
71
+ - **Site** stacks the environment card (copyable page URL via a delegated
72
+ `data-zer0-copy` handler — inline `onclick` handlers removed),
73
+ quick links, deduplicated theme & build info, and Admin quick links.
74
+ - **Developer** keeps page location (rendered only where breadcrumbs
75
+ render — no more empty heading on the homepage), page metadata, and
76
+ source shortcuts (dead never-initialized tooltip attributes dropped).
77
+ - The dead Settings-tab search box (an empty `#searchbox` no JS ever
78
+ bound to) is removed; the search modal remains the one search surface.
79
+ - Mobile tabs keep their text labels (their accessible names) at every
80
+ width and drop the decorative icons instead of the reverse.
81
+
82
+ ### Fixed
83
+
84
+ - **Settings panel admin links never rendered** — the
85
+ `_plugins/admin_page_urls.rb` lookup powering them never ran: the
86
+ `github-pages` gem forces safe mode and randomizes `plugins_dir`, so local
87
+ `_plugins` are disabled on GitHub Pages, in CI, and in the Docker dev
88
+ server alike. The plugin is replaced with a pure-Liquid scan in the cached
89
+ `_includes/components/admin-links.html` (jekyll-include-cache is
90
+ whitelisted), so the Admin section now renders its existence-gated links
91
+ (0 → 4 on the demo site).
92
+
93
+ - **Mobile responsive audit** — four defects found by driving every key route
94
+ and component under phone emulation (320–414px), each guarded by the new
95
+ `test/visual/mobile-responsive.spec.js` smoke suite
96
+ (evidence: [`test/visual/evidence/mobile-responsive/`](test/visual/evidence/mobile-responsive/README.md) —
97
+ author-card page overflow 19px → 0 on small phones; consent buttons 0
98
+ tap-blocked; all footer/copy tap targets ≥24px):
99
+ - **Author card**: a long nowrap expertise badge propagated through flexbox
100
+ `min-width: auto` and pushed the whole page past the viewport on ≤340px
101
+ phones, widening the layout viewport so the fixed navbar rendered "cut
102
+ off" and the page panned sideways.
103
+ - **Cookie consent banner**: the `.zer0-bg-body` child-elevation rule
104
+ flattened the banner (and the TOC FAB) to `z-index: 1`, letting the chat
105
+ and local-graph FABs paint over — and steal taps from — the banner's
106
+ Reject All / Accept All buttons on mobile. The rule now excludes
107
+ `.position-fixed`, restoring the `--zer0-layer-*` token order.
108
+ - **Footer tap targets**: text links (~19px) and icon-only social links
109
+ (~16px) now meet the WCAG 2.5.8 24px minimum via block padding and
110
+ minimum boxes — text size and visual design unchanged.
111
+ - **Breadcrumb tap targets**: breadcrumb links (~19px bare text) gain a
112
+ ≥24px tap box via block padding + matching negative margin, without
113
+ shifting the visual baseline.
114
+ - **Code-copy buttons**: grown from ~22px to ≥24px tall (32px on
115
+ coarse/touch pointers).
116
+ - **ToC / chat FAB collision**: on mobile, the table-of-contents FAB and
117
+ the AI-chat toggle both claimed the right-edge slot above back-to-top
118
+ and overlapped (ToC painting over the chat button). The chat toggle and
119
+ its panel now step one slot higher on pages that render the ToC FAB,
120
+ and the chat panel is capped to the viewport so it can't poke above
121
+ short tablet/landscape screens.
122
+
123
+ ### Added
124
+
125
+ - **Mobile test tier**: `test/visual/mobile-responsive.spec.js` runs the above
126
+ guards plus offcanvas-menu, search-modal, and settings-panel fit/tap checks
127
+ under real Pixel-class emulation in the `smoke` tier; `npm run test:mobile`
128
+ runs just this suite. New `dismissCookieConsent` fixture pre-seeds the
129
+ consent choice for tests that interact with lower-screen chrome.
130
+
8
131
  ## [1.24.0](https://github.com/bamr87/zer0-mistakes/compare/v1.23.0...v1.24.0) (2026-07-01)
9
132
 
10
133
 
@@ -42,6 +165,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
42
165
 
43
166
  ### Bug Fixes
44
167
 
168
+ * **features:** stop a feature card from swallowing every card after it on `/features/` — a raw `<key>` in the ZER0-061 description rendered as a stray HTML element. Fixed the description (`/authors/:key/`), escaped all `description` output on the features page and in `feature-card.html`, and added a registry-gate check that rejects raw `<`/`>` in titles/descriptions. (evidence: [`test/visual/evidence/features-card-escape/`](test/visual/evidence/features-card-escape/README.md))
45
169
  * **includes:** existence-guard component-showcase demo links — breadcrumb and list-group items now render as real links when the target page exists in the build (`/docs/`, `/docs/customization/`, `/categories/`, `/tags/`) and as plain text when absent; removes inert `href="#"` / `onclick="return false;"` workaround ([#219](https://github.com/bamr87/zer0-mistakes/issues/219)) (evidence: [`test/visual/evidence/component-showcase/`](test/visual/evidence/component-showcase/README.md))
46
170
 
47
171
  ### Tests
data/README.md CHANGED
@@ -655,7 +655,7 @@ git commit -m "feat: add new component"
655
655
  # Docker-specific tests
656
656
  ./test/test_deployment.sh
657
657
 
658
- # Frontend smoke tests (Playwright; starts Jekyll on :4011 unless BASE_URL is set)
658
+ # Frontend smoke tests (Playwright; starts Jekyll on :4000 unless BASE_URL is set)
659
659
  npm run test:smoke
660
660
  # Pixel regression (skin homepage screenshots; baselines committed for Linux)
661
661
  npm run test:snapshots
@@ -757,11 +757,11 @@ All workflows live under [`.github/workflows/`](.github/workflows/).
757
757
 
758
758
  | # | Workflow | File | Trigger | Purpose |
759
759
  |---|----------|------|---------|---------|
760
- | 1 | **Comprehensive CI Pipeline** | [`ci.yml`](.github/workflows/ci.yml) | push / PR / dispatch | Detect changes → fast checks quality control → matrix test suite → integration tests → build & validate |
761
- | 2 | **TEST (Latest Dependencies)** | [`test-latest.yml`](.github/workflows/test-latest.yml) | daily schedule / push / PR / dispatch | Zero-pin Docker build with bleeding-edge gems; tests then promotes passing images to Docker Hub |
760
+ | 1 | **Comprehensive CI Pipeline** | [`ci.yml`](.github/workflows/ci.yml) | push / PR / dispatch | Detect changes → quality control (incl. quick preflight) → matrix test suite → integration tests → build & validate |
761
+ | 2 | **TEST (Latest Dependencies)** | [`test-latest.yml`](.github/workflows/test-latest.yml) | daily schedule / push / dispatch | Zero-pin Docker build with bleeding-edge gems; tests then promotes passing images to Docker Hub |
762
762
  | 3 | **Release** | [`release.yml`](.github/workflows/release.yml) | push to `main` | release-please opens a release PR from Conventional Commits; merging it tags `vX.Y.Z` and publishes the gem to [RubyGems](https://rubygems.org/gems/jekyll-theme-zer0) |
763
763
  | 4 | **Update Dependencies** | [`update-dependencies.yml`](.github/workflows/update-dependencies.yml) | weekly schedule | Refreshes `Gemfile.lock` to latest compatible versions and opens an automated PR |
764
- | 5 | **CodeQL Security Scanning** | [`codeql.yml`](.github/workflows/codeql.yml) | push / PR on code paths + weekly | Static security analysis across Ruby, JavaScript/TypeScript, Python, Actions, and YAML |
764
+ | 5 | **CodeQL Security Scanning** | [`codeql.yml`](.github/workflows/codeql.yml) | push / PR on code paths + weekly | Static security analysis across Ruby, JavaScript/TypeScript, Python, and Actions |
765
765
  | 6 | **Content & Docs Review** | [`ai-content-review.yml`](.github/workflows/ai-content-review.yml) | PR on docs/content | Deterministic SEO/quality review + optional Claude agent + docs front matter, internal-link, and markdownlint checks |
766
766
  | 7 | **Convert Jupyter Notebooks** | [`convert-notebooks.yml`](.github/workflows/convert-notebooks.yml) | push to `pages/_notebooks/**.ipynb` | Auto-converts `.ipynb` → Jekyll-friendly Markdown with extracted images |
767
767
  | 8 | **Sync** | [`sync.yml`](.github/workflows/sync.yml) | push affecting `_data/backlog.yml` or `_data/roadmap.yml` | Mirrors the backlog to GitHub Issues and regenerates the README roadmap section |
data/_data/authors.yml CHANGED
@@ -1,3 +1,4 @@
1
+ # Feature: ZER0-061
1
2
  # Authors Data File
2
3
  # =================
3
4
  # Define author profiles for blog posts
data/_data/backlog.yml CHANGED
@@ -63,7 +63,7 @@
63
63
  meta:
64
64
  title: "zer0-mistakes Backlog"
65
65
  updated: 2026-06-29
66
- next_id: 33
66
+ next_id: 34
67
67
 
68
68
  tasks:
69
69
  # --- Housekeeping (seeded so the loop has work on day one) ------------------
@@ -863,3 +863,28 @@ tasks:
863
863
  links: { issue: 241, pr: 253, roadmap: null }
864
864
  created: 2026-06-29
865
865
  updated: 2026-06-29
866
+
867
+ - id: T-033
868
+ title: "Retire legacy test_installation.sh after equivalence audit against the installer harness"
869
+ status: open
870
+ priority: P2
871
+ area: tests
872
+ risk: standard
873
+ effort: M
874
+ source: user
875
+ route: test-author
876
+ summary: >-
877
+ test_installation.sh (~1,000 lines, "legacy install.sh CLI args") predates the
878
+ modern test_installer.sh + test_install_*.sh harness and largely overlaps it.
879
+ Audit each of its scenarios against the harness, port anything genuinely
880
+ uncovered into test_install_*.sh, then delete the legacy suite and remove the
881
+ `installation` routing from test_runner.sh, ci.yml, and nightly-extended.yml.
882
+ Until then it runs nightly and on install-path PRs only (2026-07 CI tiering).
883
+ acceptance:
884
+ - "Every test_installation.sh scenario is mapped to a harness equivalent or ported."
885
+ - "test_installation.sh deleted; test_runner.sh no longer routes an `installation` suite."
886
+ - "ci.yml and nightly-extended.yml suite lists updated; docs (test/README.md) updated."
887
+ - "Nightly extended run green after removal."
888
+ links: { issue: null, pr: null, roadmap: null }
889
+ created: 2026-07-06
890
+ updated: 2026-07-06
data/_data/features.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  # zer0-mistakes Theme Features Registry
2
2
  # Comprehensive feature tracking for the zer0-mistakes Jekyll theme
3
- # Version: 1.23.0
4
- # Last Updated: 2026-06-30
3
+ # Version: 1.25.0
4
+ # Last Updated: 2026-07-03
5
5
 
6
6
  features:
7
7
  # ============================================================================
@@ -23,8 +23,8 @@ features:
23
23
  commit: "a8426a5"
24
24
  issue: null
25
25
  tests:
26
- - "test/visual/component-showcase.spec.js"
27
- - "test/visual/styling.spec.js"
26
+ - "test/visual/features/component-showcase.spec.js"
27
+ - "test/visual/core/styling.spec.js"
28
28
  references:
29
29
  layouts: ["_layouts/root.html", "_layouts/default.html"]
30
30
  includes: ["_includes/core/head.html"]
@@ -216,7 +216,7 @@ features:
216
216
  issue: null
217
217
  tests:
218
218
  - "test/test_quality.sh"
219
- - "test/visual/security.spec.js"
219
+ - "test/visual/core/security.spec.js"
220
220
  references:
221
221
  include: "_includes/analytics/posthog.html"
222
222
  config: "_config.yml"
@@ -277,7 +277,7 @@ features:
277
277
  commit: "0ea51c6"
278
278
  issue: null
279
279
  tests:
280
- - "test/visual/interactions.spec.js"
280
+ - "test/visual/features/sidebar-navigation.spec.js"
281
281
  references:
282
282
  javascript:
283
283
  - "assets/js/modules/navigation/sidebar-state.js"
@@ -317,8 +317,8 @@ features:
317
317
  commit: "0ea51c6"
318
318
  issue: null
319
319
  tests:
320
- - "test/visual/feature-coverage.spec.js"
321
- - "test/visual/accessibility.spec.js"
320
+ - "test/visual/features/layouts.spec.js"
321
+ - "test/visual/core/accessibility.spec.js"
322
322
  references:
323
323
  javascript:
324
324
  - "assets/js/modules/navigation/keyboard.js"
@@ -351,8 +351,7 @@ features:
351
351
  commit: "0ea51c6"
352
352
  issue: null
353
353
  tests:
354
- - "test/visual/feature-coverage.spec.js"
355
- - "test/visual/ui-refresh.spec.js"
354
+ - "test/visual/features/content-enhancements.spec.js"
356
355
  references:
357
356
  include: "_includes/navigation/sidebar-right.html"
358
357
  styles: "_sass/custom.scss"
@@ -379,7 +378,7 @@ features:
379
378
  commit: "0ea51c6"
380
379
  issue: null
381
380
  tests:
382
- - "test/visual/accessibility.spec.js"
381
+ - "test/visual/core/accessibility.spec.js"
383
382
  references:
384
383
  include: "_includes/core/header.html"
385
384
  styles: "_sass/custom.scss"
@@ -621,7 +620,7 @@ features:
621
620
  commit: "a8426a5"
622
621
  issue: null
623
622
  tests:
624
- - "test/visual/layouts.spec.js"
623
+ - "test/visual/features/layouts.spec.js"
625
624
  references:
626
625
  layouts:
627
626
  - "_layouts/root.html"
@@ -667,7 +666,7 @@ features:
667
666
  commit: "a8426a5"
668
667
  issue: null
669
668
  tests:
670
- - "test/visual/component-showcase.spec.js"
669
+ - "test/visual/features/component-showcase.spec.js"
671
670
  references:
672
671
  includes:
673
672
  - "_includes/core/"
@@ -932,7 +931,7 @@ features:
932
931
  commit: "a8426a5"
933
932
  issue: null
934
933
  tests:
935
- - "test/visual/feature-coverage.spec.js"
934
+ - "test/visual/features/content-enhancements.spec.js"
936
935
  references:
937
936
  scripts:
938
937
  - "assets/js/back-to-top.js"
@@ -957,7 +956,7 @@ features:
957
956
  commit: "a8426a5"
958
957
  issue: null
959
958
  tests:
960
- - "test/visual/feature-coverage.spec.js"
959
+ - "test/visual/features/content-enhancements.spec.js"
961
960
  references:
962
961
  scripts:
963
962
  - "assets/js/code-copy.js"
@@ -983,7 +982,7 @@ features:
983
982
  commit: "55bee97"
984
983
  issue: null
985
984
  tests:
986
- - "test/visual/color-mode-default.spec.js"
985
+ - "test/visual/features/appearance.spec.js"
987
986
  references:
988
987
  scripts:
989
988
  - "assets/js/modules/theme/appearance.js"
@@ -1015,8 +1014,7 @@ features:
1015
1014
  commit: "21eb458"
1016
1015
  issue: null
1017
1016
  tests:
1018
- - "test/visual/search.spec.js"
1019
- - "test/visual/search-degradation.spec.js"
1017
+ - "test/visual/features/search.spec.js"
1020
1018
  references:
1021
1019
  scripts:
1022
1020
  - "assets/js/search-modal.js"
@@ -1048,7 +1046,7 @@ features:
1048
1046
  commit: "a8426a5"
1049
1047
  issue: null
1050
1048
  tests:
1051
- - "test/visual/feature-coverage.spec.js"
1049
+ - "test/visual/features/navbar.spec.js"
1052
1050
  references:
1053
1051
  scripts:
1054
1052
  - "assets/js/auto-hide-nav.js"
@@ -1073,7 +1071,7 @@ features:
1073
1071
  commit: "a8426a5"
1074
1072
  issue: null
1075
1073
  tests:
1076
- - "test/visual/backgrounds.spec.js"
1074
+ - "test/visual/features/appearance.spec.js"
1077
1075
  references:
1078
1076
  scripts:
1079
1077
  - "assets/js/particles.js"
@@ -1105,7 +1103,7 @@ features:
1105
1103
  commit: "a8426a5"
1106
1104
  issue: null
1107
1105
  tests:
1108
- - "test/visual/giscus-comments.spec.js"
1106
+ - "test/visual/features/comments.spec.js"
1109
1107
  references:
1110
1108
  includes:
1111
1109
  - "_includes/content/giscus.html"
@@ -1140,7 +1138,7 @@ features:
1140
1138
  commit: "31f827e"
1141
1139
  issue: null
1142
1140
  tests:
1143
- - "test/visual/feature-coverage.spec.js"
1141
+ - "test/visual/features/content-enhancements.spec.js"
1144
1142
  references:
1145
1143
  docs:
1146
1144
  - "pages/_docs/features/mathjax-math.md"
@@ -1165,8 +1163,7 @@ features:
1165
1163
  commit: "a8426a5"
1166
1164
  issue: null
1167
1165
  tests:
1168
- - "test/visual/feature-coverage.spec.js"
1169
- - "test/visual/ui-refresh.spec.js"
1166
+ - "test/visual/features/content-enhancements.spec.js"
1170
1167
  references:
1171
1168
  includes:
1172
1169
  - "_includes/content/toc.html"
@@ -1251,8 +1248,8 @@ features:
1251
1248
  commit: "a8426a5"
1252
1249
  issue: null
1253
1250
  tests:
1254
- - "test/visual/layouts.spec.js"
1255
- - "test/visual/authors-breadcrumb-degradation.spec.js"
1251
+ - "test/visual/features/layouts.spec.js"
1252
+ - "test/visual/features/authors.spec.js"
1256
1253
  references:
1257
1254
  includes:
1258
1255
  - "_includes/navigation/breadcrumbs.html"
@@ -1421,7 +1418,7 @@ features:
1421
1418
  issue: null
1422
1419
  tests:
1423
1420
  - "test/test_obsidian.sh"
1424
- - "test/visual/obsidian-callouts.spec.js"
1421
+ - "test/visual/features/obsidian-callouts.spec.js"
1425
1422
  references:
1426
1423
  includes:
1427
1424
  - "_includes/obsidian/full-graph.html"
@@ -1471,7 +1468,7 @@ features:
1471
1468
  issue: null
1472
1469
  tests:
1473
1470
  - "test/test_core.sh"
1474
- - "test/visual/layouts.spec.js"
1471
+ - "test/visual/features/layouts.spec.js"
1475
1472
  references:
1476
1473
  page: "404.html"
1477
1474
  docs: "pages/_docs/features/smart-404.md"
@@ -1512,8 +1509,7 @@ features:
1512
1509
  commit: "a8426a5"
1513
1510
  issue: null
1514
1511
  tests:
1515
- - "test/visual/ui-refresh.spec.js"
1516
- - "test/visual/navbar-responsive.spec.js"
1512
+ - "test/visual/features/navbar.spec.js"
1517
1513
  references:
1518
1514
  includes:
1519
1515
  - "_includes/navigation/navbar.html"
@@ -1533,8 +1529,7 @@ features:
1533
1529
  commit: "27550da"
1534
1530
  issue: null
1535
1531
  tests:
1536
- - "test/visual/admin-layout.spec.js"
1537
- - "test/visual/admin-nav.spec.js"
1532
+ - "test/visual/features/admin.spec.js"
1538
1533
  references:
1539
1534
  layout: "_layouts/admin.html"
1540
1535
  includes:
@@ -1645,8 +1640,7 @@ features:
1645
1640
  commit: "5533f34"
1646
1641
  issue: null
1647
1642
  tests:
1648
- - "test/visual/navbar-responsive.spec.js"
1649
- - "test/visual/ui-refresh.spec.js"
1643
+ - "test/visual/features/navbar.spec.js"
1650
1644
  references:
1651
1645
  scripts:
1652
1646
  - "assets/js/modules/"
@@ -1753,7 +1747,7 @@ features:
1753
1747
  commit: "341cc67"
1754
1748
  issue: null
1755
1749
  tests:
1756
- - "test/visual/ai-chat.spec.js"
1750
+ - "test/visual/features/ai-chat.spec.js"
1757
1751
  references:
1758
1752
  includes: ["_includes/components/ai-chat.html"]
1759
1753
  layouts: ["_layouts/root.html"]
@@ -1767,7 +1761,7 @@ features:
1767
1761
 
1768
1762
  - id: ZER0-061
1769
1763
  title: "Author Profiles System"
1770
- description: "Auto-generated author profile pages and a searchable author directory from _data/authors.yml — each author gets a /authors/<key>/ hub with bio, stats, and a filterable grid of their content across collections"
1764
+ description: "Auto-generated author profile pages and a searchable author directory from _data/authors.yml — each author gets a /authors/:key/ hub with bio, stats, and a filterable grid of their content across collections"
1771
1765
  implemented: true
1772
1766
  version: "1.20.0"
1773
1767
  link: "/authors/"
@@ -1780,7 +1774,7 @@ features:
1780
1774
  commit: "a6db3042"
1781
1775
  issue: null
1782
1776
  tests:
1783
- - "test/visual/authors-breadcrumb-degradation.spec.js"
1777
+ - "test/visual/features/authors.spec.js"
1784
1778
  references:
1785
1779
  plugin: "_plugins/author_pages_generator.rb"
1786
1780
  layouts:
@@ -1805,7 +1799,7 @@ features:
1805
1799
  commit: "53132416"
1806
1800
  issue: null
1807
1801
  tests:
1808
- - "test/visual/layouts.spec.js"
1802
+ - "test/visual/features/layouts.spec.js"
1809
1803
  references:
1810
1804
  layout: "_layouts/news.html"
1811
1805
 
@@ -1824,8 +1818,8 @@ features:
1824
1818
  commit: "06691f93"
1825
1819
  issue: null
1826
1820
  tests:
1827
- - "test/visual/section-sidebar-tags-gate.spec.js"
1828
- - "test/visual/layouts.spec.js"
1821
+ - "test/visual/features/sidebar-navigation.spec.js"
1822
+ - "test/visual/features/layouts.spec.js"
1829
1823
  references:
1830
1824
  layout: "_layouts/section.html"
1831
1825
 
@@ -1844,7 +1838,7 @@ features:
1844
1838
  commit: "06691f93"
1845
1839
  issue: null
1846
1840
  tests:
1847
- - "test/visual/layouts.spec.js"
1841
+ - "test/visual/features/layouts.spec.js"
1848
1842
  references:
1849
1843
  layout: "_layouts/article.html"
1850
1844
  include: "_includes/components/post-type-badge.html"
@@ -1864,9 +1858,8 @@ features:
1864
1858
  commit: "27550dac"
1865
1859
  issue: null
1866
1860
  tests:
1867
- - "test/visual/skins.spec.js"
1868
- - "test/visual/backgrounds.spec.js"
1869
- - "test/visual/theme-colors.spec.js"
1861
+ - "test/visual/features/appearance.spec.js"
1862
+ - "test/visual/features/appearance-snapshot.spec.js"
1870
1863
  references:
1871
1864
  scripts:
1872
1865
  - "assets/js/background-customizer.js"
@@ -1999,7 +1992,7 @@ features:
1999
1992
  commit: "7ba0f834"
2000
1993
  issue: null
2001
1994
  tests:
2002
- - "test/visual/component-showcase.spec.js"
1995
+ - "test/visual/features/component-showcase.spec.js"
2003
1996
  references:
2004
1997
  include: "_includes/components/component-showcase.html"
2005
1998
 
@@ -2109,3 +2102,38 @@ features:
2109
2102
  - na: "CI security scan — .github/workflows/secret-scan.yml"
2110
2103
  references:
2111
2104
  workflow: ".github/workflows/secret-scan.yml"
2105
+
2106
+ - id: ZER0-077
2107
+ title: "Unified Settings Panel"
2108
+ description: "Navbar settings offcanvas reorganized into Appearance, Site, and Developer tabs — consolidated color-mode/skin/background controls, delegated copy-to-clipboard, and existence-gated admin quick links computed in cached Liquid"
2109
+ implemented: true
2110
+ version: "1.25.0"
2111
+ link: "/"
2112
+ docs: "/docs/customization/includes/"
2113
+ tags: [ui, navigation, bootstrap, accessibility]
2114
+ date: 2026-07-02
2115
+ provenance:
2116
+ introduced_in: "1.25.0"
2117
+ pr: 276
2118
+ commit: "3b951604"
2119
+ issue: null
2120
+ tests:
2121
+ - "test/visual/features/settings-panel.spec.js"
2122
+ references:
2123
+ includes:
2124
+ - "_includes/components/info-section.html"
2125
+ - "_includes/components/admin-links.html"
2126
+ - "_includes/components/halfmoon.html"
2127
+ - "_includes/components/env-switcher.html"
2128
+ - "_includes/components/theme-info.html"
2129
+ - "_includes/components/background-settings.html"
2130
+ - "_includes/components/dev-shortcuts.html"
2131
+ scripts:
2132
+ - "assets/js/halfmoon.js"
2133
+ - "assets/js/modules/theme/appearance.js"
2134
+ sass:
2135
+ - "_sass/utilities/_layout.scss"
2136
+ features:
2137
+ - "Appearance tab: one-click color mode, 9 theme skins, background layer opacity, primary color"
2138
+ - "Site tab: environment badge, copyable page URL, quick links, theme & build info, admin links"
2139
+ - "Developer tab: breadcrumb page location, page metadata, source-code shortcuts"