bilingual-jekyll-resume-theme 1.0.1 → 1.0.2

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.

Potentially problematic release.


This version of bilingual-jekyll-resume-theme might be problematic. Click here for more details.

Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -0
  3. data/README.md +8 -8
  4. data/{docs/_data/_config.sample.yml → _config.sample.yml} +5 -0
  5. data/_includes/language-switcher.html +1 -1
  6. data/bin/check-data-keys +5 -4
  7. data/bin/validate-resume +5 -4
  8. data/docs/ACCESSIBILITY_GUIDE.md +1 -1
  9. data/docs/COMPLETED_AUDIT.md +52 -45
  10. data/docs/CONFIG_GUIDE.md +2 -2
  11. data/docs/MULTILINGUAL_GUIDE.md +2 -2
  12. data/docs/PROJECT_OVERVIEW.md +6 -11
  13. data/docs/VALIDATION_GUIDE.md +10 -10
  14. data/lib/bilingual-jekyll-resume-theme/template_key_checker.rb +1 -1
  15. metadata +2 -88
  16. data/docs/_data/_config.demo.yml +0 -62
  17. data/docs/_data/ar/associations.yml +0 -36
  18. data/docs/_data/ar/certifications.yml +0 -51
  19. data/docs/_data/ar/courses.yml +0 -46
  20. data/docs/_data/ar/education.yml +0 -48
  21. data/docs/_data/ar/experience.yml +0 -55
  22. data/docs/_data/ar/header.yml +0 -7
  23. data/docs/_data/ar/interests.yml +0 -15
  24. data/docs/_data/ar/languages.yml +0 -29
  25. data/docs/_data/ar/links.yml +0 -24
  26. data/docs/_data/ar/projects.yml +0 -44
  27. data/docs/_data/ar/recognitions.yml +0 -42
  28. data/docs/_data/ar/skills.yml +0 -33
  29. data/docs/_data/ar/volunteering.yml +0 -44
  30. data/docs/_data/de/associations.yml +0 -36
  31. data/docs/_data/de/certifications.yml +0 -51
  32. data/docs/_data/de/courses.yml +0 -46
  33. data/docs/_data/de/education.yml +0 -48
  34. data/docs/_data/de/experience.yml +0 -55
  35. data/docs/_data/de/header.yml +0 -7
  36. data/docs/_data/de/interests.yml +0 -15
  37. data/docs/_data/de/languages.yml +0 -29
  38. data/docs/_data/de/links.yml +0 -24
  39. data/docs/_data/de/projects.yml +0 -44
  40. data/docs/_data/de/recognitions.yml +0 -42
  41. data/docs/_data/de/skills.yml +0 -33
  42. data/docs/_data/de/volunteering.yml +0 -44
  43. data/docs/_data/en/associations.yml +0 -36
  44. data/docs/_data/en/certifications.yml +0 -51
  45. data/docs/_data/en/courses.yml +0 -46
  46. data/docs/_data/en/education.yml +0 -48
  47. data/docs/_data/en/experience.yml +0 -55
  48. data/docs/_data/en/header.yml +0 -7
  49. data/docs/_data/en/interests.yml +0 -15
  50. data/docs/_data/en/languages.yml +0 -29
  51. data/docs/_data/en/links.yml +0 -24
  52. data/docs/_data/en/projects.yml +0 -44
  53. data/docs/_data/en/recognitions.yml +0 -42
  54. data/docs/_data/en/skills.yml +0 -33
  55. data/docs/_data/en/volunteering.yml +0 -44
  56. data/docs/_data/es/associations.yml +0 -36
  57. data/docs/_data/es/certifications.yml +0 -51
  58. data/docs/_data/es/courses.yml +0 -46
  59. data/docs/_data/es/education.yml +0 -48
  60. data/docs/_data/es/experience.yml +0 -55
  61. data/docs/_data/es/header.yml +0 -7
  62. data/docs/_data/es/interests.yml +0 -15
  63. data/docs/_data/es/languages.yml +0 -29
  64. data/docs/_data/es/links.yml +0 -24
  65. data/docs/_data/es/projects.yml +0 -44
  66. data/docs/_data/es/recognitions.yml +0 -42
  67. data/docs/_data/es/skills.yml +0 -33
  68. data/docs/_data/es/volunteering.yml +0 -44
  69. data/docs/_data/fr/associations.yml +0 -36
  70. data/docs/_data/fr/certifications.yml +0 -51
  71. data/docs/_data/fr/courses.yml +0 -46
  72. data/docs/_data/fr/education.yml +0 -48
  73. data/docs/_data/fr/experience.yml +0 -55
  74. data/docs/_data/fr/header.yml +0 -7
  75. data/docs/_data/fr/interests.yml +0 -15
  76. data/docs/_data/fr/languages.yml +0 -29
  77. data/docs/_data/fr/links.yml +0 -24
  78. data/docs/_data/fr/projects.yml +0 -44
  79. data/docs/_data/fr/recognitions.yml +0 -42
  80. data/docs/_data/fr/skills.yml +0 -33
  81. data/docs/_data/fr/volunteering.yml +0 -44
  82. data/docs/_data/ur/associations.yml +0 -36
  83. data/docs/_data/ur/certifications.yml +0 -51
  84. data/docs/_data/ur/courses.yml +0 -46
  85. data/docs/_data/ur/education.yml +0 -48
  86. data/docs/_data/ur/experience.yml +0 -55
  87. data/docs/_data/ur/header.yml +0 -7
  88. data/docs/_data/ur/interests.yml +0 -15
  89. data/docs/_data/ur/languages.yml +0 -29
  90. data/docs/_data/ur/links.yml +0 -24
  91. data/docs/_data/ur/projects.yml +0 -44
  92. data/docs/_data/ur/recognitions.yml +0 -42
  93. data/docs/_data/ur/skills.yml +0 -33
  94. data/docs/_data/ur/volunteering.yml +0 -44
  95. data/docs/assets/images/sherlock-holmes.jpg +0 -0
  96. data/docs/demo/ar.md +0 -5
  97. data/docs/demo/de.md +0 -5
  98. data/docs/demo/en.md +0 -5
  99. data/docs/demo/es.md +0 -5
  100. data/docs/demo/fr.md +0 -5
  101. data/docs/demo/ur.md +0 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e8fb9be1096f1c150e9d04dade9091453ad65aee770b47550fa2fd234e4f4960
4
- data.tar.gz: 3e2b21e42d72f16e81d6a066a24834f031acf548a0b96edd744131d255a2abcb
3
+ metadata.gz: b8eb8d16040a681b4a06c1d6eba60b957aee132434d038ce56b53415e74774f9
4
+ data.tar.gz: e7cb05ea3e65d241cab36fb5734062a13af1931e8cabe736ee749a108bf8655b
5
5
  SHA512:
