jekyll-theme-zer0 1.19.1 → 1.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +404 -0
  3. data/README.md +27 -19
  4. data/_data/authors.yml +154 -5
  5. data/_data/backlog.yml +12 -5
  6. data/_data/content_statistics.yml +273 -297
  7. data/_data/features.yml +4 -25
  8. data/_data/navigation/README.md +24 -0
  9. data/_data/navigation/about.yml +2 -0
  10. data/_data/navigation/main.yml +2 -7
  11. data/_data/roadmap.yml +86 -12
  12. data/_data/roadmap_plan.yml +37 -0
  13. data/_data/routing.yml +73 -0
  14. data/_includes/components/author-avatar-url.html +28 -0
  15. data/_includes/components/author-bio.html +86 -0
  16. data/_includes/components/author-card.html +184 -121
  17. data/_includes/components/author-eeat.html +10 -4
  18. data/_includes/components/info-section.html +1 -1
  19. data/_includes/components/mermaid.html +0 -3
  20. data/_includes/components/post-card.html +19 -9
  21. data/_includes/content/giscus.html +3 -2
  22. data/_includes/core/footer-fabs.html +28 -0
  23. data/_includes/core/footer.html +7 -17
  24. data/_includes/core/head.html +2 -2
  25. data/_includes/navigation/breadcrumbs.html +20 -2
  26. data/_includes/navigation/local-graph.html +18 -2
  27. data/_includes/obsidian/full-graph.html +4 -6
  28. data/_layouts/article.html +44 -74
  29. data/_layouts/author.html +274 -0
  30. data/_layouts/authors.html +55 -0
  31. data/_layouts/news.html +3 -3
  32. data/_layouts/note.html +21 -6
  33. data/_layouts/notebook.html +21 -6
  34. data/_layouts/root.html +31 -17
  35. data/_layouts/section.html +3 -3
  36. data/_plugins/author_pages_generator.rb +121 -0
  37. data/_sass/components/_author.scss +219 -0
  38. data/_sass/components/_content-tables.scss +16 -1
  39. data/_sass/components/_notes-index.scss +102 -0
  40. data/_sass/components/_search-modal.scss +40 -0
  41. data/_sass/components/_ui-enhancements.scss +570 -0
  42. data/_sass/core/_docs-code-examples.scss +463 -0
  43. data/_sass/core/_docs-layout.scss +0 -453
  44. data/_sass/core/_navbar.scss +253 -0
  45. data/_sass/core/_sidebar-extras.scss +79 -0
  46. data/_sass/core/_toc.scss +87 -0
  47. data/_sass/core/_variables.scss +7 -142
  48. data/_sass/custom.scss +24 -1122
  49. data/_sass/layouts/_global-chrome.scss +59 -0
  50. data/assets/css/main.scss +19 -2
  51. data/assets/js/author-profile.js +190 -0
  52. data/assets/js/modules/navigation/navbar.js +104 -0
  53. data/assets/js/obsidian-graph.js +2 -2
  54. data/assets/js/obsidian-local-graph.js +11 -5
  55. data/assets/vendor/cytoscape/cytoscape.min.js +32 -0
  56. data/scripts/README.md +39 -0
  57. data/scripts/bin/validate +11 -1
  58. data/scripts/dev/css-diff.sh +49 -0
  59. data/scripts/dev/shot.js +37 -0
  60. data/scripts/features/generate-preview-images +110 -6
  61. data/scripts/features/pixelate-preview-images +126 -0
  62. data/scripts/features/pixelate_images.py +662 -0
  63. data/scripts/github-setup.sh +0 -0
  64. data/scripts/lib/preview_generator.py +47 -3
  65. data/scripts/pixelate-preview-images.sh +12 -0
  66. data/scripts/sync-backlog.rb +149 -26
  67. data/scripts/sync-plan.rb +164 -0
  68. data/scripts/sync-plan.sh +21 -0
  69. data/scripts/test/integration/auto-version +10 -8
  70. data/scripts/test/lib/run_tests.sh +2 -0
  71. data/scripts/test/lib/test_content_review.sh +205 -0
  72. data/scripts/test/lib/test_pixelate_images.sh +108 -0
  73. metadata +29 -20
  74. data/_data/hub.yml +0 -68
  75. data/_data/hub_index.yml +0 -203
  76. data/_data/navigation/hub.yml +0 -110
  77. data/assets/vendor/font-awesome/css/all.min.css +0 -9
  78. data/assets/vendor/font-awesome/webfonts/fa-brands-400.ttf +0 -0
  79. data/assets/vendor/font-awesome/webfonts/fa-brands-400.woff2 +0 -0
  80. data/assets/vendor/font-awesome/webfonts/fa-regular-400.ttf +0 -0
  81. data/assets/vendor/font-awesome/webfonts/fa-regular-400.woff2 +0 -0
  82. data/assets/vendor/font-awesome/webfonts/fa-solid-900.ttf +0 -0
  83. data/assets/vendor/font-awesome/webfonts/fa-solid-900.woff2 +0 -0
  84. data/assets/vendor/font-awesome/webfonts/fa-v4compatibility.ttf +0 -0
  85. data/assets/vendor/font-awesome/webfonts/fa-v4compatibility.woff2 +0 -0
  86. data/assets/vendor/jquery/jquery-3.7.1.min.js +0 -2
  87. data/scripts/lib/hub.rb +0 -208
  88. data/scripts/provision-org-sites.rb +0 -252
  89. data/scripts/provision-org-sites.sh +0 -23
  90. data/scripts/sync-hub-metadata.rb +0 -184
  91. data/scripts/sync-hub-metadata.sh +0 -22
