jekyll-theme-zer0 1.9.9 → 1.10.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 +18 -0
- data/LICENSE +1 -1
- data/README.md +67 -28
- data/_data/roadmap.yml +172 -28
- data/scripts/generate-roadmap.rb +166 -5
- data/scripts/generate-roadmap.sh +1 -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: 7e3dadf187dfaae9c1186aa1e0864f19ca74e9564cee0b0fa3136657fda6cf03
|
|
4
|
+
data.tar.gz: '024782a85ed83017188dac310e4aa75ed22f41d604576758f4f7f49564cba984'
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 692271e54f6065325496b8bcfc9956194e085bd07d7a53f3c9adc108b146e846f712d126e5794b52cdbd1cad75e4dbfa91260767820fee2903894472b76af7a7
|
|
7
|
+
data.tar.gz: f0dd37b5871364845af1f663f41f59910f5e9e4ed2d5a6c3033fe56433f9f5006d8e99bcd3054c1f4352b542d9857232082c1a219d15a7cb5f1a1defedc72ecc
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.10.0] - 2026-06-01
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
- Version bump: minor release
|
|
7
|
+
|
|
8
|
+
### Commits in this release
|
|
9
|
+
- 309202f2 feat(roadmap): add --validate mode, catch-up milestones v1.0–1.9, README accuracy fixes (#113)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## [1.9.10] - 2026-05-31
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
- Version bump: patch release
|
|
16
|
+
|
|
17
|
+
### Commits in this release
|
|
18
|
+
- ef6a3f39 fix: update copyright year range in LICENSE file
|
|
19
|
+
|
|
20
|
+
|
|
3
21
|
## [1.9.9] - 2026-05-31
|
|
4
22
|
|
|
5
23
|
### Changed
|
data/LICENSE
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.
|
|
5
|
+
version: 1.10.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-
|
|
23
|
+
lastmod: 2026-06-01T03:29:07.000Z
|
|
24
24
|
draft: false
|
|
25
25
|
permalink: /
|
|
26
26
|
slug: zer0
|
|
@@ -217,9 +217,9 @@ Jump to a topic:
|
|
|
217
217
|
- [AI-native workflow](#-ai-native-workflow) — multi-agent guidance, AI install wizard, AI preview images, AIEO discovery
|
|
218
218
|
- [Architecture & technology stack](#-architecture)
|
|
219
219
|
- [Key features in depth](#-key-features) — installer CLI, site scraper, Docker, analytics, search, navigation, dark mode
|
|
220
|
-
- [Installation methods](#-installation-methods) — one-liner, modular CLI, remote theme, fork, Ruby gem
|
|
220
|
+
- [Installation methods](#-installation-methods--reference-card) — one-liner, modular CLI, remote theme, fork, Ruby gem
|
|
221
221
|
- [Project structure](#-project-structure)
|
|
222
|
-
- [Migration utility](
|
|
222
|
+
- [Migration utility](#-migration-utility--add-admin-pages-to-an-existing-site)
|
|
223
223
|
- [Development workflow & testing](#-development-workflow)
|
|
224
224
|
- [Deployment options](#-deployment)
|
|
225
225
|
- [Documentation map](#-documentation)
|
|
@@ -289,7 +289,7 @@ Clone the repo (or fork) and your editor's AI agent will pick up project context
|
|
|
289
289
|
|
|
290
290
|
## 🏗 Architecture
|
|
291
291
|
|
|
292
|
-
> **Who this is for:** developers, theme customizers, and anyone integrating zer0-mistakes into a larger system. If you only want to publish a blog, you can skip ahead to [Key Features](#-key-features) or [Installation Methods](#-installation-methods).
|
|
292
|
+
> **Who this is for:** developers, theme customizers, and anyone integrating zer0-mistakes into a larger system. If you only want to publish a blog, you can skip ahead to [Key Features](#-key-features) or [Installation Methods](#-installation-methods--reference-card).
|
|
293
293
|
|
|
294
294
|
zer0-mistakes is a layered system: your content (Markdown + YAML) flows through the theme's templates, gets compiled by Jekyll, and is published as a fully static site that any host can serve. Every layer is replaceable without affecting the others.
|
|
295
295
|
|
|
@@ -407,7 +407,7 @@ docker-compose down -v # clean up volumes and gem cache
|
|
|
407
407
|
docker-compose down && docker-compose up --build # full rebuild after Gemfile changes
|
|
408
408
|
```
|
|
409
409
|
|
|
410
|
-
A separate [`docker-compose.test.yml`](docker-compose.test.yml) provides an isolated environment for CI-style test runs
|
|
410
|
+
A separate [`docker-compose.test.yml`](docker-compose.test.yml) provides an isolated environment for CI-style test runs.
|
|
411
411
|
|
|
412
412
|
### 🔒 Privacy-First Analytics
|
|
413
413
|
|
|
@@ -583,7 +583,7 @@ The repository follows Jekyll convention with a few additions for tooling and AI
|
|
|
583
583
|
|
|
584
584
|
| Directory | Purpose | Key Files |
|
|
585
585
|
|-----------|---------|-----------|
|
|
586
|
-
| `_layouts/` | Page templates | `default.html`, `
|
|
586
|
+
| `_layouts/` | Page templates | `default.html`, `article.html`, `landing.html`, `notebook.html` |
|
|
587
587
|
| `_includes/` | Reusable components | `core/`, `components/` (see `_includes/components/README.md`), `analytics/`, `navigation/` |
|
|
588
588
|
| `_sass/` | Stylesheets | `tokens/` (design tokens), `components/`, `layouts/`, `utilities/`, `custom.scss` (legacy barrel), `core/`, `theme/` |
|
|
589
589
|
| `_data/` | Data-driven content | `landing.yml` (homepage copy), `navigation/*.yml`, `ui-text.yml` (i18n), `features.yml`, `authors.yml`, `theme_backgrounds.yml` |
|
|
@@ -647,13 +647,13 @@ git commit -m "feat: add new component"
|
|
|
647
647
|
|
|
648
648
|
```bash
|
|
649
649
|
# Quick validation
|
|
650
|
-
./test/
|
|
650
|
+
./test/test_installation.sh
|
|
651
651
|
|
|
652
652
|
# Full test suite
|
|
653
653
|
./test/test_runner.sh --verbose
|
|
654
654
|
|
|
655
655
|
# Docker-specific tests
|
|
656
|
-
./test/
|
|
656
|
+
./test/test_deployment.sh
|
|
657
657
|
|
|
658
658
|
# Frontend smoke tests (Playwright; starts Jekyll on :4011 unless BASE_URL is set)
|
|
659
659
|
npm run test:smoke
|
|
@@ -680,7 +680,7 @@ Three supported targets, in order of recommendation:
|
|
|
680
680
|
| Target | Cost | Setup | Best for |
|
|
681
681
|
|---|---|---|---|
|
|
682
682
|
| **GitHub Pages user site** | Free | Push to `main` of `<username>.github.io` (see [Path A](#path-a--easiest-fork-on-github-no-terminal-required)) | Most users; personal sites, docs, blogs, portfolios |
|
|
683
|
-
| **Docker production image** | Self-hosted | `
|
|
683
|
+
| **Docker production image** | Self-hosted | `JEKYLL_ENV=production docker-compose up -d` | Self-hosted servers, intranet, air-gapped environments |
|
|
684
684
|
| **Custom static host** | Varies | `docker-compose run --rm jekyll jekyll build` → upload `_site/` | Netlify, Vercel, Cloudflare Pages, S3 + CloudFront, Azure Static Web Apps |
|
|
685
685
|
|
|
686
686
|
---
|
|
@@ -706,6 +706,25 @@ zer0-mistakes documentation is split across three audiences. Pick the layer that
|
|
|
706
706
|
| [📝 PRD](docs/PRD.md) | Product requirements & roadmap |
|
|
707
707
|
| [🔒 Privacy Policy](https://zer0-mistakes.com/privacy-policy/) | GDPR/CCPA compliant privacy docs |
|
|
708
708
|
|
|
709
|
+
### Contributor Technical Reference
|
|
710
|
+
|
|
711
|
+
These files live in the repo under `docs/` and are intended for theme contributors and forks:
|
|
712
|
+
|
|
713
|
+
| File | Topic |
|
|
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 |
|
|
727
|
+
|
|
709
728
|
---
|
|
710
729
|
|
|
711
730
|
## 🔧 Release System
|
|
@@ -784,7 +803,7 @@ When you fork the theme as a starter, the workflows come with you. To make them
|
|
|
784
803
|
|
|
785
804
|
## 🗺 Roadmap
|
|
786
805
|
|
|
787
|
-
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](/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/PRD.md) for product context.
|
|
788
807
|
|
|
789
808
|
<!-- ROADMAP_MERMAID:START -->
|
|
790
809
|
|
|
@@ -798,13 +817,23 @@ gantt
|
|
|
798
817
|
v0.19 Feature Discovery :done, 2026-01, 2026-01
|
|
799
818
|
v0.20 Navigation Redesign :done, 2026-02, 2026-02
|
|
800
819
|
v0.21 Env Switcher :done, 2026-02, 2026-03
|
|
820
|
+
v0.22 AIEO & Customization :done, 2026-04, 2026-04
|
|
821
|
+
v1.0 Modular Installer & First Stable :done, 2026-04, 2026-04
|
|
822
|
+
v1.1 Copilot Agent Prompts :done, 2026-04, 2026-04
|
|
823
|
+
v1.2 Bare-Minimum Starter :done, 2026-04, 2026-04
|
|
824
|
+
v1.3 Obsidian Vault Integration :done, 2026-04, 2026-04
|
|
825
|
+
v1.4 Obsidian Graph View :done, 2026-04, 2026-04
|
|
826
|
+
v1.5 Example Posts & AI Previews :done, 2026-04, 2026-04
|
|
827
|
+
v1.6 About Page & Search Cleanup :done, 2026-04, 2026-04
|
|
828
|
+
v1.7 Build Performance & MathJax 3 :done, 2026-05, 2026-05
|
|
829
|
+
v1.8 Design Tokens & Navigation Chrome :done, 2026-05, 2026-05
|
|
801
830
|
section Current
|
|
802
|
-
|
|
831
|
+
v1.9 Installer v2 & Site Scraper :active, 2026-05, 2026-05
|
|
803
832
|
section Future
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
833
|
+
v2.0 CMS Integration :2026-06, 2026-08
|
|
834
|
+
v2.1 i18n Support :2026-08, 2026-10
|
|
835
|
+
v2.2 Advanced Analytics :2026-10, 2026-12
|
|
836
|
+
v3.0 Stable LTS :milestone, 2027-02, 1d
|
|
808
837
|
```
|
|
809
838
|
|
|
810
839
|
<!-- ROADMAP_MERMAID:END -->
|
|
@@ -818,11 +847,21 @@ gantt
|
|
|
818
847
|
| **v0.19** | ✅ Completed | Jan 2026 | 43 documented features with a comprehensive feature registry. |
|
|
819
848
|
| **v0.20** | ✅ Completed | Feb 2026 | Local Docker publishing pipeline and CI variable abstraction. |
|
|
820
849
|
| **v0.21** | ✅ Completed | Feb 2026 | Environment switcher, settings modal redesign, and RubyGems API-key auth. |
|
|
821
|
-
| **v0.22** |
|
|
822
|
-
| **
|
|
823
|
-
| **
|
|
824
|
-
| **
|
|
825
|
-
| **v1.
|
|
850
|
+
| **v0.22** | ✅ Completed | Apr 2026 | AI Engine Optimization (AIEO), structured data, and visual customization tools. |
|
|
851
|
+
| **v1.0** | ✅ Completed | Apr 2026 | First stable major release — the monolithic installer rewritten as a modular, spec-driven CLI. |
|
|
852
|
+
| **v1.1** | ✅ Completed | Apr 2026 | Data-driven Copilot Agent prompt registry focused on frontend and CMS workflows. |
|
|
853
|
+
| **v1.2** | ✅ Completed | Apr 2026 | Three-file remote-theme starter with an in-browser configuration wizard. |
|
|
854
|
+
| **v1.3** | ✅ Completed | Apr 2026 | Edit content as an Obsidian vault with identical rendering on GitHub Pages. |
|
|
855
|
+
| **v1.4** | ✅ Completed | Apr 2026 | Force-directed knowledge graph mirroring Obsidian's local graph view. |
|
|
856
|
+
| **v1.5** | ✅ Completed | Apr 2026 | Richer sample content and regenerated AI preview images. |
|
|
857
|
+
| **v1.6** | ✅ Completed | Apr 2026 | Expanded About page and removal of the Algolia search dependency. |
|
|
858
|
+
| **v1.7** | ✅ Completed | May 2026 | Significant Jekyll build speedups and a MathJax 3 inline-math fix. |
|
|
859
|
+
| **v1.8** | ✅ Completed | May 2026 | Sass design-token system, refreshed navigation chrome, and a docs overhaul. |
|
|
860
|
+
| **v1.9** | 🚧 In Progress | Current (1.9.x) | Modular installer v2 with deploy plugins, AI wizard pipeline, and a site scraper. |
|
|
861
|
+
| **v2.0** | 🗓 Planned | Q3 2026 | Headless CMS integration with a content API and admin dashboard. |
|
|
862
|
+
| **v2.1** | 🗓 Planned | Q4 2026 | Multi-language content support with locale-aware routing. |
|
|
863
|
+
| **v2.2** | 🗓 Planned | Q4 2026 | Visual theme customizer, A/B testing, and conversion funnels. |
|
|
864
|
+
| **v3.0** | 🎯 Milestone | Q1 2027 | Stable public API, 90%+ test coverage, and long-term support commitment. |
|
|
826
865
|
|
|
827
866
|
<!-- ROADMAP_TABLE:END -->
|
|
828
867
|
|
|
@@ -862,10 +901,10 @@ git push origin feature/awesome-feature
|
|
|
862
901
|
|
|
863
902
|
| Metric | Value |
|
|
864
903
|
|--------|-------|
|
|
865
|
-
| **Current Version** | 1.
|
|
904
|
+
| **Current Version** | 1.10.0 ([RubyGems](https://rubygems.org/gems/jekyll-theme-zer0), [CHANGELOG](/CHANGELOG)) |
|
|
866
905
|
| **Documented Features** | 43 ([Feature Registry](https://github.com/bamr87/zer0-mistakes/blob/main/_data/features.yml)) |
|
|
867
906
|
| **Setup Time** | 2-5 minutes ([install.sh benchmarks](https://github.com/bamr87/zer0-mistakes/blob/main/install.sh)) |
|
|
868
|
-
| **Documentation Pages** | 70+ ([browse docs](/pages/)) |
|
|
907
|
+
| **Documentation Pages** | 70+ ([browse docs](https://zer0-mistakes.com/pages/)) |
|
|
869
908
|
| **RubyGems Downloads** | 3,000+ ([rubygems.org](https://rubygems.org/gems/jekyll-theme-zer0)) |
|
|
870
909
|
| **Lighthouse Score** | 95+ ([measured via Chrome DevTools](https://developer.chrome.com/docs/lighthouse/)) |
|
|
871
910
|
|
|
@@ -883,10 +922,10 @@ Key patterns applied (see [glossary entry](https://zer0-mistakes.com/glossary/#a
|
|
|
883
922
|
|---|---|
|
|
884
923
|
| **Structured Data** | JSON-LD `SoftwareApplication`, `WebPage`, `Person`, and `FAQPage` schemas in every page head |
|
|
885
924
|
| **Entity Density** | Author profiles, technology names, and version numbers linked to canonical sources |
|
|
886
|
-
| **E-E-A-T Signals** | Visible [author block](/glossary/#e-e-a-t) on the landing page with social proof links |
|
|
887
|
-
| **FAQ Injection** | Dedicated [FAQ page](/faq/) with 12 question-answer pairs and FAQPage schema |
|
|
888
|
-
| **Definitional Precision** | Machine-readable [Glossary](/glossary/) with 20+ key term definitions |
|
|
889
|
-
| **Temporal Anchoring** | Dated [Roadmap](/roadmap/) with past, present, and future milestones |
|
|
925
|
+
| **E-E-A-T Signals** | Visible [author block](https://zer0-mistakes.com/glossary/#e-e-a-t) on the landing page with social proof links |
|
|
926
|
+
| **FAQ Injection** | Dedicated [FAQ page](https://zer0-mistakes.com/faq/) with 12 question-answer pairs and FAQPage schema |
|
|
927
|
+
| **Definitional Precision** | Machine-readable [Glossary](https://zer0-mistakes.com/glossary/) with 20+ key term definitions |
|
|
928
|
+
| **Temporal Anchoring** | Dated [Roadmap](https://zer0-mistakes.com/roadmap/) with past, present, and future milestones |
|
|
890
929
|
| **Substantiated Claims** | Project stats table links to RubyGems, CHANGELOG, and Feature Registry as evidence |
|
|
891
930
|
| **Procedural Clarity** | Step-by-step installation with Mermaid sequence diagrams and comparison tables |
|
|
892
931
|
|
|
@@ -917,6 +956,6 @@ And these AI partners that make zer0-mistakes truly AI-native:
|
|
|
917
956
|
|
|
918
957
|
**Built with ❤️ — and a little help from our AI partners — for the Jekyll community**
|
|
919
958
|
|
|
920
|
-
**v1.
|
|
959
|
+
**v1.10.0** • [Changelog](CHANGELOG.md) • [License](LICENSE) • [Contributing](CONTRIBUTING.md) • [AI Agent Guide](AGENTS.md)
|
|
921
960
|
|
|
922
961
|
|
data/_data/roadmap.yml
CHANGED
|
@@ -16,10 +16,23 @@
|
|
|
16
16
|
# To update the roadmap:
|
|
17
17
|
# 1. Edit this file.
|
|
18
18
|
# 2. Run `./scripts/generate-roadmap.sh` to refresh the README.
|
|
19
|
-
# 3.
|
|
19
|
+
# 3. Run `./scripts/generate-roadmap.sh --validate` to confirm the roadmap
|
|
20
|
+
# is internally consistent and still tracks the shipped gem version.
|
|
21
|
+
# 4. Commit both this file and the resulting README.md changes.
|
|
20
22
|
#
|
|
21
23
|
# A GitHub Actions workflow (`.github/workflows/roadmap-sync.yml`) also runs
|
|
22
|
-
# the generator automatically
|
|
24
|
+
# the generator and the validator automatically: it regenerates the README on
|
|
25
|
+
# push, fails PRs whose README is stale, and flags whenever the roadmap drifts
|
|
26
|
+
# behind the version in `lib/jekyll-theme-zer0/version.rb`.
|
|
27
|
+
#
|
|
28
|
+
# Tracking rules enforced by `--validate`:
|
|
29
|
+
# - `status` must be one of: completed | active | planned | milestone
|
|
30
|
+
# - `status` must match its `section` (completed=Completed, active=Current,
|
|
31
|
+
# planned/milestone=Future)
|
|
32
|
+
# - exactly one `active` milestone; its version must equal the gem's
|
|
33
|
+
# major.minor series
|
|
34
|
+
# - no `planned`/`milestone` version at or below the shipped gem version
|
|
35
|
+
# - `start`/`end` are valid YYYY-MM with end >= start; `meta.updated` is fresh
|
|
23
36
|
#
|
|
24
37
|
# =============================================================================
|
|
25
38
|
# Schema
|
|
@@ -47,7 +60,7 @@
|
|
|
47
60
|
meta:
|
|
48
61
|
title: "zer0-mistakes Roadmap"
|
|
49
62
|
tagline: "Past releases, current focus, and future plans for the zer0-mistakes Jekyll theme."
|
|
50
|
-
updated: 2026-
|
|
63
|
+
updated: 2026-05-30
|
|
51
64
|
|
|
52
65
|
milestones:
|
|
53
66
|
# --- Completed -------------------------------------------------------------
|
|
@@ -119,40 +132,171 @@ milestones:
|
|
|
119
132
|
- "RubyGems API-key authentication"
|
|
120
133
|
- "Dependency updates"
|
|
121
134
|
|
|
122
|
-
# ---
|
|
135
|
+
# --- Completed (continued) -------------------------------------------------
|
|
123
136
|
|
|
124
137
|
- version: "0.22"
|
|
125
138
|
title: "AIEO & Customization"
|
|
126
|
-
status:
|
|
127
|
-
section:
|
|
128
|
-
start: 2026-
|
|
139
|
+
status: completed
|
|
140
|
+
section: Completed
|
|
141
|
+
start: 2026-04
|
|
129
142
|
end: 2026-04
|
|
130
|
-
|
|
143
|
+
released: 2026-04-21
|
|
131
144
|
summary: "AI Engine Optimization (AIEO), structured data, and visual customization tools."
|
|
132
145
|
features:
|
|
133
146
|
- "JSON-LD `SoftwareApplication`, `WebPage`, `Person`, and `FAQPage` schemas"
|
|
134
147
|
- "Author E-E-A-T visibility block on the landing page"
|
|
135
|
-
- "FAQ page with FAQPage schema"
|
|
136
|
-
- "Glossary with key term definitions"
|
|
137
|
-
- "Roadmap page with temporal anchoring"
|
|
138
|
-
- "Citation hooks on project stats"
|
|
148
|
+
- "FAQ page with FAQPage schema and glossary with key term definitions"
|
|
139
149
|
- "Skin editor with live color pickers and palette generator"
|
|
140
150
|
- "Admin layout and configuration dashboards"
|
|
141
151
|
- "Playwright visual regression tests"
|
|
142
152
|
- "Vendored assets (Bootstrap, Icons, Mermaid — no runtime CDN)"
|
|
143
153
|
- "Copilot Agent prompt button with data-driven prompt registry"
|
|
144
|
-
- "Universal installer (remote / github / codespaces modes)"
|
|
145
154
|
- "Dynamic collection-based navigation fallback for zero-config sites"
|
|
146
155
|
|
|
156
|
+
- version: "1.0"
|
|
157
|
+
title: "Modular Installer & First Stable"
|
|
158
|
+
status: completed
|
|
159
|
+
section: Completed
|
|
160
|
+
start: 2026-04
|
|
161
|
+
end: 2026-04
|
|
162
|
+
released: 2026-04-20
|
|
163
|
+
summary: "First stable major release — the monolithic installer rewritten as a modular, spec-driven CLI."
|
|
164
|
+
features:
|
|
165
|
+
- "Modular installer CLI (`scripts/bin/install`) with library modules"
|
|
166
|
+
- "Declarative YAML profiles (full / minimal / fork / remote / github)"
|
|
167
|
+
- "Pluggable deploy targets (GitHub Pages, Azure SWA, Docker)"
|
|
168
|
+
- "`wizard --ai`, `doctor`, `diagnose`, and `upgrade` subcommands"
|
|
169
|
+
- "Hardened version analyzer and release automation"
|
|
170
|
+
|
|
171
|
+
- version: "1.1"
|
|
172
|
+
title: "Copilot Agent Prompts"
|
|
173
|
+
status: completed
|
|
174
|
+
section: Completed
|
|
175
|
+
start: 2026-04
|
|
176
|
+
end: 2026-04
|
|
177
|
+
released: 2026-04-21
|
|
178
|
+
summary: "Data-driven Copilot Agent prompt registry focused on frontend and CMS workflows."
|
|
179
|
+
features:
|
|
180
|
+
- "Prompt registry powering the Copilot Agent button"
|
|
181
|
+
- "Frontend- and CMS-oriented prompt presets"
|
|
182
|
+
|
|
183
|
+
- version: "1.2"
|
|
184
|
+
title: "Bare-Minimum Starter"
|
|
185
|
+
status: completed
|
|
186
|
+
section: Completed
|
|
187
|
+
start: 2026-04
|
|
188
|
+
end: 2026-04
|
|
189
|
+
released: 2026-04-22
|
|
190
|
+
summary: "Three-file remote-theme starter with an in-browser configuration wizard."
|
|
191
|
+
features:
|
|
192
|
+
- "`welcome` layout that detects unconfigured sites"
|
|
193
|
+
- "Embedded setup wizard that generates a personalised `_config.yml`"
|
|
194
|
+
- "Smarter unconfigured-site detection heuristics"
|
|
195
|
+
|
|
196
|
+
- version: "1.3"
|
|
197
|
+
title: "Obsidian Vault Integration"
|
|
198
|
+
status: completed
|
|
199
|
+
section: Completed
|
|
200
|
+
start: 2026-04
|
|
201
|
+
end: 2026-04
|
|
202
|
+
released: 2026-04-24
|
|
203
|
+
summary: "Edit content as an Obsidian vault with identical rendering on GitHub Pages."
|
|
204
|
+
features:
|
|
205
|
+
- "Client-side wiki-link resolver (aliases, embeds, callouts, inline tags)"
|
|
206
|
+
- "Server-side backlinks panel on note layouts"
|
|
207
|
+
- "Optional Ruby converter for vanilla Jekyll forks"
|
|
208
|
+
|
|
209
|
+
- version: "1.4"
|
|
210
|
+
title: "Obsidian Graph View"
|
|
211
|
+
status: completed
|
|
212
|
+
section: Completed
|
|
213
|
+
start: 2026-04
|
|
214
|
+
end: 2026-04
|
|
215
|
+
released: 2026-04-25
|
|
216
|
+
summary: "Force-directed knowledge graph mirroring Obsidian's local graph view."
|
|
217
|
+
features:
|
|
218
|
+
- "Cytoscape.js graph at `/docs/obsidian/graph/`"
|
|
219
|
+
- "Standalone collapsible local graph panel"
|
|
220
|
+
|
|
221
|
+
- version: "1.5"
|
|
222
|
+
title: "Example Posts & AI Previews"
|
|
223
|
+
status: completed
|
|
224
|
+
section: Completed
|
|
225
|
+
start: 2026-04
|
|
226
|
+
end: 2026-04
|
|
227
|
+
released: 2026-04-29
|
|
228
|
+
summary: "Richer sample content and regenerated AI preview images."
|
|
229
|
+
features:
|
|
230
|
+
- "12 example posts across Business, Development, Science, Technology, Tutorial, and World"
|
|
231
|
+
- "All preview images regenerated with the GPT image model"
|
|
232
|
+
|
|
233
|
+
- version: "1.6"
|
|
234
|
+
title: "About Page & Search Cleanup"
|
|
235
|
+
status: completed
|
|
236
|
+
section: Completed
|
|
237
|
+
start: 2026-04
|
|
238
|
+
end: 2026-04
|
|
239
|
+
released: 2026-04-29
|
|
240
|
+
summary: "Expanded About page and removal of the Algolia search dependency."
|
|
241
|
+
features:
|
|
242
|
+
- "About page with prerequisites, quick start, FAQ, and architecture diagram"
|
|
243
|
+
- "Algolia removed in favor of the built-in client-side search"
|
|
244
|
+
- "Jekyll build performance caching"
|
|
245
|
+
|
|
246
|
+
- version: "1.7"
|
|
247
|
+
title: "Build Performance & MathJax 3"
|
|
248
|
+
status: completed
|
|
249
|
+
section: Completed
|
|
250
|
+
start: 2026-05
|
|
251
|
+
end: 2026-05
|
|
252
|
+
released: 2026-05-24
|
|
253
|
+
summary: "Significant Jekyll build speedups and a MathJax 3 inline-math fix."
|
|
254
|
+
features:
|
|
255
|
+
- "Conditional MathJax/Mermaid loading and richer Obsidian cache"
|
|
256
|
+
- "jQuery removed from page loads"
|
|
257
|
+
- "Profiled Docker build reduced from ~119s to ~87s"
|
|
258
|
+
|
|
259
|
+
- version: "1.8"
|
|
260
|
+
title: "Design Tokens & Navigation Chrome"
|
|
261
|
+
status: completed
|
|
262
|
+
section: Completed
|
|
263
|
+
start: 2026-05
|
|
264
|
+
end: 2026-05
|
|
265
|
+
released: 2026-05-25
|
|
266
|
+
summary: "Sass design-token system, refreshed navigation chrome, and a docs overhaul."
|
|
267
|
+
features:
|
|
268
|
+
- "Sass token layers, component/layout partials, and skins"
|
|
269
|
+
- "VS Code-style collapsible sidebar rail and TOC"
|
|
270
|
+
- "Unified Playwright test tiers (smoke / snapshots / regression)"
|
|
271
|
+
- "Design-system developer docs"
|
|
272
|
+
|
|
273
|
+
# --- Current ---------------------------------------------------------------
|
|
274
|
+
|
|
275
|
+
- version: "1.9"
|
|
276
|
+
title: "Installer v2 & Site Scraper"
|
|
277
|
+
status: active
|
|
278
|
+
section: Current
|
|
279
|
+
start: 2026-05
|
|
280
|
+
end: 2026-05
|
|
281
|
+
target: "Current (1.9.x)"
|
|
282
|
+
released: 2026-05-27
|
|
283
|
+
summary: "Modular installer v2 with deploy plugins, AI wizard pipeline, and a site scraper."
|
|
284
|
+
features:
|
|
285
|
+
- "Installer deploy plugins and AI wizard apply pipeline"
|
|
286
|
+
- "Site scraper — BFS-crawl any website into a zer0-mistakes site"
|
|
287
|
+
- "Accessibility skin fixes (WCAG AA contrast); `air` default skin"
|
|
288
|
+
- "Quickstart documentation rewrite with screenshots"
|
|
289
|
+
- "Hardened one-line installer path"
|
|
290
|
+
|
|
147
291
|
# --- Future ----------------------------------------------------------------
|
|
148
292
|
|
|
149
|
-
- version: "0
|
|
293
|
+
- version: "2.0"
|
|
150
294
|
title: "CMS Integration"
|
|
151
295
|
status: planned
|
|
152
296
|
section: Future
|
|
153
|
-
start: 2026-
|
|
154
|
-
end: 2026-
|
|
155
|
-
target: "
|
|
297
|
+
start: 2026-06
|
|
298
|
+
end: 2026-08
|
|
299
|
+
target: "Q3 2026"
|
|
156
300
|
summary: "Headless CMS integration with a content API and admin dashboard."
|
|
157
301
|
features:
|
|
158
302
|
- "Headless CMS integration (Decap CMS or Tina)"
|
|
@@ -161,13 +305,13 @@ milestones:
|
|
|
161
305
|
- "Draft preview workflow"
|
|
162
306
|
- "Multi-author collaboration"
|
|
163
307
|
|
|
164
|
-
- version: "
|
|
308
|
+
- version: "2.1"
|
|
165
309
|
title: "i18n Support"
|
|
166
310
|
status: planned
|
|
167
311
|
section: Future
|
|
168
|
-
start: 2026-
|
|
169
|
-
end: 2026-
|
|
170
|
-
target: "
|
|
312
|
+
start: 2026-08
|
|
313
|
+
end: 2026-10
|
|
314
|
+
target: "Q4 2026"
|
|
171
315
|
summary: "Multi-language content support with locale-aware routing."
|
|
172
316
|
features:
|
|
173
317
|
- "Multi-language content support"
|
|
@@ -175,12 +319,12 @@ milestones:
|
|
|
175
319
|
- "Translated UI strings via `_data/ui-text.yml`"
|
|
176
320
|
- "Right-to-left (RTL) layout support"
|
|
177
321
|
|
|
178
|
-
- version: "
|
|
322
|
+
- version: "2.2"
|
|
179
323
|
title: "Advanced Analytics"
|
|
180
324
|
status: planned
|
|
181
325
|
section: Future
|
|
182
|
-
start: 2026-
|
|
183
|
-
end: 2026-
|
|
326
|
+
start: 2026-10
|
|
327
|
+
end: 2026-12
|
|
184
328
|
target: "Q4 2026"
|
|
185
329
|
summary: "Visual theme customizer, A/B testing, and conversion funnels."
|
|
186
330
|
features:
|
|
@@ -189,12 +333,12 @@ milestones:
|
|
|
189
333
|
- "Heatmap visualization"
|
|
190
334
|
- "Visual theme customizer enhancements"
|
|
191
335
|
|
|
192
|
-
- version: "
|
|
193
|
-
title: "Stable
|
|
336
|
+
- version: "3.0"
|
|
337
|
+
title: "Stable LTS"
|
|
194
338
|
status: milestone
|
|
195
339
|
section: Future
|
|
196
|
-
start: 2027-
|
|
197
|
-
end: 2027-
|
|
340
|
+
start: 2027-02
|
|
341
|
+
end: 2027-02
|
|
198
342
|
target: "Q1 2027"
|
|
199
343
|
summary: "Stable public API, 90%+ test coverage, and long-term support commitment."
|
|
200
344
|
features:
|
data/scripts/generate-roadmap.rb
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
# Usage:
|
|
16
16
|
# ruby scripts/generate-roadmap.rb # update README.md in place
|
|
17
17
|
# ruby scripts/generate-roadmap.rb --check # exit non-zero if README is stale
|
|
18
|
+
# ruby scripts/generate-roadmap.rb --validate # check roadmap integrity & version tracking
|
|
18
19
|
# ruby scripts/generate-roadmap.rb --stdout # print regenerated sections only
|
|
19
20
|
#
|
|
20
21
|
# This script has no gem dependencies beyond the Ruby stdlib.
|
|
@@ -24,9 +25,21 @@ require 'yaml'
|
|
|
24
25
|
require 'date'
|
|
25
26
|
require 'optparse'
|
|
26
27
|
|
|
27
|
-
ROOT
|
|
28
|
-
DATA_FILE
|
|
29
|
-
README
|
|
28
|
+
ROOT = File.expand_path('..', __dir__)
|
|
29
|
+
DATA_FILE = File.join(ROOT, '_data', 'roadmap.yml')
|
|
30
|
+
README = File.join(ROOT, 'README.md')
|
|
31
|
+
VERSION_RB = File.join(ROOT, 'lib', 'jekyll-theme-zer0', 'version.rb')
|
|
32
|
+
|
|
33
|
+
# Allowed enum values and the section each status must live in.
|
|
34
|
+
VALID_STATUSES = %w[completed active planned milestone].freeze
|
|
35
|
+
SECTION_FOR = {
|
|
36
|
+
'completed' => 'Completed',
|
|
37
|
+
'active' => 'Current',
|
|
38
|
+
'planned' => 'Future',
|
|
39
|
+
'milestone' => 'Future'
|
|
40
|
+
}.freeze
|
|
41
|
+
# How stale meta.updated may get before validation warns (days).
|
|
42
|
+
FRESHNESS_DAYS = 120
|
|
30
43
|
|
|
31
44
|
MERMAID_START = '<!-- ROADMAP_MERMAID:START -->'
|
|
32
45
|
MERMAID_END = '<!-- ROADMAP_MERMAID:END -->'
|
|
@@ -90,7 +103,7 @@ def target_label(milestone)
|
|
|
90
103
|
case milestone['status']
|
|
91
104
|
when 'completed'
|
|
92
105
|
if (released = milestone['released'])
|
|
93
|
-
Date.parse(released.to_s).strftime('%b %Y')
|
|
106
|
+
Date.parse(released.to_s).strftime('%b %Y') rescue 'Completed'
|
|
94
107
|
else
|
|
95
108
|
'Completed'
|
|
96
109
|
end
|
|
@@ -126,6 +139,150 @@ def render_table(data)
|
|
|
126
139
|
(header + rows).join("\n")
|
|
127
140
|
end
|
|
128
141
|
|
|
142
|
+
# ---------------------------------------------------------------------------
|
|
143
|
+
# Tracking / validation helpers
|
|
144
|
+
# ---------------------------------------------------------------------------
|
|
145
|
+
|
|
146
|
+
# Reads the canonical gem version (e.g. "1.9.8") from lib/.../version.rb.
|
|
147
|
+
# Returns nil if the file or constant can't be found, so validation degrades
|
|
148
|
+
# gracefully on stripped checkouts.
|
|
149
|
+
def current_gem_version
|
|
150
|
+
return nil unless File.exist?(VERSION_RB)
|
|
151
|
+
|
|
152
|
+
m = File.read(VERSION_RB).match(/VERSION\s*=\s*["']([^"']+)["']/)
|
|
153
|
+
m && m[1]
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# "1.9.8" -> "1.9" (the major.minor series a milestone version tracks).
|
|
157
|
+
def minor_series(version_string)
|
|
158
|
+
parts = version_string.to_s.split('.')
|
|
159
|
+
"#{parts[0]}.#{parts[1] || '0'}"
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def parse_month(value)
|
|
163
|
+
Date.strptime(value.to_s, '%Y-%m')
|
|
164
|
+
rescue ArgumentError
|
|
165
|
+
nil
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# Validates the roadmap data for internal consistency and tracking accuracy.
|
|
169
|
+
# Returns [errors, warnings] as arrays of strings. Errors are integrity
|
|
170
|
+
# violations (fail CI); warnings flag drift that humans should review.
|
|
171
|
+
def validate_roadmap(data)
|
|
172
|
+
errors = []
|
|
173
|
+
warnings = []
|
|
174
|
+
milestones = data['milestones'] || []
|
|
175
|
+
|
|
176
|
+
errors << 'No milestones defined.' if milestones.empty?
|
|
177
|
+
|
|
178
|
+
seen_versions = {}
|
|
179
|
+
milestones.each do |m|
|
|
180
|
+
id = "v#{m['version'] || '?'}"
|
|
181
|
+
|
|
182
|
+
%w[version title status section start].each do |field|
|
|
183
|
+
errors << "#{id}: missing required field '#{field}'." if m[field].nil? || m[field].to_s.empty?
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
status = m['status'].to_s
|
|
187
|
+
unless VALID_STATUSES.include?(status)
|
|
188
|
+
errors << "#{id}: invalid status '#{status}' (expected #{VALID_STATUSES.join(', ')})."
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
if (expected = SECTION_FOR[status]) && m['section'] != expected
|
|
192
|
+
errors << "#{id}: status '#{status}' must use section '#{expected}', found '#{m['section']}'."
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
if (v = m['version'])
|
|
196
|
+
errors << "#{id}: duplicate version '#{v}'." if seen_versions[v]
|
|
197
|
+
seen_versions[v] = true
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
start_d = parse_month(m['start'])
|
|
201
|
+
errors << "#{id}: start '#{m['start']}' is not a valid YYYY-MM date." if m['start'] && start_d.nil?
|
|
202
|
+
if m['end']
|
|
203
|
+
end_d = parse_month(m['end'])
|
|
204
|
+
if end_d.nil?
|
|
205
|
+
errors << "#{id}: end '#{m['end']}' is not a valid YYYY-MM date."
|
|
206
|
+
elsif start_d && end_d < start_d
|
|
207
|
+
errors << "#{id}: end '#{m['end']}' precedes start '#{m['start']}'."
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
if status == 'completed' && (m['released'].nil? || m['released'].to_s.empty?)
|
|
212
|
+
warnings << "#{id}: completed milestone has no 'released' date."
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
if status == 'active' && !m['released'].to_s.empty?
|
|
216
|
+
warnings << "#{id}: active milestone has a 'released' date — should it be marked 'completed'?"
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
# Exactly one in-flight milestone keeps "Current" unambiguous.
|
|
221
|
+
active = milestones.select { |m| m['status'] == 'active' }
|
|
222
|
+
case active.size
|
|
223
|
+
when 0 then warnings << "No 'active' milestone — nothing marks the current focus."
|
|
224
|
+
when 1 then nil
|
|
225
|
+
else errors << "Multiple 'active' milestones (#{active.map { |m| "v#{m['version']}" }.join(', ')}); only one allowed."
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
# Cross-reference the canonical gem version so the roadmap can't drift.
|
|
229
|
+
if (gem_v = current_gem_version)
|
|
230
|
+
require 'rubygems'
|
|
231
|
+
gem_ver = Gem::Version.new(gem_v)
|
|
232
|
+
series = minor_series(gem_v)
|
|
233
|
+
|
|
234
|
+
if active.size == 1 && active.first['version'].to_s != series
|
|
235
|
+
warnings << "Active milestone is v#{active.first['version']} but the gem is at v#{gem_v} " \
|
|
236
|
+
"(series #{series}). Advance the roadmap to track the shipped version."
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
milestones.each do |m|
|
|
240
|
+
next unless %w[planned milestone].include?(m['status'].to_s)
|
|
241
|
+
|
|
242
|
+
begin
|
|
243
|
+
next if Gem::Version.new(m['version'].to_s) > gem_ver
|
|
244
|
+
rescue ArgumentError
|
|
245
|
+
next
|
|
246
|
+
end
|
|
247
|
+
warnings << "v#{m['version']} is still '#{m['status']}' but the gem already shipped v#{gem_v}; " \
|
|
248
|
+
'mark it completed or renumber it.'
|
|
249
|
+
end
|
|
250
|
+
else
|
|
251
|
+
warnings << "Could not read gem version from #{File.basename(VERSION_RB)} — skipped version tracking."
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
# Freshness of the last-reviewed date.
|
|
255
|
+
if (updated = data.dig('meta', 'updated'))
|
|
256
|
+
updated_d = updated.is_a?(Date) ? updated : (Date.parse(updated.to_s) rescue nil)
|
|
257
|
+
if updated_d.nil?
|
|
258
|
+
warnings << "meta.updated '#{updated}' is not a valid date."
|
|
259
|
+
elsif (Date.today - updated_d).to_i > FRESHNESS_DAYS
|
|
260
|
+
warnings << "meta.updated (#{updated_d}) is more than #{FRESHNESS_DAYS} days old; review the roadmap."
|
|
261
|
+
end
|
|
262
|
+
else
|
|
263
|
+
warnings << 'meta.updated is not set.'
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
[errors, warnings]
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
def run_validation(data)
|
|
270
|
+
errors, warnings = validate_roadmap(data)
|
|
271
|
+
|
|
272
|
+
warnings.each { |w| warn " ⚠ WARN #{w}" }
|
|
273
|
+
errors.each { |e| warn " ✗ FAIL #{e}" }
|
|
274
|
+
|
|
275
|
+
if errors.empty? && warnings.empty?
|
|
276
|
+
puts '✓ Roadmap is valid and tracks the current version.'
|
|
277
|
+
elsif errors.empty?
|
|
278
|
+
puts "✓ Roadmap valid (#{warnings.size} warning(s) — see above)."
|
|
279
|
+
else
|
|
280
|
+
warn "✗ Roadmap validation failed: #{errors.size} error(s), #{warnings.size} warning(s)."
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
errors.empty? ? 0 : 1
|
|
284
|
+
end
|
|
285
|
+
|
|
129
286
|
def replace_block(content, marker_start, marker_end, replacement)
|
|
130
287
|
pattern = /(#{Regexp.escape(marker_start)})(.*?)(#{Regexp.escape(marker_end)})/m
|
|
131
288
|
unless content.match?(pattern)
|
|
@@ -146,8 +303,9 @@ end
|
|
|
146
303
|
def main
|
|
147
304
|
options = { mode: :write }
|
|
148
305
|
OptionParser.new do |opts|
|
|
149
|
-
opts.banner = 'Usage: generate-roadmap.rb [--check|--stdout]'
|
|
306
|
+
opts.banner = 'Usage: generate-roadmap.rb [--check|--validate|--stdout]'
|
|
150
307
|
opts.on('--check', 'Exit non-zero if README would change') { options[:mode] = :check }
|
|
308
|
+
opts.on('--validate', 'Check roadmap integrity & version tracking') { options[:mode] = :validate }
|
|
151
309
|
opts.on('--stdout', 'Print regenerated sections to stdout') { options[:mode] = :stdout }
|
|
152
310
|
end.parse!
|
|
153
311
|
|
|
@@ -162,6 +320,9 @@ def main
|
|
|
162
320
|
rescue ArgumentError
|
|
163
321
|
YAML.safe_load(File.read(DATA_FILE), permitted_classes: [Date, Time], aliases: false)
|
|
164
322
|
end
|
|
323
|
+
|
|
324
|
+
return run_validation(data) if options[:mode] == :validate
|
|
325
|
+
|
|
165
326
|
mermaid = render_mermaid(data)
|
|
166
327
|
table = render_table(data)
|
|
167
328
|
|
data/scripts/generate-roadmap.sh
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
# Usage:
|
|
12
12
|
# ./scripts/generate-roadmap.sh # update README.md
|
|
13
13
|
# ./scripts/generate-roadmap.sh --check # CI-friendly drift detection
|
|
14
|
+
# ./scripts/generate-roadmap.sh --validate # check integrity & version tracking
|
|
14
15
|
# ./scripts/generate-roadmap.sh --stdout # print regenerated sections only
|
|
15
16
|
#
|
|
16
17
|
# =============================================================================
|
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.10.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-
|
|
11
|
+
date: 2026-06-01 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: jekyll
|