6
- metadata.gz: 57375b0522accc404a40ca9082d836b4accb27c73b36890a97cbb9e4c5647da2e7d55942da194adc3bb35be30f77443148d34944ea9dbbe3e455402e6f21a595
7
- data.tar.gz: 25c4703f7327853e8c011505837f714ac5f88d5070af3375bff2a509b2cbeee044b31877def62b503db70b6ea6486262da356600e6b92a8cc28e25561c5bb4ce
6
+ metadata.gz: c13e0bd5ff9f935997e3977abe7e7e8b257ace6499f0fdc098f8955dc1999ffd36103518e5143c9d3357763f511cb9e5448e8fbb8cc41bc9c7be9ee9493cd432
7
+ data.tar.gz: '0069c903af37bd0e31ffa14ac4e5901d4f5c19d4ae3ffca36d41dd647196f931bd5d87593b65a158fd25017f75704cf7750f4803a6887e6a41665e6ed3ddda3a'
data/CHANGELOG.md CHANGED
@@ -4,6 +4,21 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+ ## [1.0.2] - 2026-09-25
8
+
9
+ ### Changed
10
+ * Update submodule to latest commit ([`f1779be`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/f1779be39697ccea22e9185b0bf57278e8a29707))
11
+
12
+ * Extract Sherlock Holmes demo to submodule and relocate sample config ([`bfd9e83`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/bfd9e8374753885fece3098cfd00f40606e5d26b))
13
+
14
+ * Archive completed features 3.2 and 3.3 and streamline audit log ([`39ae7f3`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/39ae7f346dff45828e74fafbfb445420b0d699dd))
15
+
16
+
17
+ ### Fixed
18
+ * Render language switcher on error pages ([`8e942f9`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/8e942f9fccc23a2c6e097938992c3f23f446bf97))
19
+
20
+ * Register theme gem in jekyll_plugins group; bump demo submodule ([`392c192`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/392c19209a42f629aba5e1c1e9a2a964832bf0a9))
21
+
7
22
  ## [1.0.1] - 2026-09-24
8
23
 
9
24
  ### Changed
@@ -357,6 +372,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
357
372
 
