Skip to content

Commit af53bd8

Browse files
kastnerpgeorge-gcaCopilotdfuchsssyanyong
authored
Update to al-folio v1.1 (v0 → v1 gem architecture migration) (#50)
* Added support for helping agents (#3379) Since a lot of our users don't have a coding background and given recently development with AI agents, I decided to try to add support for specialized agents in our repository. They were created following [agents.md](https://agents.md/) "specifications" and are currently 2: - `customize-agent` - to help new users with access to GitHub Copilot customize their site - `docs-agent` - to help us keep the documentation always updated with the latest changes in our code I don't really know how useful they'll actually be, but I think most of our users might actually benefit from the `customize-agent`, so it is worth a shot. <img width="852" height="1043" alt="image" src="https://github.com/user-attachments/assets/e8390f1a-cec3-42a8-b01e-26d658ea78e8" /> Edit: also added a link to a [Code Wiki to our repository](https://codewiki.google/github.com/alshedivat/al-folio) and [DeepWiki](https://deepwiki.com/alshedivat/al-folio). This allows any user to chat online with AIs (Gemini and Devin) about our repository. --------- Signed-off-by: George Araújo <george.gcac@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Auto update markdown TOC * Fix bib / code layout bug (#3387) Resolve #3370 Resolve #3380 Based on the [comment](https://github.com/alshedivat/al-folio/issues/3370#issuecomment-3565962058) of @MarkusThill, I created a bugfix that solved the issue on my website. Hope that fixes it in general; thus the PR :) However, I'm not an expert for scss .. so handle with care :) * Fix: bibliography month persists to subsequent entries without month (#3391) Fixes #3386 (the part about the wrong months; the other part (layouting of bibtex) is fixed in #3387) ## Summary - Fixes incorrect month shown for bibliography entries that do not specify a `month` in BibTeX. - Ensures `month`/`year` do not persist between entries in `_layouts/bib.liquid`. ## Root Cause - In Liquid, captured variables persist across iterations if not reinitialized. - `entrymonth` and `entryyear` were only set when `entry.month`/`entry.year` existed, causing values from a previous entry to leak into the next one when those fields were missing. ## Changes - Reinitialize date-related variables per entry before conditional captures: ## Behavior - Before: Entries without a `month` could display the previous entry's month. - After: Entries without a `month` display only the `year`; entries with a `month` display the correct month and year. <img width="1956" height="918" alt="image" src="https://github.com/user-attachments/assets/7a9682e7-55ab-43b7-8f82-f638d14ce08e" /> * Fixed 1 px first load issue (#3416) Fix #3164 Signed-off-by: George Araújo <george.gcac@gmail.com> * Added support for default categories and tags for external posts (#3417) Based on discussion #3393. --------- Signed-off-by: George Araújo <george.gcac@gmail.com> * Add link to personal GitHub page on academics section in README (#3400) * Add auto-orient flag to Imagemagick config (#3409) Currently, images generated by Imagemagick do not respect the orientation of the source image. By adding the auto-orient flag, the images are the correct orientation. Before <img width="920" height="562" alt="image" src="https://github.com/user-attachments/assets/73f59d7f-b6c5-468a-9023-0f0457a53a3c" /> After <img width="947" height="621" alt="image" src="https://github.com/user-attachments/assets/2f24de99-2e84-4052-8d0f-945acdad81e4" /> * Update deps (#3418) Closes #3402 --------- Signed-off-by: George Araújo <george.gcac@gmail.com> * Auto update markdown TOC * Added new line to README badges * Changed maintainers urls to https * Updated prettier (#3420) Signed-off-by: George Araújo <george.gcac@gmail.com> * Fix typo in Bootstrap small column class usage (#3421) This PR fixes a recurring typo in multiple Liquid templates where the Bootstrap class `cl-sm` is used instead of `col-sm`. Because of this typo, the `col-sm` styling was not being applied. All instances have been corrected. * Update Google Scholar citations * Make external service URLs configurable for repository page (#3422) ## Description This PR makes the URLs for external services used on the repository page configurable in `_config.yml`. This allows users to self-host these services for better reliability, privacy, and customization. ## Changes - Added `external_services` configuration section in `_config.yml` with: - `github_readme_stats_url` (default: `https://github-readme-stats.vercel.app`) - `github_profile_trophy_url` (default: `https://github-profile-trophy.vercel.app`) - Updated repository template files to use configurable URLs: - `_includes/repository/repo_user.liquid` - `_includes/repository/repo.liquid` - `_includes/repository/repo_trophies.liquid` - Added documentation in `CUSTOMIZE.md` explaining: - Why self-hosting is recommended (default services may have availability issues) - How to configure custom service URLs - Links to the service repositories for deployment instructions ## Resolves Resolves #3388 - This makes it possible to configure self-hosted versions of these services, giving users full control over the external services used for displaying GitHub statistics and trophies. ## Testing - Verified that default configuration still works with original service URLs - Confirmed that URLs are properly interpolated in all template files - Documentation clearly explains the configuration options * Auto update markdown TOC * Remove link to sam-bieberich.github.io (#3425) Removed a link to sam-bieberich.github.io from the README. * Add link to personal GitHub page on academics section in README (#3424) * Add j1yoo.github.io to User community (#3427) Hi! I'd like to add my academic website to the User community section. **Website:** https://j1yoo.github.io/ This PR adds a single star link to the Academics row in the User community table. Thank you for creating and maintaining this beautiful theme! Co-authored-by: Jaewon Yoo <jwyoo4@gmail.com> * add filtered BibTeX keywords (#3403) add `dimensions, eprint` and `pmid` to the filtered keywords * Add HAL button (#3404) Adds a HAL button in the same spirit as the arXiv button. - add HAL button to `_layouts/bib.liquid` - add `hal` to the filtered keywords in `_config.yml` - add `hal` to the documentation in `CUSTOMIZE.md` * Improved collections section in CUSTOMIZE guide (#3431) Improved section based on comments from #2369. Signed-off-by: George Araújo <george.gcac@gmail.com> * Add zhoji.github.io to User community in README.md (#3433) Adding my personal website for the al-folio community :) Thanks for creating such a cool template! * Changed code to use plugin to handle 3rd party libraries downloads (#3435) Signed-off-by: George Araújo <george.gcac@gmail.com> * Changed to use cache bust plugin (#3436) Signed-off-by: George Araújo <george.gcac@gmail.com> * Update deps (#3437) Signed-off-by: George Araújo <george.gcac@gmail.com> * Auto update markdown TOC * Changed to use jekyll-socials plugin (#3439) Signed-off-by: George Araújo <george.gcac@gmail.com> * Updated deps and deploy version (#3440) Signed-off-by: George Araújo <george.gcac@gmail.com> * Auto update markdown TOC * Fixed dates in book-shelf (#3446) Fixes #3443. Signed-off-by: George Araújo <george.gcac@gmail.com> * Updated deps to fix issue with jekyll-socials (#3447) Fixes #3445 Signed-off-by: George Araújo <george.gcac@gmail.com> * ⚡ Optimize Google Scholar Citations Regex Definition (#3449) 💡 **What:** Moved the regex definition `/Cited by (\d+[,\d]*)/` from the method scope to a class-level constant `CITED_BY_REGEX`. 🎯 **Why:** To improve code cleanliness and avoid potential re-definition of the regex object in every method call (or loop), adhering to best practices. 📊 **Measured Improvement:** * **Baseline:** The regex was defined as a literal inside the `render` method, which is called for each tag usage. * **Optimization:** The regex is now defined once as a constant. * **Note:** Performance benchmarks were not possible in the current environment due to missing Ruby runtime. However, this is a standard Ruby optimization that improves maintainability and theoretically avoids object allocation overhead in older Ruby versions or complex scenarios. Modern Ruby optimizes literals well, but the constant approach is cleaner and DRYer. --- *PR created automatically by Jules for task [10688912524063334698](https://jules.google.com/task/10688912524063334698) started by @alshedivat* Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> * Refactor: Use Liquid filter to find home page title (#3448) Refactored the script in _scripts/search.liquid.js to use a more efficient Liquid 'where' filter to find the home page title. This replaces an inefficient for loop that iterated through all site pages. --- *PR created automatically by Jules for task [5748098109809984605](https://jules.google.com/task/5748098109809984605) started by @alshedivat* Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> * Revert "Refactor: Use Liquid filter to find home page title" (#3451) Reverts alshedivat/al-folio#3448 * Updated jekyll-archives-v2 (#3460) Signed-off-by: George Araújo <george.gcac@gmail.com> * Auto update markdown TOC * Add course schedule feature to teaching page (#2258) (#3147) Implements the course schedule feature requested in issue #[2258](https://github.com/alshedivat/al-folio/issues/2258). This PR adds a new course schedule feature to the al-folio theme, allowing academics to easily create and display structured course information. **Changes:** - Added a `courses` collection to organize and display academic courses - Created course layout and display templates with responsive design - Implemented organization by year and term with automatic sorting - Added support for weekly schedule with topics and course materials - Simplified documentation with a README for course creation This feature makes it easier for academics to showcase their teaching materials with a consistent, organized display of course schedules, helping users create professional teaching pages without custom implementation. --------- Signed-off-by: George Araújo <george.gcac@gmail.com> Co-authored-by: George Araújo <george.gcac@gmail.com> * Auto update markdown TOC * Add calendar iframe and togglAdd calendar iframe and toggle buttone button (#3144) ### Description This PR adds a Google Calendar integration feature as described in issue #872. Users can embed their own calendar using an iframe configured via `_config.yml`, and the calendar is toggleable through a responsive button. This component is styled to visually blend into the theme and supports responsive display across desktop and mobile. ### Changes - Added `calendar.liquid` in `_includes` - Modified `about.md` to include the toggleable calendar block - Introduced `calendar` config section in `_config.yml` - Appended calendar-related styles in `_sass/_base.scss` ### Configuration To enable this feature, add the following to `_config.yml`: ```yaml calendar: enabled: true calendar_id: your_calendar_id@group.calendar.google.com timezone: UTC style: "border:0; width:100%; height:600px;" --------- Signed-off-by: George Araújo <george.gcac@gmail.com> Co-authored-by: dodo <349507644@qq.com> Co-authored-by: George <31376482+george-gca@users.noreply.github.com> Co-authored-by: George Araújo <george.gcac@gmail.com> * Update Google Scholar citations * Updated jekyll-socials to latest version (#3464) Signed-off-by: George Araújo <george.gcac@gmail.com> * Add smsnoBin77 link to README (#3473) Add a new link to the README for smsnoBin77. * Unify jsonresume and RenderCV CVs solutions (#3462) Fixes #2787 as an alternative to #2969. It was getting too cumbersome to have 2 different data sources for CV and also a lot of different layout files, so I decided to unify them all. Main changes: - synchronized the information inside RenderCV (`_data/cv.yml`) and JSONResume (`assets/json/resume.json`) - unified layout files for CV information - added the option to set the "data source" in the CV page --------- Signed-off-by: George Araújo <george.gcac@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * chore: render the latest CV * Rendercv missing commits (#3475) Signed-off-by: George Araújo <george.gcac@gmail.com> * chore: render the latest CV * Update Google Scholar citations * Update SASS syntax in base (non-font) files (#3281) Partially fixes issue #3256 by updating SASS syntax in main SCSS files. To fully address the issue, FontAwesome should be updated to `v7.x` and Tabler to `v3.30` or higher (see Tabler fix [here](https://github.com/tabler/tabler-icons/pull/1256)), where the SCSS has been fixed. --------- Signed-off-by: George Araújo <george.gcac@gmail.com> Co-authored-by: George Araújo <george.gcac@gmail.com> * Auto update markdown TOC * Improve readme, add site-wide CSP (#3485) This pull request significantly expands and clarifies the documentation for the al-folio Jekyll theme, focusing on improved file structure explanations, enhanced quick reference guides, and the addition of a comprehensive analytics setup guide. The changes make it easier for users and contributors to understand the project organization, available features, and configuration options, especially regarding CV formats, teaching pages, and analytics integration. **Key documentation and structure improvements:** *Expanded file and collection structure:* - The file structure documentation in `.github/agents/customize.agent.md` and `.github/agents/docs.agent.md` now details all major directories, including new and existing collections such as `_books/`, `_teachings/`, `_scripts/`, `_plugins/`, and expanded `assets/` subdirectories. It also covers new configuration and utility files, making it easier for users to locate and understand the purpose of each file or folder. [[1]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L24-R66) [[2]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L17-R58) *Documentation and quick reference enhancements:* - The quick reference table in `.github/agents/customize.agent.md` has been updated to include new actions like adding teaching pages, setting up analytics, improving SEO, and ensuring accessibility, with more precise documentation links. - The documentation map now lists all major guides (e.g., `QUICKSTART.md`, `INSTALL.md`, `TROUBLESHOOTING.md`, `ACCESSIBILITY.md`, `ANALYTICS.md`, `SEO.md`), providing a clearer overview of available resources. [[1]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L58-R110) [[2]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L17-R58) **Feature and configuration documentation updates:** *CV/resume format guidance:* - The CV documentation now clarifies that users can maintain both RenderCV and JSONResume formats simultaneously, with clear instructions on switching between them and deleting unused files if desired. [[1]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L139-R185) [[2]](diffhunk://#diff-52f2a9488bfe4177d1f1d01120859dad0b3e2d087283ded68f72d47b4f183391L291-R291) *Teaching pages and new collections:* - Adds documentation for the new `_teachings/` collection, including required frontmatter and support for course materials, as well as updates to enable/disable teaching and books pages via `_config.yml`. [[1]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L180-R252) [[2]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L24-R66) *Analytics integration:* - Introduces a new `ANALYTICS.md` guide with detailed setup instructions for Google Analytics, privacy-friendly alternatives (Plausible, Pirsch, Openpanel, GoAccess), GDPR considerations, and a comparison table to help users choose the right analytics provider. - The configuration documentation now references analytics setup and related configuration options. [[1]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L180-R252) [[2]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L479-R550) These updates collectively make the documentation more comprehensive, actionable, and user-friendly for both new and advanced users. **References:** [[1]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L24-R66) [[2]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L58-R110) [[3]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L139-R185) [[4]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L180-R252) [[5]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L479-R550) [[6]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L17-R58) [[7]](diffhunk://#diff-0967e840631a541bb95e057e1c6d4884274cf56d5a217d7fee2eb7223b6b4c0dR1-R268) [[8]](diffhunk://#diff-52f2a9488bfe4177d1f1d01120859dad0b3e2d087283ded68f72d47b4f183391L291-R291) --------- Signed-off-by: George Araújo <george.gcac@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Auto update markdown TOC * Added copilot instructions, AGENTS.md, improved README files (#3486) This pull request introduces several documentation improvements and adds comprehensive Copilot and agent instruction files to the al-folio repository. The most significant changes are the addition of repository-wide and path-specific Copilot instructions, updates to agent documentation to reference these instructions, and improvements to the documentation structure and clarity regarding file purposes and workflows. **Copilot and Agent Instruction Enhancements:** - Added a new `.github/copilot-instructions.md` file providing detailed, repository-wide setup, build, CI/CD, troubleshooting, and file format guidance for Copilot coding agents. - Introduced `.github/instructions/bibtex-bibliography.instructions.md` with specific instructions for editing and validating BibTeX files, including custom keywords, formatting rules, and integration with Jekyll-Scholar. - Updated agent documentation files (`customize.agent.md`, `docs.agent.md`) to reference the new Copilot instruction files and explain their purpose and usage for both repository-wide and path-specific scenarios. [[1]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L57-R65) [[2]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L107-R122) [[3]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L49-R51) [[4]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L106-R137) **Documentation Structure and Clarity Improvements:** - Clarified and reorganized the documentation file list in agent files, removing references to deprecated or merged files (e.g., `MAINTENANCE.md`, `ACCESSIBILITY.md`) and updating descriptions to reflect current usage. [[1]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L57-R65) [[2]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L21-R21) [[3]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L106-R137) - Enhanced documentation on the purpose and application of each documentation file, and added detailed explanations of Copilot instruction files and their role in project development. **Workflow and Validation Updates:** - Updated references and descriptions for GitHub Actions workflows in agent documentation to include the Copilot environment setup and clarify pre-commit and CI/CD requirements. [[1]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L57-R65) [[2]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L49-R51) - Corrected references for accessibility guidance, now directing users to `TROUBLESHOOTING.md` instead of the removed `ACCESSIBILITY.md`. These changes collectively improve the onboarding experience for both human contributors and AI agents, ensuring consistent adherence to project conventions and reducing errors. **References:** [[1]](diffhunk://#diff-227c2c26cb2ee0ce0f46a320fc48fbcbdf21801a57f59161b1d0861e8aad55f5R1-R253) [[2]](diffhunk://#diff-6fd2827fb8d9c2dd6dc973572201853487ecbbd1120b00425d4f1c21dfdcf35fR1-R174) [[3]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L57-R65) [[4]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L107-R122) [[5]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L550-R562) [[6]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L21-R21) [[7]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L49-R51) [[8]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L106-R137) --------- Signed-off-by: George Araújo <george.gcac@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Auto update markdown TOC * docs: correct email configuration location in QUICKSTART.md (#3489) Fixes #3488 Updates `QUICKSTART.md` to correctly point to `_data/socials.yml` for email configuration, as the `email` field is not present in `_config.yml`. * fix(devcontainer): remove broken yarn apt source to fix build (#3490) This change introduces a Dockerfile to the devcontainer configuration that removes the broken Yarn repository from `/etc/apt/sources.list.d/`. This prevents `apt-get update` from failing due to an expired or missing GPG key for the Yarn repository. Fixes #3487 * Improve AGENTS.md structure Removed duplicate quick links for coding agents and customization. * fix: CV rendering failure without Volunteer field (#3479) Fixes #3478 * fix tikzjax (#3477) Fixes #3216 – TikZJax not working. 1. Changing SHA simply doesn't work, `window.tikzjax` is undefined and it doesn't render anything. 2. I switched to the JS distributed by [benrbray/tikzjax](https://github.com/benrbray/tikzjax/tree/develop), added under `assets.js` to prevent future issues. 3. Documents now require to start with `\begin{document}`, should be a simple fix. <img width="789" height="341" alt="Screenshot 2026-01-24 at 1 10 39 PM" src="https://github.com/user-attachments/assets/8272471d-df94-4118-a726-00ed09dcf1e8" /> <img width="780" height="380" alt="Screenshot 2026-01-24 at 1 06 13 PM" src="https://github.com/user-attachments/assets/11284661-de15-4d57-a1d9-4959f562f826" /> * Fix #2598, shift to last_modified_at instead of last_updated. (#3493) Use `last_modified_at` rather than `last_updated`. So that the jekyll-sitemap plugin automatically looks for the standard `last_modified_at` front matter field to generate the `<lastmod>` tag in your `sitemap.xml`. It fixes [#2598](https://github.com/alshedivat/al-folio/issues/2598) Also, it preserves backward compatibility, as the updated metadata logic prioritizes the `page.last_modified_at`, and defaults to `page.last_updated`. * Making Gemini and Claude configuration files point to AGENTS.md (#3494) This pull request updates project documentation to clarify and standardize the development workflow, Git practices, and troubleshooting resources. The main changes include adding a dedicated Git workflow guide and reorganizing the `AGENTS.md` file for better clarity and usability. **Documentation and Workflow Improvements:** * Added a new `.github/GIT_WORKFLOW.md` file detailing commit message conventions, types, and best practices for staging and ignoring files. * Reorganized and clarified the pre-commit checklist and local development instructions in `AGENTS.md`, emphasizing Docker usage and proper code formatting. * Updated the section on configuration and troubleshooting in `AGENTS.md` to better direct users to relevant resources and removed redundant or outdated instructions. [[1]](diffhunk://#diff-a54ff182c7e8acf56acfd6e4b9c3ff41e2c41a31c9b211b2deb9df75d9a478f9L57-R58) [[2]](diffhunk://#diff-a54ff182c7e8acf56acfd6e4b9c3ff41e2c41a31c9b211b2deb9df75d9a478f9L100-R74) **Configuration and Context Updates:** * Added a `.gemini/settings.json` file to define context files for Gemini agent operations, ensuring relevant documentation is available for automation tools. * Created `CLAUDE.md` file pointing to `AGENTS.md`. --------- Signed-off-by: George Araújo <george.gcac@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Enhance documentation for GitHub Copilot agents Added CLAUDE.md file for AI assistant integration and updated Copilot agents description. * Fix Gemini settings * Added information about creating custom metadata for collections * Update Google Scholar citations * Add GDPR-compliant cookie consent with analytics blocking (#3492) Implements cookie consent using vanilla-cookieconsent v3 to comply with GDPR requirements. Analytics scripts are blocked until user consent is obtained. ## Changes **Library Integration** - Added `vanilla-cookieconsent@3.1.0` to `_config.yml` third-party libraries with SRI hashes - Created `_scripts/cookie-consent-setup.js` with consent modal and settings configuration - Added CSS/JS includes in `_includes/head.liquid` and `_includes/scripts.liquid` **Analytics Blocking** - Modified analytics scripts in `scripts.liquid` and `distill_scripts.liquid` to use conditional `type="text/plain" data-category="analytics"` when consent is disabled - Blocks Google Analytics, Cronitor, Pirsch, and OpenPanel until consent granted - Library automatically converts blocked scripts to executable on user acceptance **Configuration** - Added `enable_cookie_consent` flag (default: `false`) - Cookie categories: `necessary` (always on), `analytics` (optional) - 182-day cookie expiration, auto-clear on rejection ## Implementation ```liquid {% if site.enable_cookie_consent %} <script type="text/plain" data-category="analytics" async src="...gtag.js"></script> {% else %} <script async src="...gtag.js"></script> {% endif %} ``` Enable in `_config.yml`: ```yaml enable_cookie_consent: true ``` ## Screenshots **Consent Modal** ![Cookie consent modal](https://github.com/user-attachments/assets/9edcddad-6a54-49ca-a164-083157d98370) **Settings Modal** ![Cookie preferences](https://github.com/user-attachments/assets/cf2a58ea-68c0-4699-b401-38377b98b718) > [!WARNING] > > <details> > <summary>Firewall rules blocked me from connecting to one or more addresses (expand for details)</summary> > > #### I tried to connect to the following addresses, but was blocked by firewall rules: > > - `cdn.jsdelivr.net` > - Triggering command: `/usr/bin/curl curl -s REDACTED` (dns block) > - `cookieconsent.orestbida.com` > - Triggering command: `/home/REDACTED/work/_temp/ghcca-node/node/bin/node /home/REDACTED/work/_temp/ghcca-node/node/bin/node --enable-source-maps /home/REDACTED/work/_temp/copilot-developer-action-main/dist/index.js` (dns block) > - `medium.com` > - Triggering command: `/usr/local/bin/ruby ruby /usr/local/bundle/bin/bundle exec jekyll serve --watch --port=8080 --host=0.0.0.0 --livereload --verbose --trace --force_polling s 6_64-linux /etc/locale.gen by/backward -binutils_2.44-3grep .deb eb /systemd-sysctl` (dns block) > - `publish.twitter.com` > - Triggering command: `/usr/local/bin/ruby ruby /usr/local/bundle/bin/bundle exec jekyll serve --watch --port=8080 --host=0.0.0.0 --livereload --verbose --trace --force_polling lude�� lude/ruby-4.0.0//run/containerd/io.containerd.runtime.v2.task/moby/a4760212ce4eda97e32b6dfa4d3ea/usr/sbin/iptables r/runc-log.json f8_range lude r-strong E r/wc7in709a54d7hshow` (dns block) > > If you need me to access, download, or install something from one of these locations, you can either: > > - Configure [Actions setup steps](https://gh.io/copilot/actions-setup-steps) to set up my environment, which run before the firewall is enabled > - Add the appropriate URLs or hosts to the custom allowlist in this repository's [Copilot coding agent settings](https://github.com/alshedivat/al-folio/settings/copilot/coding_agent) (admins only) > > </details> <!-- START COPILOT ORIGINAL PROMPT --> <details> <summary>Original prompt</summary> > > ---- > > *This section details on the original issue you should resolve* > > <issue_title>GDPR compliant cookie consent dialog</issue_title> > <issue_description>Hi, > > since I am from Europe and want my site to be accessed by EU citizens I need to ask users if they are ok with the use of cookies. Adding a dialogue by default that that asks the user before any cookies / localStorage are used would be nice. > > I have integrated the dialog from [https://www.cookieconsent.com/](https://www.cookieconsent.com/) on [my website](http://hschwane.github.io) and am happy to file a PR if you are interested. However It is not shown directly at the top, but below the menu bar for some reason. Not sure how to fix that. > </issue_description> > > <agent_instructions>Implement this using cookie consent dialog from https://github.com/orestbida/cookieconsent. The documentation is available at https://cookieconsent.orestbida.com/essential/getting-started.html.</agent_instructions> > > ## Comments on the Issue (you are @copilot in this section) > > <comments> > <comment_new><author>@alshedivat</author><body> > @hschwane, thanks for pointing this out. It's would be great if you could send a PR. > > To answer your question about positioning, the menu bar has the absolute position at the top of the page and keeps moving with scrolling. You can change that behavior in `_config.yml` by setting `navbar_fixed: false` (see [line 27](https://github.com/alshedivat/al-folio/blob/master/_config.yml#L27)). If you send a PR with basic functionality, I can help with adjusting the styles a bit. Thanks!</body></comment_new> > <comment_new><author>@alshedivat</author><body> > Just catching up on this discussion. > > @hschwane, thanks for providing an implementation based on `ihavecookies`! I looked through alshedivat/al-folio#223. It seems like to be able to correctly (un)block different types of cookies (all of which are third-party cookies) requires adding quite a bit of extra JavaScript (including adding it directly to posts or pages in some cases, e.g., when posts embed youtube videos or other external content). This approach will put some extra burden on contributors and maintainers of al-folio down the line. > > By the way, the dialog from https://www.cookieconsent.com/ is similar in that sense as it requires to manually add ALL scripts that use cookies. So, if someone contributes a new feature to al-folio that uses cookies, the contributor would have to go and update the cookie consent dialog as well (or edit quite a bit of JS if `ihavecookies` is used). > > Thinking about this more, I currently see only three options: > 1. If we want to have cookie consent as a core part of al-folio (which can be easily enabled or disabled), it needs to be a service that automatically identifies and blocks cookies, without putting an extra burden on the contributors or maintainers. The hosted version of [Cookie Consent by Osano](https://www.osano.com/features/consent-management) is an example. > 2. Another option is to provide a very minimalistic cookie consent dialog which simply says that the website uses cookies, without an option to opt-in or opt-out (e.g., see the open-source edition of [Osano](https://www.osano.com/cookieconsent/download/)). > 3. Finally, not have cookie consent as part of al-folio, and make the user responsible for figuring out whether they need a consent dialog and which service to use. > > Let me know what you think.</body></comment_new> > <comment_new><author>@alshedivat</author><body> > the best way to add GDPR compliant cookie consent is using https://github.com/orestbida/cookieconsent</body></comment_new> > </comments> > </details> > **Custom agent used: customization_agent** > Expert customization assistant for the al-folio Jekyll academic website template <!-- START COPILOT CODING AGENT SUFFIX --> - Fixes alshedivat/al-folio#199 <!-- START COPILOT CODING AGENT TIPS --> --- ✨ Let Copilot coding agent [set things up for you](https://github.com/alshedivat/al-folio/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot) — coding agent works faster and does higher quality work when set up for your repo. --------- Signed-off-by: George Araújo <george.gcac@gmail.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: george-gca <31376482+george-gca@users.noreply.github.com> Co-authored-by: George Araújo <george.gcac@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Auto update markdown TOC * Improve explanation of create from this template (#3499) This pull request improves the documentation to clarify the recommended way to create a new site using the al-folio template, emphasizing the use of the "Use this template" button instead of forking. It explains the differences between the two approaches, highlights common pitfalls with forking, and provides guidance for users who have already forked the repository. Documentation improvements regarding repository creation: * Added a prominent section in `README.md` explaining why "Use this template" is preferred over forking, including step-by-step instructions and advice for users who have already forked. * Updated `QUICKSTART.md` to strongly recommend using the "Use this template" button, clarified the steps for creating a new repository, and included tips for users who have already forked by mistake. * Added a new section in `INSTALL.md` detailing the differences between using the template and forking, common pitfalls, and best practices for contributing. Signed-off-by: George Araújo <george.gcac@gmail.com> * Auto update markdown TOC * Update Google Scholar citations * Added new research blog in README.md (#3522) * Update Google Scholar citations * Add link to personal page (laura wagner) in README (#3552) Adding my personal academic website to the academics list * Add Fukushima Lab to User community (Labs) (#3559) This PR adds Fukushima Lab to the **User community** section in `README.md` under **Labs**. Thank you for maintaining such a great and inspiring website template. Added link: - https://kenji-fukushima-lab.github.io/ Co-authored-by: Kenji Fukushima <kf@MacBookPro.elecom> * Update Google Scholar citations * Update Google Scholar citations * Update Google Scholar citations * Update Google Scholar citations * add vud.org to community list (#3575) Add vud.org to community list. * Added website of B. Choi (Update README.md) (#3569) Hello, please add my academic website to the community page. Thank you for maintaining this project. * [Update] add workshop to README.md (#3585) Add new workshop to README.md * Update Google Scholar citations * Update Google Scholar citations * Update Google Scholar citations * Update Google Scholar citations * Add pranavraj575 website to README * Add deden.id website to README Please let my website be on the growing list! I'm Deden Habibi Ali Alfathimy, a researcher in outer space politics, with personal website https://deden.id using al-folio. * Upgrade al-folio to v1.0 (#2968) ## Overview This PR delivers the `v1.0` architecture and runtime upgrade for `al-folio`. `al-folio` moves from a monolithic theme repo to a **thin starter + plugin ecosystem** model, while preserving visual identity and core behavior. ## What this PR changes ### 1) Starter becomes orchestration-only `al-folio` is now responsible for: - starter wiring (`Gemfile`, `_config.yml`) - sample/demo content - user-facing docs - visual regression and cross-plugin integration tests Component/runtime ownership is moved to dedicated gems. ### 2) Runtime and feature ownership split into plugins `al_folio_core` now provides shared runtime/layout primitives and contracts, and delegates feature modules to owning gems. Key plugin ownership in v1: - `al_folio_core`: core theme runtime/contracts - `al_folio_distill`: Distill layouts/runtime - `al_folio_cv`: CV rendering - `al_search`: search runtime and modal behavior - `al_icons`: icon runtime (Font Awesome, Academicons, Scholar Icons) - `al_cookie`: cookie-consent runtime - `al_img_tools`: image/gallery/lightbox tooling - `al_math`: math/TikZ runtime integration - additional `al-*` plugins for analytics/charts/citations/comments/newsletter/external posts/upgrade tooling ### 3) Styling/runtime modernization - Tailwind-first v1 runtime is established. - Legacy Bootstrap behavior is isolated behind optional `al_folio_bootstrap_compat` for migration windows. - jQuery-dependent runtime paths are removed/replaced in plugin-owned implementations. ### 4) Test ownership policy is enforced - `al-folio` keeps only starter-level integration and visual integrity checks. - Component correctness tests are owned by the corresponding plugin repos. This mirrors runtime ownership and reduces duplication/drift. ### 5) Upgrade and migration workflow `al_folio_upgrade` is integrated for audit/apply/report migration flows, including: - config contract checks - ownership drift detection - local override drift audit/diff/acknowledgement workflow - legacy marker detection - plugin wiring validation ### 6) Documentation and contributor model for v1 Docs are updated to reflect modular v1 behavior and contribution routing. New governance additions include: - plugin ownership/boundary guidance (`docs/BOUNDARIES.md`) - plugin naming convention (theme-coupled vs reusable plugin tracks) - featured-vs-bundled plugin distinction - plugin catalog source + page (`_data/featured_plugins.yml`, `_pages/plugins.md`) - plugin feature proposal issue template - PR template updates for ownership routing - agent-facing setup and migration skills ## Compatibility and migration notes - Plugin integration in starter is via `Gemfile` + `_config.yml`. - `al-folio` starter intentionally does not use a gemspec in v1. - Transitional Bootstrap compatibility remains available via `al_folio_bootstrap_compat`. - Existing front-matter contracts are preserved where possible; runtime implementations are now plugin-owned. - Customized sites can track local override drift with `bundle exec al-folio upgrade overrides audit` and `.al-folio-overrides.yml`. ## Validation strategy in this PR - visual parity checks against the v0.16.3 baseline - starter integration suites (comments, plugin toggles, distill, compat, upgrade CLI) - style contract checks and repository linting ## Scope intent This is the foundational v1 architecture PR. Post-merge feature work should generally target owning plugin repos first, with `al-folio` limited to starter wiring, docs, examples, and integration/visual validation. _Written by Codex on behalf of @alshedivat._ * Fix broken navbar: stop double-minifying Tailwind CSS in production (#3634) ## Summary Fixes the broken navigation bar on the live demo (https://alshedivat.github.io/al-folio/) introduced by the v1.0 upgrade (#2968), plus two related production/deploy-only issues found while auditing for the same class of bug. ## Root cause of the navbar break The v1.0 upgrade made the site **Tailwind-first**. The deploy builds with `JEKYLL_ENV=production`, which activates **jekyll-minifier**. Its CSS compressor (`cssminify2`) mangles Tailwind v4 spacing tokens **inside `calc()`**: ``` calc(var(--spacing)*0) -> calc(var( - - spacing)*0) // invalid ``` `cssminify2` treats the `--` inside `calc(var(--…))` as minus operators and inserts spaces, producing an invalid custom-property name. This silently breaks **every** spacing/positioning utility — most visibly `.fixed-top`, so the fixed navbar is no longer pinned (`top/left/right` drop out) and renders incorrectly. On the live site this affects 33 `var(--spacing)` references in `tailwind.css`. It only manifests in **production**: a local `bundle exec jekyll serve` is development mode (minifier off), and the `visual-regression` workflow also serves in dev mode — so neither caught it. ### Why this fix `tailwind.css` is already minified by al_folio_core's Tailwind build, and `main.css` is compiled by Sass with `style: compressed`. Re-minifying them with `cssminify2` adds nothing (it actually makes `tailwind.css` ~315 bytes **larger**) and only introduces this corruption. So we disable redundant CSS minification, mirroring the existing `compress_javascript: false` (terser handles JS). Verified end-to-end: - The gem source `tailwind.css` has 82 intact `var(--spacing)`; `cssminify2` corrupts all 82. - jekyll-minifier (`lib/jekyll-minifier.rb:1061`): `return output_file(path, content) unless config.compress_css?` — with `compress_css: false`, `.css` files are written verbatim. - A real `JEKYLL_ENV=production` build now emits `tailwind.css` with 82 intact `var(--spacing)`, 0 corrupted, and `.fixed-top{...;position:fixed}` intact. - PurgeCSS (the next deploy stage) preserves `calc(var(--spacing)*0)` unchanged. ## Changes 1. **`_config.yml` — `jekyll-minifier.compress_css: false`** (the navbar fix). 2. **`test/integration_css_minify.sh` + `unit-tests.yml`** — a regression test that builds in **production mode** (the mode that exposes this bug class) and asserts no `var( - - )` corruption, intact `var(--spacing)`, a valid `.fixed-top`, and a non-empty `main.css`. Passes with the fix; fails without it (83 corruptions). Closes the CI blind spot that let this ship. 3. **`_config.yml` — drop dead `jekyll-minifier` exclude** `assets/js/search/*.js`. That is a v0 path; in v1 the search runtime ships under `assets/al_search/js/...`, so the glob matched nothing. 4. **`purgecss.config.js` — safelist `medium-zoom-overlay` / `medium-zoom-image--opened`.** These classes are injected at runtime, so they never appear in the static HTML PurgeCSS scans; their `z-index:999` overlay rule was being purged on the deployed site, letting the scroll-progress bar / ToC bleed through a zoomed image. Verified: the rule survives purge with the safelist and is dropped without it. ## Broader audit — plugin fixes (released + pinned here) I audited for the same bug class (regressions invisible to dev-mode builds / leftovers from the v1 jQuery removal). The confirmed plugin-owned issues were each fixed in their own repo, merged after green CI, released to RubyGems, and pinned in this PR's `Gemfile`: - **al_folio_core 1.0.10** ([#18](https://github.com/al-org-dev/al-folio-core/pull/18)) — `main.css` cache-bust was permanently the empty-string MD5 (`bust_css_cache` globbed a non-existent `assets/_sass`) → stale CSS after deploys; `bib.liquid` "N more authors" used `$(this)` → threw and never expanded; `figure.liquid` `onerror` used `$()` → dead broken-image fallback. - **al_charts 1.0.1** ([#7](https://github.com/al-org-dev/al-charts/pull/7)) — `chartjs-setup.js` was jQuery → `chartjs` charts threw `$ is not defined` and never rendered. - **al_folio_distill 1.0.2** ([#2](https://github.com/al-org-dev/al-folio-distill/pull/2)) — `overrides.js` top-level `$(window).on("load")` → distill footnote/citation theming never applied + console error. Verified end-to-end with a production build after the pin bumps: `main.css` now cache-busts to a real hash (`9278fad1…`, not `d41d8cd9…`), zero jQuery `$(` in the built HTML, and the Tailwind spacing utilities / `.fixed-top` navbar are intact. Also noted (not fixed here): the `visual-regression` workflow only renders in dev mode, so it can't catch production-only CSS regressions — `test/integration_css_minify.sh` is the immediate guard; a production screenshot leg would be a fuller backstop. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs: expand CLAUDE.md with the v1 plugin-ecosystem architecture (#3635) ## Summary Expands `CLAUDE.md` from a bare `@AGENTS.md` import into a useful entry point for coding agents, while **keeping** that import so `AGENTS.md`'s ownership boundaries, validated command set, and PR-routing rules still flow in (and stay the short, ecosystem-neutral shared file). The added content is the cross-repo "big picture" that no single file in this repo currently documents — gathered by reading the starter internals plus all 16 `al-*` / `al_folio_*` plugin gems: - **al_folio_core hub + delegation map** — a `wrapper → tag → gem` table for every bundled plugin, so a runtime change can be routed to the owning repo in one lookup. - **Sibling-repos-on-disk** layout and how to point the `Gemfile` at a local gem checkout (`path:`) to test a gem fix against the site. - **Cross-repo invariants** — two-layer feature gating (config flag *and* front matter), `AssetsGenerator` build-time asset injection, the `Gemfile` ↔ `_config.yml` plugin-list sync, the v1 config contract (enforced by core's `:after_init` and `al-folio upgrade audit`), `.al-folio-overrides.yml` drift tracking, and the time-boxed bootstrap-compat path. - **Daily dev loop** that `AGENTS.md` omits (`jekyll serve`, single integration test, snapshot refresh, upgrade subcommands). - The v1 Docker `/tmp/_site` rationale and the `style_contract.js` boundary that fails CI if runtime/build files leak into the starter. Every specific claim (gem versions, tag names, config keys) is grounded in the actual repos. Prettier-clean. > Split out from the navbar-fix PR (#3634) per request; this PR is docs-only and independent. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Fix links (#3628) ## Summary In the "User community" README section several links didn't work anymore. I updated them where I was able to find a new link from the same person, and removed the ones where I didn't find a new link. ## Ownership Routing - [x] I confirmed this PR targets the correct repo based on `docs/BOUNDARIES.md`. - [x] This PR only changes starter-owned scope (`al-folio`) **or** I am porting a routed change and linked the owning repo issue/PR. ## Plugin Ecosystem (if applicable) - [x] Not applicable - [ ] This PR proposes a plugin for **featured-only** listing. - [ ] This PR proposes a plugin for **bundled** starter inclusion. ## Starter Wiring Changes - [x] Not applicable - [ ] Updated `Gemfile` dependency wiring. - [ ] Updated `_config.yml` plugin activation/config. - [ ] Updated `_data/featured_plugins.yml` metadata. ## Validation - [x] `npm ci` - [ ] `bundle exec jekyll build` - [x] `npm run lint:prettier` - [x] `npm run lint:style-contract` - [ ] Integration tests (`test/integration_*.sh`) as needed - [ ] Visual tests (`npm run test:visual`) as needed * Fix visual regressions: broken repo stat cards and unstyled af-popover/tooltip (#3636) ## What's broken on the demo site A full-page screenshot audit of every page on https://alshedivat.github.io/al-folio/ surfaced two user-visible bugs introduced or exposed by the v1 upgrade. ### Bug 1 — Repositories page: all stat cards show broken alt-text (HIGH) Both external services are currently unavailable: - `github-readme-stats.vercel.app` → HTTP 503 `DEPLOYMENT_PAUSED` - `github-profile-trophy.vercel.app` → HTTP 402 Every `<img>` on the repositories page fails to load, rendering as a list of broken-image alt-text strings. The templates had no `onerror` fallback. **Fix (in al_folio_core):** `onerror="this.closest('.repo').style.display='none'"` on every stat-card image in `repo.liquid`, `repo_user.liquid`, and `repo_trophies.liquid`. When a service is unavailable the entire card hides gracefully; when it comes back up cards render normally. ### Bug 2 — `.af-popover` / `.af-tooltip` completely unstyled (MEDIUM) `tooltips-setup.js` (active by default, since bootstrap-compat is disabled) creates `.af-popover` and `.af-tooltip` elements as its vanilla fallback — for example when hovering the author-info circle icon (ⓘ) on the publications page. These class names had **no CSS rules at all** in `al_folio_core`: no `position`, no styling, no `z-index`. The tooltip/popover appeared as invisible, unpositioned text nodes appended to `document.body`. (The theme's `_utilities.scss` only defined `.popover` — Bootstrap's class — which is irrelevant without bootstrap-compat loaded.) **Fix (in al_folio_core):** Added `position: absolute`, `z-index: 1070/1080`, and theme-color styling to both classes. The purgecss safelist in al-folio already protects both names so they survive the deploy pipeline. ## Changes - `Gemfile` / `Gemfile.lock`: bump `al_folio_core` 1.0.10 → 1.0.11 ([PR #19](https://github.com/al-org-dev/al-folio-core/pull/19), now merged and released) ## Scope All other pages screenshotted look correct. No other CSS/layout regressions were found beyond these two. The screenshot audit also confirmed: - The `var(--spacing)` Tailwind fix from #3634 is working correctly in production. - `main.css` cache-bust hash (`9278fad1…`) is stable and non-empty. - All blog posts, CV, teaching, people, projects, books pages render as expected. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Add a link to my lab website in user community section (#3645) Add a link to my lab website in the user community of README. ## Summary Many thanks to the authors and contributors of this repo. I'm glad to add my lab's website in the user community section of README. ## Ownership Routing - [x] I confirmed this PR targets the correct repo based on `docs/BOUNDARIES.md`. - [ ] This PR only changes starter-owned scope (`al-folio`) **or** I am porting a routed change and linked the owning repo issue/PR. Owning repo (if not starter): <!-- e.g., al-org-dev/al-folio-core --> Related issue/PR: <!-- link --> ## Plugin Ecosystem (if applicable) - [x] Not applicable - [ ] This PR proposes a plugin for **featured-only** listing. - [ ] This PR proposes a plugin for **bundled** starter inclusion. If plugin-related, provide: - Plugin repo URL: - Gem name: - Jekyll plugin id: - Compatibility (`al_folio_min`/`al_folio_max`): - Demo page/post path: - Maintainer contact: ## Starter Wiring Changes - [x] Not applicable - [ ] Updated `Gemfile` dependency wiring. - [ ] Updated `_config.yml` plugin activation/config. - [ ] Updated `_data/featured_plugins.yml` metadata. ## Validation - [ ] `npm ci` - [ ] `bundle exec jekyll build` - [ ] `npm run lint:prettier` - [ ] `npm run lint:style-contract` - [ ] Integration tests (`test/integration_*.sh`) as needed - [ ] Visual tests (`npm run test:visual`) as needed ## Notes Compatibility, migration implications, and follow-ups: * Update Google Scholar citations * Update Google Scholar citations * Update Google Scholar citations * Update Google Scholar citations * Update Google Scholar citations * Update Google Scholar citations * Bump nokogiri from 1.19.3 to 1.19.4 (#3653) Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.19.3 to 1.19.4. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/sparklemotion/nokogiri/releases">nokogiri's releases</a>.</em></p> <blockquote> <h2>v1.19.4 / 2026-06-18</h2> <h3>Security</h3> <ul> <li>[CRuby] (Low) Fixed a possible invalid memory read when <code>XML::Node#initialize_copy_with_args</code> is called with an argument that is not a <code>Node</code>. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-g9g8-vgvw-g3vf">GHSA-g9g8-vgvw-g3vf</a> for more information.</li> <li>[CRuby] (Low) Fixed a possible use-after-free when an <code>XML::XPathContext</code> is used after its source document has been garbage collected. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-p67v-3w7g-wjg7">GHSA-p67v-3w7g-wjg7</a> for more information.</li> <li>[CRuby] (Low) Fixed a possible use-after-free during XInclude processing via <code>Node#do_xinclude</code>. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-wfpw-mmfh-qq69">GHSA-wfpw-mmfh-qq69</a> for more information.</li> <li>[CRuby] (Low) Fixed a possible use-after-free when <code>Document#root=</code> is assigned a non-element node. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-wjv4-x9w8-wm3h">GHSA-wjv4-x9w8-wm3h</a> for more information.</li> <li>[CRuby] (Low) Fixed a possible use-after-free when setting an attribute value via <code>XML::Attr#value=</code> or <code>#content=</code>. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-phwj-rprq-35pp">GHSA-phwj-rprq-35pp</a> for more information.</li> <li>[CRuby] (Low) Fixed a null pointer dereference when methods are called on uninitialized wrapper objects (e.g. via <code>allocate</code>); these now raise instead of crashing the process. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-9cv2-cfxc-v4v2">GHSA-9cv2-cfxc-v4v2</a> for more information.</li> <li>[CRuby] (Low) Fixed a possible use-after-free when <code>Document#encoding=</code> raises an exception. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-5v8h-3h3q-446p">GHSA-5v8h-3h3q-446p</a> for more information.</li> <li>[CRuby] (Medium) Fixed an out-of-bounds read in <code>XML::NodeSet#[]</code> (alias <code>#slice</code>) when given a large negative index. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-5prr-v3j2-97mh">GHSA-5prr-v3j2-97mh</a> for more information.</li> <li>[JRuby] (Low) <code>XML::Schema</code> now enforces the <code>NONET</code> parse option, which Nokogiri enables by default. It was not enforced on JRuby, so a schema parsed with default options could still fetch external resources over the network, potentially enabling SSRF or XXE attacks and bypassing the mitigation for CVE-2020-26247. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-8678-w3jw-xfc2">GHSA-8678-w3jw-xfc2</a> for more information.</li> </ul> <!-- raw HTML omitted --> <pre><code>1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f nokogiri-1.19.4-aarch64-linux-gnu.gem 35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af nokogiri-1.19.4-aarch64-linux-musl.gem a301313e38bb065d68239e79734bcd6f56fb6efaacebde29e9abf2a4735340ca nokogiri-1.19.4-arm-linux-gnu.gem 588923c101bcfa78869734d247d25b598674323e7f22474fc468f6e5647311eb nokogiri-1.19.4-arm-linux-musl.gem a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527 nokogiri-1.19.4-arm64-darwin.gem ce04b9e268c9626852231a48b49128ed52034f1ccb39484a6da3875491cd709e nokogiri-1.19.4-java.gem 051da97b8eccfdb5444fed40246a35e10d7298b9efe759b4cd25455ea04c587e nokogiri-1.19.4-x64-mingw-ucrt.gem 7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551 nokogiri-1.19.4-x86_64-darwin.gem 379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a nokogiri-1.19.4-x86_64-linux-gnu.gem 17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b nokogiri-1.19.4-x86_64-linux-musl.gem 50c951611c92bca05c51411aef45f1cbc50f2821c4802758c5c6d34696533ab5 nokogiri-1.19.4.gem </code></pre> <!-- raw HTML omitted --> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md">nokogiri's changelog</a>.</em></p> <blockquote> <h2>v1.19.4 / 2026-06-18</h2> <h3>Security</h3> <ul> <li>[CRuby] (Low) Fixed a possible invalid memory read when <code>XML::Node#initialize_copy_with_args</code> is called with an argument that is not a <code>Node</code>. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-g9g8-vgvw-g3vf">GHSA-g9g8-vgvw-g3vf</a> for more information.</li> <li>[CRuby] (Low) Fixed a possible use-after-free when an <code>XML::XPathContext</code> is used after its source document has been garbage collected. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-p67v-3w7g-wjg7">GHSA-p67v-3w7g-wjg7</a> for more information.</li> <li>[CRuby] (Low) Fixed a possible use-after-free during XInclude processing via <code>Node#do_xinclude</code>. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-wfpw-mmfh-qq69">GHSA-wfpw-mmfh-qq69</a> for more information.</li> <li>[CRuby] (Low) Fixed a possible use-after-free when <code>Document#root=</code> is assigned a non-element node. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-wjv4-x9w8-wm3h">GHSA-wjv4-x9w8-wm3h</a> for more information.</li> <li>[CRuby] (Low) Fixed a possible use-after-free when setting an attribute value via <code>XML::Attr#value=</code> or <code>#content=</code>. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-phwj-rprq-35pp">GHSA-phwj-rprq-35pp</a> for more information.</li> <li>[CRuby] (Low) Fixed a null pointer dereference when methods are called on uninitialized wrapper objects (e.g. via <code>allocate</code>); these now raise instead of crashing the process. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-9cv2-cfxc-v4v2">GHSA-9cv2-cfxc-v4v2</a> for more information.</li> <li>[CRuby] (Low) Fixed a possible use-after-free when <code>Document#encoding=</code> raises an exception. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-5v8h-3h3q-446p">GHSA-5v8h-3h3q-446p</a> for more information.</li> <li>[CRuby] (Medium) Fixed an out-of-bounds read in <code>XML::NodeSet#[]</code> (alias <code>#slice</code>) when given a large negative index. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-5prr-v3j2-97mh">GHSA-5prr-v3j2-97mh</a> for more information.</li> <li>[JRuby] (Low) <code>XML::Schema</code> now enforces the <code>NONET</code> parse option, which Nokogiri enables by default. It was not enforced on JRuby, so a schema parsed with default options could still fetch external resources over the network, potentially enabling SSRF or XXE attacks and bypassing the mitigation for CVE-2020-26247. See <a href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-8678-w3jw-xfc2">GHSA-8678-w3jw-xfc2</a> for more information.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/sparklemotion/nokogiri/commit/8cfb9daae9ee4a0837508eab43c40fbc8c4138c9"><code>8cfb9da</code></a> version bump to v1.19.4</li> <li><a href="https://github.com/sparklemotion/nokogiri/commit/a856d1e46bda04ef47a0bd2b9eefe86df1eb0bb2"><code>a856d1e</code></a> fix: JRuby NONET bypass in XML::Schema (v1.19.x) (<a href="https://redirect.github.com/sparklemotion/nokogiri/issues/3639">#3639</a>)</li> <li><a href="https://github.com/sparklemotion/nokogiri/commit/6a0aa1e7042ea58e10db713d4984c692a8db1a30"><code>6a0aa1e</code></a> fix(CRuby): use-after-free in Document#encoding= when setter raises (v1.19.x)...</li> <li><a href="https://github.com/sparklemotion/nokogiri/commit/f658a54ab2df58a3525967c339edce9649c197d4"><code>f658a54</code></a> fix: JRuby NONET bypass in XML::Schema</li> <li><a href="https://github.com/sparklemotion/nokogiri/commit/39d26fea52cda8ac15313561824fd0bc018818aa"><code>39d26fe</code></a> fix(CRuby): use-after-free in Document#encoding= when setter raises</li> <li><a href="https://github.com/sparklemotion/nokogiri/commit/04a09ddd67a4b573eb5c634655c2fb857e0436ad"><code>04a09dd</code></a> fix(CRuby): out-of-bounds read in NodeSet#[] with large negative index (v1.19...</li> <li><a href="https://github.com/sparklemotion/nokogiri/commit/7799fbd325f9f5e10fcccc77daaa903949a9d545"><code>7799fbd</code></a> fix: avoid NPE on uninitialized XML::Node structs (v1.19.x) (<a href="https://redirect.github.com/sparklemotion/nokogiri/issues/3645">#3645</a>)</li> <li><a href="https://github.com/sparklemotion/nokogiri/commit/ef19e1329c39f885e980b301f33fb233f3431d14"><code>ef19e13</code></a> fix(CRuby): avoid UAF in XML::Attr#value= (v1.19.x) (<a href="https://redirect.github.com/sparklemotion/nokogiri/issues/3644">#3644</a>)</li> <li><a href="https://github.com/sparklemotion/nokogiri/commit/5524fa97868ae26dfd74d700aba256b117262267"><code>5524fa9</code></a> fix: <code>Document#root=</code> rejects non-element nodes (v1.19.x) (<a href="https://redirect.github.com/sparklemotion/nokogiri/issues/3643">#3643</a>)</li> <li><a href="https://github.com/sparklemotion/nokogiri/commit/9891ad1092a265ae1cef220c377ebbabc9fde622"><code>9891ad1</code></a> fix(CRuby): use-after-free in XPathContext document lifetime (v1.19.x) (<a href="https://redirect.github.com/sparklemotion/nokogiri/issues/3641">#3641</a>)</li> <li>Additional commits viewable in <a href="https://github.com/sparklemotion/nokogiri/compare/v1.19.3...v1.19.4">compare view</a></li> </ul> </details> <br /> [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=nokogiri&package-manager=bundler&previous-version=1.19.3&new-version=1.19.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/alshedivat/al-folio/network/alerts). </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump concurrent-ruby from 1.3.6 to 1.3.7 (#3654) Bumps [concurrent-ruby](https://github.com/ruby-concurrency/concurrent-ruby) from 1.3.6 to 1.3.7. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/ruby-concurrency/concurrent-ruby/releases">concurrent-ruby's releases</a>.</em></p> <blockquote> <h2>v1.3.7</h2> <!-- raw HTML omitted --> <p>There are 3 security fixes in this release, so updating is recommended. These security vulnerabilities are not very likely to be hit in practice and have a corresponding <code>Low</code> severity score.</p> <!-- raw HTML omitted --> <h2>What's Changed</h2> <ul> <li><a href="https://github.com/ruby-concurrency/concurrent-ruby/security/advisories/GHSA-h8w8-99g7-qmvj">CVE-2026-54904</a> <code>AtomicReference#update</code> livelocks when the stored value is <code>Float::NAN</code>. Fix by <a href="https://github.com/joshuay03"><code>@​joshuay03</code></a> and <a href="https://github.com/eregon"><code>@​eregon</code></a></li> <li><a href="https://github.com/ruby-concurrency/concurrent-ruby/security/advisories/GHSA-wv3x-4vxv-whpp">CVE-2026-54905</a> <code>ReentrantReadWriteLock</code> read-count overflow grants a write lock without exclusivity. Fix by <a href="https://github.com/joshuay03"><code>@​joshuay03</code></a></li> <li><a href="https://github.com/ruby-concurrency/concurrent-ruby/security/advisories/GHSA-6wx8-w4f5-wwcr">CVE-2026-54906</a> <code>ReadWriteLock</code> allows wrong-thread write release and stray read-release counter corruption. Fix by <a href="https://github.com/joshuay03"><code>@​joshuay03</code></a></li> <li>concurrent-ruby-ext: fix build on Darwin 32-bit by <a href="https://github.com/barracuda156"><code>@​barra…
1 parent 5d05dfe commit af53bd8

291 files changed

Lines changed: 8555 additions & 73858 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# al-folio Bootstrap
2+
3+
Use this skill when a user asks an agent to create, configure, or personalize a new al-folio v1.x website.
4+
5+
## Workflow
6+
7+
1. Read `AGENTS.md` and `docs/BOUNDARIES.md` before editing.
8+
2. Keep the starter small: customize `_config.yml`, `_data`, content collections, and site assets first.
9+
3. Leave runtime behavior in plugin repos. Do not copy plugin-owned layouts, includes, Sass, JavaScript, or assets into the starter unless the user intentionally wants a local override.
10+
4. For local visual/content customization, prefer:
11+
- `_config.yml` feature flags and site metadata
12+
- `_data/*.yml`
13+
- `_pages`, `_posts`, `_projects`, `_news`, `_teachings`, `_bibliography`
14+
- local `_includes`, `_layouts`, and `_sass` overrides only when config/content cannot express the change
15+
5. Run validation before handing work back:
16+
17+
```bash
18+
npm ci
19+
npm run lint:prettier
20+
bundle exec al-folio upgrade audit --no-fail
21+
bundle exec jekyll build --baseurl /al-folio
22+
```
23+
24+
## Routing
25+
26+
- Starter wiring/docs/examples/tests: edit `al-folio`.
27+
- Shared layouts/includes/assets: use `al_folio_core`.
28+
- CV rendering: use `al_folio_cv`.
29+
- Distill runtime: use `al_folio_distill`.
30+
- Search/icons/math/comments/analytics/citations/external posts/newsletter/charts/images: use the owning `al-*` plugin repo.
31+
32+
## Handoff
33+
34+
Summarize changed files, validation results, and any local overrides created.
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# al-folio v1 Migration
2+
3+
Use this skill when a user asks an agent to migrate an existing customized al-folio fork to v1.x.
4+
5+
## Workflow
6+
7+
1. Work in a disposable branch, fork, or clone. Do not overwrite the user's original site.
8+
2. Start from the v1 starter contract, then bring over site-owned files:
9+
- `_config.yml` values
10+
- `_data`
11+
- `_bibliography`
12+
- content collections
13+
- site assets
14+
- intentional local `_includes`, `_layouts`, and `_sass` overrides
15+
3. Keep v1 plugin wiring from the starter:
16+
- `theme: al_folio_core`
17+
- bundled `al_*` and `al_folio_*` gems in `Gemfile`
18+
- bundled plugin entries in `_config.yml`
19+
4. Remove stale copied runtime files now owned by plugins unless they are intentional overrides.
20+
5. Run upgrade checks:
21+
22+
```bash
23+
bundle exec al-folio upgrade audit --no-fail
24+
bundle exec al-folio upgrade overrides audit
25+
```
26+
27+
6. For each stale or unacknowledged override:
28+
29+
```bash
30+
bundle exec al-folio upgrade overrides diff LOCAL_PATH
31+
bundle exec al-folio upgrade overrides accept LOCAL_PATH
32+
```
33+
34+
7. Build and inspect key pages: home, CV, publications, repositories, projects, posts, and any custom routes.
35+
36+
## Migration Notes
37+
38+
Commit `.al-folio-overrides.yml` when the site intentionally keeps local overrides. It records the upstream plugin file checksum last reviewed so future gem updates can flag drift explicitly.
39+
40+
## Handoff
41+
42+
Report removed stale runtime files, retained local overrides, unresolved visual differences, and exact validation commands.

‎.al-folio-overrides.yml‎

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
---
2+
version: 1
3+
overrides:
4+
_includes/figure.liquid:
5+
owner: al_folio_core
6+
gem_version: 1.0.12
7+
upstream_path: _includes/figure.liquid
8+
upstream_sha256: d094ba62f74e50ec9a3a7aca01d41f3d499f7fb3bc3507ca8aecd946347132bb
9+
local_sha256: 54902b218d44582081573b9d469e395e24e8cf3323e148e32f7b08a0207b3ac7
10+
acknowledged_at: '2026-07-30'
11+
_includes/footer.liquid:
12+
owner: al_folio_core
13+
gem_version: 1.0.12
14+
upstream_path: _includes/footer.liquid
15+
upstream_sha256: 65219faad5445eb4456649d77921acd07845875bbcad4fb8f33b12b3d52d96d2
16+
local_sha256: f2d392f9dd6d468a73615d829b381e05ded1c31e77d316050b2d0f60d6121c28
17+
acknowledged_at: '2026-07-30'
18+
_includes/header.liquid:
19+
owner: al_folio_core
20+
gem_version: 1.0.12
21+
upstream_path: _includes/header.liquid
22+
upstream_sha256: c8663513baded68d9fa5fbe4d6363a976535bbe201efe5138243d0ff03101058
23+
local_sha256: aaaacc7589d2a3a8758fcde44efed858b6fff7ebda6b8af18616d5a2b3168a7b
24+
acknowledged_at: '2026-07-30'
25+
_includes/repository/repo.liquid:
26+
owner: al_folio_core
27+
gem_version: 1.0.12
28+
upstream_path: _includes/repository/repo.liquid
29+
upstream_sha256: ce87ac70cb6a8e2b1ed708b0418c638ebc4e59c4198de68bff0fc39cd5a01087
30+
local_sha256: 204440d391995038c509dbefe05c05ab199a7198c71cb6aaaf9e4ebf26195a96
31+
acknowledged_at: '2026-07-30'
32+
_layouts/about.liquid:
33+
owner: al_folio_core
34+
gem_version: 1.0.12
35+
upstream_path: _layouts/about.liquid
36+
upstream_sha256: 2c28eb83b71fe65f252202c11f0b4a19a9b6f1faccdc870b4f91c4ea51d0c6f1
37+
local_sha256: 3f621e36c62f6521f57602e5e711f0b7e1a1d54c02c74cfddff2ceec2fc524b8
38+
acknowledged_at: '2026-07-30'
39+
_layouts/bib.liquid:
40+
owner: al_folio_core
41+
gem_version: 1.0.12
42+
upstream_path: _layouts/bib.liquid
43+
upstream_sha256: 430311d9b94adf6fb1c2fab7609f6e726efc98e2b50e7b1c4cde0ad654c04506
44+
local_sha256: 7119a1649bfc5822a4d111e6b2cdc5c21ec1cc2d4cb84627f3aae78a96f81b88
45+
acknowledged_at: '2026-07-30'
46+
_layouts/page.liquid:
47+
owner: al_folio_core
48+
gem_version: 1.0.12
49+
upstream_path: _layouts/page.liquid
50+
upstream_sha256: eb392ada31cdbe8d1a0f5dbd7229700b5fa7cdf6f4788cbb65d6b746ac3b1231
51+
local_sha256: 6088ab8a58b2f3ae7d42068980747e333471800e6493fd9fa0e7e34a1ccc5c1a
52+
acknowledged_at: '2026-07-30'
53+
assets/css/main.scss:
54+
owner: al_folio_core
55+
gem_version: 1.0.12
56+
upstream_path: assets/css/main.scss
57+
upstream_sha256: 437c6c911c596391413e435dc0ea7095e682e85c572c1fd3fff69f9597455b3e
58+
local_sha256: 961c4d03034dd7d13dee2c34f2a533110706aaea8931c262ece0cd2f4045546f
59+
acknowledged_at: '2026-07-30'

‎.claude/skills‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../.agents/skills

‎.codex/skills‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../.agents/skills

‎.devcontainer/Dockerfile‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
FROM mcr.microsoft.com/devcontainers/jekyll
2+
3+
# Fix: Remove the broken Yarn repository from the apt sources.
4+
# This prevents 'apt-get update' from failing due to the missing GPG key.
5+
# (Yarn is already provided by the dev container features/nvm, so this system repo is unnecessary)
6+
# See issue #3487
7+
RUN rm -f /etc/apt/sources.list.d/yarn.list

‎.devcontainer/devcontainer.json‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
// README at: https://github.com/devcontainers/templates/tree/main/src/jekyll
33
{
44
"name": "Jekyll",
5-
"image": "mcr.microsoft.com/devcontainers/jekyll",
5+
// Using a Dockerfile to fix the broken Yarn repository. See issue #3487.
6+
"build": {
7+
"dockerfile": "Dockerfile"
8+
},
69

710
// Features to add to the dev container. More info: https://containers.dev/features.
811
"features": {

‎.gemini/settings.json‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"context": {
3+
"fileName": [
4+
"AGENTS.md",
5+
".github/copilot-instructions.md",
6+
".github/agents/customize.agent.md",
7+
".github/agents/docs.agent.md",
8+
".github/instructions/**/*.md",
9+
"docs/README.md",
10+
"docs/CUSTOMIZE.md",
11+
"docs/INSTALL.md",
12+
"docs/TROUBLESHOOTING.md",
13+
"docs/QUICKSTART.md",
14+
"docs/BOUNDARIES.md"
15+
]
16+
}
17+
}

‎.github/GIT_WORKFLOW.md‎

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# Git Workflow
2+
3+
This document outlines the conventions for using Git and writing commit messages in this project.
4+
5+
## Commit Message Format
6+
7+
All commit messages should follow this format:
8+
9+
```
10+
<type>: <subject>
11+
12+
<body (optional)>
13+
```
14+
15+
**Types:**
16+
17+
- `feat`: A new feature
18+
- `fix`: A bug fix
19+
- `docs`: Documentation only changes
20+
- `style`: Changes that do not affect the meaning of the code (white-space, formatting, etc.)
21+
- `config`: Changes to configuration files
22+
- `chore`: Changes to the build process or auxiliary tools and libraries
23+
24+
**Examples:**
25+
26+
```
27+
feat: Add dark mode toggle button to header
28+
fix: Correct baseurl in project site configuration
29+
docs: Update docs/INSTALL.md with Docker troubleshooting
30+
style: Format all Liquid templates with Prettier
31+
config: Enable blog section in _config.yml
32+
chore: Update Jekyll dependencies with bundle update --all
33+
```
34+
35+
## Staging Changes
36+
37+
**Always `git add` files explicitly.** Do not stage everything with `git add .` unless you are certain of what's being committed. Check `git status` first to review your changes.
38+
39+
## What NOT to Commit
40+
41+
**Always obey the project's [`.gitignore`](../.gitignore) file.** It prevents the accidental commit of:
42+
43+
- Build outputs (`_site/`, `.jekyll-cache/`)
44+
- Dependencies (`node_modules/`, `vendor/`)
45+
- OS-specific files (`.DS_store`)
46+
- Editor temporary files (`.idea/`, `.swp`, `.swo`)
47+
- Secrets and API keys (never commit credentials)

‎.github/ISSUE_TEMPLATE/1_bug_report.yml‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ body:
77
value: >
88
Before you go any further. Is this really a **🐛 bug**?
99
10-
If it's a question about how al-folio works, have a look at our [documentation](https://github.com/alshedivat/al-folio/blob/main/README.md),
11-
[frequently asked questions](https://github.com/alshedivat/al-folio/blob/main/FAQ.md),
10+
If it's a question about how al-folio works, have a look at our [documentation](https://github.com/alshedivat/al-folio/blob/main/docs/README.md),
11+
[frequently asked questions](https://github.com/alshedivat/al-folio/blob/main/docs/FAQ.md),
1212
[past questions](https://github.com/alshedivat/al-folio/discussions/categories/q-a),
1313
or [ask a question](https://github.com/alshedivat/al-folio/discussions/new?category=q-a).
1414
@@ -20,7 +20,7 @@ body:
2020
Please check if somebody else has already filed the same issue.
2121
If you find a similar issue, please add a 👍 reaction or comment on the original post.
2222
options:
23-
- label: I read through [FAQ](https://github.com/alshedivat/al-folio/blob/main/FAQ.md) and searched through the [past issues](https://github.com/alshedivat/al-folio/issues), none of which addressed my issue.
23+
- label: I read through [FAQ](https://github.com/alshedivat/al-folio/blob/main/docs/FAQ.md) and searched through the [past issues](https://github.com/alshedivat/al-folio/issues), none of which addressed my issue.
2424
required: true
2525
- label: Yes, I have checked that this issue isn't already filed.
2626
required: true

0 commit comments

Comments
 (0)