jekyll-theme-zer0 1.25.0 → 1.27.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 +201 -0
- data/README.md +11 -28
- data/_data/authors.yml +4 -3
- data/_data/backlog.yml +54 -1
- data/_data/features.yml +101 -61
- data/_data/feedback_types.yml +148 -0
- data/_data/i18n/languages.yml +36 -0
- data/_data/navigation/README.md +1 -1
- data/_data/theme-manifest.yml +0 -2
- data/_data/ui-text.yml +36 -246
- data/_includes/README.md +4 -0
- data/_includes/components/README.md +1 -0
- data/_includes/components/author-avatar-url.html +4 -2
- data/_includes/components/env-switcher.html +3 -1
- data/_includes/components/language-toggle.html +81 -0
- data/_includes/components/page-feedback.html +252 -0
- data/_includes/components/search-modal.html +2 -2
- data/_includes/components/shortcuts-modal.html +1 -1
- data/_includes/components/translation-notice.html +27 -0
- data/_includes/content/intro.html +35 -76
- data/_includes/core/console-capture.html +89 -0
- data/_includes/core/footer.html +9 -4
- data/_includes/core/head.html +13 -0
- data/_includes/core/header.html +9 -4
- data/_includes/core/hreflang.html +33 -0
- data/_includes/core/i18n.html +36 -0
- data/_includes/navigation/breadcrumbs.html +1 -1
- data/_includes/navigation/navbar.html +5 -4
- data/_includes/navigation/sidebar-right.html +3 -2
- data/_includes/navigation/unified-drawer.html +1 -1
- data/_layouts/article.html +7 -1
- data/_layouts/default.html +5 -3
- data/_layouts/news.html +4 -2
- data/_layouts/root.html +17 -8
- data/_layouts/section.html +4 -2
- data/_sass/components/_page-feedback.scss +276 -0
- data/_sass/core/_docs-layout.scss +2 -78
- data/_sass/core/_obsidian.scss +9 -1
- data/_sass/layouts/_navbar-extras.scss +6 -1
- data/_sass/tokens/_layers.scss +4 -0
- data/assets/css/main.scss +1 -0
- data/assets/js/obsidian-graph.js +5 -1
- data/assets/js/page-feedback.js +660 -0
- data/scripts/README.md +20 -26
- data/scripts/bin/audit-consumer +1 -1
- data/scripts/bin/manifest +0 -1
- data/scripts/bin/sync-plugins +0 -1
- data/scripts/dev/rasterize-svg.js +65 -0
- data/scripts/features/generate-preview-images +49 -1390
- data/scripts/features/install-preview-generator +55 -33
- data/scripts/install/README.md +9 -20
- data/scripts/install/ai/prompts/wizard.system.md +8 -17
- data/scripts/lib/README.md +1 -5
- data/scripts/lib/install/deploy/README.md +3 -9
- data/scripts/lib/preview_generator.py +2261 -1341
- data/scripts/translate.rb +1114 -0
- metadata +14 -4
- data/_data/prompts.yml +0 -302
- data/_plugins/preview_image_generator.rb +0 -351
data/_data/features.yml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# zer0-mistakes Theme Features Registry
|
|
2
2
|
# Comprehensive feature tracking for the zer0-mistakes Jekyll theme
|
|
3
|
-
# Version: 1.
|
|
4
|
-
# Last Updated: 2026-
|
|
3
|
+
# Version: 1.26.0
|
|
4
|
+
# Last Updated: 2026-07-17
|
|
5
5
|
|
|
6
6
|
features:
|
|
7
7
|
# ============================================================================
|
|
@@ -23,8 +23,8 @@ features:
|
|
|
23
23
|
commit: "a8426a5"
|
|
24
24
|
issue: null
|
|
25
25
|
tests:
|
|
26
|
-
- "test/visual/component-showcase.spec.js"
|
|
27
|
-
- "test/visual/styling.spec.js"
|
|
26
|
+
- "test/visual/features/component-showcase.spec.js"
|
|
27
|
+
- "test/visual/core/styling.spec.js"
|
|
28
28
|
references:
|
|
29
29
|
layouts: ["_layouts/root.html", "_layouts/default.html"]
|
|
30
30
|
includes: ["_includes/core/head.html"]
|
|
@@ -80,7 +80,7 @@ features:
|
|
|
80
80
|
issue: null
|
|
81
81
|
tests:
|
|
82
82
|
- "test/test_installer.sh"
|
|
83
|
-
- "test/
|
|
83
|
+
- "test/test_install_legacy_flags.sh"
|
|
84
84
|
references:
|
|
85
85
|
script: "install.sh"
|
|
86
86
|
cli: "scripts/bin/install"
|
|
@@ -106,13 +106,13 @@ features:
|
|
|
106
106
|
|
|
107
107
|
- id: ZER0-004
|
|
108
108
|
title: "AI Preview Image Generator"
|
|
109
|
-
description: "
|
|
109
|
+
description: "Claude-orchestrated preview-image engine: Claude analyzes each article into an art brief and vision-reviews the render (one corrective regeneration), while OpenAI gpt-image-2 / DALL-E (default), xAI, Stability AI, Google Gemini, or a deterministic local template renders. Per-author styles, batch regeneration"
|
|
110
110
|
implemented: true
|
|
111
|
-
version: "1.
|
|
111
|
+
version: "1.27.0"
|
|
112
112
|
link: "/docs/features/preview-image-generator/"
|
|
113
113
|
docs: "/docs/features/preview-image-generator/"
|
|
114
|
-
tags: [ai, images, automation, openai, content]
|
|
115
|
-
date:
|
|
114
|
+
tags: [ai, images, automation, claude, openai, content]
|
|
115
|
+
date: 2026-07-12
|
|
116
116
|
provenance:
|
|
117
117
|
introduced_in: "1.5.0"
|
|
118
118
|
pr: 83
|
|
@@ -120,9 +120,11 @@ features:
|
|
|
120
120
|
issue: null
|
|
121
121
|
tests:
|
|
122
122
|
- "test/test_core.sh"
|
|
123
|
+
- "test/test_preview_generator.py"
|
|
123
124
|
references:
|
|
124
|
-
|
|
125
|
+
engine: "scripts/lib/preview_generator.py"
|
|
125
126
|
script: "scripts/generate-preview-images.sh"
|
|
127
|
+
rasterizer: "scripts/dev/rasterize-svg.js"
|
|
126
128
|
install: "scripts/install-preview-generator.sh"
|
|
127
129
|
config: "_config.yml"
|
|
128
130
|
include: "_includes/components/preview-image.html"
|
|
@@ -130,25 +132,33 @@ features:
|
|
|
130
132
|
script: "scripts/install-preview-generator.sh"
|
|
131
133
|
config_section: "preview_images"
|
|
132
134
|
dependencies:
|
|
133
|
-
required: [
|
|
134
|
-
optional: [
|
|
135
|
+
required: [python3, pyyaml]
|
|
136
|
+
optional: [librsvg, inkscape, imagemagick, node]
|
|
137
|
+
orchestration:
|
|
138
|
+
name: claude
|
|
139
|
+
description: "Claude analyzes articles into art briefs and vision-reviews renders (prompt_engine/review_engine)"
|
|
140
|
+
env_var: CLAUDE_CODE_OAUTH_TOKEN
|
|
135
141
|
providers:
|
|
136
142
|
- name: openai
|
|
137
|
-
description: "OpenAI gpt-image-2 / DALL-E 3 image generation"
|
|
143
|
+
description: "OpenAI gpt-image-2 / DALL-E 3 image generation (default renderer; + --enhance edits)"
|
|
138
144
|
env_var: OPENAI_API_KEY
|
|
139
|
-
- name: stability
|
|
140
|
-
description: "Stability AI Stable Diffusion"
|
|
141
|
-
env_var: STABILITY_API_KEY
|
|
142
145
|
- name: xai
|
|
143
146
|
description: "xAI Grok image generation"
|
|
144
147
|
env_var: XAI_API_KEY
|
|
148
|
+
- name: stability
|
|
149
|
+
description: "Stability AI Stable Diffusion"
|
|
150
|
+
env_var: STABILITY_API_KEY
|
|
151
|
+
- name: gemini
|
|
152
|
+
description: "Google Gemini image generation"
|
|
153
|
+
env_var: GEMINI_API_KEY
|
|
145
154
|
- name: local
|
|
146
|
-
description: "
|
|
155
|
+
description: "Deterministic template SVG/PNG (no API needed)"
|
|
147
156
|
env_var: null
|
|
148
157
|
features:
|
|
149
|
-
- "
|
|
150
|
-
- "
|
|
151
|
-
- "
|
|
158
|
+
- "Claude orchestration: article analysis into art briefs + vision review with one corrective regeneration"
|
|
159
|
+
- "Five-renderer framework with per-vendor model validation"
|
|
160
|
+
- "Graceful degradation to template prompts without a Claude credential"
|
|
161
|
+
- "Retro pixel art default style with per-author overrides"
|
|
152
162
|
- "Front matter integration"
|
|
153
163
|
- "Batch processing"
|
|
154
164
|
|
|
@@ -216,7 +226,7 @@ features:
|
|
|
216
226
|
issue: null
|
|
217
227
|
tests:
|
|
218
228
|
- "test/test_quality.sh"
|
|
219
|
-
- "test/visual/security.spec.js"
|
|
229
|
+
- "test/visual/core/security.spec.js"
|
|
220
230
|
references:
|
|
221
231
|
include: "_includes/analytics/posthog.html"
|
|
222
232
|
config: "_config.yml"
|
|
@@ -277,7 +287,7 @@ features:
|
|
|
277
287
|
commit: "0ea51c6"
|
|
278
288
|
issue: null
|
|
279
289
|
tests:
|
|
280
|
-
- "test/visual/
|
|
290
|
+
- "test/visual/features/sidebar-navigation.spec.js"
|
|
281
291
|
references:
|
|
282
292
|
javascript:
|
|
283
293
|
- "assets/js/modules/navigation/sidebar-state.js"
|
|
@@ -317,8 +327,8 @@ features:
|
|
|
317
327
|
commit: "0ea51c6"
|
|
318
328
|
issue: null
|
|
319
329
|
tests:
|
|
320
|
-
- "test/visual/
|
|
321
|
-
- "test/visual/accessibility.spec.js"
|
|
330
|
+
- "test/visual/features/layouts.spec.js"
|
|
331
|
+
- "test/visual/core/accessibility.spec.js"
|
|
322
332
|
references:
|
|
323
333
|
javascript:
|
|
324
334
|
- "assets/js/modules/navigation/keyboard.js"
|
|
@@ -351,8 +361,7 @@ features:
|
|
|
351
361
|
commit: "0ea51c6"
|
|
352
362
|
issue: null
|
|
353
363
|
tests:
|
|
354
|
-
- "test/visual/
|
|
355
|
-
- "test/visual/ui-refresh.spec.js"
|
|
364
|
+
- "test/visual/features/content-enhancements.spec.js"
|
|
356
365
|
references:
|
|
357
366
|
include: "_includes/navigation/sidebar-right.html"
|
|
358
367
|
styles: "_sass/custom.scss"
|
|
@@ -379,7 +388,7 @@ features:
|
|
|
379
388
|
commit: "0ea51c6"
|
|
380
389
|
issue: null
|
|
381
390
|
tests:
|
|
382
|
-
- "test/visual/accessibility.spec.js"
|
|
391
|
+
- "test/visual/core/accessibility.spec.js"
|
|
383
392
|
references:
|
|
384
393
|
include: "_includes/core/header.html"
|
|
385
394
|
styles: "_sass/custom.scss"
|
|
@@ -621,7 +630,7 @@ features:
|
|
|
621
630
|
commit: "a8426a5"
|
|
622
631
|
issue: null
|
|
623
632
|
tests:
|
|
624
|
-
- "test/visual/layouts.spec.js"
|
|
633
|
+
- "test/visual/features/layouts.spec.js"
|
|
625
634
|
references:
|
|
626
635
|
layouts:
|
|
627
636
|
- "_layouts/root.html"
|
|
@@ -667,7 +676,7 @@ features:
|
|
|
667
676
|
commit: "a8426a5"
|
|
668
677
|
issue: null
|
|
669
678
|
tests:
|
|
670
|
-
- "test/visual/component-showcase.spec.js"
|
|
679
|
+
- "test/visual/features/component-showcase.spec.js"
|
|
671
680
|
references:
|
|
672
681
|
includes:
|
|
673
682
|
- "_includes/core/"
|
|
@@ -932,7 +941,7 @@ features:
|
|
|
932
941
|
commit: "a8426a5"
|
|
933
942
|
issue: null
|
|
934
943
|
tests:
|
|
935
|
-
- "test/visual/
|
|
944
|
+
- "test/visual/features/content-enhancements.spec.js"
|
|
936
945
|
references:
|
|
937
946
|
scripts:
|
|
938
947
|
- "assets/js/back-to-top.js"
|
|
@@ -957,7 +966,7 @@ features:
|
|
|
957
966
|
commit: "a8426a5"
|
|
958
967
|
issue: null
|
|
959
968
|
tests:
|
|
960
|
-
- "test/visual/
|
|
969
|
+
- "test/visual/features/content-enhancements.spec.js"
|
|
961
970
|
references:
|
|
962
971
|
scripts:
|
|
963
972
|
- "assets/js/code-copy.js"
|
|
@@ -983,7 +992,7 @@ features:
|
|
|
983
992
|
commit: "55bee97"
|
|
984
993
|
issue: null
|
|
985
994
|
tests:
|
|
986
|
-
- "test/visual/
|
|
995
|
+
- "test/visual/features/appearance.spec.js"
|
|
987
996
|
references:
|
|
988
997
|
scripts:
|
|
989
998
|
- "assets/js/modules/theme/appearance.js"
|
|
@@ -1015,8 +1024,7 @@ features:
|
|
|
1015
1024
|
commit: "21eb458"
|
|
1016
1025
|
issue: null
|
|
1017
1026
|
tests:
|
|
1018
|
-
- "test/visual/search.spec.js"
|
|
1019
|
-
- "test/visual/search-degradation.spec.js"
|
|
1027
|
+
- "test/visual/features/search.spec.js"
|
|
1020
1028
|
references:
|
|
1021
1029
|
scripts:
|
|
1022
1030
|
- "assets/js/search-modal.js"
|
|
@@ -1048,7 +1056,7 @@ features:
|
|
|
1048
1056
|
commit: "a8426a5"
|
|
1049
1057
|
issue: null
|
|
1050
1058
|
tests:
|
|
1051
|
-
- "test/visual/
|
|
1059
|
+
- "test/visual/features/navbar.spec.js"
|
|
1052
1060
|
references:
|
|
1053
1061
|
scripts:
|
|
1054
1062
|
- "assets/js/auto-hide-nav.js"
|
|
@@ -1073,7 +1081,7 @@ features:
|
|
|
1073
1081
|
commit: "a8426a5"
|
|
1074
1082
|
issue: null
|
|
1075
1083
|
tests:
|
|
1076
|
-
- "test/visual/
|
|
1084
|
+
- "test/visual/features/appearance.spec.js"
|
|
1077
1085
|
references:
|
|
1078
1086
|
scripts:
|
|
1079
1087
|
- "assets/js/particles.js"
|
|
@@ -1105,7 +1113,7 @@ features:
|
|
|
1105
1113
|
commit: "a8426a5"
|
|
1106
1114
|
issue: null
|
|
1107
1115
|
tests:
|
|
1108
|
-
- "test/visual/
|
|
1116
|
+
- "test/visual/features/comments.spec.js"
|
|
1109
1117
|
references:
|
|
1110
1118
|
includes:
|
|
1111
1119
|
- "_includes/content/giscus.html"
|
|
@@ -1140,7 +1148,7 @@ features:
|
|
|
1140
1148
|
commit: "31f827e"
|
|
1141
1149
|
issue: null
|
|
1142
1150
|
tests:
|
|
1143
|
-
- "test/visual/
|
|
1151
|
+
- "test/visual/features/content-enhancements.spec.js"
|
|
1144
1152
|
references:
|
|
1145
1153
|
docs:
|
|
1146
1154
|
- "pages/_docs/features/mathjax-math.md"
|
|
@@ -1165,8 +1173,7 @@ features:
|
|
|
1165
1173
|
commit: "a8426a5"
|
|
1166
1174
|
issue: null
|
|
1167
1175
|
tests:
|
|
1168
|
-
- "test/visual/
|
|
1169
|
-
- "test/visual/ui-refresh.spec.js"
|
|
1176
|
+
- "test/visual/features/content-enhancements.spec.js"
|
|
1170
1177
|
references:
|
|
1171
1178
|
includes:
|
|
1172
1179
|
- "_includes/content/toc.html"
|
|
@@ -1251,8 +1258,8 @@ features:
|
|
|
1251
1258
|
commit: "a8426a5"
|
|
1252
1259
|
issue: null
|
|
1253
1260
|
tests:
|
|
1254
|
-
- "test/visual/layouts.spec.js"
|
|
1255
|
-
- "test/visual/authors
|
|
1261
|
+
- "test/visual/features/layouts.spec.js"
|
|
1262
|
+
- "test/visual/features/authors.spec.js"
|
|
1256
1263
|
references:
|
|
1257
1264
|
includes:
|
|
1258
1265
|
- "_includes/navigation/breadcrumbs.html"
|
|
@@ -1421,7 +1428,7 @@ features:
|
|
|
1421
1428
|
issue: null
|
|
1422
1429
|
tests:
|
|
1423
1430
|
- "test/test_obsidian.sh"
|
|
1424
|
-
- "test/visual/obsidian-callouts.spec.js"
|
|
1431
|
+
- "test/visual/features/obsidian-callouts.spec.js"
|
|
1425
1432
|
references:
|
|
1426
1433
|
includes:
|
|
1427
1434
|
- "_includes/obsidian/full-graph.html"
|
|
@@ -1471,7 +1478,7 @@ features:
|
|
|
1471
1478
|
issue: null
|
|
1472
1479
|
tests:
|
|
1473
1480
|
- "test/test_core.sh"
|
|
1474
|
-
- "test/visual/layouts.spec.js"
|
|
1481
|
+
- "test/visual/features/layouts.spec.js"
|
|
1475
1482
|
references:
|
|
1476
1483
|
page: "404.html"
|
|
1477
1484
|
docs: "pages/_docs/features/smart-404.md"
|
|
@@ -1512,8 +1519,7 @@ features:
|
|
|
1512
1519
|
commit: "a8426a5"
|
|
1513
1520
|
issue: null
|
|
1514
1521
|
tests:
|
|
1515
|
-
- "test/visual/
|
|
1516
|
-
- "test/visual/navbar-responsive.spec.js"
|
|
1522
|
+
- "test/visual/features/navbar.spec.js"
|
|
1517
1523
|
references:
|
|
1518
1524
|
includes:
|
|
1519
1525
|
- "_includes/navigation/navbar.html"
|
|
@@ -1533,8 +1539,7 @@ features:
|
|
|
1533
1539
|
commit: "27550da"
|
|
1534
1540
|
issue: null
|
|
1535
1541
|
tests:
|
|
1536
|
-
- "test/visual/admin
|
|
1537
|
-
- "test/visual/admin-nav.spec.js"
|
|
1542
|
+
- "test/visual/features/admin.spec.js"
|
|
1538
1543
|
references:
|
|
1539
1544
|
layout: "_layouts/admin.html"
|
|
1540
1545
|
includes:
|
|
@@ -1645,8 +1650,7 @@ features:
|
|
|
1645
1650
|
commit: "5533f34"
|
|
1646
1651
|
issue: null
|
|
1647
1652
|
tests:
|
|
1648
|
-
- "test/visual/navbar
|
|
1649
|
-
- "test/visual/ui-refresh.spec.js"
|
|
1653
|
+
- "test/visual/features/navbar.spec.js"
|
|
1650
1654
|
references:
|
|
1651
1655
|
scripts:
|
|
1652
1656
|
- "assets/js/modules/"
|
|
@@ -1753,7 +1757,7 @@ features:
|
|
|
1753
1757
|
commit: "341cc67"
|
|
1754
1758
|
issue: null
|
|
1755
1759
|
tests:
|
|
1756
|
-
- "test/visual/ai-chat.spec.js"
|
|
1760
|
+
- "test/visual/features/ai-chat.spec.js"
|
|
1757
1761
|
references:
|
|
1758
1762
|
includes: ["_includes/components/ai-chat.html"]
|
|
1759
1763
|
layouts: ["_layouts/root.html"]
|
|
@@ -1780,7 +1784,7 @@ features:
|
|
|
1780
1784
|
commit: "a6db3042"
|
|
1781
1785
|
issue: null
|
|
1782
1786
|
tests:
|
|
1783
|
-
- "test/visual/authors
|
|
1787
|
+
- "test/visual/features/authors.spec.js"
|
|
1784
1788
|
references:
|
|
1785
1789
|
plugin: "_plugins/author_pages_generator.rb"
|
|
1786
1790
|
layouts:
|
|
@@ -1805,7 +1809,7 @@ features:
|
|
|
1805
1809
|
commit: "53132416"
|
|
1806
1810
|
issue: null
|
|
1807
1811
|
tests:
|
|
1808
|
-
- "test/visual/layouts.spec.js"
|
|
1812
|
+
- "test/visual/features/layouts.spec.js"
|
|
1809
1813
|
references:
|
|
1810
1814
|
layout: "_layouts/news.html"
|
|
1811
1815
|
|
|
@@ -1824,8 +1828,8 @@ features:
|
|
|
1824
1828
|
commit: "06691f93"
|
|
1825
1829
|
issue: null
|
|
1826
1830
|
tests:
|
|
1827
|
-
- "test/visual/
|
|
1828
|
-
- "test/visual/layouts.spec.js"
|
|
1831
|
+
- "test/visual/features/sidebar-navigation.spec.js"
|
|
1832
|
+
- "test/visual/features/layouts.spec.js"
|
|
1829
1833
|
references:
|
|
1830
1834
|
layout: "_layouts/section.html"
|
|
1831
1835
|
|
|
@@ -1844,7 +1848,7 @@ features:
|
|
|
1844
1848
|
commit: "06691f93"
|
|
1845
1849
|
issue: null
|
|
1846
1850
|
tests:
|
|
1847
|
-
- "test/visual/layouts.spec.js"
|
|
1851
|
+
- "test/visual/features/layouts.spec.js"
|
|
1848
1852
|
references:
|
|
1849
1853
|
layout: "_layouts/article.html"
|
|
1850
1854
|
include: "_includes/components/post-type-badge.html"
|
|
@@ -1864,9 +1868,8 @@ features:
|
|
|
1864
1868
|
commit: "27550dac"
|
|
1865
1869
|
issue: null
|
|
1866
1870
|
tests:
|
|
1867
|
-
- "test/visual/
|
|
1868
|
-
- "test/visual/
|
|
1869
|
-
- "test/visual/theme-colors.spec.js"
|
|
1871
|
+
- "test/visual/features/appearance.spec.js"
|
|
1872
|
+
- "test/visual/features/appearance-snapshot.spec.js"
|
|
1870
1873
|
references:
|
|
1871
1874
|
scripts:
|
|
1872
1875
|
- "assets/js/background-customizer.js"
|
|
@@ -1999,7 +2002,7 @@ features:
|
|
|
1999
2002
|
commit: "7ba0f834"
|
|
2000
2003
|
issue: null
|
|
2001
2004
|
tests:
|
|
2002
|
-
- "test/visual/component-showcase.spec.js"
|
|
2005
|
+
- "test/visual/features/component-showcase.spec.js"
|
|
2003
2006
|
references:
|
|
2004
2007
|
include: "_includes/components/component-showcase.html"
|
|
2005
2008
|
|
|
@@ -2125,7 +2128,7 @@ features:
|
|
|
2125
2128
|
commit: "3b951604"
|
|
2126
2129
|
issue: null
|
|
2127
2130
|
tests:
|
|
2128
|
-
- "test/visual/settings-panel.spec.js"
|
|
2131
|
+
- "test/visual/features/settings-panel.spec.js"
|
|
2129
2132
|
references:
|
|
2130
2133
|
includes:
|
|
2131
2134
|
- "_includes/components/info-section.html"
|
|
@@ -2144,3 +2147,40 @@ features:
|
|
|
2144
2147
|
- "Appearance tab: one-click color mode, 9 theme skins, background layer opacity, primary color"
|
|
2145
2148
|
- "Site tab: environment badge, copyable page URL, quick links, theme & build info, admin links"
|
|
2146
2149
|
- "Developer tab: breadcrumb page location, page metadata, source-code shortcuts"
|
|
2150
|
+
|
|
2151
|
+
- id: ZER0-078
|
|
2152
|
+
title: "AI-Generated Multilingual Translations"
|
|
2153
|
+
description: "Build-time translation pipeline: English stays the only human-maintained language while scripts/translate.rb (Claude Code OAuth) generates alternate-language pages, UI strings, and the manifest behind the language toggle"
|
|
2154
|
+
implemented: true
|
|
2155
|
+
version: "1.27.0"
|
|
2156
|
+
link: "/"
|
|
2157
|
+
docs: "https://github.com/bamr87/zer0-mistakes/blob/main/docs/systems/multilingual-translation.md"
|
|
2158
|
+
tags: [i18n, ai, automation, content, ui]
|
|
2159
|
+
date: 2026-07-17
|
|
2160
|
+
provenance:
|
|
2161
|
+
introduced_in: "1.27.0"
|
|
2162
|
+
pr: 316
|
|
2163
|
+
commit: "01dc8fa"
|
|
2164
|
+
issue: null
|
|
2165
|
+
tests:
|
|
2166
|
+
- "test/test_i18n.sh"
|
|
2167
|
+
- "test/visual/features/language-toggle.spec.js"
|
|
2168
|
+
references:
|
|
2169
|
+
includes:
|
|
2170
|
+
- "_includes/core/i18n.html"
|
|
2171
|
+
- "_includes/core/hreflang.html"
|
|
2172
|
+
- "_includes/components/language-toggle.html"
|
|
2173
|
+
- "_includes/components/translation-notice.html"
|
|
2174
|
+
scripts:
|
|
2175
|
+
- "scripts/translate.rb"
|
|
2176
|
+
workflows:
|
|
2177
|
+
- ".github/workflows/translate.yml"
|
|
2178
|
+
data:
|
|
2179
|
+
- "_data/ui-text.yml"
|
|
2180
|
+
- "_data/i18n/languages.yml"
|
|
2181
|
+
docs: "docs/systems/multilingual-translation.md"
|
|
2182
|
+
features:
|
|
2183
|
+
- "One large full-translation job (workflow_dispatch) plus bounded incremental runs when English content changes"
|
|
2184
|
+
- "Manifest-driven SHA change detection, pruning of deleted sources, and generated /fr<en-url> permalinks (GitHub Pages safe-mode friendly)"
|
|
2185
|
+
- "Markdown-safe segment translation: code, Liquid, wiki-links and URLs masked as placeholders and validated"
|
|
2186
|
+
- "Navbar language toggle with availability states, hreflang alternates, per-page html lang, machine-translation notice"
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# _data/feedback_types.yml
|
|
2
|
+
#
|
|
3
|
+
# Request types for the page-feedback capture widget:
|
|
4
|
+
# _includes/components/page-feedback.html + assets/js/page-feedback.js
|
|
5
|
+
#
|
|
6
|
+
# This REPLACES the build-time "Copilot Agent" dropdown that baked
|
|
7
|
+
# _data/prompts.yml into every <a href> at build time. The widget now injects
|
|
8
|
+
# this list as JSON and assembles the GitHub issue at RUNTIME, so it can also
|
|
9
|
+
# attach live page context and a captured console-log buffer — things a
|
|
10
|
+
# build-time Liquid link can never see.
|
|
11
|
+
#
|
|
12
|
+
# ─── Schema (per entry) ──────────────────────────────────────────────────────
|
|
13
|
+
# id unique slug — used in the issue title tag ([id]) and analytics
|
|
14
|
+
# label short text shown in the type selector
|
|
15
|
+
# icon Bootstrap Icons class (https://icons.getbootstrap.com/)
|
|
16
|
+
# group section header in the selector ("This page" | "The site")
|
|
17
|
+
# scope page | site — targets this page, or the theme as a whole
|
|
18
|
+
# description one-line helper shown under the label
|
|
19
|
+
# labels GitHub labels applied to the issue. MUST already exist in the
|
|
20
|
+
# repo: GitHub SILENTLY DROPS unknown labels from a prefilled URL
|
|
21
|
+
# (this was the old feature's `labels=ai-agent` bug). Verify with
|
|
22
|
+
# `gh label list`. The marker label from
|
|
23
|
+
# site.page_feedback.default_labels is added on top of these.
|
|
24
|
+
# agent true → assign @copilot and attach `directive` for autonomous work
|
|
25
|
+
# false → human triage only (no assignee, no directive)
|
|
26
|
+
# directive compact agent instruction. Kept SHORT on purpose — it rides in
|
|
27
|
+
# the prefilled issue URL, and long bodies blow the URL-length
|
|
28
|
+
# budget. The full context table + logs are added by the widget.
|
|
29
|
+
# placeholder textarea placeholder tailored to this request type
|
|
30
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
31
|
+
|
|
32
|
+
# ─── This page — scoped to the page the widget was opened from ───────────────
|
|
33
|
+
|
|
34
|
+
- id: fix-page
|
|
35
|
+
label: Report a problem
|
|
36
|
+
icon: bi-bug
|
|
37
|
+
group: This page
|
|
38
|
+
scope: page
|
|
39
|
+
description: A typo, broken link, wrong information, or something rendering badly
|
|
40
|
+
labels: [bug]
|
|
41
|
+
agent: true
|
|
42
|
+
directive: >-
|
|
43
|
+
Reproduce and fix the reported defect on the page identified in Page
|
|
44
|
+
Context. Keep the change minimal and surgical; verify with a Jekyll build.
|
|
45
|
+
placeholder: What is wrong, where on the page, and what did you expect instead?
|
|
46
|
+
|
|
47
|
+
- id: improve-page
|
|
48
|
+
label: Improve this page
|
|
49
|
+
icon: bi-stars
|
|
50
|
+
group: This page
|
|
51
|
+
scope: page
|
|
52
|
+
description: Polish the copy, structure, or presentation
|
|
53
|
+
labels: [enhancement, "area:docs"]
|
|
54
|
+
agent: true
|
|
55
|
+
directive: >-
|
|
56
|
+
Act as a content editor for the page in Page Context. Tighten copy, fix
|
|
57
|
+
grammar, improve heading hierarchy and visual rhythm — without changing the
|
|
58
|
+
core message or breaking links.
|
|
59
|
+
placeholder: What would make this page clearer, tighter, or more useful?
|
|
60
|
+
|
|
61
|
+
- id: expand-page
|
|
62
|
+
label: Add missing detail
|
|
63
|
+
icon: bi-arrows-angle-expand
|
|
64
|
+
group: This page
|
|
65
|
+
scope: page
|
|
66
|
+
description: Add depth, examples, or a section a reader would expect
|
|
67
|
+
labels: [enhancement, "area:docs"]
|
|
68
|
+
agent: true
|
|
69
|
+
directive: >-
|
|
70
|
+
Expand the page in Page Context with concrete examples, prerequisites, and
|
|
71
|
+
any expected-but-missing sections. Preserve tone and front matter.
|
|
72
|
+
placeholder: What is missing? Which examples or sections would help?
|
|
73
|
+
|
|
74
|
+
- id: update-page
|
|
75
|
+
label: Flag outdated content
|
|
76
|
+
icon: bi-arrow-clockwise
|
|
77
|
+
group: This page
|
|
78
|
+
scope: page
|
|
79
|
+
description: Stale versions, dead links, or old screenshots
|
|
80
|
+
labels: [documentation, "area:docs"]
|
|
81
|
+
agent: true
|
|
82
|
+
directive: >-
|
|
83
|
+
Audit the page in Page Context for stale versions, dead links, and outdated
|
|
84
|
+
screenshots; refresh them and bump `lastmod`.
|
|
85
|
+
placeholder: What is out of date? Paste the stale value or link if you can.
|
|
86
|
+
|
|
87
|
+
- id: accessibility
|
|
88
|
+
label: Accessibility issue
|
|
89
|
+
icon: bi-universal-access
|
|
90
|
+
group: This page
|
|
91
|
+
scope: page
|
|
92
|
+
description: Contrast, keyboard, screen-reader, or focus problems
|
|
93
|
+
labels: ["area:a11y"]
|
|
94
|
+
agent: true
|
|
95
|
+
directive: >-
|
|
96
|
+
Audit the page in Page Context against WCAG 2.1 AA for the reported barrier
|
|
97
|
+
(contrast, keyboard, focus, ARIA, alt text) and propose concrete fixes.
|
|
98
|
+
placeholder: What barrier did you hit? Which assistive tech or input method?
|
|
99
|
+
|
|
100
|
+
# ─── The site — theme-wide UI, components, features, performance ──────────────
|
|
101
|
+
|
|
102
|
+
- id: ui-ux
|
|
103
|
+
label: UI / UX improvement
|
|
104
|
+
icon: bi-palette
|
|
105
|
+
group: The site
|
|
106
|
+
scope: site
|
|
107
|
+
description: A design or usability refinement for the theme
|
|
108
|
+
labels: [enhancement, "area:feat"]
|
|
109
|
+
agent: true
|
|
110
|
+
directive: >-
|
|
111
|
+
Propose a Bootstrap-first UI/UX refinement, using the page in Page Context
|
|
112
|
+
as the starting example. Cover responsive behaviour, dark mode, and a11y.
|
|
113
|
+
placeholder: What feels off, and how might it look or behave instead?
|
|
114
|
+
|
|
115
|
+
- id: performance
|
|
116
|
+
label: Performance
|
|
117
|
+
icon: bi-speedometer2
|
|
118
|
+
group: The site
|
|
119
|
+
scope: site
|
|
120
|
+
description: Slow load, layout shift, or heavy assets
|
|
121
|
+
labels: ["area:perf"]
|
|
122
|
+
agent: true
|
|
123
|
+
directive: >-
|
|
124
|
+
Profile the page in Page Context (LCP, CLS, INP), identify the bottleneck,
|
|
125
|
+
and propose GitHub Pages-safe fixes.
|
|
126
|
+
placeholder: What felt slow? On what device / connection?
|
|
127
|
+
|
|
128
|
+
- id: feature
|
|
129
|
+
label: Feature request
|
|
130
|
+
icon: bi-lightbulb
|
|
131
|
+
group: The site
|
|
132
|
+
scope: site
|
|
133
|
+
description: Propose a new site-wide capability
|
|
134
|
+
labels: [enhancement, "area:feat"]
|
|
135
|
+
agent: false
|
|
136
|
+
directive: ""
|
|
137
|
+
placeholder: What should it do, and who benefits?
|
|
138
|
+
|
|
139
|
+
- id: question
|
|
140
|
+
label: Ask a question
|
|
141
|
+
icon: bi-question-circle
|
|
142
|
+
group: The site
|
|
143
|
+
scope: site
|
|
144
|
+
description: Something unclear — not necessarily a bug
|
|
145
|
+
labels: [question]
|
|
146
|
+
agent: false
|
|
147
|
+
directive: ""
|
|
148
|
+
placeholder: What are you trying to do, and where did you get stuck?
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Feature: ZER0-078
|
|
2
|
+
# Language display metadata for the language toggle
|
|
3
|
+
# (_includes/components/language-toggle.html).
|
|
4
|
+
#
|
|
5
|
+
# This file is CONFIGURATION, not translated content: a language's native
|
|
6
|
+
# name is a fixed fact, not something the translation pipeline generates.
|
|
7
|
+
# Add an entry here when adding a language to `translation.languages` in
|
|
8
|
+
# _config.yml. Everything else under _data/i18n/ (<lang>.yml, manifest.yml)
|
|
9
|
+
# is GENERATED by scripts/translate.rb — never hand-edited.
|
|
10
|
+
en:
|
|
11
|
+
name: English
|
|
12
|
+
native: English
|
|
13
|
+
fr:
|
|
14
|
+
name: French
|
|
15
|
+
native: Français
|
|
16
|
+
es:
|
|
17
|
+
name: Spanish
|
|
18
|
+
native: Español
|
|
19
|
+
de:
|
|
20
|
+
name: German
|
|
21
|
+
native: Deutsch
|
|
22
|
+
pt:
|
|
23
|
+
name: Portuguese
|
|
24
|
+
native: Português
|
|
25
|
+
it:
|
|
26
|
+
name: Italian
|
|
27
|
+
native: Italiano
|
|
28
|
+
ja:
|
|
29
|
+
name: Japanese
|
|
30
|
+
native: 日本語
|
|
31
|
+
zh:
|
|
32
|
+
name: Chinese
|
|
33
|
+
native: 中文
|
|
34
|
+
ar:
|
|
35
|
+
name: Arabic
|
|
36
|
+
native: العربية
|
data/_data/navigation/README.md
CHANGED
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
# - The theme also clips stray horizontal page overflow at the root, so an
|
|
75
75
|
# over-stuffed nav or wide content can never make the fixed navbar look "cut
|
|
76
76
|
# off". Wide tables/code keep their own local scroll. Regression-guarded by
|
|
77
|
-
# test/visual/navbar
|
|
77
|
+
# test/visual/features/navbar.spec.js.
|
|
78
78
|
#
|
|
79
79
|
# ## Schema Validation
|
|
80
80
|
#
|
data/_data/theme-manifest.yml
CHANGED
|
@@ -26,7 +26,6 @@ theme_data_paths:
|
|
|
26
26
|
# Plugin files that consumers using remote_theme MUST vendor locally.
|
|
27
27
|
# GitHub Pages does not load plugins from a remote_theme source.
|
|
28
28
|
required_plugin_paths:
|
|
29
|
-
- _plugins/preview_image_generator.rb
|
|
30
29
|
- _plugins/obsidian_links.rb
|
|
31
30
|
# Optional plugins consumers can vendor for enhanced functionality.
|
|
32
31
|
optional_plugin_paths:
|
|
@@ -36,7 +35,6 @@ optional_plugin_paths:
|
|
|
36
35
|
|
|
37
36
|
# Legacy alias — all plugin paths combined (kept for backward compatibility).
|
|
38
37
|
plugin_paths:
|
|
39
|
-
- _plugins/preview_image_generator.rb
|
|
40
38
|
- _plugins/obsidian_links.rb
|
|
41
39
|
- _plugins/admin_page_urls.rb
|
|
42
40
|
- _plugins/content_statistics_generator.rb
|