Feature Change Log¶
Condensed implementation records for completed features. For current feature documentation, see docs/features/.
Copilot Agent Prompt Button (v1.0.0, April 2026)¶
Files: _includes/content/intro.html, _data/prompts.yml
A dropdown button in every page's intro section that opens a pre-filled GitHub issue assigned to @copilot. The user selects a prompt template; the issue body is auto-populated with the template text + a Page Context table (title, URL, file path, layout, tags) + an Environment table (repo, site URL, Jekyll env, theme).
Architecture:
_data/prompts.yml β source of truth: all prompt templates
_includes/content/intro.html β renders the dropdown; iterates site.data.prompts
10 built-in templates in two groups:
- Page Improvements: Improve Page, Expand Page, Update Page, Fix Page Issue, SEO Optimize, Accessibility Audit
- Site Improvements: UI/UX Improvement, New Feature, Component Enhancement, Performance Optimization
Prompt schema in _data/prompts.yml:
- id: string # unique slug
label: string # dropdown label
icon: string # Bootstrap Icons class
group: string # optional section header
description: string # subtitle in dropdown
body: | # multi-line prompt text
To add a prompt: add an entry to _data/prompts.yml; it appears in the dropdown on the next Jekyll build. No template changes required.
Config required: repository: "owner/repo" in _config.yml (constructs the GitHub issue URL).
Troubleshooting: empty dropdown β invalid YAML in prompts.yml; issue URL truncated β shorten body fields (GitHub URL limit ~8000 chars); [object Object] in title β page.title not a string.
Frontmatter Validator Bug Fixes β PR #34 (May 2026)¶
Files: scripts/lint-pages, scripts/lib/frontmatter.sh
Five correctness bugs in the new scripts/lint-pages validator and scripts/lib/frontmatter.sh library:
-
YAML.safe_loadrejectedTimeobjects β Jekyll timestamps (lastmod: 2024-05-25T19:07:46.394Z) deserialize as RubyTimeinstances, whichsafe_loadrejects by default. Fix: passpermitted_classes: [Date, Time, Symbol], aliases: trueto all 3YAML.safe_loadcall sites. -
Time#to_sdoesn't produce ISO 8601 β validlastmodvalues were flagged becauseputson aTimeinstance prints2024-05-25 19:07:46 UTC, failing the schema's datetime regex. Fix:get_frontmatter_fieldnow formatsTimeβ%Y-%m-%dT%H:%M:%S.%LZ,Dateβ%Y-%m-%d, everything else βto_s. -
Mid-document
---misread as frontmatter β files with a horizontal rule---in the body but no frontmatter header reported YAML parse errors. Fix:extract_frontmatternow requires the file's first line to be---. -
set -eaborted the scan loop β whenextract_frontmatterreturned non-zero,set -euo pipefailkilled subsequent iterations. Fix: wrapped the call in|| true. -
Auto-fix produced duplicate
lastmod:keys β--fixadded a newlastmodbefore renaming the legacyupdated:field, creating twolastmodlines. Fix: deprecated-field renames now run first; required-field adds run after re-extracting.
Result: 42 false-positive errors eliminated; pages/_about/ (18 files) scans clean.
Sidebar UI/UX Improvements (December 2025)¶
Key files: assets/js/sidebar.js (new, 570 lines), _includes/navigation/sidebar-right.html, _sass/custom.scss
Six improvements:
-
Fixed scroll spy β corrected
data-bs-targetto point to#TableOfContents; addeddata-bs-smooth-scroll="true". -
FAB-style mobile TOC button β replaced fixed
top-50 end-0positioning withbottom-0 end-0Floating Action Button (56Γ56px, z-index 1030,shadow-lg). -
Unified icon library β removed Font Awesome; all icons now Bootstrap Icons (
bi-file-text,bi-folder2-open,bi-list-ul, etc.). -
New
sidebar.jsβ five modules: - Intersection Observer ScrollSpy: performance-optimized active section tracking (replaces scroll events)
- SmoothScroll: offset-aware scrolling with URL updates; mobile offcanvas auto-close
- KeyboardShortcuts:
[/]for prev/next section,/for search (placeholder) - SwipeGestures: swipe right β left sidebar, swipe left β TOC (50px threshold)
-
FocusManager: focus trap in offcanvas; return focus on close
-
Responsive widths β removed hardcoded
width: 280pxfrom sidebar-categories.html. -
Accessibility β skip-to-content link in
header.html;role="navigation"andaria-labelon sidebars;aria-controlson toggles.
Performance: Intersection Observer reduces scroll event overhead by ~70%.
Mermaid Integration v2.0 (January 2025 / v0.3.0)¶
Issue: #6 | Branch: feature/mermaid-integration-v2
Core files:
_includes/components/mermaid.htmlβ Mermaid v10 config, forest theme, FontAwesome support, responsive CSS_includes/core/head.htmlβ conditional include:{% if page.mermaid %}{% include components/mermaid.html %}{% endif %}assets/vendor/mermaid/mermaid.min.jsβ vendored; refresh withnpm run vendor:mermaid
Usage: add mermaid: true to page front matter; wrap diagrams in <div class="mermaid">...</div>.
Supported diagram types: flowcharts (all directions), sequence, class, state, ER, Gantt, pie, git graphs, journey, mindmaps.
Testing: scripts/test-mermaid.sh β 16 automated tests (file existence, config, functionality); 16/16 passing. Modes: --quick, --local, --docker.
Cleanup: consolidated 15 scattered Mermaid files β 7 organized files (53% reduction). Removed docs/MERMAID-QUICKSTART.md, outdated diagram guide, scripts/validate-mermaid-native.sh.
No breaking changes: existing mermaid: true pages continue to work.