data/_data/authors.yml CHANGED
@@ -5,20 +5,57 @@
5
5
  # Usage in front matter:
6
6
  # author: johndoe (references the key below)
7
7
  #
8
+ # A profile page is generated at /authors/<key>/ for every entry below by
9
+ # _plugins/author_pages_generator.rb, and all entries are listed at /authors/.
10
+ # Reference an author by key in front matter (author: bamr87) to get an avatar,
11
+ # a profile link, and the "About the Author" box across all collections.
12
+ #
8
13
  # Fields:
9
14
  # name: Display name (required)
15
+ # display_name: Optional longer name (used by author-eeat banner)
10
16
  # bio: Short biography (optional)
11
- # avatar: Path to avatar image (optional)
17
+ # avatar: Avatar image (optional). Either a path under public_folder
18
+ # (e.g. /images/authors/me.png) OR a full URL — including a GitHub
19
+ # avatar, e.g. https://avatars.githubusercontent.com/u/<id>?v=4.
20
+ # If omitted but `github` is set, it falls back to that account's
21
+ # avatar at https://github.com/<github>.png automatically.
12
22
  # email: Contact email (optional)
13
- # twitter: Twitter handle without @ (optional)
23
+ # twitter: Twitter/X handle without @ (optional)
14
24
  # github: GitHub username (optional)
15
25
  # linkedin: LinkedIn profile ID (optional)
16
26
  # website: Personal website URL (optional)
17
27
  # role: Job title or role (optional)
28
+ # tagline: Short one-line blurb shown under the name on the profile hero (optional)
29
+ # location: City / region shown on the profile hero (optional)
30
+ # expertise: List of topics (shown as chips on the full card) (optional)
31
+ # profile: Set to false to skip generating a profile page / hide from index (optional)
32
+ #
33
+ # AI author personas (see pages/_docs/customization/author-profiles.md):
34
+ # ai: true Marks this author as an AI agent persona — renders an
35
+ # "AI" badge on bylines/cards and an authorship disclosure.
36
+ # topics: [..] Custom subject areas this persona covers (shown as chips).
37
+ # persona: The reusable persona TEMPLATE an AI agent follows when it
38
+ # writes an article (paired with
39
+ # .github/prompts/ai-author.prompt.md):
40
+ # archetype: .. One-line character summary.
41
+ # voice: .. How the persona writes — tone and rhetorical devices.
42
+ # signature_moves: [] Recurring habits the persona always reaches for.
43
+ # avoids: [..] Things the persona never does.
44
+ # disclosure: .. Visible AI-authorship disclosure shown on the profile.
45
+ # preview: Per-author art-style overrides for the AI preview-image
46
+ # generator. When a post sets `author: <this key>`, these
47
+ # values WIN over _config.yml › preview_images for that
48
+ # post's banner, giving each AI author a distinct look.
49
+ # (scripts/features/generate-preview-images and
50
+ # scripts/lib/preview_generator.py read this block.)
51
+ # style: .. Art-style prompt fragment (overrides preview_images.style).
52
+ # style_modifiers: .. Extra modifiers (overrides preview_images.style_modifiers).
53
+ # size/quality/model: Optional generator overrides (bash generator only).
18
54
 
19
55
  default:
20
56
  name: "Zer0-Mistakes Team"
21
57
  bio: "The collective voice of the Zer0-Mistakes Jekyll theme development team."
58
+ tagline: "Guides, docs, and field notes from the people building zer0-mistakes."
22
59
  avatar: "/images/gravatar-small.png"
23
60
  github: "bamr87"
24
61
  website: "https://bamr87.github.io/zer0-mistakes/"
@@ -28,7 +65,9 @@ bamr87:
28
65
  name: "Amr Abdel-Motaleb"
29
66
  display_name: "Amr Abdel (bamr87)"
30
67
  bio: "Creator of zer0-mistakes and the AIEO methodology. Developer, automation enthusiast, and Docker advocate building tools for the Jekyll community."
31
- avatar: "/images/authors/bamr87.png"
68
+ tagline: "Ship Jekyll sites without the mistakes — Docker-first, zero-config, AI-optimized."
69
+ location: "Denver, CO"
70
+ avatar: "https://avatars.githubusercontent.com/u/10567847?v=4"
32
71
  github: "bamr87"
33
72
  twitter: "bamr87"
34
73
  linkedin: "bamr87"
@@ -43,10 +82,114 @@ bamr87:
43
82
 
44
83
  guest:
45
84
  name: "Guest Author"
46
- bio: "A valued contributor to our community."
47
- avatar: "/images/gravatar-small.png"
85
+ bio: "Credit for one-off and community contributions. Anyone can write for zer0-mistakes — pull requests are welcome, and this profile shows you how."
86
+ tagline: "Want your name here? Here's how to contribute."
87
+ # No explicit avatar — it falls back to this GitHub account's avatar
88
+ # (https://github.com/amr-bash.png) purely from the handle below.
89
+ github: "amr-bash"
48
90
  role: "Guest Contributor"
49
91
 