358
373
  * Initial commit (New Theme Template) ([`00af662`](https://github.com/kmutahar/bilingual-jekyll-resume-theme/commit/00af6628dfec7aefe0ef7d7083bf98c9713a5ffd))
359
374
 
375
+ [1.0.2]: https://github.com/kmutahar/bilingual-jekyll-resume-theme/compare/v1.0.1...v1.0.2
360
376
  [1.0.1]: https://github.com/kmutahar/bilingual-jekyll-resume-theme/compare/v1.0.0...v1.0.1
361
377
  [1.0.0]: https://github.com/kmutahar/bilingual-jekyll-resume-theme/compare/v0.9.0...v1.0.0
362
378
  [0.9.0]: https://github.com/kmutahar/bilingual-jekyll-resume-theme/compare/v0.8.0...v0.9.0
data/README.md CHANGED
@@ -42,9 +42,9 @@ bundle install
42
42
 
43
43
  ### Basic Setup
44
44
 
45
- 1. **Copy sample configuration**: Use `docs/_data/_config.sample.yml` as a starting point for your `_config.yml`. Keep a `languages.<lang>` entry for each language you publish and delete the rest.
45
+ 1. **Copy sample configuration**: Use `_config.sample.yml` at the repository root as a starting point for your `_config.yml`. Keep a `languages.<lang>` entry for each language you publish and delete the rest.
46
46
 
47
- 2. **Copy sample data files**: Copy each language folder you need from `docs/_data/` (`en`, `ar`, `es`, `fr`, `de`, `ur`) to your site's `_data/`. Each holds 13 files, including `header.yml` for the intro paragraph.
47
+ 2. **Copy sample data files**: Copy each language folder you need from `demo/_data/` (`en`, `ar`, `es`, `fr`, `de`, `ur`) to your site's `_data/`. Each holds 13 files, including `header.yml` for the intro paragraph.
48
48
 
49
49
  3. **Create resume pages**: One page per language, all using the `resume` layout:
50
50
  ```yaml
@@ -130,7 +130,7 @@ See the [Configuration Guide](docs/CONFIG_GUIDE.md#3-languages) for every per-la
130
130
 
131
131
  ### Sample Files
132
132
 
133
- `docs/_data/{en,ar,es,fr,de,ur}/` hold a complete Sherlock Holmes demo resume in six languages, covering all 12 section types. Copy the folders you need to your site.
133
+ `demo/_data/{en,ar,es,fr,de,ur}/` hold a complete Sherlock Holmes demo resume in six languages, covering all 12 section types. Copy the folders you need to your site.
134
134
 
135
135
  ### Locales
136
136
 
@@ -144,18 +144,18 @@ To develop this theme locally:
144
144
  # Install dependencies
145
145
  bundle install
146
146
 
147
- # Serve the six-language demo (sample config + demo overlay pointing data_dir at docs/_data)
148
- bundle exec jekyll serve --config docs/_data/_config.sample.yml,docs/_data/_config.demo.yml
147
+ # Serve the six-language demo from the demo submodule
148
+ bundle exec jekyll serve --source demo --destination _site
149
149
 
150
150
  # Build static output
151
- bundle exec jekyll build --config docs/_data/_config.sample.yml,docs/_data/_config.demo.yml
151
+ bundle exec jekyll build --source demo --destination _site
152
152
 
153
153
  # Validate resume data schemas and parity (CLI or Rake)
154
- ./bin/validate-resume docs/_data
154
+ ./bin/validate-resume demo/_data
155
155
  bundle exec rake validate
156
156
 
157
157
  # Check that the theme's own templates only reference real data keys (CLI or Rake)
158
- ./bin/check-data-keys docs/_data
158
+ ./bin/check-data-keys demo/_data
159
159
  bundle exec rake check_data_keys
160
160
 
161
161
  # Validators, RuboCop, and tests together
@@ -274,6 +274,11 @@ analytics:
274
274
  # ==============================================================================
275
275
  # Required plugins (bundled as theme runtime dependencies)
276
276
  plugins:
277
+ # Belt-and-suspenders: Jekyll auto-requires gems listed here (site.gems) regardless
278
+ # of Bundler group, guarding against a Gemfile that forgets to put the theme gem in
279
+ # the `:jekyll_plugins` group — without that, the build-time resume validator and
280
+ # HTTP error page generator silently never run.
281
+ - bilingual-jekyll-resume-theme
277
282
  - jekyll-feed
278
283
  - jekyll-seo-tag
279
284
  - jekyll-sitemap
@@ -16,7 +16,7 @@ Include: Reusable Multilingual Language Switcher Component (Feature 1.2; dropdow
16
16
  - Toggle: Disabled via site.resume_language_switcher: false in _config.yml.
17
17
  {%- endcomment -%}
18
18
 
19
- {% if site.resume_language_switcher != false and page.language_switcher != false and page.layout != 'error' %}
19
+ {% if site.resume_language_switcher != false and page.language_switcher != false %}
20
20
  {%- assign current_lang = page.lang | default: site.default_lang | default: 'en' -%}
21
21
  {%- assign current_locale = site.data.locales[current_lang] | default: site.data.locales[site.default_lang] -%}
22
22
 
data/bin/check-data-keys CHANGED
@@ -20,7 +20,7 @@ parser = OptionParser.new do |opts|
20
20
  opts.separator ""
21
21
  opts.separator "Options:"
22
22
 
23
- opts.on("-d", "--dir DIR", "Path to data directory (default: _data or docs/_data)") do |d|
23
+ opts.on("-d", "--dir DIR", "Path to data directory (default: _data or demo/_data)") do |d|
24
24
  options[:data_dir] = d
25
25
  end
26
26
 
@@ -51,9 +51,10 @@ parser.parse!
51
51
  # Positional argument takes precedence over -d, or fall back to standard data dirs
52
52
  data_dir = ARGV[0] || options[:data_dir]
53
53
  if data_dir.nil?
54
- # Prefer a directory that holds at least one language folder (a site's _data, else the theme's docs sample).
55
- data_dir = %w[_data docs/_data].find { |dir| BilingualJekyllResumeTheme::TemplateKeyChecker.new(dir).discover_languages.any? } ||
56
- "docs/_data"
54
+ # Prefer a directory that holds at least one language folder (a site's _data, else the theme's demo).
55
+ data_dir = %w[_data demo/_data].find do |dir|
56
+ BilingualJekyllResumeTheme::TemplateKeyChecker.new(dir).discover_languages.any?
57
+ end || "demo/_data"
57
58
  end
58
59
 
59
60
  checker = BilingualJekyllResumeTheme::TemplateKeyChecker.new(data_dir, config_path: options[:config_path])
data/bin/validate-resume CHANGED
@@ -22,7 +22,7 @@ parser = OptionParser.new do |opts|
22
22
  opts.separator ""
23
23
  opts.separator "Options:"
24
24
 
25
- opts.on("-d", "--dir DIR", "Path to data directory (default: _data or docs/_data)") do |d|
25
+ opts.on("-d", "--dir DIR", "Path to data directory (default: _data or demo/_data)") do |d|
26
26
  options[:data_dir] = d
27
27
  end
28
28
 
@@ -66,9 +66,10 @@ parser.parse!
66
66
  # Positional argument takes precedence over -d, or fall back to standard data dirs
67
67
  data_dir = ARGV[0] || options[:data_dir]
68
68
  if data_dir.nil?
69
- # Prefer a directory that holds at least one language folder (a site's _data, else the theme's docs sample).
70
- data_dir = %w[_data docs/_data].find { |dir| BilingualJekyllResumeTheme::ResumeValidator.new(dir).discover_languages.any? } ||
71
- "_data"
69
+ # Prefer a directory that holds at least one language folder (a site's _data, else the theme's demo).
70
+ data_dir = %w[_data demo/_data].find do |dir|
71
+ BilingualJekyllResumeTheme::ResumeValidator.new(dir).discover_languages.any?
72
+ end || "_data"
72
73
  end
73
74
 
74
75
  validator = BilingualJekyllResumeTheme::ResumeValidator.new(
@@ -127,7 +127,7 @@ Run the automated build and verify accessibility attributes:
127
127
 
128
128
  ```bash
129
129
  # Build static site
130
- bundle exec jekyll build --config docs/_data/_config.sample.yml
130
+ bundle exec jekyll build --source demo --destination _site
131
131
 
132
132
  # Verify skip link presence
133
133
  grep -q 'class="skip-link' _site/index.html && echo "Skip link verified."
@@ -1,47 +1,20 @@
1
1
  # Completed Historical Remediation & Engineering Audit Log
2
2
 
3
3
  **Project:** `bilingual-jekyll-resume-theme`
4
- **Current Release:** `v1.0.0` (Audited Baseline: `v0.7.0`)
4
+ **Current Release:** `v1.0.1` (Audited Baseline: `v0.7.0`)
5
5
  **Milestone:** M1 Completed Audit Archival
6
6
  **Audit Date:** September 2026
7
7
  **Master Active Roadmap:** [`/FEATURE_ROADMAP.md`](../FEATURE_ROADMAP.md)
8
- **Status:** Permanent Historical Record. 18 foundation items (through `v0.7.0`), later completed features, and the four v1.0.0 deliveries (Section 5), all completed and verified
8
+ **Status:** Permanent Historical Record. All foundation items, completed features, and release deliverables are verified in git history and documented in this audit archive.
9
9
 
10
10
  ---
11
11
 
12
12
  ## 1. Executive Summary & Audit Overview
13
13
 
14
- This document provides the definitive, permanent engineering record of all **18 bug fixes, security hardenings, data resilience enhancements, accessibility upgrades, and architectural feature deliverables** completed across the `bilingual-jekyll-resume-theme` repository up through release `v0.7.0`. While the current project release has advanced to `v1.0.0`, this document is preserved as the immutable historical record of the 18 foundation remediations.
14
+ This document provides the definitive, permanent engineering record of all **bug fixes, security hardenings, data resilience enhancements, accessibility upgrades, and architectural feature deliverables** completed across the `bilingual-jekyll-resume-theme` repository. It serves as the immutable historical record of foundation remediations and completed features across releases.
15
15
 
16
16
  To maintain strict hygiene in the active roadmap and eliminate document drift across planning cycles, completed items have been permanently retired from the active roadmap phases and archived in this audit document. For the active, forward-looking engineering roadmap detailing upcoming uncompleted features across Priorities 1 through 4, refer to the authoritative master roadmap at [`/FEATURE_ROADMAP.md`](../FEATURE_ROADMAP.md).
17
17
 
18
- ### 1.1 Remediation Metrics & Completion Summary
19
-
20
- | Scope Phase | Total Audited | Completed & Verified | Completion Rate | Releases Delivered |
21
- |---|---|---|---|---|
22
- | **Priority 0 (Immediate Stability, Correctness & Security)** | 16 | 16 | **100%** | `v0.4.0`, `v0.7.0` |
23
- | **Priority 1 (Visual Enhancements & Quick Wins)** | 2 (P1.2, P1.4) | 2 | **100%** | `v0.7.0`, `v0.8.0` |
24
- | **Priority 2 (Core Functional & Architecture)** | 3 (P2.4, P2.7, #216) | 3 | **100%** | `v0.7.0`, `v0.8.0` |
25
- | **Total Completed Engineering Deliverables** | **21** | **21** | **100%** | `v0.4.0` – `v0.8.0` |
26
- | **v1.0.0 Roadmap Features (1.7, 2.8, 4.1, 4.6)** | 4 | 4 | **100%** | `v1.0.0` (on `feature/extended-multilingual-v1.0.0`, unreleased) |
27
-
28
- ### 1.2 Categorical Remediation Distribution
29
-
30
- ```
31
- +-------------------------------------------------------------+
32
- | Category Distribution of 21 Completed Items |
33
- +-------------------------------------------------------------+
34
- | Bug / Logic Fixes: 4 items (P0.1, P0.2, P0.3, P0.9)
35
- | Security & HTML Correctness: 2 items (P0.5, P0.7)
36
- | Data Resilience & Optionality: 3 items (P0.13, P0.14, P0.15)
37
- | Accessibility (WCAG 2.1/2.2): 3 items (P0.10, P1.4, P2.7)
38
- | RTL & Internationalization: 4 items (P0.8, P0.11, P1.4, P1.2)
39
- | Architecture & Navigation: 4 items (P0.4, P0.16, P2.4, #216)
40
- | Asset Management & 404s: 1 item (P0.6)
41
- | Governance & Versioning: 1 item (P0.12)
42
- +-------------------------------------------------------------+
43
- ```
44
-
45
18
  ---
46
19
 
47
20
  ## 2. Master Completed Remediation Matrix
@@ -73,6 +46,10 @@ To maintain strict hygiene in the active roadmap and eliminate document drift ac
73
46
  | **F2.8** | Header Contact Icon and Text Alignment in Arabic Layout | Issue [#217](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/217) | RTL / a11y | `v1.0.0` | `315356972b326d9fcd5ff58e0208da9a2140116f` | `_layouts/resume-ar.html` (carried into `_layouts/resume.html`) |
74
47
  | **F4.1** | Extended Multilingual Support (EN, AR, ES, FR, DE, UR) | Issue [#15](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/15) | i18n / Architecture | `v1.0.0` | `54b40a4`, `3e840a7`, `5058532`, `c37df29`, `da2cd74`, `3f467fe`, `5188e96` | `_data/locales/*.yml`, `_layouts/resume.html`, `_includes/resume-section.html`, `_includes/date-formatter.html`, `_sass/_resume-ltr.scss`, `assets/css/cv-{ltr,rtl}.scss`, every locale consumer, `docs/_data/`, `docs/demo/` |
75
48
  | **F4.6** | Deprecation Retirement & Legacy Fallbacks Cleanup | Issue [#214](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/214) | Cleanup / Config | `v1.0.0` | `2c88adf75c915cb682634ac0c98a2211caedb101` | `_includes/avatar.html`, `_includes/analytics-head.html`, `_includes/resume-section.html` |
49
+ | **F3.2** | Automated CI/CD Build & Verification Pipeline | Issue [#206](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/206) | CI/CD | `v1.0.0` | `3be935f` | `.github/workflows/ci.yml`, `.github/workflows/lint.yml`, `README.md` |
50
+ | **F3.3** | YAML Resume Data Validator & Schema Linter | Issue [#13](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/13) | Tooling / Quality | `v1.0.0` | `3be935f` | `bin/validate-resume`, `lib/bilingual-jekyll-resume-theme/resume_validator.rb`, `_plugins/resume_validator.rb`, `docs/VALIDATION_GUIDE.md`, `test/test_resume_validator.rb` |
51
+ | **F2.11** | Pin Language-Switcher/Dark-Mode-Toggle to Fixed Corners (Remove RTL Mirror) | Issue [#227](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/227) | Layout / RTL | `v1.0.1` | `305408c` | `_sass/_layout.scss`, `_sass/_dark-mode.scss`, `_sass/_resume-rtl.scss`, `test/test_language_switcher.rb`, `docs/INCLUDES_GUIDE.md` |
52
+ | **F2.12** | Dropdown Language Switcher (Replace Per-Language Button Row) | Issue [#228](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/228) | i18n / a11y | `v1.0.1` | `f37c6f6` | `_includes/language-switcher.html`, `_sass/_layout.scss`, `test/test_language_switcher.rb`, `docs/INCLUDES_GUIDE.md`, `docs/ACCESSIBILITY_GUIDE.md`, `docs/PROJECT_OVERVIEW.md` |
76
53
 
77
54
  ---
78
55
 
@@ -603,9 +580,9 @@ To maintain strict hygiene in the active roadmap and eliminate document drift ac
603
580
 
604
581
  ---
605
582
 
606
- ## 5. v1.0.0 Delivered Features (1.7, 2.8, 4.1, 4.6)
583
+ ## 5. v1.0.0 Delivered Features (1.7, 2.8, 3.2, 3.3, 4.1, 4.6)
607
584
 
608
- The v1.0.0 multilingual release was executed on branch `feature/extended-multilingual-v1.0.0` from an implementation plan that has since been retired; this section, [`../CHANGELOG.md`](../CHANGELOG.md), and [`MULTILINGUAL_GUIDE.md`](MULTILINGUAL_GUIDE.md) are its permanent record. v1.0.0 is a hard break with no compatibility aliases; the full removed-to-replacement table is in [`MULTILINGUAL_GUIDE.md`](MULTILINGUAL_GUIDE.md#breaking-changes--migration-v090-to-v100). Features 3.2 (CI pipeline, #206) and 3.3 (validator, #13) were implemented on the same branch but stay in the active roadmap until their closure checks pass.
585
+ The v1.0.0 multilingual release was executed on branch `feature/extended-multilingual-v1.0.0` from an implementation plan that has since been retired; this section, [`../CHANGELOG.md`](../CHANGELOG.md), and [`MULTILINGUAL_GUIDE.md`](MULTILINGUAL_GUIDE.md) are its permanent record. v1.0.0 is a hard break with no compatibility aliases; the full removed-to-replacement table is in [`MULTILINGUAL_GUIDE.md`](MULTILINGUAL_GUIDE.md#breaking-changes--migration-v090-to-v100). All deliverables, including the CI/CD pipeline (#206) and the validator (#13), are verified live and permanently archived here.
609
586
 
610
587
  ### 5.1 Feature 1.7: Native Email Support in Social Links Include (#215)
611
588
 
@@ -638,35 +615,65 @@ The v1.0.0 multilingual release was executed on branch `feature/extended-multili
638
615
  - **Delivered:** Removed the `site.avatar` fallback from `_includes/avatar.html`, the `analytics.ga` Universal Analytics branch from `_includes/analytics-head.html`, and the singular `resume_section.recognition` fallback (dropped in `_includes/resume-section.html`). Confirmed `site.resume_dark_mode` and `site.resume_header_intro` have no remaining references.
639
616
  - **Commit:** `2c88adf75c915cb682634ac0c98a2211caedb101` (`chore(cleanup): purge deprecated site.avatar, analytics.ga, and resume_dark_mode fallbacks`).
640
617
 
618
+ ### 5.5 Feature 3.2: Automated CI/CD Build & Verification Pipeline (#206)
619
+
620
+ - **Problem:** Absence of automated continuous integration allowed invalid front-matter, broken YAML data, or gem specification packaging defects to reach consumers unnoticed.
621
+ - **Delivered:** Configured `.github/workflows/ci.yml` matrix testing across modern Ruby releases (3.3, 3.4, 4.0), strict Jekyll demo build, RuboCop, unit test execution, and gem packaging verification. Added `.github/workflows/lint.yml` and CI status badge to `README.md`.
622
+ - **Commit:** `3be935f` (carried in from `feature/resume-validator-ecosystem`, verified live on PR #220).
623
+
624
+ ### 5.6 Feature 3.3: YAML Resume Data Validator & Schema Linter (#13)
625
+
626
+ - **Problem:** Non-technical user errors in YAML syntax (missing fields, wrong data types, malformed dates, cross-locale file asymmetries) resulted in cryptic Liquid build failures.
627
+ - **Delivered:** Standalone CLI tool `bin/validate-resume` and core engine `lib/bilingual-jekyll-resume-theme/resume_validator.rb` validating all 13 standard resume files, date formats, active flags, and multi-locale parity. Includes build-time Jekyll plugin `_plugins/resume_validator.rb`, Rake task `rake validate`, comprehensive guide `docs/VALIDATION_GUIDE.md`, and full Minitest suite `test/test_resume_validator.rb`.
628
+ - **Commit:** `3be935f` (carried in from `feature/resume-validator-ecosystem`, verified live on PR #220).
629
+
630
+ ---
631
+
632
+ ## 6. v1.0.1 Delivered Features (2.11, 2.12)
633
+
634
+ The v1.0.1 maintenance release addressed two visual widget improvements scoped together before v1.0.0. Both were verified against live LTR and RTL builds and merged directly into `master`.
635
+
636
+ ### 6.1 Feature 2.11: Pin Language-Switcher/Dark-Mode-Toggle to Fixed Corners (#227)
637
+
638
+ - **Problem:** `.language-switcher` and `.dark-mode-toggle` previously swapped top-left/top-right corners based on `locale.direction`, with mirror rules duplicated across `_sass/_layout.scss`, `_sass/_dark-mode.scss`, and `_sass/_resume-rtl.scss`.
639
+ - **Delivered:** Pinned `.language-switcher` fixed to top-left and `.dark-mode-toggle` fixed to top-right across all locales (LTR and RTL), removing all three RTL override locations. Verified against live `ar/cv/` and `ur/cv/` builds at desktop and mobile widths confirming no collision with right-aligned Arabic header titles.
640
+ - **Commit:** `305408c8885c194ad71d88831179b287d4a10ec3` (`feat(layout): pin language-switcher/dark-mode-toggle to fixed corners (Closes #227)`).
641
+
642
+ ### 6.2 Feature 2.12: Dropdown Language Switcher (#228)
643
+
644
+ - **Problem:** `_includes/language-switcher.html` rendered one button per configured language in a flat row, taking excessive horizontal space and wrapping across multiple rows on mobile screens as locales increased.
645
+ - **Delivered:** Replaced the button row with a semantic `<details>/<summary>` disclosure element wrapping a `<nav>` landmark of per-language links with zero new JavaScript. Preserves full no-JS graceful degradation, keyboard navigation (Tab, Enter/Space, Esc), and accessible screen-reader states.
646
+ - **Commit:** `f37c6f6b410f5de4841ed36115db60408c805293` (`feat(i18n): replace language-switcher button row with a dropdown (Closes #228)`).
647
+
641
648
  ---
642
649
 
643
- ## 6. Verification Protocols & Independent Audit Attestation
650
+ ## 7. Verification Protocols & Independent Audit Attestation
644
651
 
645
652
  The following independent verification commands confirm the integrity of the codebase following the completion of all 18 remediation tasks:
646
653
 
647
- ### 6.1 RubyGem Packaging Verification
654
+ ### 7.1 RubyGem Packaging Verification
648
655
  ```bash
649
656
  gem build bilingual-jekyll-resume-theme.gemspec
650
657
  ```
651
658
  *Passing Result:* Successfully built RubyGem `bilingual-jekyll-resume-theme-0.7.0.gem` with zero packaging errors. All new files (`404.html`, `403.html`, `500.html`, `_layouts/error.html`, `_data/error_pages.yml`, `_includes/avatar.html`) are verified in the gem manifest.
652
659
 
653
- ### 6.2 Liquid Syntax & Template Tag Inspection
660
+ ### 7.2 Liquid Syntax & Template Tag Inspection
654
661
  All modified templates (`_layouts/resume-ar.html`, `_layouts/resume-en.html`, `_layouts/default.html`, `_layouts/error.html`, `_includes/analytics-body.html`, `_includes/analytics-head.html`, `_includes/avatar.html`, `_includes/resume-section-*.html`, `_includes/shared-head.html`, `_includes/social-links.html`, `_includes/print-social-links.html`) contain valid, balanced Liquid tags and conform to Jekyll 3.9+ / 4.x standards.
655
662
 
656
- ### 6.3 WCAG 2.1 AA Accessibility Attestation
663
+ ### 7.3 WCAG 2.1 AA Accessibility Attestation
657
664
  - All social links contain `aria-label`, `title`, and visually-hidden `<span class="sr-only">` text.
658
665
  - All SVG icons contain `aria-hidden="true" focusable="false"`.
659
666
  - Avatar image component includes bilingual fallback alt text, Schema.org `itemprop="image"`, and accessible link targets.
660
667
 
661
- ### 6.4 RTL & Bidirectional Text Isolation Attestation
668
+ ### 7.4 RTL & Bidirectional Text Isolation Attestation
662
669
  - Arabic templates enforce `dir="rtl"` root direction with `<span dir="ltr">` isolation for telephone links, URLs, and printed social links.
663
670
  - Arabic Google Font Cairo loads reliably across all themes and custom palettes with preconnect hints.
664
671
 
665
672
  ---
666
673
 
667
- ## 7. Closed Redundant Duplicate Issues Registry & Root Cause Analysis
674
+ ## 8. Closed Redundant Duplicate Issues Registry & Root Cause Analysis
668
675
 
669
- ### 7.1 Duplicate Creation Root Cause Analysis (RCA)
676
+ ### 8.1 Duplicate Creation Root Cause Analysis (RCA)
670
677
 
671
678
  Between `2026-09-12T11:37:00Z` and `2026-09-12T12:10:49Z`, an automated script executed 13 successive batch sweeps across the repository issue tracker. In each cycle, a batch of 14 items was generated:
672
679
  1. 11 remediation items corresponding to Phase 0 bug fixes (P0.1–P0.11): immediately closed upon creation.
@@ -681,9 +688,9 @@ Because 13 successive batch runs were triggered, 13 identical copies of the Soci
681
688
 
682
689
  The 13th batch produced `#204` and `#206`, which are designated as the **canonical active open issues** in [`/FEATURE_ROADMAP.md`](../FEATURE_ROADMAP.md). All preceding 24 issues were formally closed on GitHub using GitHub's native `state_reason: "duplicate"` linking to `#204` and `#206`, preceded by an explanatory cross-reference comment.
683
690
 
684
- ### 7.2 Social Media Platform Closed Duplicates (12 Issues)
691
+ ### 8.2 Social Media Platform Closed Duplicates
685
692
 
686
- All 12 duplicate issues share the title `"Expand Social Media Platforms (Mastodon, Discord, Bluesky, etc.)"`, labels `["enhancement", "phase-1"]`, and milestone `"Phase 1 (Quick Wins - 1-2 weeks)"`.
693
+ The duplicate issues share the title `"Expand Social Media Platforms (Mastodon, Discord, Bluesky, etc.)"`, labels `["enhancement", "phase-1"]`, and milestone `"Phase 1 (Quick Wins - 1-2 weeks)"`.
687
694
 
688
695
  | Issue # | Title | Created (UTC) | Closed (UTC) | Status | Canonical Reference | Resolution Details |
689
696
  |---|---|---|---|---|---|---|
@@ -700,9 +707,9 @@ All 12 duplicate issues share the title `"Expand Social Media Platforms (Mastodo
700
707
  | [#176](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/176) | Expand Social Media Platforms | 2026-09-12T12:05:43Z | 2026-09-12T14:06:23Z | `CLOSED (duplicate)` | [#204](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/204) | Closed via GitHub API with cross-reference comment to #204 |
701
708
  | [#190](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/190) | Expand Social Media Platforms | 2026-09-12T12:08:26Z | 2026-09-12T14:06:35Z | `CLOSED (duplicate)` | [#204](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/204) | Closed via GitHub API with cross-reference comment to #204 |
702
709
 
703
- ### 7.3 CI/CD Pipeline Closed Duplicates (12 Issues)
710
+ ### 8.3 CI/CD Pipeline Closed Duplicates
704
711
 
705
- All 12 duplicate issues share the title `"Automated CI/CD Build & Verification Pipeline"`, labels `["enhancement", "phase-3"]`, and milestone `"Phase 3 (Long-term - 2-3 months)"`.
712
+ The duplicate issues share the title `"Automated CI/CD Build & Verification Pipeline"`, labels `["enhancement", "phase-3"]`, and milestone `"Phase 3 (Long-term - 2-3 months)"`.
706
713
 
707
714
  | Issue # | Title | Created (UTC) | Closed (UTC) | Status | Canonical Reference | Resolution Details |
708
715
  |---|---|---|---|---|---|---|
@@ -719,7 +726,7 @@ All 12 duplicate issues share the title `"Automated CI/CD Build & Verification P
719
726
  | [#178](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/178) | Automated CI/CD Build & Pipeline | 2026-09-12T12:05:54Z | 2026-09-12T14:08:45Z | `CLOSED (duplicate)` | [#206](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/206) | Closed via GitHub API with cross-reference comment to #206 |
720
727
  | [#192](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/192) | Automated CI/CD Build & Pipeline | 2026-09-12T12:08:37Z | 2026-09-12T14:08:57Z | `CLOSED (duplicate)` | [#206](https://github.com/kmutahar/bilingual-jekyll-resume-theme/issues/206) | Closed via GitHub API with cross-reference comment to #206 |
721
728
 
722
- ### 7.4 Closing Comment Audit Trail
729
+ ### 8.4 Closing Comment Audit Trail
723
730
 
724
731
  Each duplicate issue received a courteous explanatory comment before closure on GitHub:
725
732
  - **Social Media Comment:**
@@ -733,7 +740,7 @@ Each duplicate issue received a courteous explanatory comment before closure on
733
740
 
734
741
  ---
735
742
 
736
- ## 8. Pull Requests & Ancillary GitHub Records
743
+ ## 9. Pull Requests & Ancillary GitHub Records
737
744
 
738
745
  | PR # | Status | Title | Description | Resolution |
739
746
  |---|---|---|---|---|
data/docs/CONFIG_GUIDE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Configuration Guide (`_config.yml`)
2
2
 
3
- Every setting the theme reads from a consuming site's `_config.yml`. The annotated master copy is [`_data/_config.sample.yml`](_data/_config.sample.yml); when this guide and that file disagree, the sample file is the one the build uses.
3
+ Every setting the theme reads from a consuming site's `_config.yml`. The annotated master copy is [`_config.sample.yml`](../_config.sample.yml); when this guide and that file disagree, the sample file is the one the build uses.
4
4
 
5
5
  Per-language settings (name, title, address, data path, URL) live under `languages.<lang>`. Direction, fonts, and UI strings are not config at all: they come from `_data/locales/<lang>.yml` (see [`MULTILINGUAL_GUIDE.md`](MULTILINGUAL_GUIDE.md)). Upgrading from v0.9.0? The key-by-key migration table is in [`MULTILINGUAL_GUIDE.md`](MULTILINGUAL_GUIDE.md#breaking-changes--migration-v090-to-v100).
6
6
 
@@ -29,7 +29,7 @@ Per-language settings (name, title, address, data path, URL) live under `languag
29
29
  ## Quick Start
30
30
 
31
31
  > [!TIP]
32
- > Copy [`_data/_config.sample.yml`](_data/_config.sample.yml) to your site root as `_config.yml`. Starter resume data for six languages is in [`_data/`](_data/) (`en`, `ar`, `es`, `fr`, `de`, `ur`).
32
+ > Copy [`_config.sample.yml`](../_config.sample.yml) to your site root as `_config.yml`. Starter resume data for six languages is available in the [`demo/_data/`](../demo/_data/) directory (`en`, `ar`, `es`, `fr`, `de`, `ur`).
33
33
  >
34
34
  > **System Requirements:** Ruby >= 3.3.0 (maintained on Ruby 3.3, 3.4, and 4.0) and Jekyll >= 4.4.0. Declare the gem inside `group :jekyll_plugins` in your `Gemfile`, or the error page generator and build-time validation never load.
35
35
 
@@ -125,9 +125,9 @@ The validator builds each locale the same way (theme file, then site file deep-m
125
125
  - Keep proper nouns consistent: transliterate them in non-Latin scripts and keep them as-is in Latin-script languages.
126
126
  - Write dates as ISO (`YYYY-MM-DD`, `YYYY-MM`, or `YYYY`). Month names come from the locale file, so the data stays language-neutral.
127
127
  - For ongoing roles, leave `enddate` blank or use any value from that locale's `present_values`.
128
- - The Sherlock Holmes demo in [`_data/`](_data/) (`en`, `ar`, `es`, `fr`, `de`, `ur`) is a complete, parity-clean reference. Build it from the repository root with:
128
+ - The Sherlock Holmes demo in [`demo/_data/`](../demo/_data/) (`en`, `ar`, `es`, `fr`, `de`, `ur`) is a complete, parity-clean reference. Build it from the repository root with:
129
129
  ```bash
130
- bundle exec jekyll build --config docs/_data/_config.sample.yml,docs/_data/_config.demo.yml
130
+ bundle exec jekyll build --source demo --destination _site
131
131
  ```
132
132
 
133
133
  ---
@@ -52,16 +52,16 @@ Sections render in the order of `site.resume_section_order` through one dispatch
52
52
  | Need / Task | Go To | Verification Method |
53
53
  |---|---|---|
54
54
  | Configure site settings, languages, avatar, or analytics | `_config.yml`, [`CONFIG_GUIDE.md`](CONFIG_GUIDE.md) | Demo build (below) |
55
- | Add a language or change UI strings, fonts, or month names | `_data/locales/<lang>.yml`, [`MULTILINGUAL_GUIDE.md`](MULTILINGUAL_GUIDE.md) | `./bin/validate-resume docs/_data`, then inspect `_site/<lang>/cv/` |
56
- | Modify resume section data | `_data/<lang>/*.yml`, [`DATA_GUIDE.md`](DATA_GUIDE.md) | `./bin/validate-resume docs/_data` |
55
+ | Add a language or change UI strings, fonts, or month names | `_data/locales/<lang>.yml`, [`MULTILINGUAL_GUIDE.md`](MULTILINGUAL_GUIDE.md) | `./bin/validate-resume demo/_data`, then inspect `_site/<lang>/cv/` |
56
+ | Modify resume section data | `_data/<lang>/*.yml`, [`DATA_GUIDE.md`](DATA_GUIDE.md) | `./bin/validate-resume demo/_data` |
57
57
  | Customize error pages or return URLs | `_layouts/error.html`, `_plugins/error_pages_generator.rb`, `error_pages` in the locale files, [`LAYOUTS_GUIDE.md`](LAYOUTS_GUIDE.md) | Inspect `_site/404.html`, `_site/500.html` |
58
58
  | Adjust dark mode colors or tokens | `_sass/_dark-mode.scss`, [`SASS_GUIDE.md`](SASS_GUIDE.md) | Inspect CSS variables on `:root` and `[data-theme="dark"]` |
59
59
  | Adjust RTL mirroring | `_sass/_resume-rtl.scss`, [`SASS_GUIDE.md`](SASS_GUIDE.md) | Inspect `_site/ar/cv/` and `_site/ur/cv/` |
60
60
 
61
- Demo build (renders the six-language Sherlock Holmes resume from `docs/`):
61
+ Demo build (renders the six-language Sherlock Holmes resume from the `demo/` submodule):
62
62
 
63
63
  ```bash
64
- bundle exec jekyll build --config docs/_data/_config.sample.yml,docs/_data/_config.demo.yml
64
+ bundle exec jekyll build --source demo --destination _site
65
65
  ```
66
66
 
67
67
  ---
@@ -144,12 +144,7 @@ bilingual-jekyll-resume-theme/
144
144
  ├── MULTILINGUAL_GUIDE.md # Locales, adding languages, v1.0.0 migration table
145
145
  ├── SASS_GUIDE.md # Styling system, tokens, RTL
146
146
  ├── VALIDATION_GUIDE.md # Validator, CLI, CI, proofing
147
- ├── PROJECT_OVERVIEW.md # This file
148
- ├── demo/ # Six demo resume pages (layout: resume)
149
- └── _data/
150
- ├── _config.sample.yml # Master sample configuration
151
- ├── _config.demo.yml # Demo overlay (data_dir: docs/_data, Sherlock Holmes persona)
152
- └── en/ ar/ es/ fr/ de/ ur/ # Sherlock Holmes demo data, 13 files each
147
+ └── PROJECT_OVERVIEW.md # This file
153
148
  ```
154
149
 
155
150
  ---
@@ -169,4 +164,4 @@ bilingual-jekyll-resume-theme/
169
164
  | **Completed Audit** | [`COMPLETED_AUDIT.md`](COMPLETED_AUDIT.md) | Historical record of completed fixes and features |
170
165
  | **Master AI Manual** | [`../AGENTS.md`](../AGENTS.md) | Operating rules for AI agents |
171
166
  | **Feature Roadmap** | [`../FEATURE_ROADMAP.md`](../FEATURE_ROADMAP.md) | Active feature blueprints, issue mappings, Delete-Zone |
172
- | **Sample Config** | [`_data/_config.sample.yml`](_data/_config.sample.yml) | Annotated configuration for consuming sites |
167
+ | **Sample Config** | [`../_config.sample.yml`](../_config.sample.yml) | Annotated configuration for consuming sites |
@@ -66,14 +66,14 @@ The gem installs `validate-resume` as an executable. In a consuming site run it
66
66
  bundle exec validate-resume # auto-detects the data directory
67
67
  bundle exec validate-resume _data # explicit data directory
68
68
  bundle exec validate-resume _data -c _config.yml # explicit config
69
- ./bin/validate-resume docs/_data # this repository's six-language demo
69
+ ./bin/validate-resume demo/_data # this repository's six-language demo
70
70
  ```
71
71
 
72
- With no `DATA_DIR`, the CLI uses the first of `_data` and `docs/_data` that contains at least one language folder, else `_data`. A positional `DATA_DIR` wins over `-d`.
72
+ With no `DATA_DIR`, the CLI uses the first of `_data` and `demo/_data` that contains at least one language folder, else `_data`. A positional `DATA_DIR` wins over `-d`.
73
73
 
74
74
  | Flag | Long flag | Description | Default |
75
75
  |---|---|---|---|
76
- | `-d DIR` | `--dir DIR` | Data directory | `_data` or `docs/_data` |
76
+ | `-d DIR` | `--dir DIR` | Data directory | `_data` or `demo/_data` |
77
77
  | `-c FILE` | `--config FILE` | Jekyll config that declares `languages:` | First config found next to the data directory ([section 2](#2-how-languages-and-locales-are-resolved)) |
78
78
  | `-l LANGS` | `--languages LANGS` | Comma-separated languages to validate; overrides the config | The config's `languages:` |
79
79
  | `-a` | `--all-locales` | Also validate every language folder found by directory scan | off |
@@ -90,7 +90,7 @@ Exit codes: `0` when there are no errors (and no warnings under `-w`), `1` other
90
90
  ## 4. Rake Task (`rake validate`)
91
91
 
92
92
  ```bash
93
- bundle exec rake validate # _data if _data/en exists, else docs/_data
93
+ bundle exec rake validate # _data if _data/en exists, else demo/_data
94
94
  bundle exec rake "validate[path/to/_data]"
95
95
  ```
96
96
 
@@ -193,7 +193,7 @@ Add the scheme, for example `https://github.com/user`.
193
193
 
194
194
  This repository runs the validator (and the template key checker, [section 11](#11-template-key-checker-check-data-keys)) in two workflows:
195
195
 
196
- - [`.github/workflows/lint.yml`](../.github/workflows/lint.yml): `./bin/validate-resume docs/_data --fail-on-warnings`, `rake validate[docs/_data]`, `./bin/check-data-keys docs/_data`, `rake check_data_keys[docs/_data]`, a gemspec executable check, and RuboCop.
196
+ - [`.github/workflows/lint.yml`](../.github/workflows/lint.yml): `./bin/validate-resume demo/_data --fail-on-warnings`, `rake validate[demo/_data]`, `./bin/check-data-keys demo/_data`, `rake check_data_keys[demo/_data]`, a gemspec executable check, and RuboCop.
197
197
  - [`.github/workflows/ci.yml`](../.github/workflows/ci.yml): gem packaging, a strict Jekyll build, built-HTML proofing, both checkers, and the unit tests across Ruby 3.3, 3.4, and 4.0.
198
198
 
199
199
  A consuming site can run the same check on every push:
@@ -222,7 +222,7 @@ Two development-only Rake tasks complement the data validator. Their gems are de
222
222
 
223
223
  ```bash
224
224
  # Dead internal links, broken #anchors, missing images/favicons, hreflang/canonical targets.
225
- bundle exec jekyll build --config docs/_data/_config.sample.yml,docs/_data/_config.demo.yml
225
+ bundle exec jekyll build --source demo --destination _site
226
226
  bundle exec rake proof # proofs ./_site
227
227
 
228
228
  # Proof a consuming site (config auto-detected next to its _site/, or passed explicitly):
@@ -246,15 +246,15 @@ bundle exec rake rubocop
246
246
  Because "known keys" are derived from whatever the checked sample data actually contains, a field a template correctly references but that no language in the checked data happens to exercise (an optional field, e.g. `education.yml`'s `awards` list) will warn even though nothing is wrong. For this reason `check-data-keys` **never defaults to `--fail-on-warnings` in this repository's Rake task or CI steps**, unlike `validate-resume`. Warnings are printed and worth reading, but a warning alone does not mean the template is broken — cross-check against the field before "fixing" it.
247
247
 
248
248
  ```bash
249
- ./bin/check-data-keys docs/_data # this repository's six-language demo (the default target)
250
- ./bin/check-data-keys docs/_data --fail-on-warnings # opt into strict mode yourself, once you trust your data's coverage
251
- bundle exec rake check_data_keys # docs/_data by default
249
+ ./bin/check-data-keys demo/_data # this repository's six-language demo (the default target)
250
+ ./bin/check-data-keys demo/_data --fail-on-warnings # opt into strict mode yourself, once you trust your data's coverage
251
+ bundle exec rake check_data_keys # demo/_data by default
252
252
  bundle exec rake "check_data_keys[path/to/_data]"
253
253
  ```
254
254
 
255
255
  | Flag | Long flag | Description | Default |
256
256
  |---|---|---|---|
257
- | `-d DIR` | `--dir DIR` | Data directory | `_data` or `docs/_data` |
257
+ | `-d DIR` | `--dir DIR` | Data directory | `_data` or `demo/_data` |
258
258
  | `-c FILE` | `--config FILE` | Jekyll config that declares `languages:` | First config found next to the data directory ([section 2](#2-how-languages-and-locales-are-resolved)) |
259
259
  | `-w` | `--fail-on-warnings` | Exit 1 on warnings | off |
260
260
  | `-v` | `--verbose` | Verbose output | off |
@@ -62,7 +62,7 @@ module BilingualJekyllResumeTheme
62
62
  # template_root: overrides where _layouts/_includes are scanned from (default:
63
63
  # this gem's own root). Exists so tests can point the Liquid-tracing logic at
64
64
  # synthetic fixture templates instead of the theme's real ones.
65
- def initialize(data_dir = "docs/_data", config_path: nil, config: nil, template_root: THEME_ROOT)
65
+ def initialize(data_dir = "_data", config_path: nil, config: nil, template_root: THEME_ROOT)
66
66
  @data_dir = data_dir.to_s.chomp("/")
67
67
  @config_path = config_path
68
68
  @config = config
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bilingual-jekyll-resume-theme
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Khaldoon Mutahar
@@ -178,6 +178,7 @@ files:
178
178
  - CODE_OF_CONDUCT.md
179
179
  - LICENSE.txt
180
180
  - README.md
181
+ - _config.sample.yml
181
182
  - _data/locales/ar.yml
182
183
  - _data/locales/de.yml
183
184
  - _data/locales/en.yml
@@ -256,93 +257,6 @@ files:
256
257
  - docs/PROJECT_OVERVIEW.md
257
258
  - docs/SASS_GUIDE.md
258
259
  - docs/VALIDATION_GUIDE.md
259
- - docs/_data/_config.demo.yml
260
- - docs/_data/_config.sample.yml
261
- - docs/_data/ar/associations.yml
262
- - docs/_data/ar/certifications.yml
263
- - docs/_data/ar/courses.yml
264
- - docs/_data/ar/education.yml
265
- - docs/_data/ar/experience.yml
266
- - docs/_data/ar/header.yml
267
- - docs/_data/ar/interests.yml
268
- - docs/_data/ar/languages.yml
269
- - docs/_data/ar/links.yml
270
- - docs/_data/ar/projects.yml
271
- - docs/_data/ar/recognitions.yml
272
- - docs/_data/ar/skills.yml
273
- - docs/_data/ar/volunteering.yml
274
- - docs/_data/de/associations.yml
275
- - docs/_data/de/certifications.yml
276
- - docs/_data/de/courses.yml
277
- - docs/_data/de/education.yml
278
- - docs/_data/de/experience.yml
279
- - docs/_data/de/header.yml
280
- - docs/_data/de/interests.yml
281
- - docs/_data/de/languages.yml
282
- - docs/_data/de/links.yml
283
- - docs/_data/de/projects.yml
284
- - docs/_data/de/recognitions.yml
285
- - docs/_data/de/skills.yml
286
- - docs/_data/de/volunteering.yml
287
- - docs/_data/en/associations.yml
288
- - docs/_data/en/certifications.yml
289
- - docs/_data/en/courses.yml
290
- - docs/_data/en/education.yml
291
- - docs/_data/en/experience.yml
292
- - docs/_data/en/header.yml
293
- - docs/_data/en/interests.yml
294
- - docs/_data/en/languages.yml
295
- - docs/_data/en/links.yml
296
- - docs/_data/en/projects.yml
297
- - docs/_data/en/recognitions.yml
298
- - docs/_data/en/skills.yml
299
- - docs/_data/en/volunteering.yml
300
- - docs/_data/es/associations.yml
301
- - docs/_data/es/certifications.yml
302
- - docs/_data/es/courses.yml
303
- - docs/_data/es/education.yml
304
- - docs/_data/es/experience.yml
305
- - docs/_data/es/header.yml
306
- - docs/_data/es/interests.yml
307
- - docs/_data/es/languages.yml
308
- - docs/_data/es/links.yml
309
- - docs/_data/es/projects.yml
310
- - docs/_data/es/recognitions.yml
311
- - docs/_data/es/skills.yml
312
- - docs/_data/es/volunteering.yml
313
- - docs/_data/fr/associations.yml
314
- - docs/_data/fr/certifications.yml
315
- - docs/_data/fr/courses.yml
316
- - docs/_data/fr/education.yml
317
- - docs/_data/fr/experience.yml
318
- - docs/_data/fr/header.yml
319
- - docs/_data/fr/interests.yml
320
- - docs/_data/fr/languages.yml
321
- - docs/_data/fr/links.yml
322
- - docs/_data/fr/projects.yml
323
- - docs/_data/fr/recognitions.yml
324
- - docs/_data/fr/skills.yml
325
- - docs/_data/fr/volunteering.yml
326
- - docs/_data/ur/associations.yml
327
- - docs/_data/ur/certifications.yml
328
- - docs/_data/ur/courses.yml
329
- - docs/_data/ur/education.yml
330
- - docs/_data/ur/experience.yml
331
- - docs/_data/ur/header.yml
332
- - docs/_data/ur/interests.yml
333
- - docs/_data/ur/languages.yml
334
- - docs/_data/ur/links.yml
335
- - docs/_data/ur/projects.yml
336
- - docs/_data/ur/recognitions.yml
337
- - docs/_data/ur/skills.yml
338
- - docs/_data/ur/volunteering.yml
339
- - docs/assets/images/sherlock-holmes.jpg
340
- - docs/demo/ar.md
341
- - docs/demo/de.md
342
- - docs/demo/en.md
343
- - docs/demo/es.md
344
- - docs/demo/fr.md
345
- - docs/demo/ur.md
346
260
  - lib/bilingual-jekyll-resume-theme.rb
347
261
  - lib/bilingual-jekyll-resume-theme/resume_validator.rb
348
262
  - lib/bilingual-jekyll-resume-theme/template_key_checker.rb