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 +4 -4
- data/CHANGELOG.md +31 -10
- data/README.md +6 -4
- data/_data/backlog.yml +134 -7
- data/_data/roadmap.yml +16 -0
- data/scripts/lib/changelog.sh +11 -5
- data/scripts/test/lib/test_changelog.sh +9 -0
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 300fd839d62b5d716dc62bde6853834fecca0b431871d818511f83b3b118586e
|
|
4
|
+
data.tar.gz: 7faf9a32a6709bb8bd4cc5c9681910b9595c81761c2582224f71f6623e5573d7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5c41e56c171902d054122a1288a10e2a45998cfabd06231d28e78e027ffaa9fc79b7511a3c34a50d7b81ab4f4911797fed2be78891bb45bd0e977aa28d298634
|
|
7
|
+
data.tar.gz: 143441cff23b9bec1bbf3222d4fcf21fb4949d4a9bf6394aff67c4cefb56e8da1bd71871c76ccdb900a78cc8f8623ce28c4bbcb7004357171e4f032bc02c8242
|
data/CHANGELOG.md
CHANGED
|
@@ -1,20 +1,42 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
|
|
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:
|
|
11
|
+
- Version bump: minor release
|
|
7
12
|
|
|
8
13
|
### Commits in this release
|
|
9
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
15
|
-
|
|
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
|
-
|
|
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
|
-
###
|
|
28
|
-
-
|
|
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.
|
|
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-
|
|
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.
|
|
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.
|
|
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:
|
|
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
|
|
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
|
|
157
|
-
|
|
158
|
-
|
|
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.
|
|
164
|
+
links: { issue: null, pr: null, roadmap: "1.13" }
|
|
164
165
|
created: 2026-05-31
|
|
165
|
-
updated: 2026-
|
|
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
|
data/scripts/lib/changelog.sh
CHANGED
|
@@ -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
|
|
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
|
-
|
|
356
|
+
printf '%s\n\n' "$entry"
|
|
350
357
|
tail -n +"$first_release" "$CHANGELOG_FILE"
|
|
351
358
|
else
|
|
352
359
|
cat "$CHANGELOG_FILE"
|
|
353
|
-
|
|
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.
|
|
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-
|
|
11
|
+
date: 2026-06-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: jekyll
|