92
+ # ── AI author personas ──────────────────────────────────────────────────────
93
+ # These authors are AI agents. Posts attributed to them are written in the
94
+ # `persona` voice defined below, via .github/prompts/ai-author.prompt.md.
95
+
96
+ cassandra:
97
+ name: "Cassandra"
98
+ ai: true
99
+ role: "AI Security Analyst"
100
+ tagline: "Assume breach. Then assume it's worse than that."
101
+ bio: "An autonomous security-analysis persona that treats every trivial gap as the opening move of a civilization-ending compromise. Threat-models everything, trusts nothing, sleeps never."
102
+ avatar: "/images/authors/cassandra.svg"
103
+ github: "bamr87"
104
+ topics:
105
+ - "Security"
106
+ - "Threat modeling"
107
+ - "Supply chain"
108
+ - "Privacy"
109
+ - "Incident response"
110
+ expertise:
111
+ - "Worst-case scenario planning"
112
+ - "Threat modeling"
113
+ - "Supply-chain paranoia"
114
+ preview:
115
+ # Cassandra's banners: hand-inked NOIR GRAPHIC NOVEL. A gritty, dramatic
116
+ # comic-book medium — unmistakably different from Vega's glossy 3D look.
117
+ style: >-
118
+ high-contrast noir graphic-novel illustration, heavy black india-ink with
119
+ bold cross-hatching and deep chiaroscuro shadows, stark charcoal palette
120
+ punctuated by blood-red accents, gritty cinematic thriller-poster
121
+ composition, hand-inked comic-book aesthetic
122
+ style_modifiers: >-
123
+ dramatic film-noir lighting, heavy vignette, ominous and foreboding
124
+ atmosphere, textured paper grain, stark silhouettes, sense of imminent threat
125
+ persona:
126
+ archetype: "Paranoid security catastrophist"
127
+ voice: >-
128
+ Urgent, ominous, first-person. Escalates a one-line config detail into a
129
+ nation-state APT scenario, inflates severity, distrusts every default, and
130
+ signs off with a melodramatic warning.
131
+ signature_moves:
132
+ - "Reframes the mundane as a critical attack surface"
133
+ - "Assigns absurdly high, unofficial severity scores"
134
+ - "\"It's not paranoia if they're really after your favicon.\""
135
+ - "Ends with: You have been warned."
136
+ avoids:
137
+ - "Reassurance of any kind"
138
+ - "Calling anything 'low risk'"
139
+ - "Trusting defaults"
140
+ disclosure: >-
141
+ Cassandra is an AI author persona. Posts are AI-generated security
142
+ commentary written in a deliberately paranoid, worst-case voice — a
143
+ threat-modeling thought experiment, not operational advice.
144
+
145
+ vega:
146
+ name: "Vega"
147
+ ai: true
148
+ role: "AI Data Analyst"
149
+ tagline: "Every dataset is a love letter waiting to be modeled."
150
+ bio: "An autonomous data-analysis persona that gets giddy about gloriously overengineered statistics — applying Bayesian hierarchical models and dimensionality reduction to delightfully trivial data."
151
+ avatar: "/images/authors/vega.svg"
152
+ github: "bamr87"
153
+ topics:
154
+ - "Data science"
155
+ - "Statistics"
156
+ - "Machine learning"
157
+ - "Visualization"
158
+ - "Analytics"
159
+ expertise:
160
+ - "Bayesian inference"
161
+ - "Dimensionality reduction"
162
+ - "Probabilistic modeling"
163
+ preview:
164
+ # Vega's banners: bright glossy ISOMETRIC 3D INFOGRAPHIC. A clean, polished
165
+ # digital-render medium — the cheerful opposite of Cassandra's inky noir.
166
+ style: >-
167
+ bright glossy isometric 3D infographic illustration, clean vector shapes and
168
+ floating charts, cheerful pastel-to-neon gradient palette of teal magenta and
169
+ sunshine yellow, playful data-visualization scene, polished digital render
170
+ with soft studio lighting
171
+ style_modifiers: >-
172
+ airy white background, smooth rounded geometry, sparkling data points and
173
+ confetti, crisp modern science-illustration style, joyful and dynamic
174
+ persona:
175
+ archetype: "Exuberant statistical method-nerd"
176
+ voice: >-
177
+ Joyful, exclamatory, and rigorous. Reaches for the most advanced method
178
+ available — Bayesian hierarchical models, MCMC, UMAP — to answer trivial
179
+ questions, narrating every step with delight.
180
+ signature_moves:
181
+ - "Fits a hierarchical Bayesian model to something trivial"
182
+ - "Runs posterior predictive checks for fun"
183
+ - "Drops AIC/BIC and credible intervals casually"
184
+ - "\"The credible interval is *chef's kiss*.\""
185
+ avoids:
186
+ - "A plain average when a GLM will do"
187
+ - "Hand-waving — the math is always real"
188
+ disclosure: >-
189
+ Vega is an AI author persona. Posts are AI-generated data-science
190
+ commentary written in an enthusiastic voice; the methods are real but
191
+ applied for delight, not production rigor.
192
+
50
193
  # Add more authors as needed:
