jekyll-theme-zer0 1.14.0 → 1.15.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4cfcaf3d689c47878154509eba7578f52610d2d2b93ac70b1c0f1cc0ec2ce2b2
4
- data.tar.gz: 6020f74226767a325b0591a7aebeb8140b9c6fe43dc7d597e0dadd483e26c7d6
3
+ metadata.gz: 6bd5748efd683917f588e3f0e130536a6ba00727f0d2027445261b1258d2b22d
4
+ data.tar.gz: dcd71edd2118b837980feccce2474ab6936d7838756d4ed3a9aa4a80ef76ff75
5
5
  SHA512:
6
- metadata.gz: e7e010b9a63a86c6dccc37662ac33ab0b908bc2a9e08cce8d54155750088f0cf5491fbc2f62114d312402a6add238009ab651ff986343a1c837f0433811e6e88
7
- data.tar.gz: 50ff58b6a81b804e1cc906fa91df6b855b72115da6ffaf8a9dc3aa8545f086fa8ca1c343181ad6ab4c5f89e9557afc53225eaba9a98f5ecc05fd714fbb779cb3
6
+ metadata.gz: 28d42c8f1d75356b055eeeb493d8daf466ef1e8d23eb8aade96f4c77de0f1b1b7d307f821b5ef65716d2379920bd68f9d4862d0ad0fc214b82f9398349041617
7
+ data.tar.gz: 5c2d7da877cdcaa317ef6e90e6c60e5f28098dd1742101c793140801a45d8aa029f8d97960d830bdd4ef00c22f4241f4c2fd9c2e2659c218d2ae69369fd80f9a
data/CHANGELOG.md CHANGED
@@ -5,6 +5,27 @@ 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.15.0] - 2026-06-12
9
+
10
+ ### Changed
11
+ - Version bump: minor release
12
+
13
+ ### Commits in this release
14
+ - 85d0295a feat(quality): implement six backlog tasks — T-003/004/008/014/015/016 (#144)
15
+ - 71b8fe46 fix(gemspec): require Ruby >= 3.2 to match modern dependency floor (#93)
16
+
17
+ ### Added
18
+ - **Contribution templates (T-003)**: bug-report and feature-request issue forms, contact links, and a PR template with the conventional-commit/CHANGELOG/test checklist
19
+ - **Locale-independence guard (T-015)**: lib test suite runs the roadmap/backlog/preflight validators under `LC_ALL=C LANG=C` so the UTF-8 crash class fixed in 1.12.1 cannot return
20
+
21
+ ### Fixed
22
+ - **Theme customizer (T-008)**: YAML export now quotes hex color values in both builders — unquoted `#RRGGBB` parsed as a YAML comment and silently dropped colors; frozen regression test promoted to live
23
+ - **Docs lint baseline (T-004/T-014)**: ~1,600 markdownlint violations fixed or config-tuned to zero (MD060 disabled as post-config stylistic noise, MD025 front-matter handling, MD024 siblings-only); a stray code fence that swallowed the troubleshooting "Advanced Topics" section into a code block repaired; table pipes escaped; 15 dead README links remapped to the reorganized `docs/` tree
24
+ - **site_generation suite (T-016)**: `jekyll build` failures now fail the suite instead of degrading to warnings (missing-bundler skip retained)
25
+
26
+ ### Changed
27
+ - **Docs lint gate (T-014)**: both `|| true` suppressions removed from `docs-validate.yml` — markdownlint now blocks on a zero-violation baseline
28
+
8
29
  ## [1.14.0] - 2026-06-11
9
30
 
10
31
  ### Changed
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
  title: zer0-mistakes
3
3
  sub-title: AI-Native Jekyll Theme
4
4
  description: AI-native Jekyll theme for GitHub Pages — Docker-first development, AI-powered installation, multi-agent integration (Copilot, Codex, Cursor, Claude), AI preview-image generation, and AIEO content optimization with Bootstrap 5.3.
5
- version: 1.14.0
5
+ version: 1.15.0
6
6
  layout: landing
7
7
  tags:
8
8
  - jekyll
@@ -20,7 +20,7 @@ categories:
20
20
  - bootstrap
21
21
  - ai-tooling
22
22
  created: 2024-02-10T23:51:11.480Z
23
- lastmod: 2026-06-11T22:23:48.000Z
23
+ lastmod: 2026-06-12T01:01:59.000Z
24
24
  draft: false
25
25
  permalink: /
26
26
  slug: zer0
@@ -571,7 +571,7 @@ cd <your-username>.github.io
571
571
  docker-compose up
572
572
  ```
573
573
 
574
- See [docs/FORKING.md](docs/FORKING.md) for the full progressive workflow.
574
+ See [docs/FORKING.md](docs/installation/forking.md) for the full progressive workflow.
575
575
 
576
576
  ---
577
577
 
@@ -703,7 +703,7 @@ zer0-mistakes documentation is split across three audiences. Pick the layer that
703
703
  | [📊 Analytics](https://zer0-mistakes.com/docs/analytics/) | PostHog, Google Analytics setup |
704
704
  | [🔍 SEO](https://zer0-mistakes.com/docs/seo/) | Meta tags, sitemap, structured data |
705
705
  | [📓 Jupyter Notebooks](https://github.com/bamr87/zer0-mistakes/blob/main/docs/JUPYTER_NOTEBOOKS.md) | Notebook conversion documentation |
706
- | [📝 PRD](docs/PRD.md) | Product requirements & roadmap |
706
+ | [📝 PRD](docs/architecture/prd-requirements.md) | Product requirements & roadmap |
707
707
  | [🔒 Privacy Policy](https://zer0-mistakes.com/privacy-policy/) | GDPR/CCPA compliant privacy docs |
708
708
 
709
709
  ### Contributor Technical Reference
@@ -712,18 +712,18 @@ These files live in the repo under `docs/` and are intended for theme contributo
712
712
 
713
713
  | File | Topic |
714
714
  |------|-------|
715
- | [docs/design-system.md](docs/design-system.md) | Design system overview |
716
- | [docs/design-tokens.md](docs/design-tokens.md) | Design tokens reference |
717
- | [docs/components.md](docs/components.md) | UI component catalogue |
718
- | [docs/layouts-and-navigation.md](docs/layouts-and-navigation.md) | Layout hierarchy & navigation |
719
- | [docs/theming.md](docs/theming.md) | Sass / Bootstrap theming guide |
720
- | [docs/customization.md](docs/customization.md) | Site customization patterns |
721
- | [docs/configuration.md](docs/configuration.md) | `_config.yml` reference |
722
- | [docs/code-blocks.md](docs/code-blocks.md) | Syntax highlighting setup |
723
- | [docs/extending.md](docs/extending.md) | Adding layouts, includes & plugins |
724
- | [docs/js-api.md](docs/js-api.md) | JavaScript module API |
725
- | [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) | Common issues & fixes |
726
- | [docs/FORKING.md](docs/FORKING.md) | Forking & personalization guide |
715
+ | [docs/design-system.md](docs/ui/design-system.md) | Design system overview |
716
+ | [docs/design-tokens.md](docs/ui/design-tokens.md) | Design tokens reference |
717
+ | [docs/components.md](docs/ui/components.md) | UI component catalogue |
718
+ | [docs/layouts-and-navigation.md](docs/ui/layouts-and-navigation.md) | Layout hierarchy & navigation |
719
+ | [docs/theming.md](docs/ui/theming.md) | Sass / Bootstrap theming guide |
720
+ | [docs/customization.md](docs/ui/customization.md) | Site customization patterns |
721
+ | [docs/configuration.md](docs/ui/configuration.md) | `_config.yml` reference |
722
+ | [docs/code-blocks.md](docs/ui/code-blocks.md) | Syntax highlighting setup |
723
+ | [docs/extending.md](docs/ui/extending.md) | Adding layouts, includes & plugins |
724
+ | [docs/js-api.md](docs/ui/js-api.md) | JavaScript module API |
725
+ | [docs/TROUBLESHOOTING.md](docs/development/troubleshooting.md) | Common issues & fixes |
726
+ | [docs/FORKING.md](docs/installation/forking.md) | Forking & personalization guide |
727
727
 
728
728
  ---
729
729
 
@@ -803,7 +803,7 @@ When you fork the theme as a starter, the workflows come with you. To make them
803
803
 
804
804
  ## 🗺 Roadmap
805
805
 
806
- The diagram and table below are auto-generated from [`_data/roadmap.yml`](_data/roadmap.yml) by [`scripts/generate-roadmap.sh`](scripts/generate-roadmap.sh). See the full [Roadmap page](https://zer0-mistakes.com/roadmap/) for per-version detail and the [PRD](docs/PRD.md) for product context.
806
+ The diagram and table below are auto-generated from [`_data/roadmap.yml`](_data/roadmap.yml) by [`scripts/generate-roadmap.sh`](scripts/generate-roadmap.sh). See the full [Roadmap page](https://zer0-mistakes.com/roadmap/) for per-version detail and the [PRD](docs/architecture/prd-requirements.md) for product context.
807
807
 
808
808
  <!-- ROADMAP_MERMAID:START -->
809
809
 
@@ -831,8 +831,9 @@ gantt
831
831
  v1.10 Roadmap Validation :done, 2026-06, 2026-06
832
832
  v1.11 Continuous-Evolution Loop :done, 2026-06, 2026-06
833
833
  v1.12 Headless Endpoints :done, 2026-06, 2026-06
834
+ v1.13 Quality Framework — First Wave :done, 2026-06, 2026-06
834
835
  section Current
835
- v1.13 Zer0-Mistake Quality Framework :active, 2026-06, 2026-08
836
+ v1.14 Zer0-Mistake Quality Framework :active, 2026-06, 2026-08
836
837
  section Future
837
838
  v2.0 CMS Integration :2026-06, 2026-08
838
839
  v2.1 i18n Support :2026-08, 2026-10
@@ -865,7 +866,8 @@ gantt
865
866
  | **v1.10** | ✅ Completed | Jun 2026 | Roadmap integrity validation and catch-up milestones so the roadmap tracks the shipped gem. |
866
867
  | **v1.11** | ✅ Completed | Jun 2026 | Self-sustaining backlog loop so AI agents keep improving the repo between human sessions. |
867
868
  | **v1.12** | ✅ Completed | Jun 2026 | Machine-readable site endpoints for downstream sites and AI agents. |
868
- | **v1.13** | 🚧 In Progress | Current (1.13.x) | Close the gap between the repo's quality gates and what CI actually enforces no mistake lands green. |
869
+ | **v1.13** | Completed | Jun 2026 | First shipped wave of the Zer0-Mistake Quality Framework: CI gate parity and DOM sanitization. |
870
+ | **v1.14** | 🚧 In Progress | Current (1.14.x) | Close the gap between the repo's quality gates and what CI actually enforces — no mistake lands green. |
869
871
  | **v2.0** | 🗓 Planned | Q3 2026 | Headless CMS integration with a content API and admin dashboard. |
870
872
  | **v2.1** | 🗓 Planned | Q4 2026 | Multi-language content support with locale-aware routing. |
871
873
  | **v2.2** | 🗓 Planned | Q4 2026 | Visual theme customizer, A/B testing, and conversion funnels. |
@@ -909,7 +911,7 @@ git push origin feature/awesome-feature
909
911
 
910
912
  | Metric | Value |
911
913
  |--------|-------|
912
- | **Current Version** | 1.14.0 ([RubyGems](https://rubygems.org/gems/jekyll-theme-zer0), [CHANGELOG](/CHANGELOG)) |
914
+ | **Current Version** | 1.15.0 ([RubyGems](https://rubygems.org/gems/jekyll-theme-zer0), [CHANGELOG](/CHANGELOG)) |
913
915
  | **Documented Features** | 43 ([Feature Registry](https://github.com/bamr87/zer0-mistakes/blob/main/_data/features.yml)) |
914
916
  | **Setup Time** | 2-5 minutes ([install.sh benchmarks](https://github.com/bamr87/zer0-mistakes/blob/main/install.sh)) |
915
917
  | **Documentation Pages** | 70+ ([browse docs](https://zer0-mistakes.com/pages/)) |
@@ -964,6 +966,6 @@ And these AI partners that make zer0-mistakes truly AI-native:
964
966
 
965
967
  **Built with ❤️ — and a little help from our AI partners — for the Jekyll community**
966
968
 
967
- **v1.14.0** • [Changelog](CHANGELOG.md) • [License](LICENSE) • [Contributing](CONTRIBUTING.md) • [AI Agent Guide](AGENTS.md)
969
+ **v1.15.0** • [Changelog](CHANGELOG.md) • [License](LICENSE) • [Contributing](CONTRIBUTING.md) • [AI Agent Guide](AGENTS.md)
968
970
 
969
971
 
data/_data/backlog.yml CHANGED
@@ -55,7 +55,7 @@
55
55
 
56
56
  meta:
57
57
  title: "zer0-mistakes Backlog"
58
- updated: 2026-06-11
58
+ updated: 2026-06-12
59
59
  next_id: 19
60
60
 
61
61
  tasks:
@@ -106,7 +106,7 @@ tasks:
106
106
 
107
107
  - id: T-003
108
108
  title: "Add GitHub issue templates and a pull-request template"
109
- status: open
109
+ status: done
110
110
  priority: P2
111
111
  area: infra
112
112
  risk: standard
@@ -116,17 +116,21 @@ tasks:
116
116
  The repo has no `.github/ISSUE_TEMPLATE/` or PR template. Add a bug-report
117
117
  and feature-request issue form plus a PR template that nudges contributors
118
118
  toward conventional commits, CHANGELOG updates, and the test checklist.
119
+ Done 2026-06-12: bug-report and feature-request issue forms, config.yml
120
+ with contact links (blank issues stay enabled for the API-driven backlog
121
+ sync), and a PR template with the conventional-commit/CHANGELOG/test
122
+ checklist.
119
123
  acceptance:
120
124
  - "`.github/ISSUE_TEMPLATE/bug_report.yml` and `feature_request.yml` exist and render."
121
125
  - "`.github/pull_request_template.md` exists with a conventional-commit + CHANGELOG + tests checklist."
122
126
  - "Agent-filed backlog issues remain compatible with the new templates (no broken automation)."
123
127
  links: { issue: null, pr: null, roadmap: null }
124
128
  created: 2026-05-31
125
- updated: 2026-05-31
129
+ updated: 2026-06-12
126
130
 
127
131
  - id: T-004
128
132
  title: "Docs-freshness sweep: reconcile docs/ ↔ pages/_docs/ and fix broken links"
129
- status: open
133
+ status: done
130
134
  priority: P2
131
135
  area: docs
132
136
  risk: low
@@ -136,13 +140,18 @@ tasks:
136
140
  Run the markdown-link checker and audit the two-tier docs for drift,
137
141
  stale dates/versions, and any user/technical pages that fell out of sync
138
142
  after the recent alignment commit.
143
+ Done 2026-06-12: markdownlint baseline cleaned to zero violations
144
+ (~1,600 fixed: auto-fix pass, MD060/MD025/MD024 config tuning, fence
145
+ languages, table pipe escapes, a stray fence swallowing a docs section),
146
+ 15 dead README links remapped to the reorganized docs/ tree,
147
+ check-links.sh reports 0 broken links.
139
148
  acceptance:
140
149
  - "`markdown-link-check` (config in `.github/config/`) reports no broken internal links."
141
150
  - "Any stale version/date references in `docs/` and `pages/_docs/` are corrected."
142
151
  - "Cross-links between the user tier and technical tier resolve both ways."
143
152
  links: { issue: null, pr: null, roadmap: null }
144
153
  created: 2026-05-31
145
- updated: 2026-05-31
154
+ updated: 2026-06-12
146
155
 
147
156
  - id: T-005
148
157
  title: "Coverage baseline: identify the lowest-covered subsystems toward the 90% goal"
@@ -192,7 +201,7 @@ tasks:
192
201
 
193
202
  - id: T-008
194
203
  title: "Fix theme-customizer YAML export to quote hex color values"
195
- status: open
204
+ status: done
196
205
  priority: P2
197
206
  area: feat
198
207
  risk: standard
@@ -203,13 +212,17 @@ tasks:
203
212
  YAML without quoting strings that start with `#`. Unquoted `#RRGGBB` is treated as a
204
213
  YAML comment by parsers, silently dropping colour values. A regression guard in
205
214
  `test/visual/theme-colors.spec.js` is frozen as `test.fixme` until the bug is fixed.
215
+ Done 2026-06-12: both YAML builders (theme-customizer.js fallback and
216
+ palette-generator.js commented overrides) quote color values; frozen
217
+ regression test promoted to live test(); export verified parseable by
218
+ Ruby YAML with colors preserved.
206
219
  acceptance:
207
220
  - "JS export wraps every hex colour value (matching `/#[0-9a-fA-F]{3,8}/`) in double quotes in the generated YAML."
208
221
  - "The `test.fixme` in `test/visual/theme-colors.spec.js` is promoted to a live `test()` and passes in CI."
209
222
  - "Exported YAML is valid when parsed by `yaml.safe_load` in Ruby."
210
223
  links: { issue: null, pr: null, roadmap: null }
211
224
  created: 2026-06-01
212
- updated: 2026-06-01
225
+ updated: 2026-06-12
213
226
 
214
227
  - id: T-009
215
228
  title: "Sanitize sensitive config keys from admin config-page DOM injection"
@@ -342,7 +355,7 @@ tasks:
342
355
 
343
356
  - id: T-014
344
357
  title: "Re-arm the docs link-check gate (remove warn-only || true)"
345
- status: open
358
+ status: done
346
359
  priority: P2
347
360
  area: lint
348
361
  risk: standard
@@ -352,17 +365,20 @@ tasks:
352
365
  `docs-validate.yml` runs markdown-link-check with `|| true` ("warn-only
353
366
  until baseline is clean"), so broken links accumulate. Fix the links it
354
367
  currently reports, then drop the `|| true` so the gate blocks.
368
+ Done 2026-06-12: baseline cleaned to zero violations and both
369
+ warn-only suppressions removed from docs-validate.yml — the lint gate
370
+ now blocks. (The internal link check was already blocking.)
355
371
  acceptance:
356
372
  - "All links reported by the current `docs-validate.yml` run are fixed or allowlisted in `.github/config/.markdown-link-check.json`."
357
373
  - "Both `|| true` suppressions removed from `docs-validate.yml`."
358
374
  - "`docs-validate.yml` passes blocking on a follow-up PR."
359
375
  links: { issue: null, pr: null, roadmap: "1.13" }
360
376
  created: 2026-06-10
361
- updated: 2026-06-10
377
+ updated: 2026-06-12
362
378
 
363
379
  - id: T-015
364
380
  title: "Locale-independence regression guard for Ruby/Bash tooling"
365
- status: open
381
+ status: done
366
382
  priority: P2
367
383
  area: infra
368
384
  risk: standard
@@ -374,17 +390,21 @@ tasks:
374
390
  only reproduced without a UTF-8 locale. Add a guard so the bug class
375
391
  cannot return: run the validators under `LC_ALL=C` in a lib test or a
376
392
  dedicated CI step.
393
+ Done 2026-06-12: scripts/test/lib/test_locale_independence.sh runs
394
+ generate-roadmap --check/--validate, sync-backlog --check, and
395
+ validate --quick under LC_ALL=C LANG=C; verified the guard fails when
396
+ the explicit-UTF-8 read is reverted.
377
397
  acceptance:
378
398
  - "A test (scripts/test/lib/) or CI step runs `generate-roadmap.rb --check`, `sync-backlog.rb --check`, and `validate --quick` with `LC_ALL=C LANG=C`."
379
399
  - "The guard fails when the explicit-UTF-8 reads are reverted (verified once locally)."
380
400
  - "`./scripts/bin/test` stays green."
381
401
  links: { issue: null, pr: null, roadmap: "1.13" }
382
402
  created: 2026-06-10
383
- updated: 2026-06-10
403
+ updated: 2026-06-12
384
404
 
385
405
  - id: T-016
386
406
  title: "site_generation suite: fail on Jekyll build errors instead of warning"
387
- status: open
407
+ status: done
388
408
  priority: P2
389
409
  area: tests
390
410
  risk: standard
@@ -398,13 +418,16 @@ tasks:
398
418
  the suite now gating PRs in CI (working bundler guaranteed), build
399
419
  failures should fail the suite; keep the skip only for genuinely
400
420
  missing toolchain (no bundler).
421
+ Done 2026-06-12: jekyll build failures now fail the suite (bundler-
422
+ missing still skips); verified strict suite passes locally with real
423
+ builds.
401
424
  acceptance:
402
425
  - "A non-zero `jekyll build` exit fails the suite when bundler is available."
403
426
  - "The bundler-missing path still skips with a warning (local minimal environments)."
404
427
  - "Suite passes in CI and via `./test/test_runner.sh --suites site_generation` locally."
405
428
  links: { issue: null, pr: null, roadmap: "1.13" }
406
429
  created: 2026-06-10
407
- updated: 2026-06-10
430
+ updated: 2026-06-12
408
431
 
409
432
  - id: T-017
410
433
  title: "Fix yamllint violations in .github/workflows/version-bump.yml"
data/_data/roadmap.yml CHANGED
@@ -60,7 +60,7 @@
60
60
  meta:
61
61
  title: "zer0-mistakes Roadmap"
62
62
  tagline: "Past releases, current focus, and future plans for the zer0-mistakes Jekyll theme."
63
- updated: 2026-06-11
63
+ updated: 2026-06-12
64
64
 
65
65
  milestones:
66
66
  # --- Completed -------------------------------------------------------------
@@ -326,23 +326,37 @@ milestones:
326
326
  - "Auto-generated `/sitemap/` endpoint"
327
327
  - "Ruby gem and Mermaid dependency updates"
328
328
 
329
+ - version: "1.13"
330
+ title: "Quality Framework — First Wave"
331
+ status: completed
332
+ section: Completed
333
+ start: 2026-06
334
+ end: 2026-06
335
+ released: 2026-06-11
336
+ summary: "First shipped wave of the Zer0-Mistake Quality Framework: CI gate parity and DOM sanitization."
337
+ features:
338
+ - "CI gate parity (T-012) — PRs run the full canonical test entrypoint, not a subset"
339
+ - "Admin config-page DOM sanitization (T-009), Liquid + plugin layers"
340
+ - "Release changelog single source of truth; workflow lint cleanup (T-017)"
341
+ - "Gate-coverage controls contract documented in the workflows README"
342
+
329
343
  # --- Current ---------------------------------------------------------------
330
344
 
331
- - version: "1.13"
345
+ - version: "1.14"
332
346
  title: "Zer0-Mistake Quality Framework"
333
347
  status: active
334
348
  section: Current
335
349
  start: 2026-06
336
350
  end: 2026-08
337
- target: "Current (1.13.x)"
351
+ target: "Current (1.14.x)"
338
352
  summary: "Close the gap between the repo's quality gates and what CI actually enforces — no mistake lands green."
339
353
  features:
340
- - "CI gate parity PRs run the full canonical test entrypoint (lib unit, theme, integration, installer e2e), not a subset"
341
- - "Re-armed pixel-snapshot gate (refreshed baselines, no `continue-on-error`)"
342
- - "Re-armed docs link-check gate (clean baseline, no warn-only `|| true`)"
343
- - "Locale-independence regression guard for the Ruby/Bash tooling"
344
- - "Coverage baseline with follow-up tasks for the lowest-covered subsystems"
345
- - "Documented required status checks per branch (the 'controls' contract)"
354
+ - "Re-armed docs lint gate on a zero-violation baseline (T-014)"
355
+ - "Locale-independence regression guard for the Ruby/Bash tooling (T-015)"
356
+ - "Strict site_generation suite build failures fail the gate (T-016)"
357
+ - "Re-armed pixel-snapshot gate (refreshed baselines, no continue-on-error) (T-013)"
358
+ - "Coverage baseline with follow-up tasks for the lowest-covered subsystems (T-005)"
359
+ - "Navbar WCAG 2.1 AA fixes unlocking the axe-core full audit (T-007)"
346
360
 
347
361
  - version: "2.0"
348
362
  title: "CMS Integration"
@@ -381,7 +381,7 @@ document.addEventListener('DOMContentLoaded', function () {
381
381
  ['--bs-border-radius', '--bs-border-width', '--bs-body-font-size', '--bs-body-font-weight', '--bs-body-line-height'].forEach(function (v) {
382
382
  if (state.liveOverrides[v]) {
383
383
  var key = v.replace('--bs-', '').replace(/-/g, '_');
384
- lines.push('# ' + key + ': ' + state.liveOverrides[v]);
384
+ lines.push('# ' + key + ': "' + state.liveOverrides[v] + '"');
385
385
  }
386
386
  });
387
387
 
@@ -121,7 +121,9 @@ document.addEventListener('DOMContentLoaded', function () {
121
121
  lines.push('');
122
122
  lines.push('theme_color:');
123
123
  document.querySelectorAll('[data-color-key]').forEach(function (el) {
124
- lines.push(' ' + el.dataset.colorKey + ': ' + el.value);
124
+ // Quote values: unquoted #RRGGBB is parsed as a YAML comment,
125
+ // silently dropping the color (T-008).
126
+ lines.push(' ' + el.dataset.colorKey + ': "' + el.value + '"');
125
127
  });
126
128
  var output = document.getElementById('theme-yaml-output');
127
129
  if (output) output.textContent = lines.join('\n');
data/scripts/bin/validate CHANGED
@@ -402,6 +402,7 @@ classified_files = %w[
402
402
  _config_dev.yml
403
403
  _config_secrets_local.yml
404
404
  pages/_about/settings/_config.yml
405
+ .github/ISSUE_TEMPLATE/config.yml
405
406
  ]
406
407
  classified_files.concat(Dir.glob('_data/**/*config*.{yml,yaml}'))
407
408
 
@@ -127,6 +127,7 @@ main() {
127
127
  source "$TEST_DIR/test_changelog.sh"
128
128
  source "$TEST_DIR/test_gem.sh"
129
129
  source "$TEST_DIR/test_analyze_commits.sh"
130
+ source "$TEST_DIR/test_locale_independence.sh"
130
131
 
131
132
  # Summary
132
133
  echo -e "\n${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
@@ -0,0 +1,29 @@
1
+ #!/bin/bash
2
+
3
+ # Locale-independence regression guard (T-015)
4
+ #
5
+ # PR #132 fixed `invalid byte sequence in US-ASCII` crashes in the Ruby
6
+ # tooling that only reproduced when no UTF-8 locale was set (minimal
7
+ # containers, some CI runners). These tests run the validators under
8
+ # LC_ALL=C LANG=C so the bug class cannot silently return: the repo files
9
+ # they read (README.md, _data/*.yml, package.json) contain multibyte
10
+ # characters, so any locale-dependent File.read regresses to a crash here.
11
+
12
+ REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)"
13
+
14
+ echo "Testing locale independence (LC_ALL=C LANG=C)..."
15
+
16
+ assert_true "(cd '$REPO_ROOT' && LC_ALL=C LANG=C ruby scripts/generate-roadmap.rb --check >/dev/null 2>&1)" \
17
+ "generate-roadmap.rb --check survives a C locale"
18
+
19
+ assert_true "(cd '$REPO_ROOT' && LC_ALL=C LANG=C ruby scripts/generate-roadmap.rb --validate >/dev/null 2>&1)" \
20
+ "generate-roadmap.rb --validate survives a C locale"
21
+
22
+ assert_true "(cd '$REPO_ROOT' && LC_ALL=C LANG=C ruby scripts/sync-backlog.rb --check >/dev/null 2>&1)" \
23
+ "sync-backlog.rb --check survives a C locale"
24
+
25
+ # validate --quick covers the package.json read in scripts/bin/validate
26
+ assert_true "(cd '$REPO_ROOT' && LC_ALL=C LANG=C ./scripts/bin/validate --quick >/dev/null 2>&1)" \
27
+ "validate --quick survives a C locale"
28
+
29
+ echo -e "\n${GREEN}locale-independence tests complete${NC}"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-theme-zer0
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.14.0
4
+ version: 1.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Amr Abdel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-06-11 00:00:00.000000000 Z
11
+ date: 2026-06-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -483,6 +483,7 @@ files:
483
483
  - scripts/test/lib/test_changelog.sh
484
484
  - scripts/test/lib/test_gem.sh
485
485
  - scripts/test/lib/test_git.sh
486
+ - scripts/test/lib/test_locale_independence.sh
486
487
  - scripts/test/lib/test_validation.sh
487
488
  - scripts/test/lib/test_version.sh
488
489
  - scripts/test/theme/validate
@@ -510,7 +511,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
510
511
  requirements:
511
512
  - - ">="
512
513
  - !ruby/object:Gem::Version
513
- version: 2.7.0
514
+ version: '3.2'
514
515
  required_rubygems_version: !ruby/object:Gem::Requirement
515
516
  requirements:
516
517
  - - ">="