jekyll-theme-zer0 1.12.1 → 1.13.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: 70cd99cdba3cc1dd7c1d29044ee5cdad162c1670e5516ff0bdd9dfbf3dbcd720
4
- data.tar.gz: fb3f97db3b77236ff36cca5ff7af267d54484da397f64cb3df03e4b28643b240
3
+ metadata.gz: 300fd839d62b5d716dc62bde6853834fecca0b431871d818511f83b3b118586e
4
+ data.tar.gz: 7faf9a32a6709bb8bd4cc5c9681910b9595c81761c2582224f71f6623e5573d7
5
5
  SHA512:
6
- metadata.gz: e38c17c29f540bfcfac2328462b6975f07e566ead4dfcf8920cf029ff9a81db95040995686dc61b412abeb24bdc15b1e427aab77e15ee077993a6acfbf7786c3
7
- data.tar.gz: 2e36c4f5b88e0db3c79277f959f8206e65fa94134f60bd8a6391dd839db8e0f79cbe6aadd4729320d790ac7985630f9f31cdbfc44d83079561a87c7f22ff0e31
6
+ metadata.gz: 5c41e56c171902d054122a1288a10e2a45998cfabd06231d28e78e027ffaa9fc79b7511a3c34a50d7b81ab4f4911797fed2be78891bb45bd0e977aa28d298634
7
+ data.tar.gz: 143441cff23b9bec1bbf3222d4fcf21fb4949d4a9bf6394aff67c4cefb56e8da1bd71871c76ccdb900a78cc8f8623ce28c4bbcb7004357171e4f032bc02c8242
data/CHANGELOG.md CHANGED
@@ -1,20 +1,42 @@
1
1
  # Changelog
2
2
 
3
- ## [1.12.1] - 2026-06-10
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [1.13.0] - 2026-06-11
4
9
 
5
10
  ### Changed
6
- - Version bump: patch release
11
+ - Version bump: minor release
7
12
 
8
13
  ### Commits in this release