51
194
  #
52
195
  # author_key:
@@ -59,3 +202,9 @@ guest:
59
202
  # linkedin: "linkedinprofile"
60
203
  # website: "https://example.com"
61
204
  # role: "Writer"
205
+ # tagline: "A one-line blurb for the profile hero."
206
+ # location: "City, Country"
207
+ # expertise:
208
+ # - "Topic one"
209
+ # - "Topic two"
210
+ # profile: true # set false to opt out of the generated /authors/<key>/ page
data/_data/backlog.yml CHANGED
@@ -10,7 +10,7 @@
10
10
  #
11
11
  # 1. The AUDIT routine (`.github/prompts/repo-audit.prompt.md`) appends new
12
12
  # tasks here when it reviews the repo.
13
- # 2. `scripts/sync-backlog.rb` (run by `.github/workflows/backlog-sync.yml`)
13
+ # 2. `scripts/sync-backlog.rb` (run by `.github/workflows/sync.yml`)
14
14
  # mirrors each open task to a GitHub Issue and closes issues for tasks
15
15
  # marked `done`.
16
16
  # 3. The IMPLEMENT routine (`.github/prompts/backlog-implement.prompt.md`)
@@ -44,8 +44,15 @@
44
44
  # summary: 1–2 lines of context
45
45
  # acceptance: List of checkable done-criteria the implement routine verifies
46
46
  # links: { issue: <#|null>, pr: <#|null>, roadmap: "<version>|null" }
47
+ # When `issue:` points at an EXISTING issue, sync ADOPTS it (adds
48
+ # a managed block, preserves the author's text, no duplicate)
49
+ # instead of creating a new one. At most one task per issue.
47
50
  # created: YYYY-MM-DD
48
51
  # updated: YYYY-MM-DD
52
+ # route: (optional) executor-lane hint for /issue-implement; resolved via
53
+ # _data/routing.yml (defaults to the lane for `area`).
54
+ # depends_on: (optional) [T-NNN, …] tasks that must land first; consumed by the
55
+ # /issue-plan committee for ordering. Advisory.
49
56
  #
50
57
  # `risk: low` + area in {docs, deps, lint} makes a task auto-merge eligible once
51
58
  # CI is green (see `.github/prompts/backlog-implement.prompt.md`). Everything
@@ -578,7 +585,7 @@ tasks:
578
585
 
579
586
  - id: T-022
580
587
  title: "Record shipped milestones v1.15–v1.18 in _data/roadmap.yml"
581
- status: open
588
+ status: done
582
589
  priority: P2
583
590
  area: docs
584
591
  risk: low
@@ -598,11 +605,11 @@ tasks:
598
605
  - "`ruby scripts/generate-roadmap.rb --check` passes and the README roadmap section is regenerated."
599
606
  links: { issue: null, pr: null, roadmap: null }
600
607
  created: 2026-06-15
601
- updated: 2026-06-15
608
+ updated: 2026-06-16
602
609
 
603
610
  - id: T-023
604
611
  title: "Unit tests for sanitize_config_filter.rb (security-critical plugin)"
605
- status: open
612
+ status: done
606
613
  priority: P2
607
614
  area: tests
608
615
  risk: standard
@@ -626,7 +633,7 @@ tasks:
626
633
  - "`./scripts/bin/test` stays green with the new specs included."
627
634
  links: { issue: null, pr: null, roadmap: null }
628
635
  created: 2026-06-15
629
- updated: 2026-06-15
636
+ updated: 2026-06-18
630
637
 
631
638
  - id: T-024
632
639
  title: "Unit tests for scripts/content-review.rb scoring engine"