unaltraweb 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +20 -0
- data/Makefile +412 -0
- data/README.md +226 -0
- data/_config.yml +842 -0
- data/_data/i18n/ca.yml +278 -0
- data/_data/i18n/en.yml +278 -0
- data/_data/i18n/es.yml +278 -0
- data/_includes/audio.liquid +30 -0
- data/_includes/bib_search.liquid +5 -0
- data/_includes/blog-list.liquid +66 -0
- data/_includes/book-citation.liquid +33 -0
- data/_includes/citation.liquid +26 -0
- data/_includes/custom_head.liquid +3 -0
- data/_includes/custom_scripts.liquid +5 -0
- data/_includes/cv/list.liquid +5 -0
- data/_includes/cv/list_groups.liquid +51 -0
- data/_includes/cv/map.liquid +29 -0
- data/_includes/cv/nested_list.liquid +16 -0
- data/_includes/cv/time_table.liquid +118 -0
- data/_includes/cv-download-card.liquid +26 -0
- data/_includes/developer-mode-switcher.liquid +24 -0
- data/_includes/disqus.liquid +13 -0
- data/_includes/distill_scripts.liquid +298 -0
- data/_includes/documentation-download-detail.liquid +76 -0
- data/_includes/documentation-downloads.liquid +71 -0
- data/_includes/documentation-profile-attributes.liquid +4 -0
- data/_includes/documentation-section-toc.liquid +9 -0
- data/_includes/documentation-sidebar.liquid +112 -0
- data/_includes/figure.liquid +87 -0
- data/_includes/footer.liquid +66 -0
- data/_includes/giscus.liquid +25 -0
- data/_includes/head.liquid +220 -0
- data/_includes/header.liquid +544 -0
- data/_includes/latest_posts.liquid +61 -0
- data/_includes/localized-date.liquid +5 -0
- data/_includes/manual-bibliography.liquid +2 -0
- data/_includes/manual-featured-readings.liquid +12 -0
- data/_includes/manual-other-readings.liquid +12 -0
- data/_includes/manual-page-toc.liquid +11 -0
- data/_includes/manual-sidebar.liquid +58 -0
- data/_includes/manual-teachers.liquid +74 -0
- data/_includes/metadata.liquid +278 -0
- data/_includes/news.liquid +48 -0
- data/_includes/newsletter.liquid +68 -0
- data/_includes/page-hero.liquid +96 -0
- data/_includes/page-link.liquid +8 -0
- data/_includes/pagination.liquid +22 -0
- data/_includes/post-reading-time.liquid +29 -0
- data/_includes/previous-next.liquid +37 -0
- data/_includes/profile-card.liquid +49 -0
- data/_includes/profile-feature-matrix.liquid +75 -0
- data/_includes/profile-highlights.liquid +122 -0
- data/_includes/project-grid.liquid +26 -0
- data/_includes/project-resource-link.liquid +45 -0
- data/_includes/project-resources.liquid +21 -0
- data/_includes/projects.liquid +38 -0
- data/_includes/projects_horizontal.liquid +37 -0
- data/_includes/publications-metrics-summary.liquid +69 -0
- data/_includes/publications-summary.liquid +127 -0
- data/_includes/reading-biblio-controls.liquid +65 -0
- data/_includes/reading-cover-card.liquid +93 -0
- data/_includes/reading-rating.liquid +11 -0
- data/_includes/recommended-readings.liquid +30 -0
- data/_includes/related_posts.liquid +39 -0
- data/_includes/repository/repo.liquid +48 -0
- data/_includes/repository/repo_trophies.liquid +44 -0
- data/_includes/repository/repo_user.liquid +35 -0
- data/_includes/resume/awards.liquid +19 -0
- data/_includes/resume/basics.liquid +28 -0
- data/_includes/resume/certificates.liquid +35 -0
- data/_includes/resume/education.liquid +54 -0
- data/_includes/resume/interests.liquid +34 -0
- data/_includes/resume/languages.liquid +31 -0
- data/_includes/resume/projects.liquid +32 -0
- data/_includes/resume/publications.liquid +28 -0
- data/_includes/resume/references.liquid +31 -0
- data/_includes/resume/skills.liquid +33 -0
- data/_includes/resume/volunteer.liquid +52 -0
- data/_includes/resume/work.liquid +52 -0
- data/_includes/scripts.liquid +364 -0
- data/_includes/search-data.js.liquid +341 -0
- data/_includes/selected_papers.liquid +3 -0
- data/_includes/t.liquid +31 -0
- data/_includes/team-grid.liquid +172 -0
- data/_includes/video.liquid +97 -0
- data/_layouts/about.liquid +93 -0
- data/_layouts/archive.liquid +45 -0
- data/_layouts/bib.liquid +677 -0
- data/_layouts/book-review.liquid +225 -0
- data/_layouts/book-shelf.liquid +66 -0
- data/_layouts/cv.liquid +127 -0
- data/_layouts/default.liquid +70 -0
- data/_layouts/distill.liquid +132 -0
- data/_layouts/documentation-download-detail.liquid +5 -0
- data/_layouts/documentation-home.liquid +100 -0
- data/_layouts/documentation-page.liquid +45 -0
- data/_layouts/manual-bib.liquid +73 -0
- data/_layouts/manual-chapter.liquid +99 -0
- data/_layouts/manual-featured-bib.liquid +100 -0
- data/_layouts/manual-home.liquid +120 -0
- data/_layouts/none.liquid +1 -0
- data/_layouts/outputs.liquid +29 -0
- data/_layouts/page.liquid +52 -0
- data/_layouts/post.liquid +95 -0
- data/_layouts/profile.liquid +36 -0
- data/_layouts/profiles.liquid +36 -0
- data/_layouts/project.liquid +7 -0
- data/_layouts/repositories.liquid +58 -0
- data/_layouts/theses.liquid +126 -0
- data/_plugins/bibliography_profiles.rb +164 -0
- data/_plugins/callouts.rb +104 -0
- data/_plugins/code_blocks.rb +277 -0
- data/_plugins/computation_figure_images.rb +266 -0
- data/_plugins/computation_sources.rb +42 -0
- data/_plugins/content_search_index.rb +210 -0
- data/_plugins/details.rb +23 -0
- data/_plugins/external-posts.rb +124 -0
- data/_plugins/figure_captions.rb +800 -0
- data/_plugins/file-exists.rb +22 -0
- data/_plugins/google-scholar-citations.rb +86 -0
- data/_plugins/hide-custom-bibtex.rb +18 -0
- data/_plugins/inspirehep-citations.rb +57 -0
- data/_plugins/localized_visual_sources.rb +145 -0
- data/_plugins/manual_release_metadata.rb +47 -0
- data/_plugins/mermaid_mmd_images.rb +233 -0
- data/_plugins/profile-pages.rb +28 -0
- data/_plugins/remove-accents.rb +32 -0
- data/_plugins/reproducible_build_time.rb +55 -0
- data/_plugins/search-data.rb +83 -0
- data/_plugins/theme-cache-bust.rb +56 -0
- data/_plugins/vega_visual_images.rb +290 -0
- data/_plugins/web_capture_images.rb +154 -0
- data/_sass/_base.scss +2133 -0
- data/_sass/_blog.scss +67 -0
- data/_sass/_callouts.scss +100 -0
- data/_sass/_custom.scss +437 -0
- data/_sass/_cv.scss +274 -0
- data/_sass/_developer.scss +97 -0
- data/_sass/_distill.scss +185 -0
- data/_sass/_documentation.scss +2220 -0
- data/_sass/_layout.scss +218 -0
- data/_sass/_manual.scss +2691 -0
- data/_sass/_profile.scss +323 -0
- data/_sass/_projects.scss +163 -0
- data/_sass/_reading.scss +465 -0
- data/_sass/_site-custom.scss +3 -0
- data/_sass/_tabs.scss +48 -0
- data/_sass/_team.scss +230 -0
- data/_sass/_themes.scss +254 -0
- data/_sass/_typograms.scss +132 -0
- data/_sass/_variables.scss +52 -0
- data/_sass/font-awesome/_animated.scss +152 -0
- data/_sass/font-awesome/_bordered-pulled.scss +20 -0
- data/_sass/font-awesome/_core.scss +49 -0
- data/_sass/font-awesome/_fixed-width.scss +7 -0
- data/_sass/font-awesome/_functions.scss +57 -0
- data/_sass/font-awesome/_icons.scss +13 -0
- data/_sass/font-awesome/_list.scss +18 -0
- data/_sass/font-awesome/_mixins.scss +65 -0
- data/_sass/font-awesome/_rotated-flipped.scss +31 -0
- data/_sass/font-awesome/_screen-reader.scss +14 -0
- data/_sass/font-awesome/_shims.scss +1578 -0
- data/_sass/font-awesome/_sizing.scss +16 -0
- data/_sass/font-awesome/_stacked.scss +32 -0
- data/_sass/font-awesome/_variables.scss +5044 -0
- data/_sass/font-awesome/brands.scss +30 -0
- data/_sass/font-awesome/fontawesome.scss +21 -0
- data/_sass/font-awesome/regular.scss +27 -0
- data/_sass/font-awesome/solid.scss +27 -0
- data/_sass/font-awesome/v4-shims.scss +11 -0
- data/_sass/tabler-icons/tabler-icons-filled.scss +1646 -0
- data/_sass/tabler-icons/tabler-icons-outline.scss +9859 -0
- data/_sass/tabler-icons/tabler-icons.scss +11463 -0
- data/_scripts/cronitor-analytics-setup.js +9 -0
- data/_scripts/giscus-setup.js +48 -0
- data/_scripts/google-analytics-setup.js +9 -0
- data/_scripts/open-panel-analytics-setup.js +14 -0
- data/_scripts/photoswipe-setup.js +11 -0
- data/assets/audio/epicaly-short-113909.mp3 +0 -0
- data/assets/bibliography/2018-12-22-distill.bib +7 -0
- data/assets/css/academicons.min.css +1 -0
- data/assets/css/bootstrap-toc.min.css +4 -0
- data/assets/css/bootstrap.min.css +7 -0
- data/assets/css/bootstrap.min.css.map +1 -0
- data/assets/css/jekyll-pygments-themes-github.css +209 -0
- data/assets/css/jekyll-pygments-themes-native.css +232 -0
- data/assets/css/jupyter-grade3.css +3758 -0
- data/assets/css/jupyter-monokai.css +3758 -0
- data/assets/css/jupyter.css +383 -0
- data/assets/css/main.scss +36 -0
- data/assets/css/mdb.min.css +48 -0
- data/assets/css/mdb.min.css.map +1 -0
- data/assets/css/scholar-icons.css +386 -0
- data/assets/fonts/academicons.ttf +0 -0
- data/assets/fonts/academicons.woff +0 -0
- data/assets/fonts/scholar-icons.ttf +0 -0
- data/assets/fonts/scholar-icons.woff +0 -0
- data/assets/fonts/tabler-icons-filled.ttf +0 -0
- data/assets/fonts/tabler-icons-filled.woff +0 -0
- data/assets/fonts/tabler-icons-filled.woff2 +0 -0
- data/assets/fonts/tabler-icons-outline.ttf +0 -0
- data/assets/fonts/tabler-icons-outline.woff +0 -0
- data/assets/fonts/tabler-icons-outline.woff2 +0 -0
- data/assets/fonts/tabler-icons.ttf +0 -0
- data/assets/fonts/tabler-icons.woff +0 -0
- data/assets/fonts/tabler-icons.woff2 +0 -0
- data/assets/html/relativity.html +15 -0
- data/assets/img/1.jpg +0 -0
- data/assets/img/10.jpg +0 -0
- data/assets/img/11.jpg +0 -0
- data/assets/img/12.jpg +0 -0
- data/assets/img/2.jpg +0 -0
- data/assets/img/3.jpg +0 -0
- data/assets/img/4.jpg +0 -0
- data/assets/img/5.jpg +0 -0
- data/assets/img/6.jpg +0 -0
- data/assets/img/7.jpg +0 -0
- data/assets/img/8.jpg +0 -0
- data/assets/img/9.jpg +0 -0
- data/assets/img/book_covers/the_godfather.jpg +0 -0
- data/assets/img/brand/dosquartsdedocs-logo-cafe.svg +31 -0
- data/assets/img/brand/dosquartsdedocs-logo-footer-cafe.svg +31 -0
- data/assets/img/brand/dosquartsdedocs-logo-white.svg +31 -0
- data/assets/img/brand/dosquartsdedocs-logo.svg +31 -0
- data/assets/img/prof_pic.jpg +0 -0
- data/assets/img/prof_pic_color.png +0 -0
- data/assets/img/profile-placeholder.svg +8 -0
- data/assets/img/publication_preview/brownian-motion.gif +0 -0
- data/assets/img/publication_preview/goodchild1992-gis-cover.jpg +0 -0
- data/assets/img/publication_preview/gutierrez2020-jtrg-preview.jpg +0 -0
- data/assets/img/publication_preview/harvey1989-postmodernity-cover.jpg +0 -0
- data/assets/img/publication_preview/tobler1970-economic-geography-cover.jpg +0 -0
- data/assets/img/publication_preview/tuan1977-space-place-cover.jpg +0 -0
- data/assets/img/publication_preview/wave-mechanics.gif +0 -0
- data/assets/img/publication_preview/zaragozi2025-rooftop-pv-preview.jpg +0 -0
- data/assets/img/rhino.png +0 -0
- data/assets/img/team/aaron-gutierrez.png +0 -0
- data/assets/img/team/alba-font.png +0 -0
- data/assets/img/team/alba-viana.png +0 -0
- data/assets/img/team/alejandro-gonzalez.png +0 -0
- data/assets/img/team/ana-pastor.png +0 -0
- data/assets/img/team/antoni-domenech.png +0 -0
- data/assets/img/team/benito-zaragozi.png +0 -0
- data/assets/img/team/cinta-sanz.png +0 -0
- data/assets/img/team/daniel-miravet.png +0 -0
- data/assets/img/team/eugenia-altamirano.png +0 -0
- data/assets/img/team/fiammetta-brandajs.png +0 -0
- data/assets/img/team/francesc-gonzalez.png +0 -0
- data/assets/img/team/isabel-paulino.png +0 -0
- data/assets/img/team/joan-borras.png +0 -0
- data/assets/img/team/julie-wilson.png +0 -0
- data/assets/img/team/liliana-sole.png +0 -0
- data/assets/img/team/maria-casado.png +0 -0
- data/assets/img/team/maria-medina.png +0 -0
- data/assets/img/team/marta-nello.png +0 -0
- data/assets/img/team/mogrify +1 -0
- data/assets/img/team/oscar-saladie.png +0 -0
- data/assets/img/team/paolo-russo.png +0 -0
- data/assets/img/team/raquel-santos.png +0 -0
- data/assets/img/team/salvador-anton.png +0 -0
- data/assets/img/team/sunsi-huertas.png +0 -0
- data/assets/img/team/user-placeholder.png +0 -0
- data/assets/img/team/wilbert-den-hoed.png +0 -0
- data/assets/img/team/xavier-delclos.png +0 -0
- data/assets/img/template_error.png +0 -0
- data/assets/js/bibsearch.js +70 -0
- data/assets/js/bootstrap-toc.min.js +5 -0
- data/assets/js/bootstrap.bundle.min.js +7 -0
- data/assets/js/bootstrap.bundle.min.js.map +1 -0
- data/assets/js/callouts.js +115 -0
- data/assets/js/chartjs-setup.js +14 -0
- data/assets/js/common.js +117 -0
- data/assets/js/content-search-match.js +159 -0
- data/assets/js/content-search.js +441 -0
- data/assets/js/copy_code.js +60 -0
- data/assets/js/custom.js +6 -0
- data/assets/js/developer-mode.js +103 -0
- data/assets/js/diff2html-setup.js +20 -0
- data/assets/js/distillpub/overrides.js +27 -0
- data/assets/js/distillpub/template.v2.js +9616 -0
- data/assets/js/distillpub/template.v2.js.map +1 -0
- data/assets/js/distillpub/transforms.v2.js +14557 -0
- data/assets/js/distillpub/transforms.v2.js.map +1 -0
- data/assets/js/documentation.js +435 -0
- data/assets/js/echarts-setup.js +29 -0
- data/assets/js/highlight-search-term.js +110 -0
- data/assets/js/jupyter_new_tab.js +18 -0
- data/assets/js/leaflet-setup.js +22 -0
- data/assets/js/manual.js +308 -0
- data/assets/js/masonry.js +12 -0
- data/assets/js/mathjax-setup.js +46 -0
- data/assets/js/mermaid-setup.js +37 -0
- data/assets/js/newsletter.js +105 -0
- data/assets/js/no_defer.js +24 -0
- data/assets/js/plotly-setup.js +52 -0
- data/assets/js/profile-nav.js +92 -0
- data/assets/js/progress-bar.js +73 -0
- data/assets/js/pseudocode-setup.js +18 -0
- data/assets/js/search/base-styles.min.js +286 -0
- data/assets/js/search/command-score.min.js +7 -0
- data/assets/js/search/hotkeys-js/hotkeys.esm.min.js +18 -0
- data/assets/js/search/lit/decorators.min.js +7 -0
- data/assets/js/search/lit/directives/class-map.min.js +7 -0
- data/assets/js/search/lit/directives/join.min.js +7 -0
- data/assets/js/search/lit/directives/live.min.js +7 -0
- data/assets/js/search/lit/directives/ref.min.js +7 -0
- data/assets/js/search/lit/directives/repeat.min.js +7 -0
- data/assets/js/search/lit/directives/unsafe-html.min.js +7 -0
- data/assets/js/search/lit/index.min.js +7 -0
- data/assets/js/search/lit-element/lit-element.min.js +12 -0
- data/assets/js/search/lit-html/directives/class-map.min.js +22 -0
- data/assets/js/search/lit-html/directives/join.min.js +12 -0
- data/assets/js/search/lit-html/directives/live.min.js +28 -0
- data/assets/js/search/lit-html/directives/ref.min.js +32 -0
- data/assets/js/search/lit-html/directives/repeat.min.js +27 -0
- data/assets/js/search/lit-html/directives/unsafe-html.min.js +22 -0
- data/assets/js/search/lit-html/is-server.min.js +12 -0
- data/assets/js/search/lit-html/lit-html.min.js +12 -0
- data/assets/js/search/ninja-action.min.js +101 -0
- data/assets/js/search/ninja-footer.min.js +62 -0
- data/assets/js/search/ninja-header.min.js +78 -0
- data/assets/js/search/ninja-keys.min.js +39 -0
- data/assets/js/search/reactive-element/decorators/custom-element.min.js +12 -0
- data/assets/js/search/reactive-element/decorators/event-options.min.js +12 -0
- data/assets/js/search/reactive-element/decorators/property.min.js +22 -0
- data/assets/js/search/reactive-element/decorators/query-all.min.js +17 -0
- data/assets/js/search/reactive-element/decorators/query-assigned-elements.min.js +17 -0
- data/assets/js/search/reactive-element/decorators/query-assigned-nodes.min.js +17 -0
- data/assets/js/search/reactive-element/decorators/query-async.min.js +17 -0
- data/assets/js/search/reactive-element/decorators/query.min.js +17 -0
- data/assets/js/search/reactive-element/decorators/state.min.js +27 -0
- data/assets/js/search/reactive-element/reactive-element.min.js +17 -0
- data/assets/js/search-setup.js +17 -0
- data/assets/js/shortcut-key.js +11 -0
- data/assets/js/tabs.min.js +5 -0
- data/assets/js/theme.js +314 -0
- data/assets/js/tooltips-setup.js +3 -0
- data/assets/js/typograms.js +1341 -0
- data/assets/js/vanilla-back-to-top.min.js +1 -0
- data/assets/js/vega-setup.js +24 -0
- data/assets/js/venobox-setup.js +5 -0
- data/assets/js/wechat.js +14 -0
- data/assets/js/zoom.js +15 -0
- data/assets/json/resume.json +98 -0
- data/assets/json/table_data.json +128 -0
- data/assets/jupyter/blog.ipynb +48 -0
- data/assets/pdf/example_pdf.pdf +0 -0
- data/assets/plotly/demo.html +72 -0
- data/assets/video/pexels-engin-akyurt-6069112-960x540-30fps.mp4 +0 -0
- data/assets/webfonts/fa-brands-400.ttf +0 -0
- data/assets/webfonts/fa-brands-400.woff2 +0 -0
- data/assets/webfonts/fa-regular-400.ttf +0 -0
- data/assets/webfonts/fa-regular-400.woff2 +0 -0
- data/assets/webfonts/fa-solid-900.ttf +0 -0
- data/assets/webfonts/fa-solid-900.woff2 +0 -0
- data/assets/webfonts/fa-v4compatibility.ttf +0 -0
- data/assets/webfonts/fa-v4compatibility.woff2 +0 -0
- data/docs/Gemfile +5 -0
- data/docs/_config.yml +83 -0
- data/docs/_documentation/en/01-quick-start.md +115 -0
- data/docs/_documentation/en/02-tools.md +146 -0
- data/docs/_documentation/en/03-usage.md +107 -0
- data/docs/_documentation/en/04-jekyll-basics.md +51 -0
- data/docs/_documentation/en/05-pages-collections.md +68 -0
- data/docs/_documentation/en/06-github-web-editing.md +92 -0
- data/docs/_documentation/en/10-profiles.md +125 -0
- data/docs/_documentation/en/11-unaltreselfie.md +39 -0
- data/docs/_documentation/en/12-unaltreprojecte.md +38 -0
- data/docs/_documentation/en/13-unaltremanual.md +237 -0
- data/docs/_documentation/en/14-unaltredocs.md +92 -0
- data/docs/_documentation/en/15-profile-checklist.md +39 -0
- data/docs/_documentation/en/20-syntax.md +353 -0
- data/docs/_documentation/en/21-themes.md +103 -0
- data/docs/_documentation/en/22-feature-reference.md +56 -0
- data/docs/_documentation/en/23-front-matter.md +51 -0
- data/docs/_documentation/en/24-data-files.md +28 -0
- data/docs/_documentation/en/30-customization.md +448 -0
- data/docs/_documentation/en/31-template.md +55 -0
- data/docs/_documentation/en/32-development.md +108 -0
- data/docs/_documentation/en/33-reusable-workflows.md +136 -0
- data/docs/_documentation/en/40-distribution.md +164 -0
- data/docs/_documentation/en/41-bibliometrics.md +137 -0
- data/docs/_documentation/en/42-docker-image.md +185 -0
- data/docs/_documentation/en/50-faq.md +33 -0
- data/docs/_pages/ca/index.md +35 -0
- data/docs/_pages/en/index.md +35 -0
- data/docs/_pages/es/index.md +35 -0
- data/docs/agents/action-prompts/00-start-site-session.txt +10 -0
- data/docs/agents/action-prompts/05-create-new-web.txt +5 -0
- data/docs/agents/action-prompts/10-content-update.txt +9 -0
- data/docs/agents/action-prompts/15-edit-default-content.txt +8 -0
- data/docs/agents/action-prompts/20-manual-teaching-materials.txt +18 -0
- data/docs/agents/action-prompts/22-manual-style-audit.txt +14 -0
- data/docs/agents/action-prompts/23-manual-structure-audit.txt +17 -0
- data/docs/agents/action-prompts/25-translation-prepublish.txt +8 -0
- data/docs/agents/action-prompts/30-project-site-update.txt +7 -0
- data/docs/agents/action-prompts/40-documentation-update.txt +7 -0
- data/docs/agents/action-prompts/50-bibliography-entry.txt +7 -0
- data/docs/agents/action-prompts/60-bibliometrics-refresh.txt +7 -0
- data/docs/agents/action-prompts/70-build-and-review.txt +12 -0
- data/docs/agents/manual-authoring-components.md +255 -0
- data/docs/agents/mcp-contract.md +162 -0
- data/docs/agents/quarto-computation-adoption.md +102 -0
- data/docs/assets/img/unaltraweb-docs-hero.svg +36 -0
- data/lib/unaltraweb/version.rb +8 -0
- data/lib/unaltraweb.rb +31 -0
- data/requirements.txt +5 -0
- data/scripts/biblio/fetch_scimago_csv.sh +126 -0
- data/scripts/biblio/metrics_common.py +154 -0
- data/scripts/biblio/metrics_merge_meta.py +73 -0
- data/scripts/biblio/metrics_update.py +826 -0
- data/scripts/computations/python/Dockerfile +37 -0
- data/scripts/computations/r/Dockerfile +31 -0
- data/scripts/computations/render.py +1267 -0
- data/scripts/cv/render_pdf_preview.sh +36 -0
- data/scripts/deploy/publish_branch.sh +80 -0
- data/scripts/generate_logo_variants.py +47 -0
- data/scripts/manual/Dockerfile +31 -0
- data/scripts/manual/build_pdf.py +1780 -0
- data/scripts/manual/filters/bibliography.lua +164 -0
- data/scripts/manual/filters/code-blocks.lua +102 -0
- data/scripts/manual/filters/figure-captions.lua +35 -0
- data/scripts/manual/publish_release.sh +281 -0
- data/scripts/manual/templates/manual.tex +494 -0
- data/scripts/manual/verify_release_assets.py +650 -0
- data/scripts/test_gem_build.py +128 -0
- data/scripts/test_reproducible_jekyll_build.py +191 -0
- data/scripts/test_wheel_install.py +282 -0
- data/scripts/unaltraweb-docker-mount.sh +36 -0
- data/scripts/unaltraweb-mcp-bootstrap.sh +105 -0
- data/scripts/unaltraweb-mcp-cleanup.sh +73 -0
- data/scripts/unaltraweb-mcp-project-id.sh +34 -0
- data/scripts/validate_distribution.py +563 -0
- data/scripts/validate_workflows.py +1285 -0
- data/scripts/web_captures/Dockerfile +31 -0
- data/scripts/web_captures/capture.mjs +157 -0
- data/scripts/web_captures/package-lock.json +56 -0
- data/scripts/web_captures/package.json +9 -0
- data/scripts/web_captures/render.py +867 -0
- data/src/unaltraweb_mcp/component-contract.json +153 -0
- data/src/unaltraweb_mcp/component-contract.schema.json +87 -0
- data/src/unaltraweb_mcp/docker_mount.py +19 -0
- metadata +861 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Frequently Asked Questions
|
|
3
|
+
description: Common questions about unaltraweb sites.
|
|
4
|
+
lang: en
|
|
5
|
+
ref: faq
|
|
6
|
+
profiles:
|
|
7
|
+
- unaltredocs
|
|
8
|
+
documentation_profiles:
|
|
9
|
+
- github-publishers
|
|
10
|
+
- local-authors
|
|
11
|
+
- site-designers
|
|
12
|
+
- contributors
|
|
13
|
+
- core-developers
|
|
14
|
+
section: Reference
|
|
15
|
+
weight: 920
|
|
16
|
+
permalink: "/faq/"
|
|
17
|
+
nav_title: FAQ
|
|
18
|
+
---
|
|
19
|
+
## Do content editors need Docker?
|
|
20
|
+
|
|
21
|
+
No. Small edits can be done in GitHub. Docker is for local preview, tests and larger edits.
|
|
22
|
+
|
|
23
|
+
## Does a child site need to copy layouts?
|
|
24
|
+
|
|
25
|
+
No. Layouts, includes, Sass, plugins and scripts should come from the `unaltraweb` gem. Copy files only for deliberate local overrides.
|
|
26
|
+
|
|
27
|
+
## Why use site profiles?
|
|
28
|
+
|
|
29
|
+
Profiles choose a real build shape before Jekyll writes the site. They are not client-side previews.
|
|
30
|
+
|
|
31
|
+
## Can one repository contain all profiles?
|
|
32
|
+
|
|
33
|
+
The integration template does so it can test every profile. `new_web` creates real sites with one selected profile and only its required content paths.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: unaltraweb
|
|
3
|
+
description: Documentació de referència i exemples reals d'unaltraweb.
|
|
4
|
+
layout: documentation-home
|
|
5
|
+
lang: ca
|
|
6
|
+
ref: home
|
|
7
|
+
profiles: [unaltredocs]
|
|
8
|
+
permalink: /ca/
|
|
9
|
+
nav: false
|
|
10
|
+
nav_title: Inici
|
|
11
|
+
hero:
|
|
12
|
+
image: /assets/img/unaltraweb-docs-hero.svg
|
|
13
|
+
alt: Diagrama del flux de documentació d'unaltraweb.
|
|
14
|
+
cta_label: Comença
|
|
15
|
+
cta_url: /quick-start/
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# unaltraweb
|
|
19
|
+
|
|
20
|
+
`unaltraweb` és una plataforma Jekyll reutilitzable per a webs estàtiques acadèmiques, projectes de recerca, cursos, programari, manuals i documentació.
|
|
21
|
+
|
|
22
|
+
El nom ve de l'expressió catalana `una altra web`: una altra web. Resumeix una necessitat habitual en el treball acadèmic: els membres del grup sovint necessiten una web més per a un curs, un projecte, un perfil personal, un manual o un espai públic de documentació.
|
|
23
|
+
|
|
24
|
+
El sistema redueix manteniment duplicat centralitzant l'estil visual i les funcionalitats principals en una plataforma compartida. Llistats bibliogràfics, diagrames, figures, taules, resultats de recerca, navegació multilingüe i barres laterals de documentació es mantenen una vegada i es reutilitzen en webs personals, webs de projecte, materials docents i documentació tècnica.
|
|
25
|
+
|
|
26
|
+
Usa aquest portal per entendre el model de contingut reutilitzable, triar el perfil adequat, executar el flux local amb Docker i documentar la sintaxi que va més enllà del Markdown estàndard.
|
|
27
|
+
|
|
28
|
+
## Repositoris
|
|
29
|
+
|
|
30
|
+
- Core: `dosquartsdedocs/unaltraweb`.
|
|
31
|
+
- Starter i integració: `dosquartsdedocs/unaltraweb-template`.
|
|
32
|
+
|
|
33
|
+
## Origen
|
|
34
|
+
|
|
35
|
+
`unaltraweb` va començar a partir del tema Jekyll obert `al-folio` i s'està refactoritzant com a nucli reutilitzable propi per als llocs de `dosquartsdedocs`.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: unaltraweb
|
|
3
|
+
description: Reference documentation and live examples for unaltraweb.
|
|
4
|
+
layout: documentation-home
|
|
5
|
+
lang: en
|
|
6
|
+
ref: home
|
|
7
|
+
profiles: [unaltredocs]
|
|
8
|
+
permalink: /
|
|
9
|
+
nav: false
|
|
10
|
+
nav_title: Overview
|
|
11
|
+
hero:
|
|
12
|
+
image: /assets/img/unaltraweb-docs-hero.svg
|
|
13
|
+
alt: Diagram of the unaltraweb documentation workflow.
|
|
14
|
+
cta_label: Get started
|
|
15
|
+
cta_url: /quick-start/
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# unaltraweb
|
|
19
|
+
|
|
20
|
+
`unaltraweb` is a reusable Jekyll platform for static academic, research project, course, software, manual and documentation websites.
|
|
21
|
+
|
|
22
|
+
The name comes from Catalan `una altra web`: another website. It reflects a recurring need in academic work: group members often need one more website for a course, a project, a personal profile, a manual or a public documentation space.
|
|
23
|
+
|
|
24
|
+
The system reduces duplicated maintenance by centralizing visual style and core features in one shared platform. Bibliography lists, diagrams, figures, tables, publication outputs, multilingual navigation and documentation sidebars are maintained once and reused across personal sites, project sites, course materials and technical documentation.
|
|
25
|
+
|
|
26
|
+
Use this portal to understand the reusable content model, choose the right site profile, run the local Docker workflow and document syntax that goes beyond standard Markdown.
|
|
27
|
+
|
|
28
|
+
## Repositories
|
|
29
|
+
|
|
30
|
+
- Core: `dosquartsdedocs/unaltraweb`.
|
|
31
|
+
- Starter and integration fixture: `dosquartsdedocs/unaltraweb-template`.
|
|
32
|
+
|
|
33
|
+
## Lineage
|
|
34
|
+
|
|
35
|
+
`unaltraweb` started from the open-source `al-folio` Jekyll theme and is being refactored into a self-owned reusable core for `dosquartsdedocs` sites.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: unaltraweb
|
|
3
|
+
description: Documentación de referencia y ejemplos reales de unaltraweb.
|
|
4
|
+
layout: documentation-home
|
|
5
|
+
lang: es
|
|
6
|
+
ref: home
|
|
7
|
+
profiles: [unaltredocs]
|
|
8
|
+
permalink: /es/
|
|
9
|
+
nav: false
|
|
10
|
+
nav_title: Inicio
|
|
11
|
+
hero:
|
|
12
|
+
image: /assets/img/unaltraweb-docs-hero.svg
|
|
13
|
+
alt: Diagrama del flujo de documentación de unaltraweb.
|
|
14
|
+
cta_label: Empezar
|
|
15
|
+
cta_url: /quick-start/
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# unaltraweb
|
|
19
|
+
|
|
20
|
+
`unaltraweb` es una plataforma Jekyll reutilizable para sitios estáticos académicos, proyectos de investigación, cursos, software, manuales y documentación.
|
|
21
|
+
|
|
22
|
+
El nombre viene del catalán `una altra web`: otra web. Resume una necesidad habitual en el trabajo académico: los miembros del grupo a menudo necesitan una web más para un curso, un proyecto, un perfil personal, un manual o un espacio público de documentación.
|
|
23
|
+
|
|
24
|
+
El sistema reduce mantenimiento duplicado centralizando el estilo visual y las funcionalidades principales en una plataforma compartida. Listados bibliográficos, diagramas, figuras, tablas, resultados de investigación, navegación multilingüe y barras laterales de documentación se mantienen una vez y se reutilizan en webs personales, webs de proyecto, materiales docentes y documentación técnica.
|
|
25
|
+
|
|
26
|
+
Usa este portal para entender el modelo de contenido reutilizable, escoger el perfil adecuado, ejecutar el flujo local con Docker y documentar la sintaxis que va más allá de Markdown estándar.
|
|
27
|
+
|
|
28
|
+
## Repositorios
|
|
29
|
+
|
|
30
|
+
- Core: `dosquartsdedocs/unaltraweb`.
|
|
31
|
+
- Starter e integración: `dosquartsdedocs/unaltraweb-template`.
|
|
32
|
+
|
|
33
|
+
## Origen
|
|
34
|
+
|
|
35
|
+
`unaltraweb` empezó a partir del tema Jekyll abierto `al-folio` y se está refactorizando como núcleo reutilizable propio para los sitios de `dosquartsdedocs`.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
Start or resume work in an `unaltraweb` website workspace.
|
|
2
|
+
|
|
3
|
+
1. Read local `AGENTS.md` if present.
|
|
4
|
+
2. If the workspace has no `_config.yml`, inspect `web://new-web-scaffolds`, then use `new_web` only after the target profile, title, baseurl, url, default language, and maintained languages are known or intentionally left blank.
|
|
5
|
+
3. Inspect `web://site-context` or call `site_context`.
|
|
6
|
+
4. Confirm the configured `unaltraweb.site_profile`, `language_policy`, languages, and enabled features before editing.
|
|
7
|
+
5. Run or inspect `profile_check`, `content_inventory`, `content_approval_inventory`, `translation_plan`, `bibliography_inventory`, and `content_freshness_check`.
|
|
8
|
+
6. Keep edits inside the website workspace. Do not treat chat history as durable project memory.
|
|
9
|
+
7. For visible content changes, run `build_site` or the local Make equivalent before handoff when feasible.
|
|
10
|
+
8. Do not commit or publish visible content changes until the human author has reviewed the served site in a browser and explicitly approved the rendered result.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
Create a new unaltraweb website only after confirming the intended profile, title, URL/base URL, default language, and maintained languages.
|
|
2
|
+
|
|
3
|
+
Use `new_web`, which reads only package-owned scaffold assets. Do not source a template from another checkout or arbitrary filesystem path. The operation preflights every managed path, rejects destination symlinks and differing files, and writes no website files when a collision is present during preflight. No-clobber descriptor writes prevent a raced file from being overwritten.
|
|
4
|
+
|
|
5
|
+
After creation, inspect `profile_check`, edit the generated configuration and localized home pages, then run `site_check` and `build_site`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
Update one `unaltraweb` content item.
|
|
2
|
+
|
|
3
|
+
1. Identify the profile and content type before editing: page, post, news item, project, output, chapter, documentation page, book, thesis, or `_data` record.
|
|
4
|
+
2. Preserve front matter keys used for routing: `title`, `lang`, `ref`, `permalink`, `profiles`, `feature`, `section`, and `weight` when relevant.
|
|
5
|
+
3. Draft and approve substantial content in the configured default language first. For multilingual content, keep `ref` stable across languages and do not silently update translations while the default-language source is still changing.
|
|
6
|
+
4. Use `site_source_read` and its SHA-256 before `site_source_write`; review the default dry-run diff, then apply the exact CAS update. New files require `create_only=true`.
|
|
7
|
+
5. Prefer small versionable edits over generated churn. Do not use these tools for bibliography, assets, workflows, Makefiles, layouts, plugins, Sass, or generated paths.
|
|
8
|
+
6. Use `translation_plan` before publication to identify approved default-language content that still needs localization.
|
|
9
|
+
7. Run `profile_check` and a build check when the edit changes navigation, links, or collection structure.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
Draft or revise default-language `unaltraweb` content.
|
|
2
|
+
|
|
3
|
+
1. Read `language_policy`, `content_approval_inventory`, and the target file before editing.
|
|
4
|
+
2. Work in the configured default language first. Do not translate parallel language files during drafting unless the user explicitly asks for a translation pass.
|
|
5
|
+
3. Preserve `lang`, `ref`, `permalink`, `profiles`, `section`, `subsection`, `weight`, and other routing front matter.
|
|
6
|
+
4. Use `content_status: draft`, `review`, or `approved` to make editorial state explicit. Only mark content as `approved` when the user or project rules make that approval clear.
|
|
7
|
+
5. When meaning changes in approved default-language content, treat existing translations as stale and mention that `translation_plan` should be checked before publication.
|
|
8
|
+
6. Run `profile_check`; run `build_site` when the edit changes navigation, layout, links, citations, or collection structure.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
Create or revise teaching material for an `unaltremanual` site.
|
|
2
|
+
|
|
3
|
+
1. Read the manual profile config and inventory `_chapters/<lang>/`, manual bibliography files, figures, tables, and downloadable resources.
|
|
4
|
+
2. Read the site `AGENTS.md`, `context/writing-profile.md` when present, and `manual_authoring_capabilities`. Local writing-profile rules override the generic voice; the capability catalogue is the source of truth for component syntax and web/PDF compatibility.
|
|
5
|
+
3. Work in the configured default language until the chapter or resource is approved. Use `translation_plan` only as a pre-publication localization checklist.
|
|
6
|
+
4. Write for sequential learners with narrative pedagogical prose: clear chapter function, stable headings, connected paragraphs, examples, exercises or prompts when appropriate, and references where claims depend on literature. Diagnose paragraph function before sentence polish and prioritise this sequence when it fits the material: topic or reader goal; problem or question; arguments, evidence, and examples; discussion, alternatives, consequences, or limits; concrete closure or transition. Do not force every paragraph through every move. Use `##` and `###` for divisions exposed in the secondary TOC and `####` for a cohesive numbered local subsection that should stay out of that TOC. Never imitate `h4` with a standalone bold label and terminal period; a bold run-in belongs in the same paragraph it introduces.
|
|
7
|
+
5. Use bullet lists for steps, criteria, inventories, or rubrics, but do not let lists replace the explanation of concepts, decisions, or transitions between theory and practice.
|
|
8
|
+
6. Write only reader-facing, publishable body content. Never include chat replies, references to the user or their instructions, agent actions, drafting plans, approval states, `content_status` values, TODO markers, placeholders, or notes to the author in pages or chapters. Keep that material in `AGENTS.md`, `context/`, issues, or review notes.
|
|
9
|
+
7. Select components because they improve the explanation, not for decoration. Use `Term` followed by `: Definition` for compact dictionary entries; caption every teaching figure; use `::: subfigures layout "Caption"` for a shared multi-panel comparison; and wrap every teaching table in `::: table "Caption"`. Check PDF compatibility in `manual_authoring_capabilities` before using a web-oriented layout.
|
|
10
|
+
8. Use nested blockquotes selectively for teaching callouts: `>>` note or tip, `>>>` worked example, `>>>>` warning, `>>>>>` learning objectives, and `>>>>>>` caution or danger. Use them when the prose changes function, especially for concrete operational risks; do not use callouts merely to add color or place ordinary conceptual prose in consecutive boxes.
|
|
11
|
+
9. Prefer versioned diagram sources rendered through `diavisuals`: `.mmd`/`.mermaid` for Mermaid and `.puml`/`.plantuml`/`.uml` for PlantUML. Do not use inline ```mermaid``` or ```plantuml``` fences for manual figures that should be numbered, captioned, reusable, or editable.
|
|
12
|
+
10. For folder or file structures, prefer PlantUML `@startfiles` diagrams through `diavisuals` instead of plain text trees.
|
|
13
|
+
11. For orientation material, keep broad explanations of how the manual works, how Moodle relates to the course, and how students should read chapters in chapter 0 or the configured orientation chapter rather than overloading the cover page.
|
|
14
|
+
12. Keep web-only affordances separate from printable content when possible.
|
|
15
|
+
13. Do not regenerate or overwrite author-edited diagram SVGs without asking when a matching `*.edited.svg` exists.
|
|
16
|
+
14. Run `profile_check`, `manual_source_quality_check`, and `manual_editorial_quality_check`; run `build_site(site_profile="unaltremanual")` when structure, figures, bibliography, or navigation changed.
|
|
17
|
+
15. When PDF output is enabled, run `manual_pdf_status` and `manual_pdf_build`, then ask the human author to review both browser and PDF output.
|
|
18
|
+
16. Run `manual_pdf_publish` as a dry-run first. Do not perform a real PDF publication, commit, push, or site deployment without explicit human approval.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Review or revise the prose style of an `unaltremanual` chapter.
|
|
2
|
+
|
|
3
|
+
1. Read `AGENTS.md`, the target chapter, `context/writing-profile.md` when present, and `manual_authoring_capabilities`.
|
|
4
|
+
2. Diagnose section and paragraph function before sentence polishing. Each paragraph should mainly orient, establish a topic or problem, develop an argument, provide evidence or an example, discuss meaning or limits, guide a practical action, state a criterion, close an idea, or transition. Where appropriate, check the sequence topic or reader goal; problem or question; arguments, evidence, and examples; discussion or limits; concrete closure. Do not require every paragraph to contain every move.
|
|
5
|
+
3. Prefer narrative pedagogical prose over executive-summary bullets. Keep lists for steps, criteria, inventories, or rubrics, but expand conceptual material into connected paragraphs.
|
|
6
|
+
4. Audit heading depth as pedagogy, not formatting. `##` and `###` identify divisions exposed in the secondary TOC; `####` is a numbered local subdivision omitted from that TOC. Use `h4` for a cohesive minor unit with developed content. Replace standalone fake headings such as `**Source.**` with semantic `####` headings, or join a genuine bold run-in to the paragraph it introduces.
|
|
7
|
+
5. Check callout semantics and restraint. The supported nested-blockquote convention is `>>` note or tip, `>>>` worked example, `>>>>` warning, `>>>>>` learning objectives, and `>>>>>>` caution or danger. Concrete operational risks belong in warnings; ordinary conceptual prose does not need a colored box.
|
|
8
|
+
6. Check that theory and practice are connected: concepts should lead to decisions with data, software, maps, figures, synthesis, or assessment criteria.
|
|
9
|
+
7. Treat every Markdown body line as publication copy. Reject references to the user, author instructions, agent actions, chat history, drafting status, approval workflow, internal field names, TODOs, placeholders, and notes that tell an editor what to write later.
|
|
10
|
+
8. Review spelling, grammar, terminology, factual precision, paragraph cohesion, citations, cross-references, captions, and consistency with the official teaching guide. Report uncertainty outside the publishable body instead of inserting review notes into it.
|
|
11
|
+
9. Check whether component choice serves the paragraph's pedagogical function. Definition lists are for compact terminology; callouts mark a genuine function change; `::: subfigures` expresses one multi-panel comparison; tables and figures require captions; reusable diagrams should be `.mmd`, `.mermaid`, `.puml`, `.plantuml`, or `.uml` sources rendered through `diavisuals`; folder/file trees should normally use PlantUML `@startfiles`. Report web/PDF mismatches.
|
|
12
|
+
10. Do not invent official teaching-guide content, dates, assessment weights, learning outcomes, datasets, or policies. Mark those items for author verification when needed.
|
|
13
|
+
11. Move general explanations of how the manual works, how Moodle relates to the course, and how students should read chapters into the orientation chapter rather than overloading the cover page.
|
|
14
|
+
12. Run `manual_editorial_quality_check` and `profile_check`; run `build_site(site_profile="unaltremanual")` when structure, navigation, links, citations, or rendered content changed.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Audit the structure and paragraph functions of an `unaltremanual` text against its reader goals.
|
|
2
|
+
|
|
3
|
+
1. Read `AGENTS.md`, `context/writing-profile.md`, `web://manual-authoring-components`, the target text, and adjacent chapters before reviewing.
|
|
4
|
+
2. Diagnose function before style. Assign each section and paragraph one primary job: orientation, topic, problem, concept, argument, evidence, example, technical decision, practical instruction, discussion, limitation, quality criterion, verification, warning, closure, or transition.
|
|
5
|
+
3. Use this sequence diagnostically when appropriate: topic or reader goal; problem or question; arguments, evidence, and examples; discussion, alternatives, consequences, or limits; concrete closure or transition.
|
|
6
|
+
4. Do not force every paragraph through every move. Flag missing setup, abrupt shifts, duplicated jobs, incompatible jobs combined in one paragraph, examples introduced before their purpose is clear, unsupported claims, and generic endings.
|
|
7
|
+
5. Check the handoff between paragraphs. Replace vague bridge words with the concrete object, decision, result, or limitation that the next paragraph develops.
|
|
8
|
+
6. Check whether a supported content component would improve the explanation: callout, definition list, captioned figure, subfigure layout, captioned table, Mermaid or PlantUML source, citation, code block, or equation. Do not add a component merely for decoration, and respect its web/PDF support boundary.
|
|
9
|
+
7. Treat every body line as final publication copy. Put uncertainty and review findings in the audit response, never in the chapter body.
|
|
10
|
+
8. Return a section map, paragraph-function map, issues ordered by reader impact, recommended actions, and remaining evidence or verification needs.
|
|
11
|
+
|
|
12
|
+
Use this table for paragraph findings when useful:
|
|
13
|
+
|
|
14
|
+
| Location | Primary job | Contribution to reader task | Evidence or example | Issue | Action |
|
|
15
|
+
| --- | --- | --- | --- | --- | --- |
|
|
16
|
+
|
|
17
|
+
Recommended actions are: keep, move, split, merge, compress, expand, rewrite, source, verify, or remove.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
Prepare `unaltraweb` translations before publication.
|
|
2
|
+
|
|
3
|
+
1. Read `language_policy` and `translation_plan` first.
|
|
4
|
+
2. Translate only from default-language sources whose editorial status is approved.
|
|
5
|
+
3. Keep `ref` identical across languages and set the translated file's `lang` to the target language.
|
|
6
|
+
4. Preserve citations, bibliography keys, figure references, tables, callout semantics, links, code, and data field names unless the target language requires visible prose changes.
|
|
7
|
+
5. Mark translated files with an explicit translation state, for example `translation_status: translated` or `translation_status: needs_review`, following local project rules.
|
|
8
|
+
6. After translation, run `profile_check`, `translation_plan`, and `build_site` when feasible.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Update an `unaltreprojecte` research project site.
|
|
2
|
+
|
|
3
|
+
1. Inspect project pages, `_outputs/`, `_projects/`, `_data/team.yml`, `_data/repositories.yml`, publications, resources, and news.
|
|
4
|
+
2. Keep project communication concrete: funder/project identity, outputs, datasets, reports, maps, repositories, team roles, and dated news.
|
|
5
|
+
3. Preserve DOI, GitHub, documentation, dataset, and download links exactly unless a verified replacement is provided.
|
|
6
|
+
4. For publication or output claims, add or update bibliography entries only from verified metadata.
|
|
7
|
+
5. Run `profile_check` and `build_site(site_profile="unaltreprojecte")` when navigation, outputs, team, or resources changed.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Update an `unaltredocs` documentation page.
|
|
2
|
+
|
|
3
|
+
1. Inspect `_documentation/<lang>/`, `section`, `subsection`, `weight`, `documentation_profiles`, and version metadata.
|
|
4
|
+
2. Prefer task, reference, troubleshooting, and operational clarity over linear textbook prose.
|
|
5
|
+
3. Keep examples executable or clearly marked as illustrative. Do not invent commands or config keys.
|
|
6
|
+
4. Preserve stable permalinks and cross-language `ref` values.
|
|
7
|
+
5. Run `profile_check` and `build_site(site_profile="unaltredocs")` when documentation navigation or examples changed.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Add or revise bibliography for an `unaltraweb` site.
|
|
2
|
+
|
|
3
|
+
1. Start with `bibliography_inventory` and check duplicate citekeys.
|
|
4
|
+
2. Add entries only from author-provided BibTeX, DOI metadata, Zotero/exported metadata, or another verified source.
|
|
5
|
+
3. Do not invent authors, titles, venues, years, DOIs, citation counts, quartiles, or metric fields.
|
|
6
|
+
4. Use `bibliography_add_entry` for appends under `_bibliography/`; use replacement only after explicit approval when a citekey already exists.
|
|
7
|
+
5. After bibliography changes, run `bibliometrics_check` or explain why the heavier check was not run.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Refresh static bibliometrics for an `unaltraweb` site.
|
|
2
|
+
|
|
3
|
+
1. Inspect `bibliography_inventory`, `web://bibliometrics`, `_data/metrics.yml`, `_data/metrics-overrides.yml`, and diagnostics under `tmp/` if present.
|
|
4
|
+
2. Use `bibliometrics_check` for offline validation before networked updates.
|
|
5
|
+
3. Use `bibliometrics_update` only when the author expects versionable bibliography and `_data/metrics.yml` changes.
|
|
6
|
+
4. Use `bibliometrics_fetch_scimago` or `bibliometrics_update(fetch_scimago=True)` when Scimago cache refresh is required.
|
|
7
|
+
5. Keep local caches and diagnostics unversioned; report unmatched or uncertain entries instead of forcing dubious matches.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
Build and review an `unaltraweb` site change.
|
|
2
|
+
|
|
3
|
+
1. Run `site_doctor` and `site_check`; resolve distribution, scaffold, profile, freshness, computation, capture, bibliography, and editorial failures before building.
|
|
4
|
+
2. When `site_check` reports a required companion gate, run the selected provider check and retain its verifiable `.unaltraweb/receipts/<provider>.json`; never substitute a caller-provided success flag.
|
|
5
|
+
3. Render stale computation or capture artefacts explicitly, preserving edited SVG overrides, then rerun their checks.
|
|
6
|
+
4. Run `build_site`, passing `site_profile` when reviewing a specific profile override.
|
|
7
|
+
5. Review the `html_audit` returned by a successful `build_site`; resolve broken local targets/fragments and document accessibility findings before previewing.
|
|
8
|
+
6. If the project-owned preview is already running, call `http_check` with key local paths. Never supply or probe an arbitrary origin.
|
|
9
|
+
7. For visual or browser-level checks, use the consumer site's existing Playwright/render-smoke Make targets rather than inventing a new server workflow.
|
|
10
|
+
8. For visible content changes, start or reuse the local `make serve` preview and ask the human author to review the rendered site in their browser.
|
|
11
|
+
9. Do not commit or publish content changes until the human author explicitly approves that served preview.
|
|
12
|
+
10. Summarize build failures with the relevant target, return code, timeout state, and the bounded actionable stderr/stdout.
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
# Manual authoring components
|
|
2
|
+
|
|
3
|
+
This is the component contract for MCP agents drafting or reviewing `unaltremanual` content. Read it together with the consumer site's `context/writing-profile.md`.
|
|
4
|
+
|
|
5
|
+
## Paragraph development
|
|
6
|
+
|
|
7
|
+
Diagnose paragraph function before polishing sentences. A paragraph should normally have one primary job and, when the material warrants it, develop this sequence:
|
|
8
|
+
|
|
9
|
+
1. Name the topic, object, or reader goal.
|
|
10
|
+
2. Establish the problem, question, uncertainty, or decision.
|
|
11
|
+
3. Develop the explanation through arguments, verified evidence, concrete examples, or worked operations.
|
|
12
|
+
4. Discuss meaning, alternatives, conditions, consequences, or limitations.
|
|
13
|
+
5. Close with a concrete takeaway, quality criterion, verification step, or transition.
|
|
14
|
+
|
|
15
|
+
Do not force every paragraph to contain all five moves. Use the sequence to diagnose missing logic. Improve paragraph structure before sentence style, separate evidence from interpretation, and do not invent examples or specificity merely to make prose appear concrete.
|
|
16
|
+
|
|
17
|
+
## Heading levels
|
|
18
|
+
|
|
19
|
+
Use heading levels semantically:
|
|
20
|
+
|
|
21
|
+
```markdown
|
|
22
|
+
## Numbered section
|
|
23
|
+
### Numbered subsection
|
|
24
|
+
#### Numbered fourth-level subsection
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
All three levels receive hierarchical numbers in the manual body. The secondary page TOC contains only `h2` and `h3`; `h4` remains a numbered local subdivision so the rail stays concise. Use `####` when a minor unit develops a cohesive idea, source, case, example, or operation through its own paragraph or paragraphs. Do not imitate a heading with a standalone bold phrase such as `**Source.**`; keep bold run-ins in the same paragraph they introduce.
|
|
28
|
+
|
|
29
|
+
## Callouts
|
|
30
|
+
|
|
31
|
+
Nested blockquote depth selects the callout type. The browser inserts the localized label, so do not repeat it manually.
|
|
32
|
+
|
|
33
|
+
```markdown
|
|
34
|
+
> Ordinary quotation
|
|
35
|
+
|
|
36
|
+
>> Note or tip
|
|
37
|
+
|
|
38
|
+
>>> Worked example
|
|
39
|
+
|
|
40
|
+
>>>> Warning
|
|
41
|
+
|
|
42
|
+
>>>>> Learning objectives
|
|
43
|
+
|
|
44
|
+
>>>>>> Caution or danger
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Web and PDF rendering use the same callout type and localized label. The PDF uses a compact, breakable framed box so multi-paragraph notes and objective lists can continue across pages; review both formats for fit and emphasis.
|
|
48
|
+
|
|
49
|
+
Use `>>>>>` learning objectives sparingly, normally once after a short chapter or major-section introduction. They should orient the section after the reader has enough context, not replace the opening explanation, and they should not recur as mid-section reminders.
|
|
50
|
+
|
|
51
|
+
## Definition lists
|
|
52
|
+
|
|
53
|
+
Use definition lists for compact terminology that benefits from a dictionary-like presentation:
|
|
54
|
+
|
|
55
|
+
```markdown
|
|
56
|
+
Spatial reference system
|
|
57
|
+
: Rules and parameters used to interpret coordinates in a defined spatial framework.
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
The web renders the term with a colon and the definition as an indented entry. The PDF renders the same relationship as an indented description list. Definitions should support explanatory prose, not replace it.
|
|
61
|
+
|
|
62
|
+
## Figures
|
|
63
|
+
|
|
64
|
+
Use an explicit Markdown title as the caption:
|
|
65
|
+
|
|
66
|
+
```markdown
|
|
67
|
+

|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Every teaching figure needs meaningful alt text and a caption. The manual numbers figures automatically on the web; the same image and caption are available to the PDF builder.
|
|
71
|
+
|
|
72
|
+
When the same width works on both supports, narrow and centre the complete figure container without setting a fixed height:
|
|
73
|
+
|
|
74
|
+
```markdown
|
|
75
|
+
{: data-figure-width="22rem"}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
`data-figure-width` is a compatible shared fallback. When the web and printed page need different visible sizes, declare them independently:
|
|
79
|
+
|
|
80
|
+
```markdown
|
|
81
|
+
{: data-figure-width-web="44rem" data-figure-width-pdf="82%"}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
The web value accepts a CSS width and remains limited by the reading column. The PDF value accepts a Pandoc length or percentage. Optional `data-figure-height-web` and `data-figure-height-pdf` values act as maximum constraints; width and height are always combined with the intrinsic aspect ratio, so the image is not stretched. Keep height automatic unless the support imposes a real limit.
|
|
85
|
+
|
|
86
|
+
After inserting or regenerating a text-bearing SVG figure or diagram, run `manual_source_quality_check`. It estimates the smallest visible SVG text at the declared web and PDF sizes, compares it with the surrounding body text, and returns separate suggested widths. Raster images do not expose dependable text metrics; use SVG for charts and diagrams when possible, and still inspect both rendered supports at final size.
|
|
87
|
+
|
|
88
|
+
For multilingual manuals, reference the default-language visual with an unsuffixed logical name. Add `.<lang>` immediately before the complete suffix only when the visual itself needs translation:
|
|
89
|
+
|
|
90
|
+
```text
|
|
91
|
+
map.svg # default-language source
|
|
92
|
+
map.ca.svg # Catalan static variant
|
|
93
|
+
boxplot.ca.qmd # Catalan computation source
|
|
94
|
+
quarterly.ca.vl.json # Catalan Vega-Lite source
|
|
95
|
+
flow.ca.mmd # Catalan Mermaid source
|
|
96
|
+
folders.ca.puml # Catalan PlantUML source
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Web and PDF first try the requested language and fall back to the unsuffixed default source when that variant is absent. If a localized source exists but its declared output is absent, stale, or invalid, fix that source lifecycle rather than silently using the default output. Localized computation and Vega sources must declare distinct localized outputs.
|
|
100
|
+
|
|
101
|
+
## Figure layouts
|
|
102
|
+
|
|
103
|
+
Use `subfigures` when panels form one direct comparison or explanation, such as before/after states, controlled alternatives, a short sequence, or complementary views that the reader needs to inspect together:
|
|
104
|
+
|
|
105
|
+
```markdown
|
|
106
|
+
::: subfigures a+b/c "Comparison of source, intermediate result, and final map"
|
|
107
|
+

|
|
108
|
+

|
|
109
|
+

|
|
110
|
+
:::
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
`+` places panels in one row and `/` starts a new row. Prefer compact layouts such as `a+b` or `a+b/c`, write one caption that states the shared comparison, and give each panel a specific caption. This is a high-value teaching device when juxtaposition carries the argument, but it should remain selective: do not group images only because they share a topic, and avoid consecutive multi-panel figures that reduce emphasis or make evidence too small. Web and PDF preserve the declared rows, panel labels and captions; always inspect dense layouts at the final page size.
|
|
114
|
+
|
|
115
|
+
## Tables
|
|
116
|
+
|
|
117
|
+
Every teaching table must use a captioned block:
|
|
118
|
+
|
|
119
|
+
```markdown
|
|
120
|
+
::: table "Checks before joining a table to a layer"
|
|
121
|
+
| Check | Criterion |
|
|
122
|
+
| --- | --- |
|
|
123
|
+
| Key | Unique and stored with the same type |
|
|
124
|
+
| Coverage | Expected territories are represented |
|
|
125
|
+
:::
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Bare pipe tables fail `manual_source_quality_check`. Captioned tables are numbered on the web and converted to Pandoc tables in the PDF.
|
|
129
|
+
|
|
130
|
+
## Diagrams
|
|
131
|
+
|
|
132
|
+
Store reusable sources under `assets/diagrams/` and reference them as captioned images:
|
|
133
|
+
|
|
134
|
+
```markdown
|
|
135
|
+

|
|
136
|
+

|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Use Mermaid `.mmd` for flows and PlantUML `.puml` or `.plantuml` for structured diagrams. Prefer PlantUML `@startfiles` for file trees. `diavisuals` generates the SVG; preserve an existing `*.edited.svg` unless the author explicitly approves replacement. Do not use inline Mermaid or PlantUML fences in manuals.
|
|
140
|
+
|
|
141
|
+
## Static Vega visualizations
|
|
142
|
+
|
|
143
|
+
Store Vega-Lite specifications as `*.vl.json` and raw Vega specifications as `*.vg.json`. Declare each source exactly once in `.vegavisuals.yml`, including its generated output, then reference the source as a normal captioned image:
|
|
144
|
+
|
|
145
|
+
```markdown
|
|
146
|
+
{: data-figure-width-web="42rem" data-figure-width-pdf="78%"}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
The web and PDF builders resolve the source through the manifest and use the same declared output. A source used as a web image must produce SVG or PNG; prefer SVG for web/PDF parity. Declare non-source files through manifest `inputs`; project-relative static `data.url` references in strict JSON specifications are discovered recursively as well. Receipt verification requires that exact union and rejects remote, dynamic, absolute, or escaping data URLs. Render with `make visualization-render`, commit the specification, inputs, output, manifest, and `.vegavisuals.lock.json`, then run the companion `visualization_check` so the provider publishes its verifiable receipt. Do not publish while the check or receipt verification reports stale, missing, unmanaged, modified, or hash-mismatched output. Reference a generated output directly when one source intentionally has multiple render variants.
|
|
150
|
+
|
|
151
|
+
## Web captures
|
|
152
|
+
|
|
153
|
+
Use a versioned `.capture.yml` recipe when a teaching figure must show a rendered website. The recipe stores a local preview path, viewport, theme, waits, declared inputs, and CSS selectors for annotations. Rendering creates:
|
|
154
|
+
|
|
155
|
+
```text
|
|
156
|
+
page.capture.yml
|
|
157
|
+
page.capture.png
|
|
158
|
+
page.capture.svg
|
|
159
|
+
page.capture.edited.svg # optional author-owned override
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Reference `page.capture.yml` as the captioned image source. Jekyll and the PDF builder prefer `page.capture.edited.svg` when it exists, otherwise `page.capture.svg`. The PNG is the untouched browser capture; annotations remain editable vector layers in the self-contained SVG. Never overwrite an edited SVG without approval, and do not publish while `web_capture_check` reports it stale.
|
|
163
|
+
|
|
164
|
+
## Computed figures
|
|
165
|
+
|
|
166
|
+
Use a computation source in `mode: figure` when a chapter must show a figure produced by R or Python code. Store the source under a configured `source_roots` directory (for example `assets/quarto/`), declare its outputs, and reference the source the same way you reference a diagram:
|
|
167
|
+
|
|
168
|
+
```markdown
|
|
169
|
+
{: data-figure-width-web="48rem" data-figure-width-pdf="88%"}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
The source declares `mode: figure` and its generated assets:
|
|
173
|
+
|
|
174
|
+
```yaml
|
|
175
|
+
---
|
|
176
|
+
unaltraweb_compute:
|
|
177
|
+
engine: r
|
|
178
|
+
mode: figure
|
|
179
|
+
outputs:
|
|
180
|
+
- assets/img/data-visualization/boxplot-housing.svg
|
|
181
|
+
---
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Run `manual_computation_status` and explicitly render stale figures with `manual_computation_render_figures` before building. `site_check` prevents package-scaffolded build/test/serve runs while generated outputs are stale; only the internal capture preview bypasses that gate so it can render the stale capture itself. Jekyll then rewrites the source reference to the declared output. An author-owned override named like the output with `.edited.svg` (for example `boxplot-housing.edited.svg`) wins over the regenerated figure and is never overwritten. Keep figure outputs deterministic: regenerate them from the source instead of editing the generated SVG, and ask before replacing an existing `.edited.svg`.
|
|
185
|
+
|
|
186
|
+
## Citations, code, and math
|
|
187
|
+
|
|
188
|
+
Use verified bibliography keys:
|
|
189
|
+
|
|
190
|
+
```liquid
|
|
191
|
+
{% cite sourceKey %}
|
|
192
|
+
{% cite firstKey secondKey %}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Bibliographic citations, external URLs, and internal links are separate semantic categories in both outputs: citations use pink, external links use the external-link color, and links to headings or numbered equations use the internal-link color. Give headings stable explicit identifiers when another passage links to them:
|
|
196
|
+
|
|
197
|
+
```markdown
|
|
198
|
+
## Normalization {#normalization}
|
|
199
|
+
|
|
200
|
+
See [the normalization criteria](#normalization) and the [OGC standards](https://www.ogc.org/).
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Use ordinary fenced code with an explicit language. Rouge highlights recognized web code and the PDF renderer uses `listings`; inline code remains monospaced and visually distinct in both. The PDF guarantees language-specific highlighting, headers, and line numbers for `bash`, `shell`, `sh`, `sql`, `python`, and `r`. Use `url` for URLs or decomposed web requests, `spreadsheet` for spreadsheet formulas, and `filetree` for short file or directory listings; these semantic fences receive localized headers and dedicated highlighting on web and PDF. Wrap exactly one fence in `::: listing "Descriptive caption"` and `:::` when it needs a localized number, visible caption, and PDF index entry. Plain, unlabelled, and unsupported fences render as unnumbered verbatim without a header. Long PDF lines wrap within the printable page.
|
|
204
|
+
|
|
205
|
+
For mathematics in Markdown sources, use single dollar delimiters for inline expressions and double dollar delimiters on separate lines for displayed equations. Displayed equations are numbered by default on the web and in the PDF:
|
|
206
|
+
|
|
207
|
+
```markdown
|
|
208
|
+
The density is $D_i=P_i/A_i$ for territory $i$.
|
|
209
|
+
|
|
210
|
+
$$
|
|
211
|
+
D_i = \frac{P_i}{A_i}
|
|
212
|
+
\label{eq:density}
|
|
213
|
+
$$
|
|
214
|
+
|
|
215
|
+
Equation $\eqref{eq:density}$ defines density.
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
Add a stable `eq:` label inside a display block when the text needs to refer to it, then place `\eqref` inside inline-math delimiters so MathJax and LaTeX follow the same source. When a displayed expression explicitly does not need a number, opt out with `equation*`:
|
|
219
|
+
|
|
220
|
+
```markdown
|
|
221
|
+
\begin{equation*}
|
|
222
|
+
\bar{x}_w = \frac{\sum_i w_i x_i}{\sum_i w_i}
|
|
223
|
+
\end{equation*}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Do not place a label inside `equation*`, because an unnumbered expression has no stable equation number to retrieve. Do not mark mathematical variables as inline code: `` `P_i` `` renders literally instead of typesetting the subscript. Do not use `\(...\)` directly in Markdown sources because Kramdown consumes those backslashes before MathJax runs.
|
|
227
|
+
|
|
228
|
+
## Bibliographies
|
|
229
|
+
|
|
230
|
+
Store manual entries in `_bibliography/manual.bib` and cite them with `{% cite key %}`. The manual profile sorts the general bibliography and chapter reference lists alphabetically by contributor name, then year and title. Set `manual_references: true` on a chapter when it needs a references section.
|
|
231
|
+
|
|
232
|
+
The web keeps access links compact: DOI and URL text are removed only from the visible reference line and remain available through DOI/LINK buttons and the expandable citation panel. The PDF has no interactive controls, so it prints DOI and URL text in both the general bibliography and each requested chapter bibliography. Do not remove access fields from BibTeX or use a no-access CSL to change the web presentation.
|
|
233
|
+
|
|
234
|
+
## Web-only components
|
|
235
|
+
|
|
236
|
+
Tabs, details, interactive charts and maps, galleries, audio, video, and arbitrary Liquid figure includes can work in the browser but do not have general PDF parity. An assistant must not introduce them into a PDF-enabled manual without stating the limitation and reviewing both outputs.
|
|
237
|
+
|
|
238
|
+
## Executable sources
|
|
239
|
+
|
|
240
|
+
When a `.qmd`, `.Rmd`, `.R`, `.py`, or `.ipynb` source owns a chapter, edit that source rather than its generated `.md`. Keep one R or Python engine per source, declare non-code inputs, render explicitly, and review source, Markdown, figures, and `.unaltraweb/computations.lock.json` together. Never publish while `manual_computation_check` reports stale output. For single figures, prefer `mode: figure` sources referenced from Markdown (see "Computed figures" above) instead of chapter-mode sources; render them explicitly with `manual_computation_render_figures` so each figure remains reproducible on its own.
|
|
241
|
+
|
|
242
|
+
## Required checks
|
|
243
|
+
|
|
244
|
+
Run these checks after drafting or structural revision:
|
|
245
|
+
|
|
246
|
+
```text
|
|
247
|
+
manual_source_quality_check
|
|
248
|
+
manual_editorial_quality_check
|
|
249
|
+
manual_computation_check when executable sources exist
|
|
250
|
+
visualization_check when .vegavisuals.yml exists
|
|
251
|
+
build_site
|
|
252
|
+
manual_pdf_build when PDF output is enabled
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
All body content must remain publishable. Keep author instructions, uncertainty, review notes, workflow status, and unresolved editorial decisions outside pages and chapters.
|