9
- - 0c04f703 fix: repair failing test suites, validator crashes, and roadmap/changelog drift (#132)
14
+ - cee6f379 feat(ci): gate PRs on the full canonical test entrypoint (T-012) (#138)
10
15
 
16
+ ### Added
17
+ - **CI gate parity (T-012)**: the `ci.yml` test job now runs every non-Playwright theme suite (core, deployment, quality, installation, installer, site_generation, obsidian) plus the canonical `./scripts/bin/test` script suites (lib unit, theme validate, integration, installer e2e) on every code PR — previously only `core,quality,installation` gated, which is how three suites rotted unnoticed before PR #132; a "Gate Coverage — What Enforces What" table in `.github/workflows/README.md` now documents the controls contract
11
18
 
12
- All notable changes to this project will be documented in this file.
19
+ ### Fixed
20
+ - **Release changelog path**: `version-bump.yml` now inserts release entries via the shared `update_changelog_file` library instead of an inline `head`/`tail` prepend that duplicated (and regressed) the insertion logic — the 1.12.1 release had pushed the file preamble below its entry and stranded the pending `[Unreleased]` notes; both repaired in this file
13
21
 
14
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
15
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
22
+ ## [1.12.2] - 2026-06-10
23
+
24
+ ### Added
25
+ - **Zer0-Mistake Quality Framework (planning)**: new roadmap milestone v1.13 and backlog tasks T-012–T-015 to close the gap between the repo's quality gates and what CI enforces — CI gate parity with the canonical `./scripts/bin/test` entrypoint (whose integration suites previously rotted unnoticed), re-armed pixel-snapshot and docs link-check gates, and a locale-independence regression guard; coverage baseline task T-005 repointed at the new milestone
16
26
 
17
- ## [Unreleased]
27
+ ### Changed
28
+ - Version bump: patch release
29
+
30
+ ### Commits in this release
31
+ - 846bd9ff chore(backlog): plan the Zer0-Mistake Quality Framework (roadmap v1.13, T-012–T-015) (#133)
32
+ - 33a727c0 docs: expand CLAUDE.md into a comprehensive Claude Code guide (#131)
33
+
34
+ ## [1.12.1] - 2026-06-10
35
+
36
+ ### Changed
37
+ - Version bump: patch release
38
+ - **Roadmap**: advanced to track the shipped gem — v1.9 marked completed, v1.10 (Roadmap Validation) and v1.11 (Continuous-Evolution Loop) recorded, v1.12 (Headless Endpoints) is the active milestone (closes backlog T-001, T-002)
39
+ - **Changelog**: restored the Keep a Changelog preamble at the top of this file
18
40
 
19
41
  ### Fixed
20
42
  - **Tooling encoding**: `generate-roadmap.rb`, `sync-backlog.rb`, and `scripts/bin/validate` now read repo files as UTF-8 explicitly, fixing `invalid byte sequence in US-ASCII` crashes in environments without a UTF-8 locale (minimal containers, some CI runners) — `generate-roadmap.sh --check` and `validate --quick` both crashed in such environments
@@ -24,9 +46,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
24
46
  - `_layouts/search.html` given a front matter block so theme layout validation passes
25
47
  - **Changelog tooling**: `update_changelog_file` now folds any pending `## [Unreleased]` section into the new release entry and inserts before the first release heading (preserving the file preamble) — stale Unreleased blocks no longer accumulate mid-file; the eight historical stray blocks were folded into the releases that shipped them
26
48
 
27
- ### Changed
28
- - **Roadmap**: advanced to track the shipped gem — v1.9 marked completed, v1.10 (Roadmap Validation) and v1.11 (Continuous-Evolution Loop) recorded, v1.12 (Headless Endpoints) is the active milestone (closes backlog T-001, T-002)
29
- - **Changelog**: restored the Keep a Changelog preamble at the top of this file
49
+ ### Commits in this release
50
+ - 0c04f703 fix: repair failing test suites, validator crashes, and roadmap/changelog drift (#132)
30
51
 
31
52
  ## [1.12.0] - 2026-06-03
32
53
 
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.12.1
5
+ version: 1.13.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-10T22:03:08.000Z
23
+ lastmod: 2026-06-11T04:16:44.000Z
24
24
  draft: false
25
25
  permalink: /
26
26
  slug: zer0
@@ -833,6 +833,7 @@ gantt
833
833
  section Current
834
834
  v1.12 Headless Endpoints :active, 2026-06, 2026-06
835
835
  section Future
836
+ v1.13 Zer0-Mistake Quality Framework :2026-06, 2026-08
836
837
  v2.0 CMS Integration :2026-06, 2026-08
837
838
  v2.1 i18n Support :2026-08, 2026-10
838
839
  v2.2 Advanced Analytics :2026-10, 2026-12
@@ -864,6 +865,7 @@ gantt
864
865
  | **v1.10** | ✅ Completed | Jun 2026 | Roadmap integrity validation and catch-up milestones so the roadmap tracks the shipped gem. |
865
866
  | **v1.11** | ✅ Completed | Jun 2026 | Self-sustaining backlog loop so AI agents keep improving the repo between human sessions. |
866
867
  | **v1.12** | 🚧 In Progress | Current (1.12.x) | Machine-readable site endpoints for downstream sites and AI agents. |
868
+ | **v1.13** | 🗓 Planned | Q3 2026 | Close the gap between the repo's quality gates and what CI actually enforces — no mistake lands green. |
867
869
  | **v2.0** | 🗓 Planned | Q3 2026 | Headless CMS integration with a content API and admin dashboard. |
868
870
  | **v2.1** | 🗓 Planned | Q4 2026 | Multi-language content support with locale-aware routing. |
869
871
  | **v2.2** | 🗓 Planned | Q4 2026 | Visual theme customizer, A/B testing, and conversion funnels. |
@@ -907,7 +909,7 @@ git push origin feature/awesome-feature
907
909
 
908
910
  | Metric | Value |
909
911
  |--------|-------|
910
- | **Current Version** | 1.12.1 ([RubyGems](https://rubygems.org/gems/jekyll-theme-zer0), [CHANGELOG](/CHANGELOG)) |
912
+ | **Current Version** | 1.13.0 ([RubyGems](https://rubygems.org/gems/jekyll-theme-zer0), [CHANGELOG](/CHANGELOG)) |
911
913
  | **Documented Features** | 43 ([Feature Registry](https://github.com/bamr87/zer0-mistakes/blob/main/_data/features.yml)) |
912
914
  | **Setup Time** | 2-5 minutes ([install.sh benchmarks](https://github.com/bamr87/zer0-mistakes/blob/main/install.sh)) |
913
915
  | **Documentation Pages** | 70+ ([browse docs](https://zer0-mistakes.com/pages/)) |
@@ -962,6 +964,6 @@ And these AI partners that make zer0-mistakes truly AI-native:
962
964
 
963
965
  **Built with ❤️ — and a little help from our AI partners — for the Jekyll community**
964
966
 
965
- **v1.12.1** • [Changelog](CHANGELOG.md) • [License](LICENSE) • [Contributing](CONTRIBUTING.md) • [AI Agent Guide](AGENTS.md)
967
+ **v1.13.0** • [Changelog](CHANGELOG.md) • [License](LICENSE) • [Contributing](CONTRIBUTING.md) • [AI Agent Guide](AGENTS.md)
966
968
 
967
969
 
data/_data/backlog.yml CHANGED
@@ -56,7 +56,7 @@
56
56
  meta:
57
57
  title: "zer0-mistakes Backlog"
58
58
  updated: 2026-06-10
59
- next_id: 12
59
+ next_id: 17
60
60
 
61
61
  tasks:
62
62
  # --- Housekeeping (seeded so the loop has work on day one) ------------------
@@ -145,7 +145,7 @@ tasks:
145
145
  updated: 2026-05-31
146
146
 
147
147
  - id: T-005
148
- title: "Coverage baseline: identify the lowest-covered subsystems toward the v1.0 90% goal"
148
+ title: "Coverage baseline: identify the lowest-covered subsystems toward the 90% goal"
149
149
  status: open
150
150
  priority: P1
151
151
  area: tests
@@ -153,16 +153,17 @@ tasks:
153
153
  effort: L
154
154
  source: roadmap
155
155
  summary: >-
156
- The v1.0 milestone targets 90%+ automated test coverage. Produce a
157
- coverage baseline and file follow-up tasks for the lowest-covered areas
158
- (start with the modular installer and the Obsidian resolver paths).
156
+ The 3.0 LTS milestone targets 90%+ automated test coverage, and the v1.13
157
+ Zer0-Mistake Quality Framework starts with knowing where coverage stands.
158
+ Produce a coverage baseline and file follow-up tasks for the lowest-covered
159
+ areas (start with the modular installer and the Obsidian resolver paths).
159
160
  acceptance:
160
161
  - "A coverage baseline is recorded (test/coverage or a docs note)."
161
162
  - "The 2–3 lowest-covered subsystems are identified and filed as new backlog tasks."
162
163
  - "No reduction in existing passing tests (`./scripts/bin/test` stays green)."
163
- links: { issue: null, pr: null, roadmap: "1.0" }
164
+ links: { issue: null, pr: null, roadmap: "1.13" }
164
165
  created: 2026-05-31
165
- updated: 2026-05-31
166
+ updated: 2026-06-10
166
167
 
167
168
  # --- 2026-06-01 audit -------------------------------------------------------
168
169
 
@@ -276,3 +277,129 @@ tasks:
276
277
  links: { issue: null, pr: null, roadmap: "3.0" }
277
278
  created: 2026-06-01
278
279
  updated: 2026-06-01
280
+
281
+ # --- 2026-06-10 Zer0-Mistake Quality Framework (roadmap v1.13) --------------
282
+ #
283
+ # Origin: main carried 3 failing test suites and 2 crashing validators while
284
+ # every CI check stayed green (fixed in PR #132). Root cause: the PR gate runs
285
+ # only a subset of the canonical test entrypoint, and two checks are warn-only.
286
+ # These tasks close the gap between the quality gates and what CI enforces.
287
+
288
+ - id: T-012
289
+ title: "CI gate parity: run the full canonical test entrypoint on PRs"
290
+ status: done
291
+ priority: P1
292
+ area: infra
293
+ risk: standard
294
+ effort: M
295
+ source: roadmap
296
+ summary: >-
297
+ `ci.yml`'s test job runs `test/test_runner.sh --suites core,quality,installation`,
298
+ which skips the lib unit tests (`scripts/test/lib/`), the integration suites
299
+ (`scripts/test/integration/` — exactly the ones that rotted unnoticed before
300
+ PR #132), the obsidian suite, and the installer e2e suites that
301
+ `./scripts/bin/test` runs locally. PRs must gate on the same entrypoint
302
+ contributors are told to run.
303
+ Done 2026-06-10: test job expanded to all seven non-Playwright theme
304
+ suites plus a `./scripts/bin/test` step; gate-coverage table added to
305
+ the workflows README. Canary experiment: a deliberately failing
306
+ integration test was committed and reverted on the implementing PR;
307
+ GitHub did not schedule the CI pipeline on the canary push, so the
308
+ gate failure was verified locally (`./scripts/bin/test` exit 1) and
309
+ the new gate is exercised for real by the PR's final CI run.
310
+ acceptance:
311
+ - "The `ci.yml` test job executes `./scripts/bin/test` (or an explicit suite list that includes lib, integration, obsidian, and installer e2e) on every code PR."
312
+ - "A deliberately broken integration test fails CI in a draft PR experiment (then reverted)."
313
+ - "`.github/workflows/README.md` documents which gates run on PR vs push vs schedule."
314
+ - "Total PR wall-clock stays under 25 minutes (parallelize jobs if needed)."
315
+ links: { issue: null, pr: null, roadmap: "1.13" }
316
+ created: 2026-06-10
317
+ updated: 2026-06-10
318
+
319
+ - id: T-013
320
+ title: "Refresh Playwright snapshot baselines and re-arm the pixel gate"
321
+ status: open
322
+ priority: P2
323
+ area: tests
324
+ risk: standard
325
+ effort: M
326
+ source: roadmap
327
+ summary: >-
328
+ The snapshot tier in `ci.yml` is `continue-on-error: true` because the
329
+ committed baselines predate the PR #108 UI overhaul. Regenerate the Linux
330
+ baselines via `./test/update-snapshots.sh` and make the tier blocking again
331
+ so visual regressions cannot land silently.
332
+ acceptance:
333
+ - "Baselines under `test/visual/snapshots/` regenerated and committed."
334
+ - "`continue-on-error: true` removed from the snapshot step in `ci.yml`."
335
+ - "Snapshot tier passes in CI on an unchanged follow-up commit."
336
+ links: { issue: null, pr: null, roadmap: "1.13" }
337
+ created: 2026-06-10
338
+ updated: 2026-06-10
339
+
340
+ - id: T-014
341
+ title: "Re-arm the docs link-check gate (remove warn-only || true)"
342
+ status: open
343
+ priority: P2
344
+ area: lint
345
+ risk: standard
346
+ effort: M
347
+ source: roadmap
348
+ summary: >-
349
+ `docs-validate.yml` runs markdown-link-check with `|| true` ("warn-only
350
+ until baseline is clean"), so broken links accumulate. Fix the links it
351
+ currently reports, then drop the `|| true` so the gate blocks.
352
+ acceptance:
353
+ - "All links reported by the current `docs-validate.yml` run are fixed or allowlisted in `.github/config/.markdown-link-check.json`."
354
+ - "Both `|| true` suppressions removed from `docs-validate.yml`."
355
+ - "`docs-validate.yml` passes blocking on a follow-up PR."
356
+ links: { issue: null, pr: null, roadmap: "1.13" }
357
+ created: 2026-06-10
358
+ updated: 2026-06-10
359
+
360
+ - id: T-015
361
+ title: "Locale-independence regression guard for Ruby/Bash tooling"
362
+ status: open
363
+ priority: P2
364
+ area: infra
365
+ risk: standard
366
+ effort: S
367
+ source: roadmap
368
+ summary: >-
369
+ PR #132 fixed `invalid byte sequence in US-ASCII` crashes in
370
+ `generate-roadmap.rb`, `sync-backlog.rb`, and `scripts/bin/validate` that
371
+ only reproduced without a UTF-8 locale. Add a guard so the bug class
372
+ cannot return: run the validators under `LC_ALL=C` in a lib test or a
373
+ dedicated CI step.
374
+ acceptance:
375
+ - "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`."
376
+ - "The guard fails when the explicit-UTF-8 reads are reverted (verified once locally)."
377
+ - "`./scripts/bin/test` stays green."
378
+ links: { issue: null, pr: null, roadmap: "1.13" }
379
+ created: 2026-06-10
380
+ updated: 2026-06-10
381
+
382
+ - id: T-016
383
+ title: "site_generation suite: fail on Jekyll build errors instead of warning"
384
+ status: open
385
+ priority: P2
386
+ area: tests
387
+ risk: standard
388
+ effort: S
389
+ source: audit
390
+ summary: >-
391
+ `test/test_site_generation.sh` downgrades `bundle exec jekyll build`
392
+ failures to a warning ("Don't fail the test for build issues (may be
393
+ environment)"), so the suite reports success even when every mode's
394
+ build fails — a masked gate discovered while implementing T-012. With
395
+ the suite now gating PRs in CI (working bundler guaranteed), build
396
+ failures should fail the suite; keep the skip only for genuinely
397
+ missing toolchain (no bundler).
398
+ acceptance:
399
+ - "A non-zero `jekyll build` exit fails the suite when bundler is available."
400
+ - "The bundler-missing path still skips with a warning (local minimal environments)."
401
+ - "Suite passes in CI and via `./test/test_runner.sh --suites site_generation` locally."
402
+ links: { issue: null, pr: null, roadmap: "1.13" }
403
+ created: 2026-06-10
404
+ updated: 2026-06-10
405
+
data/_data/roadmap.yml CHANGED
@@ -330,6 +330,22 @@ milestones:
330
330
 
331
331
  # --- Future ----------------------------------------------------------------
332
332
 
333
+ - version: "1.13"
334
+ title: "Zer0-Mistake Quality Framework"
335
+ status: planned
336
+ section: Future
337
+ start: 2026-06
338
+ end: 2026-08
339
+ target: "Q3 2026"
340
+ summary: "Close the gap between the repo's quality gates and what CI actually enforces — no mistake lands green."
341
+ features:
342
+ - "CI gate parity — PRs run the full canonical test entrypoint (lib unit, theme, integration, installer e2e), not a subset"
343
+ - "Re-armed pixel-snapshot gate (refreshed baselines, no `continue-on-error`)"
344
+ - "Re-armed docs link-check gate (clean baseline, no warn-only `|| true`)"
345
+ - "Locale-independence regression guard for the Ruby/Bash tooling"
346
+ - "Coverage baseline with follow-up tasks for the lowest-covered subsystems"
347
+ - "Documented required status checks per branch (the 'controls' contract)"
348
+
333
349
  - version: "2.0"
334
350
  title: "CMS Integration"
335
351
  status: planned
@@ -331,27 +331,33 @@ update_changelog_file() {
331
331
  } > "${CHANGELOG_FILE}.tmp"
332
332
  mv "${CHANGELOG_FILE}.tmp" "$CHANGELOG_FILE"
333
333
 
334
- # Append the pending notes to the new entry (if any are non-blank)
334
+ # Append the pending notes to the new entry (if any are non-blank),
335
+ # separated by a blank line so section headings don't collide.
335
336
  if [[ -n "${unreleased_body//[[:space:]]/}" ]]; then
336
337
  debug "Folding pending [Unreleased] notes into the new entry"
337
- entry+=$'\n'"$(echo "$unreleased_body" | sed -e '/./,$!d')"$'\n'
338
+ entry="${entry%$'\n'}"$'\n\n'"$(echo "$unreleased_body" | sed -e '/./,$!d')"$'\n'
338
339
  fi
339
340
  fi
340
341
 
341
342
  # Insert the new entry before the first release heading so the file
342
343
  # header/preamble (title, Keep a Changelog blurb) stays at the top.
344
+ # Normalize the entry's trailing newlines first: callers that build the
345
+ # entry via command substitution (e.g. version-bump.yml's
346
+ # `"$(cat "$TEMP_FILE")"`) lose them, so guarantee exactly one blank
347
+ # line between the entry and the next release block here.
348
+ while [[ "$entry" == *$'\n' ]]; do entry="${entry%$'\n'}"; done
349
+
343
350
  local first_release
344
351
  first_release=$(grep -n '^## ' "$CHANGELOG_FILE" | head -1 | cut -d: -f1)
345
352
 
346
353
  {
347
354
  if [[ -n "$first_release" ]]; then
348
355
  head -n "$((first_release - 1))" "$CHANGELOG_FILE"
349
- echo "$entry"
356
+ printf '%s\n\n' "$entry"
350
357
  tail -n +"$first_release" "$CHANGELOG_FILE"
351
358
  else
352
359
  cat "$CHANGELOG_FILE"
353
- echo ""
354
- echo "$entry"
360
+ printf '\n%s\n' "$entry"
355
361
  fi
356
362
  } > "${CHANGELOG_FILE}.tmp"
357
363
 
@@ -152,6 +152,15 @@ _v100_line=$(grep -n '^## \[1.0.0\]' CHANGELOG.md | cut -d: -f1)
152
152
  assert_true "[[ $_v101_line -lt $_v100_line ]]" "New entry inserted before previous release"
153
153
  assert_true "grep -q 'All notable changes' CHANGELOG.md" "Preamble preserved without Unreleased"
154
154
 
155
+ # Case 3: entries passed via command substitution lose trailing newlines
156
+ # (e.g. version-bump.yml's "$(cat "$TEMP_FILE")"); the insert must still
157
+ # leave exactly one blank line before the next release block.
158
+ printf '## [1.0.2] - 2026-06-11\n\n### Fixed\n- Another bug\n\n' > entry.txt
159
+ update_changelog_file "$(cat entry.txt)" >/dev/null 2>&1
160
+ _v101_line=$(grep -n '^## \[1.0.1\]' CHANGELOG.md | cut -d: -f1)
161
+ assert_true "[[ -z \"\$(sed -n $((_v101_line - 1))p CHANGELOG.md)\" ]]" "Blank line separates entry from next release block"
162
+ assert_true "[[ -n \"\$(sed -n $((_v101_line - 2))p CHANGELOG.md)\" ]]" "Exactly one blank line (no double spacing)"
163
+
155
164
  popd >/dev/null
156
165
  rm -rf "$_changelog_tmp"
157
166
 
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.12.1
4
+ version: 1.13.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-10 00:00:00.000000000 Z
11
+ date: 2026-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll