Compare commits
8 commits
84d213a9f6
...
1d4d832b6c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1d4d832b6c | ||
|
|
8c471fc0fa | ||
|
|
6c3900a1d4 | ||
|
|
bceac4ad17 | ||
|
|
808f10037f | ||
|
|
10eead03da | ||
|
|
16a33159fe | ||
|
|
b8126a5a21 |
108 changed files with 1716 additions and 223 deletions
|
|
@ -1,6 +1,9 @@
|
|||
import { defineConfig } from 'astro/config';
|
||||
import starlight from '@astrojs/starlight';
|
||||
import { unified } from '@astrojs/markdown-remark';
|
||||
import { sidebar } from './src/config/sidebar.mjs';
|
||||
import { legacyBachelorRedirects } from './src/config/legacy-bachelor-redirects.mjs';
|
||||
import { baseAwareLinks } from './src/config/base-aware-markdown.mjs';
|
||||
|
||||
const site = process.env.SITE || 'http://localhost:4321';
|
||||
const base = process.env.BASE || '/';
|
||||
|
|
@ -12,6 +15,10 @@ const matomoConsentScript = `${normalizedBase}/matomo-consent.js`;
|
|||
export default defineConfig({
|
||||
site,
|
||||
base,
|
||||
redirects: Object.fromEntries(Object.entries(legacyBachelorRedirects).map(([from, to]) => [from, `${normalizedBase}${to}`])),
|
||||
markdown: {
|
||||
processor: unified({ remarkPlugins: [[baseAwareLinks, { base }]] }),
|
||||
},
|
||||
integrations: [
|
||||
starlight({
|
||||
title: 'Incognito Wiki',
|
||||
|
|
@ -26,6 +33,12 @@ export default defineConfig({
|
|||
},
|
||||
favicon: '/favicon.ico',
|
||||
customCss: ['./src/styles/incognito.css'],
|
||||
components: {
|
||||
Sidebar: './src/components/Sidebar.astro',
|
||||
},
|
||||
markdown: {
|
||||
processedDirs: ['./src/content/shared-courses/'],
|
||||
},
|
||||
head: [
|
||||
{
|
||||
tag: 'script',
|
||||
|
|
|
|||
|
|
@ -2,64 +2,64 @@ page_id source_url status destination captured_source reason
|
|||
sidebar https://msvincognito.nl/wiki/sidebar excluded to-be-studied/previous-wiki/2026-08-03/pages/sidebar.txt Outside the Bachelor, Master AI, and Master DSDM course-detail scope.
|
||||
start https://msvincognito.nl/wiki/start represented src/content/docs/index.mdx to-be-studied/previous-wiki/2026-08-03/pages/start.txt Already represented by the selected export migration.
|
||||
study https://msvincognito.nl/wiki/study represented src/content/docs/index.mdx to-be-studied/previous-wiki/2026-08-03/pages/study.txt Already represented by the selected export migration.
|
||||
study:bachelor https://msvincognito.nl/wiki/study/bachelor represented src/content/docs/bachelor/index.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_1 https://msvincognito.nl/wiki/study/bachelor/year_1 represented src/content/docs/bachelor/year-1/index.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_1:block_1:discrete_mathematics https://msvincognito.nl/wiki/study/bachelor/year_1/block_1/discrete_mathematics migrated src/content/docs/bachelor/year-1/block-1/discrete-mathematics.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_1/discrete_mathematics.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_1:introduction_to_data_science_and_artifical_intelligence https://msvincognito.nl/wiki/study/bachelor/year_1/block_1/introduction_to_data_science_and_artifical_intelligence migrated src/content/docs/bachelor/year-1/block-1/introduction-to-data-science-and-artifical-intelligence.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_1/introduction_to_data_science_and_artifical_intelligence.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_1:procedural_programming https://msvincognito.nl/wiki/study/bachelor/year_1/block_1/procedural_programming migrated src/content/docs/bachelor/year-1/block-1/procedural-programming.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_1/procedural_programming.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_2:calculus https://msvincognito.nl/wiki/study/bachelor/year_1/block_2/calculus migrated src/content/docs/bachelor/year-1/block-2/calculus.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_2/calculus.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_2:logic https://msvincognito.nl/wiki/study/bachelor/year_1/block_2/logic migrated src/content/docs/bachelor/year-1/block-2/logic.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_2/logic.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_2:objects_in_programming https://msvincognito.nl/wiki/study/bachelor/year_1/block_2/objects_in_programming migrated src/content/docs/bachelor/year-1/block-2/objects-in-programming.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_2/objects_in_programming.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor https://msvincognito.nl/wiki/study/bachelor represented src/content/docs/data-science-and-ai/index.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_1 https://msvincognito.nl/wiki/study/bachelor/year_1 represented src/content/docs/data-science-and-ai/year-1/index.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_1:block_1:discrete_mathematics https://msvincognito.nl/wiki/study/bachelor/year_1/block_1/discrete_mathematics migrated src/content/docs/data-science-and-ai/year-1/block-1/discrete-mathematics.mdx to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_1/discrete_mathematics.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_1:introduction_to_data_science_and_artifical_intelligence https://msvincognito.nl/wiki/study/bachelor/year_1/block_1/introduction_to_data_science_and_artifical_intelligence migrated src/content/docs/data-science-and-ai/year-1/block-1/introduction-to-data-science-and-artifical-intelligence.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_1/introduction_to_data_science_and_artifical_intelligence.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_1:procedural_programming https://msvincognito.nl/wiki/study/bachelor/year_1/block_1/procedural_programming migrated src/content/docs/data-science-and-ai/year-1/block-1/procedural-programming.mdx to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_1/procedural_programming.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_2:calculus https://msvincognito.nl/wiki/study/bachelor/year_1/block_2/calculus migrated src/content/docs/data-science-and-ai/year-1/block-2/calculus.mdx to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_2/calculus.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_2:logic https://msvincognito.nl/wiki/study/bachelor/year_1/block_2/logic migrated src/content/docs/data-science-and-ai/year-1/block-2/logic.mdx to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_2/logic.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_2:objects_in_programming https://msvincognito.nl/wiki/study/bachelor/year_1/block_2/objects_in_programming migrated src/content/docs/data-science-and-ai/year-1/block-2/objects-in-programming.mdx to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_2/objects_in_programming.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_3:placeholder https://msvincognito.nl/wiki/study/bachelor/year_1/block_3/placeholder empty to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_3/placeholder.txt Explicit placeholder page with no course details.
|
||||
study:bachelor:year_1:block_4:data_structures_and_algorithms https://msvincognito.nl/wiki/study/bachelor/year_1/block_4/data_structures_and_algorithms migrated src/content/docs/bachelor/year-1/block-4/data-structures-and-algorithms.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_4/data_structures_and_algorithms.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_4:linear_algebra https://msvincognito.nl/wiki/study/bachelor/year_1/block_4/linear_algebra migrated src/content/docs/bachelor/year-1/block-4/linear-algebra.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_4/linear_algebra.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_4:principles_of_data_science https://msvincognito.nl/wiki/study/bachelor/year_1/block_4/principles_of_data_science migrated src/content/docs/bachelor/year-1/block-4/principles-of-data-science.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_4/principles_of_data_science.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_5:computational_and_cognitive_neuroscience https://msvincognito.nl/wiki/study/bachelor/year_1/block_5/computational_and_cognitive_neuroscience migrated src/content/docs/bachelor/year-1/block-5/computational-and-cognitive-neuroscience.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_5/computational_and_cognitive_neuroscience.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_5:numerical_methods https://msvincognito.nl/wiki/study/bachelor/year_1/block_5/numerical_methods migrated src/content/docs/bachelor/year-1/block-5/numerical-methods.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_5/numerical_methods.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_5:software_engineering https://msvincognito.nl/wiki/study/bachelor/year_1/block_5/software_engineering migrated src/content/docs/bachelor/year-1/block-5/software-engineering.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_5/software_engineering.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_4:data_structures_and_algorithms https://msvincognito.nl/wiki/study/bachelor/year_1/block_4/data_structures_and_algorithms migrated src/content/docs/data-science-and-ai/year-1/block-4/data-structures-and-algorithms.mdx to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_4/data_structures_and_algorithms.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_4:linear_algebra https://msvincognito.nl/wiki/study/bachelor/year_1/block_4/linear_algebra migrated src/content/docs/data-science-and-ai/year-1/block-4/linear-algebra.mdx to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_4/linear_algebra.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_4:principles_of_data_science https://msvincognito.nl/wiki/study/bachelor/year_1/block_4/principles_of_data_science migrated src/content/docs/data-science-and-ai/year-1/block-4/principles-of-data-science.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_4/principles_of_data_science.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_5:computational_and_cognitive_neuroscience https://msvincognito.nl/wiki/study/bachelor/year_1/block_5/computational_and_cognitive_neuroscience migrated src/content/docs/data-science-and-ai/year-1/block-5/computational-and-cognitive-neuroscience.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_5/computational_and_cognitive_neuroscience.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_5:numerical_methods https://msvincognito.nl/wiki/study/bachelor/year_1/block_5/numerical_methods migrated src/content/docs/data-science-and-ai/year-1/block-5/numerical-methods.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_5/numerical_methods.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_5:software_engineering https://msvincognito.nl/wiki/study/bachelor/year_1/block_5/software_engineering migrated src/content/docs/data-science-and-ai/year-1/block-5/software-engineering.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_5/software_engineering.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:block_6:placeholder https://msvincognito.nl/wiki/study/bachelor/year_1/block_6/placeholder empty to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/block_6/placeholder.txt Explicit placeholder page with no course details.
|
||||
study:bachelor:year_1:project_1-1 https://msvincognito.nl/wiki/study/bachelor/year_1/project_1-1 represented src/content/docs/bachelor/year-1/project-1-1.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/project_1-1.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_1:project_1-2 https://msvincognito.nl/wiki/study/bachelor/year_1/project_1-2 represented src/content/docs/bachelor/year-1/project-1-2.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/project_1-2.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_2 https://msvincognito.nl/wiki/study/bachelor/year_2 represented src/content/docs/bachelor/year-2/index.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_2:block_1:databases https://msvincognito.nl/wiki/study/bachelor/year_2/block_1/databases migrated src/content/docs/bachelor/year-2/block-1/databases.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_1/databases.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_1:graph_theory https://msvincognito.nl/wiki/study/bachelor/year_2/block_1/graph_theory migrated src/content/docs/bachelor/year-2/block-1/graph-theory.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_1/graph_theory.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_1:probability_and_statistics https://msvincognito.nl/wiki/study/bachelor/year_2/block_1/probability_and_statistics migrated src/content/docs/bachelor/year-2/block-1/probability-and-statistics.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_1/probability_and_statistics.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_2:machine_learning https://msvincognito.nl/wiki/study/bachelor/year_2/block_2/machine_learning migrated src/content/docs/bachelor/year-2/block-2/machine-learning.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_2/machine_learning.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_2:reasoning_techniques https://msvincognito.nl/wiki/study/bachelor/year_2/block_2/reasoning_techniques migrated src/content/docs/bachelor/year-2/block-2/reasoning-techniques.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_2/reasoning_techniques.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_2:simulation_and_statisical_analysis https://msvincognito.nl/wiki/study/bachelor/year_2/block_2/simulation_and_statisical_analysis migrated src/content/docs/bachelor/year-2/block-2/simulation-and-statisical-analysis.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_2/simulation_and_statisical_analysis.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_1:project_1-1 https://msvincognito.nl/wiki/study/bachelor/year_1/project_1-1 represented src/content/docs/data-science-and-ai/year-1/project-1-1.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/project_1-1.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_1:project_1-2 https://msvincognito.nl/wiki/study/bachelor/year_1/project_1-2 represented src/content/docs/data-science-and-ai/year-1/project-1-2.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_1/project_1-2.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_2 https://msvincognito.nl/wiki/study/bachelor/year_2 represented src/content/docs/data-science-and-ai/year-2/index.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_2:block_1:databases https://msvincognito.nl/wiki/study/bachelor/year_2/block_1/databases migrated src/content/docs/data-science-and-ai/year-2/block-1/databases.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_1/databases.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_1:graph_theory https://msvincognito.nl/wiki/study/bachelor/year_2/block_1/graph_theory migrated src/content/docs/data-science-and-ai/year-2/block-1/graph-theory.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_1/graph_theory.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_1:probability_and_statistics https://msvincognito.nl/wiki/study/bachelor/year_2/block_1/probability_and_statistics migrated src/content/docs/data-science-and-ai/year-2/block-1/probability-and-statistics.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_1/probability_and_statistics.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_2:machine_learning https://msvincognito.nl/wiki/study/bachelor/year_2/block_2/machine_learning migrated src/content/docs/data-science-and-ai/year-2/block-2/machine-learning.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_2/machine_learning.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_2:reasoning_techniques https://msvincognito.nl/wiki/study/bachelor/year_2/block_2/reasoning_techniques migrated src/content/docs/data-science-and-ai/year-2/block-2/reasoning-techniques.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_2/reasoning_techniques.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_2:simulation_and_statisical_analysis https://msvincognito.nl/wiki/study/bachelor/year_2/block_2/simulation_and_statisical_analysis migrated src/content/docs/data-science-and-ai/year-2/block-2/simulation-and-statisical-analysis.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_2/simulation_and_statisical_analysis.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_3:placeholder https://msvincognito.nl/wiki/study/bachelor/year_2/block_3/placeholder empty to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_3/placeholder.txt Explicit placeholder page with no course details.
|
||||
study:bachelor:year_2:block_4:human_computer_interaction_and_affective_computing https://msvincognito.nl/wiki/study/bachelor/year_2/block_4/human_computer_interaction_and_affective_computing migrated src/content/docs/bachelor/year-2/block-4/human-computer-interaction-and-affective-computing.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_4/human_computer_interaction_and_affective_computing.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_4:mathematical_modelling https://msvincognito.nl/wiki/study/bachelor/year_2/block_4/mathematical_modelling migrated src/content/docs/bachelor/year-2/block-4/mathematical-modelling.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_4/mathematical_modelling.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_4:natural_language_processing https://msvincognito.nl/wiki/study/bachelor/year_2/block_4/natural_language_processing migrated src/content/docs/bachelor/year-2/block-4/natural-language-processing.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_4/natural_language_processing.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_5:game_theory https://msvincognito.nl/wiki/study/bachelor/year_2/block_5/game_theory migrated src/content/docs/bachelor/year-2/block-5/game-theory.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_5/game_theory.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_5:introduction_to_image_and_video_processing https://msvincognito.nl/wiki/study/bachelor/year_2/block_5/introduction_to_image_and_video_processing migrated src/content/docs/bachelor/year-2/block-5/introduction-to-image-and-video-processing.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_5/introduction_to_image_and_video_processing.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_5:linear_programming https://msvincognito.nl/wiki/study/bachelor/year_2/block_5/linear_programming migrated src/content/docs/bachelor/year-2/block-5/linear-programming.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_5/linear_programming.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_5:philosophy_and_artificial_intelligence https://msvincognito.nl/wiki/study/bachelor/year_2/block_5/philosophy_and_artificial_intelligence migrated src/content/docs/bachelor/year-2/block-5/philosophy-and-artificial-intelligence.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_5/philosophy_and_artificial_intelligence.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_4:human_computer_interaction_and_affective_computing https://msvincognito.nl/wiki/study/bachelor/year_2/block_4/human_computer_interaction_and_affective_computing migrated src/content/docs/data-science-and-ai/year-2/block-4/human-computer-interaction-and-affective-computing.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_4/human_computer_interaction_and_affective_computing.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_4:mathematical_modelling https://msvincognito.nl/wiki/study/bachelor/year_2/block_4/mathematical_modelling migrated src/content/docs/data-science-and-ai/year-2/block-4/mathematical-modelling.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_4/mathematical_modelling.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_4:natural_language_processing https://msvincognito.nl/wiki/study/bachelor/year_2/block_4/natural_language_processing migrated src/content/docs/data-science-and-ai/year-2/block-4/natural-language-processing.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_4/natural_language_processing.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_5:game_theory https://msvincognito.nl/wiki/study/bachelor/year_2/block_5/game_theory migrated src/content/docs/data-science-and-ai/year-2/block-5/game-theory.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_5/game_theory.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_5:introduction_to_image_and_video_processing https://msvincognito.nl/wiki/study/bachelor/year_2/block_5/introduction_to_image_and_video_processing migrated src/content/docs/data-science-and-ai/year-2/block-5/introduction-to-image-and-video-processing.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_5/introduction_to_image_and_video_processing.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_5:linear_programming https://msvincognito.nl/wiki/study/bachelor/year_2/block_5/linear_programming migrated src/content/docs/data-science-and-ai/year-2/block-5/linear-programming.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_5/linear_programming.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_5:philosophy_and_artificial_intelligence https://msvincognito.nl/wiki/study/bachelor/year_2/block_5/philosophy_and_artificial_intelligence migrated src/content/docs/data-science-and-ai/year-2/block-5/philosophy-and-artificial-intelligence.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_5/philosophy_and_artificial_intelligence.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:block_6:placeholder https://msvincognito.nl/wiki/study/bachelor/year_2/block_6/placeholder empty to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/block_6/placeholder.txt Explicit placeholder page with no course details.
|
||||
study:bachelor:year_2:honours_programme https://msvincognito.nl/wiki/study/bachelor/year_2/honours_programme represented src/content/docs/bachelor/year-2/honours-programme.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/honours_programme.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_2:project_2-1 https://msvincognito.nl/wiki/study/bachelor/year_2/project_2-1 represented src/content/docs/bachelor/year-2/project-2-1.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/project_2-1.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_2:project_2-2 https://msvincognito.nl/wiki/study/bachelor/year_2/project_2-2 represented src/content/docs/bachelor/year-2/project-2-2.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/project_2-2.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_3 https://msvincognito.nl/wiki/study/bachelor/year_3 represented src/content/docs/bachelor/year-3/index.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_3:bachelors_thesis https://msvincognito.nl/wiki/study/bachelor/year_3/bachelors_thesis represented src/content/docs/bachelor/year-3/bachelors-thesis.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/bachelors_thesis.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_3:block_1:prolog https://msvincognito.nl/wiki/study/bachelor/year_3/block_1/prolog migrated src/content/docs/bachelor/year-3/block-1/prolog.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_1/prolog.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_1:robotics_and_embedded_systems https://msvincognito.nl/wiki/study/bachelor/year_3/block_1/robotics_and_embedded_systems migrated src/content/docs/bachelor/year-3/block-1/robotics-and-embedded-systems.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_1/robotics_and_embedded_systems.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_1:semantic_web https://msvincognito.nl/wiki/study/bachelor/year_3/block_1/semantic_web migrated src/content/docs/bachelor/year-3/block-1/semantic-web.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_1/semantic_web.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_1:software_and_systems_verification https://msvincognito.nl/wiki/study/bachelor/year_3/block_1/software_and_systems_verification migrated src/content/docs/bachelor/year-3/block-1/software-and-systems-verification.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_1/software_and_systems_verification.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_2:introduction_to_bio-informatics https://msvincognito.nl/wiki/study/bachelor/year_3/block_2/introduction_to_bio-informatics migrated src/content/docs/bachelor/year-3/block-2/introduction-to-bio-informatics.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_2/introduction_to_bio-informatics.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_2:logic_for_artificial_intelligence https://msvincognito.nl/wiki/study/bachelor/year_3/block_2/logic_for_artificial_intelligence migrated src/content/docs/bachelor/year-3/block-2/logic-for-artificial-intelligence.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_2/logic_for_artificial_intelligence.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_2:parallel_programming https://msvincognito.nl/wiki/study/bachelor/year_3/block_2/parallel_programming migrated src/content/docs/bachelor/year-3/block-2/parallel-programming.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_2/parallel_programming.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_2:quantum_computation https://msvincognito.nl/wiki/study/bachelor/year_3/block_2/quantum_computation migrated src/content/docs/bachelor/year-3/block-2/quantum-computation.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_2/quantum_computation.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_2:recommender_systems https://msvincognito.nl/wiki/study/bachelor/year_3/block_2/recommender_systems migrated src/content/docs/bachelor/year-3/block-2/recommender-systems.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_2/recommender_systems.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_2:secure_web_applications https://msvincognito.nl/wiki/study/bachelor/year_3/block_2/secure_web_applications migrated src/content/docs/bachelor/year-3/block-2/secure-web-applications.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_2/secure_web_applications.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_2:honours_programme https://msvincognito.nl/wiki/study/bachelor/year_2/honours_programme represented src/content/docs/data-science-and-ai/year-2/honours-programme.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/honours_programme.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_2:project_2-1 https://msvincognito.nl/wiki/study/bachelor/year_2/project_2-1 represented src/content/docs/data-science-and-ai/year-2/project-2-1.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/project_2-1.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_2:project_2-2 https://msvincognito.nl/wiki/study/bachelor/year_2/project_2-2 represented src/content/docs/data-science-and-ai/year-2/project-2-2.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_2/project_2-2.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_3 https://msvincognito.nl/wiki/study/bachelor/year_3 represented src/content/docs/data-science-and-ai/year-3/index.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_3:bachelors_thesis https://msvincognito.nl/wiki/study/bachelor/year_3/bachelors_thesis represented src/content/docs/data-science-and-ai/year-3/bachelors-thesis.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/bachelors_thesis.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_3:block_1:prolog https://msvincognito.nl/wiki/study/bachelor/year_3/block_1/prolog migrated src/content/docs/data-science-and-ai/year-3/block-1/prolog.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_1/prolog.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_1:robotics_and_embedded_systems https://msvincognito.nl/wiki/study/bachelor/year_3/block_1/robotics_and_embedded_systems migrated src/content/docs/data-science-and-ai/year-3/block-1/robotics-and-embedded-systems.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_1/robotics_and_embedded_systems.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_1:semantic_web https://msvincognito.nl/wiki/study/bachelor/year_3/block_1/semantic_web migrated src/content/docs/data-science-and-ai/year-3/block-1/semantic-web.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_1/semantic_web.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_1:software_and_systems_verification https://msvincognito.nl/wiki/study/bachelor/year_3/block_1/software_and_systems_verification migrated src/content/docs/data-science-and-ai/year-3/block-1/software-and-systems-verification.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_1/software_and_systems_verification.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_2:introduction_to_bio-informatics https://msvincognito.nl/wiki/study/bachelor/year_3/block_2/introduction_to_bio-informatics migrated src/content/docs/data-science-and-ai/year-3/block-2/introduction-to-bio-informatics.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_2/introduction_to_bio-informatics.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_2:logic_for_artificial_intelligence https://msvincognito.nl/wiki/study/bachelor/year_3/block_2/logic_for_artificial_intelligence migrated src/content/docs/data-science-and-ai/year-3/block-2/logic-for-artificial-intelligence.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_2/logic_for_artificial_intelligence.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_2:parallel_programming https://msvincognito.nl/wiki/study/bachelor/year_3/block_2/parallel_programming migrated src/content/docs/data-science-and-ai/year-3/block-2/parallel-programming.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_2/parallel_programming.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_2:quantum_computation https://msvincognito.nl/wiki/study/bachelor/year_3/block_2/quantum_computation migrated src/content/docs/data-science-and-ai/year-3/block-2/quantum-computation.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_2/quantum_computation.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_2:recommender_systems https://msvincognito.nl/wiki/study/bachelor/year_3/block_2/recommender_systems migrated src/content/docs/data-science-and-ai/year-3/block-2/recommender-systems.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_2/recommender_systems.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_2:secure_web_applications https://msvincognito.nl/wiki/study/bachelor/year_3/block_2/secure_web_applications migrated src/content/docs/data-science-and-ai/year-3/block-2/secure-web-applications.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_2/secure_web_applications.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_3:placeholder https://msvincognito.nl/wiki/study/bachelor/year_3/block_3/placeholder empty to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_3/placeholder.txt Explicit placeholder page with no course details.
|
||||
study:bachelor:year_3:block_4:data_analysis https://msvincognito.nl/wiki/study/bachelor/year_3/block_4/data_analysis migrated src/content/docs/bachelor/year-3/block-4/data-analysis.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_4/data_analysis.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_4:intelligent_systems https://msvincognito.nl/wiki/study/bachelor/year_3/block_4/intelligent_systems migrated src/content/docs/bachelor/year-3/block-4/intelligent-systems.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_4/intelligent_systems.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_4:operations_research_case_studies https://msvincognito.nl/wiki/study/bachelor/year_3/block_4/operations_research_case_studies migrated src/content/docs/bachelor/year-3/block-4/operations-research-case-studies.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_4/operations_research_case_studies.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_4:data_analysis https://msvincognito.nl/wiki/study/bachelor/year_3/block_4/data_analysis migrated src/content/docs/data-science-and-ai/year-3/block-4/data-analysis.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_4/data_analysis.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_4:intelligent_systems https://msvincognito.nl/wiki/study/bachelor/year_3/block_4/intelligent_systems migrated src/content/docs/data-science-and-ai/year-3/block-4/intelligent-systems.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_4/intelligent_systems.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_4:operations_research_case_studies https://msvincognito.nl/wiki/study/bachelor/year_3/block_4/operations_research_case_studies migrated src/content/docs/data-science-and-ai/year-3/block-4/operations-research-case-studies.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_4/operations_research_case_studies.txt Substantive public course page migrated from the live DokuWiki.
|
||||
study:bachelor:year_3:block_5:placeholder https://msvincognito.nl/wiki/study/bachelor/year_3/block_5/placeholder empty to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_5/placeholder.txt Explicit placeholder page with no course details.
|
||||
study:bachelor:year_3:block_6:placeholder https://msvincognito.nl/wiki/study/bachelor/year_3/block_6/placeholder empty to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/block_6/placeholder.txt Explicit placeholder page with no course details.
|
||||
study:bachelor:year_3:honours_programme https://msvincognito.nl/wiki/study/bachelor/year_3/honours_programme represented src/content/docs/bachelor/year-3/honours-programme.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/honours_programme.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_3:project_3-1 https://msvincognito.nl/wiki/study/bachelor/year_3/project_3-1 represented src/content/docs/bachelor/year-3/project-3-1.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/project_3-1.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_3:study_abroad https://msvincognito.nl/wiki/study/bachelor/year_3/study_abroad represented src/content/docs/bachelor/year-3/study-abroad.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/study_abroad.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_3:honours_programme https://msvincognito.nl/wiki/study/bachelor/year_3/honours_programme represented src/content/docs/data-science-and-ai/year-3/honours-programme.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/honours_programme.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_3:project_3-1 https://msvincognito.nl/wiki/study/bachelor/year_3/project_3-1 represented src/content/docs/data-science-and-ai/year-3/project-3-1.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/project_3-1.txt Already represented by the selected export migration.
|
||||
study:bachelor:year_3:study_abroad https://msvincognito.nl/wiki/study/bachelor/year_3/study_abroad represented src/content/docs/data-science-and-ai/year-3/study-abroad.md to-be-studied/previous-wiki/2026-08-03/pages/study/bachelor/year_3/study_abroad.txt Already represented by the selected export migration.
|
||||
study:master_ai https://msvincognito.nl/wiki/study/master_ai represented src/content/docs/master-ai/index.md to-be-studied/previous-wiki/2026-08-03/pages/study/master_ai.txt Already represented by the selected export migration.
|
||||
study:master_ai:year_1 https://msvincognito.nl/wiki/study/master_ai/year_1 represented src/content/docs/master-ai/year-1/index.md to-be-studied/previous-wiki/2026-08-03/pages/study/master_ai/year_1.txt Already represented by the selected export migration.
|
||||
study:master_ai:year_1:block_1:foundations_of_agents https://msvincognito.nl/wiki/study/master_ai/year_1/block_1/foundations_of_agents migrated src/content/docs/master-ai/year-1/block-1/foundations-of-agents.md to-be-studied/previous-wiki/2026-08-03/pages/study/master_ai/year_1/block_1/foundations_of_agents.txt Substantive public course page migrated from the live DokuWiki.
|
||||
|
|
|
|||
|
|
|
@ -5,19 +5,19 @@
|
|||
{ "source": "pages/start.txt", "destination": "src/content/docs/index.mdx", "mode": "page" },
|
||||
{ "source": "pages/study.txt", "destination": "src/content/docs/index.mdx", "mode": "merge" },
|
||||
{ "source": "pages/study/msv_incognito.txt", "destination": "src/content/docs/about-incognito.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor.txt", "destination": "src/content/docs/bachelor/index.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_1.txt", "destination": "src/content/docs/bachelor/year-1/index.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_1/project_1-1.txt", "destination": "src/content/docs/bachelor/year-1/project-1-1.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_1/project_1-2.txt", "destination": "src/content/docs/bachelor/year-1/project-1-2.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_2.txt", "destination": "src/content/docs/bachelor/year-2/index.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_2/honours_programme.txt", "destination": "src/content/docs/bachelor/year-2/honours-programme.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_2/project_2-1.txt", "destination": "src/content/docs/bachelor/year-2/project-2-1.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_2/project_2-2.txt", "destination": "src/content/docs/bachelor/year-2/project-2-2.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_3.txt", "destination": "src/content/docs/bachelor/year-3/index.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_3/bachelors_thesis.txt", "destination": "src/content/docs/bachelor/year-3/bachelors-thesis.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_3/honours_programme.txt", "destination": "src/content/docs/bachelor/year-3/honours-programme.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_3/project_3-1.txt", "destination": "src/content/docs/bachelor/year-3/project-3-1.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_3/study_abroad.txt", "destination": "src/content/docs/bachelor/year-3/study-abroad.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor.txt", "destination": "src/content/docs/data-science-and-ai/index.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_1.txt", "destination": "src/content/docs/data-science-and-ai/year-1/index.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_1/project_1-1.txt", "destination": "src/content/docs/data-science-and-ai/year-1/project-1-1.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_1/project_1-2.txt", "destination": "src/content/docs/data-science-and-ai/year-1/project-1-2.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_2.txt", "destination": "src/content/docs/data-science-and-ai/year-2/index.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_2/honours_programme.txt", "destination": "src/content/docs/data-science-and-ai/year-2/honours-programme.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_2/project_2-1.txt", "destination": "src/content/docs/data-science-and-ai/year-2/project-2-1.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_2/project_2-2.txt", "destination": "src/content/docs/data-science-and-ai/year-2/project-2-2.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_3.txt", "destination": "src/content/docs/data-science-and-ai/year-3/index.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_3/bachelors_thesis.txt", "destination": "src/content/docs/data-science-and-ai/year-3/bachelors-thesis.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_3/honours_programme.txt", "destination": "src/content/docs/data-science-and-ai/year-3/honours-programme.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_3/project_3-1.txt", "destination": "src/content/docs/data-science-and-ai/year-3/project-3-1.md", "mode": "page" },
|
||||
{ "source": "pages/study/bachelor/year_3/study_abroad.txt", "destination": "src/content/docs/data-science-and-ai/year-3/study-abroad.md", "mode": "page" },
|
||||
{ "source": "pages/study/master_ai.txt", "destination": "src/content/docs/master-ai/index.md", "mode": "page" },
|
||||
{ "source": "pages/study/master_ai/year_1.txt", "destination": "src/content/docs/master-ai/year-1/index.md", "mode": "page" },
|
||||
{ "source": "pages/study/master_ai/year_1/project_mai_1.txt", "destination": "src/content/docs/master-ai/year-1/research-project-1.md", "mode": "page" },
|
||||
|
|
|
|||
|
|
@ -11,19 +11,19 @@ This report accounts for the 29 selected DokuWiki source pages and their 28 uniq
|
|||
| `pages/start.txt` | `src/content/docs/index.mdx` | page | Yes, on migrated programme notes | **Converted source links:** Bachelor, Master AI, Master DSDM, Useful Information, the Incognito site, and ICT manuals. **Newly verified link:** the current DACS page replaced the source-era DKE department URL. **Genuinely removed links:** unresolved Minutes, Event Manuals, and Function Manuals targets; redundant study/year navigation was omitted. | None | Recast the welcome copy and normalized programme terminology |
|
||||
| `pages/study.txt` | `src/content/docs/index.mdx` | merge | Yes | **Converted source links:** Bachelor, Master AI, Master DSDM, and the YouTube embed. **Genuinely removed links:** redundant year navigation was omitted. | None | Condensed the source-era university and programme overview, including omission of its dated growth/ranking sentence; corrected punctuation, capitalization, and bachelor/master wording |
|
||||
| `pages/study/msv_incognito.txt` | `src/content/docs/about-incognito.md` | page | No | **Converted source link:** the MSV Incognito website. No links were repaired or removed. | None | Combined the source website link with the association-description sentence from `pages/start.txt`; the present-day introduction uses the current DACS name |
|
||||
| `pages/study/bachelor.txt` | `src/content/docs/bachelor/index.md` | page | Yes | **Converted source link:** Maastricht University education website. **Removed source links:** redundant DokuWiki year-navigation links, now covered by site navigation. | None | Corrected bachelor capitalization and sentence structure; disclosed that promised summaries and old exams were absent from the export |
|
||||
| `pages/study/bachelor/year_1.txt` | `src/content/docs/bachelor/year-1/index.md` | page | Yes | **Newly verified links:** the two migrated project pages, derived from the exported child-page inventory. No source content links required repair or removal. | None | Standardized Year 1/block capitalization |
|
||||
| `pages/study/bachelor/year_1/project_1-1.txt` | `src/content/docs/bachelor/year-1/project-1-1.md` | page | Yes | **None.** The source and destination contain no content links. | None | Corrected punctuation and clarified prerequisite prose without changing requirements |
|
||||
| `pages/study/bachelor/year_1/project_1-2.txt` | `src/content/docs/bachelor/year-1/project-1-2.md` | page | Yes | **None.** The source and destination contain no content links. | None | Corrected grammar, spacing, and capitalization |
|
||||
| `pages/study/bachelor/year_2.txt` | `src/content/docs/bachelor/year-2/index.md` | page | Yes | **Newly verified links:** the two migrated project pages and honours placeholder. **Genuinely removed link:** the malformed DokuWiki media-manager/upload URL. | None | Standardized Year 2/block capitalization |
|
||||
| `pages/study/bachelor/year_2/honours_programme.txt` | `src/content/docs/bachelor/year-2/honours-programme.md` | page | Yes | **None.** The source and destination contain no content links. | None | Replaced the source's “Under Construction” text with the standard awaiting-content placeholder |
|
||||
| `pages/study/bachelor/year_2/project_2-1.txt` | `src/content/docs/bachelor/year-2/project-2-1.md` | page | Yes | **Converted plain-text reference:** Project 1-1 became a verified local link. The Project 3-1 reference remains text. No source link was repaired. | None | Corrected grammar and standardized project naming |
|
||||
| `pages/study/bachelor/year_2/project_2-2.txt` | `src/content/docs/bachelor/year-2/project-2-2.md` | page | Yes | **Converted plain-text reference:** Project 1-2 became a verified local link. No source link was repaired. | None | Corrected punctuation and standardized project naming |
|
||||
| `pages/study/bachelor/year_3.txt` | `src/content/docs/bachelor/year-3/index.md` | page | Yes | **Newly verified links:** the four migrated child pages, derived from the exported child-page inventory. No source content links required repair or removal. | None | Corrected block references and the schedule explanation |
|
||||
| `pages/study/bachelor/year_3/bachelors_thesis.txt` | `src/content/docs/bachelor/year-3/bachelors-thesis.md` | page | Yes | **None.** The source and destination contain no content links. | None | Corrected possessive bachelor’s wording, punctuation, and sentence flow |
|
||||
| `pages/study/bachelor/year_3/honours_programme.txt` | `src/content/docs/bachelor/year-3/honours-programme.md` | page | Yes | **None.** The source and destination contain no content links. | None | Preserved the source title and made its under-construction state an explicit awaiting-content placeholder |
|
||||
| `pages/study/bachelor/year_3/project_3-1.txt` | `src/content/docs/bachelor/year-3/project-3-1.md` | page | Yes | **Converted plain-text reference:** Project 2-1 became a verified local link. No source link was repaired. | None | Corrected grammar while retaining the stated prerequisites and reading |
|
||||
| `pages/study/bachelor/year_3/study_abroad.txt` | `src/content/docs/bachelor/year-3/study-abroad.md` | page | Yes, with a 2022-specific warning | **Newly verified link:** the official UM study-abroad page. No source links existed. | None | Corrected grammar; did not silently modernize the dated eligibility claims |
|
||||
| `pages/study/bachelor.txt` | `src/content/docs/data-science-and-ai/index.md` | page | Yes | **Converted source link:** Maastricht University education website. **Removed source links:** redundant DokuWiki year-navigation links, now covered by site navigation. | None | Corrected bachelor capitalization and sentence structure; disclosed that promised summaries and old exams were absent from the export |
|
||||
| `pages/study/bachelor/year_1.txt` | `src/content/docs/data-science-and-ai/year-1/index.md` | page | Yes | **Newly verified links:** the two migrated project pages, derived from the exported child-page inventory. No source content links required repair or removal. | None | Standardized Year 1/block capitalization |
|
||||
| `pages/study/bachelor/year_1/project_1-1.txt` | `src/content/docs/data-science-and-ai/year-1/project-1-1.md` | page | Yes | **None.** The source and destination contain no content links. | None | Corrected punctuation and clarified prerequisite prose without changing requirements |
|
||||
| `pages/study/bachelor/year_1/project_1-2.txt` | `src/content/docs/data-science-and-ai/year-1/project-1-2.md` | page | Yes | **None.** The source and destination contain no content links. | None | Corrected grammar, spacing, and capitalization |
|
||||
| `pages/study/bachelor/year_2.txt` | `src/content/docs/data-science-and-ai/year-2/index.md` | page | Yes | **Newly verified links:** the two migrated project pages and honours placeholder. **Genuinely removed link:** the malformed DokuWiki media-manager/upload URL. | None | Standardized Year 2/block capitalization |
|
||||
| `pages/study/bachelor/year_2/honours_programme.txt` | `src/content/docs/data-science-and-ai/year-2/honours-programme.md` | page | Yes | **None.** The source and destination contain no content links. | None | Replaced the source's “Under Construction” text with the standard awaiting-content placeholder |
|
||||
| `pages/study/bachelor/year_2/project_2-1.txt` | `src/content/docs/data-science-and-ai/year-2/project-2-1.md` | page | Yes | **Converted plain-text reference:** Project 1-1 became a verified local link. The Project 3-1 reference remains text. No source link was repaired. | None | Corrected grammar and standardized project naming |
|
||||
| `pages/study/bachelor/year_2/project_2-2.txt` | `src/content/docs/data-science-and-ai/year-2/project-2-2.md` | page | Yes | **Converted plain-text reference:** Project 1-2 became a verified local link. No source link was repaired. | None | Corrected punctuation and standardized project naming |
|
||||
| `pages/study/bachelor/year_3.txt` | `src/content/docs/data-science-and-ai/year-3/index.md` | page | Yes | **Newly verified links:** the four migrated child pages, derived from the exported child-page inventory. No source content links required repair or removal. | None | Corrected block references and the schedule explanation |
|
||||
| `pages/study/bachelor/year_3/bachelors_thesis.txt` | `src/content/docs/data-science-and-ai/year-3/bachelors-thesis.md` | page | Yes | **None.** The source and destination contain no content links. | None | Corrected possessive bachelor’s wording, punctuation, and sentence flow |
|
||||
| `pages/study/bachelor/year_3/honours_programme.txt` | `src/content/docs/data-science-and-ai/year-3/honours-programme.md` | page | Yes | **None.** The source and destination contain no content links. | None | Preserved the source title and made its under-construction state an explicit awaiting-content placeholder |
|
||||
| `pages/study/bachelor/year_3/project_3-1.txt` | `src/content/docs/data-science-and-ai/year-3/project-3-1.md` | page | Yes | **Converted plain-text reference:** Project 2-1 became a verified local link. No source link was repaired. | None | Corrected grammar while retaining the stated prerequisites and reading |
|
||||
| `pages/study/bachelor/year_3/study_abroad.txt` | `src/content/docs/data-science-and-ai/year-3/study-abroad.md` | page | Yes, with a 2022-specific warning | **Newly verified link:** the official UM study-abroad page. No source links existed. | None | Corrected grammar; did not silently modernize the dated eligibility claims |
|
||||
| `pages/study/master_ai.txt` | `src/content/docs/master-ai/index.md` | page | Yes | **Converted source link:** Maastricht University education website. **Removed source links:** redundant DokuWiki year-navigation links, now covered by site navigation. | None | Standardized master’s-programme capitalization and punctuation; disclosed that promised summaries and old exams were absent from the export |
|
||||
| `pages/study/master_ai/year_1.txt` | `src/content/docs/master-ai/year-1/index.md` | page | Yes | **Newly verified links:** the two migrated research-project pages, derived from the exported child-page inventory. No source content links required repair or removal. | None | Corrected sentence structure and project naming |
|
||||
| `pages/study/master_ai/year_1/project_mai_1.txt` | `src/content/docs/master-ai/year-1/research-project-1.md` | page | Yes | **None.** The source and destination contain no content links. | None | Corrected punctuation and rendered the project name consistently |
|
||||
|
|
|
|||
|
|
@ -0,0 +1,607 @@
|
|||
# Programme Sidebar and Course Integration Implementation Plan
|
||||
|
||||
> **Execution note:** Follow this plan task by task with test-driven development. Keep `main` green at every commit and do not merge `origin/isaacs-changes`; copy only the five reviewed substantive pages from commit `d5d6730`.
|
||||
|
||||
**Goal:** Publish the useful Computer Science material, give Computer Science and Data Science & AI stable programme-specific routes, remove duplicated shared course bodies, and show a route-aware programme switch without hiding global wiki navigation.
|
||||
|
||||
**Architecture:** The docs collection owns public pages. Seven shared course bodies live as unpublished MDX partials and are imported by thin programme-specific wrappers. Pure navigation helpers select the programme, paired switch target, and sidebar tree from the pathname; Astro middleware applies that tree to Starlight route data, while a `Sidebar` component override renders the accessible switch and delegates the actual navigation to Starlight's default component. Astro redirects preserve every legacy `/bachelor/...` route.
|
||||
|
||||
**Stack:** Astro 7, Starlight 0.41, MD/MDX content collections, Astro middleware and component overrides, Node's built-in test runner, `linkedom`, existing migration/audit scripts.
|
||||
|
||||
---
|
||||
|
||||
## Non-negotiable content decisions
|
||||
|
||||
- Treat all current `src/content/docs/bachelor/**` pages as Data Science & AI and move them to `src/content/docs/data-science-and-ai/**`.
|
||||
- Preserve every old `/bachelor/...` URL with an explicit permanent redirect to the exact new route.
|
||||
- Import only these substantive Computer Science pages from `d5d6730`:
|
||||
- `computer-science/year-1/period-1/introduction-to-computer-science.md`
|
||||
- `computer-science/year-1/period-4/computer-architecture.md`
|
||||
- `computer-science/year-1/period-5/algorithmic-design.md`
|
||||
- `computer-science/year-1/period-5/databases.md`
|
||||
- `computer-science/year-1/period-5/statistics.md`
|
||||
- Do not import the malformed `computer-science/course-description.md`, any `Empty Page` placeholder, or the branch deletion of `previous-exams-and-documents.md`.
|
||||
- Store the body of each byte-identical shared course once, outside `src/content/docs`, and expose it through two programme wrappers:
|
||||
|
||||
| Shared body | Data Science & AI route | Computer Science route |
|
||||
| --- | --- | --- |
|
||||
| Discrete Mathematics | `year-1/block-1/discrete-mathematics` | `year-1/period-1/discrete-mathematics` |
|
||||
| Procedural Programming | `year-1/block-1/procedural-programming` | `year-1/period-1/procedural-programming` |
|
||||
| Calculus | `year-1/block-2/calculus` | `year-1/period-2/calculus` |
|
||||
| Logic | `year-1/block-2/logic` | `year-1/period-2/logic` |
|
||||
| Objects in Programming | `year-1/block-2/objects-in-programming` | `year-1/period-2/objects-in-programming` |
|
||||
| Data Structures and Algorithms | `year-1/block-4/data-structures-and-algorithms` | `year-1/period-4/data-structures-and-algorithms` |
|
||||
| Linear Algebra | `year-1/block-4/linear-algebra` | `year-1/period-4/linear-algebra` |
|
||||
|
||||
## Task 1: Add migration-contract tests for the canonical DSAI route move
|
||||
|
||||
**Files:**
|
||||
|
||||
- Create: `tests/programme-content.test.mjs`
|
||||
- Modify: `tests/content-audit.test.mjs`
|
||||
- Modify: `tests/project-structure.test.mjs`
|
||||
- Modify: `tests/pdf-archive.test.mjs`
|
||||
- Modify: `scripts/audit-content.mjs`
|
||||
- Modify: `scripts/lib/migration.mjs`
|
||||
- Modify: `docs/migration-manifest.json`
|
||||
- Modify: `docs/migration-report.md`
|
||||
- Modify: `docs/supplemental-content.json`
|
||||
- Modify: `src/content/docs/index.mdx`
|
||||
- Rename: `src/content/docs/bachelor/` to `src/content/docs/data-science-and-ai/`
|
||||
|
||||
### Step 1: Write the failing route/provenance assertions
|
||||
|
||||
In `tests/programme-content.test.mjs`, add assertions that:
|
||||
|
||||
```js
|
||||
const legacyRoot = 'src/content/docs/bachelor';
|
||||
const dsaiRoot = 'src/content/docs/data-science-and-ai';
|
||||
|
||||
await assert.rejects(stat(legacyRoot), { code: 'ENOENT' });
|
||||
assert.ok((await stat(dsaiRoot)).isDirectory());
|
||||
```
|
||||
|
||||
Also recursively inspect the manifest, supplemental registry, migration report, landing page, audit exceptions, and migration canonical map so no destination or internal link contains `src/content/docs/bachelor/` or `href="./bachelor/"`, while the historical DokuWiki source identifiers under `pages/study/bachelor` remain unchanged.
|
||||
|
||||
Update existing tests to expect `data-science-and-ai` destinations and landing-page links. Keep the expected source count `29`, unique migration destinations `28`, and migration-report row count `29`; only destination paths change in this task.
|
||||
|
||||
### Step 2: Run the focused tests and confirm red
|
||||
|
||||
Run:
|
||||
|
||||
```sh
|
||||
node --test tests/programme-content.test.mjs tests/content-audit.test.mjs tests/project-structure.test.mjs tests/pdf-archive.test.mjs
|
||||
```
|
||||
|
||||
Expected: failure because the DSAI tree and provenance records still use `bachelor`.
|
||||
|
||||
### Step 3: Move the tree and update provenance atomically
|
||||
|
||||
Rename the directory once so Git can retain rename history:
|
||||
|
||||
```sh
|
||||
mv src/content/docs/bachelor src/content/docs/data-science-and-ai
|
||||
```
|
||||
|
||||
Update all destination paths in the manifest, migration report, supplemental registry, audit exception map, and canonical source map from `src/content/docs/bachelor/` to `src/content/docs/data-science-and-ai/`. Update internal public links from `/bachelor/` to `/data-science-and-ai/`, including the landing-page card. Do not change the original source paths or DokuWiki IDs because they document provenance.
|
||||
|
||||
Update the programme overview/year wording from generic “Bachelor” to “Data Science & AI” only where the page is describing the current published destination; preserve quoted or historical source terminology when necessary for accuracy.
|
||||
|
||||
### Step 4: Run the focused tests and content audit
|
||||
|
||||
Run:
|
||||
|
||||
```sh
|
||||
node --test tests/programme-content.test.mjs tests/content-audit.test.mjs tests/project-structure.test.mjs tests/pdf-archive.test.mjs
|
||||
npm run audit:content
|
||||
```
|
||||
|
||||
Expected: all pass, with the same `29` sources, `28` unique manifest destinations, `86` published pages, and `58` supplemental pages.
|
||||
|
||||
### Step 5: Commit
|
||||
|
||||
```sh
|
||||
git add src/content/docs/data-science-and-ai src/content/docs/index.mdx docs/migration-manifest.json docs/migration-report.md docs/supplemental-content.json scripts/audit-content.mjs scripts/lib/migration.mjs tests/programme-content.test.mjs tests/content-audit.test.mjs tests/project-structure.test.mjs tests/pdf-archive.test.mjs
|
||||
git commit -m "refactor: give data science canonical programme routes"
|
||||
```
|
||||
|
||||
## Task 2: Preserve every legacy bachelor URL with exact redirects
|
||||
|
||||
**Files:**
|
||||
|
||||
- Create: `src/config/legacy-bachelor-redirects.mjs`
|
||||
- Create: `tests/programme-redirects.test.mjs`
|
||||
- Modify: `astro.config.mjs`
|
||||
|
||||
### Step 1: Write a failing redirect coverage test
|
||||
|
||||
Build expected redirects by recursively listing all `.md` and `.mdx` pages under `src/content/docs/data-science-and-ai`. Convert `index` files to directory routes and all other filenames to extensionless trailing-slash routes. Assert that `legacyBachelorRedirects` has exactly one key for every DSAI page after replacing the `/data-science-and-ai/` prefix with `/bachelor/`, and that every value is the exact canonical DSAI route.
|
||||
|
||||
Add explicit examples:
|
||||
|
||||
```js
|
||||
assert.equal(legacyBachelorRedirects['/bachelor/'], '/data-science-and-ai/');
|
||||
assert.equal(
|
||||
legacyBachelorRedirects['/bachelor/year-1/block-2/calculus/'],
|
||||
'/data-science-and-ai/year-1/block-2/calculus/',
|
||||
);
|
||||
assert.equal(
|
||||
legacyBachelorRedirects['/bachelor/year-3/study-abroad/'],
|
||||
'/data-science-and-ai/year-3/study-abroad/',
|
||||
);
|
||||
```
|
||||
|
||||
Also assert `astro.config.mjs` passes the map through the top-level `redirects` property.
|
||||
|
||||
### Step 2: Run the test and confirm red
|
||||
|
||||
```sh
|
||||
node --test tests/programme-redirects.test.mjs
|
||||
```
|
||||
|
||||
Expected: module-not-found or missing redirects.
|
||||
|
||||
### Step 3: Implement the explicit redirect map
|
||||
|
||||
Create `legacy-bachelor-redirects.mjs` as a checked-in plain object. Do not derive redirects at runtime from the filesystem. Include overview, all three year indexes, projects, honours, thesis, study abroad, and every currently published DSAI course page. Export a frozen object:
|
||||
|
||||
```js
|
||||
export const legacyBachelorRedirects = Object.freeze({
|
||||
'/bachelor/': '/data-science-and-ai/',
|
||||
// every exact published descendant follows
|
||||
});
|
||||
```
|
||||
|
||||
Import it into `astro.config.mjs` and set:
|
||||
|
||||
```js
|
||||
redirects: legacyBachelorRedirects,
|
||||
```
|
||||
|
||||
### Step 4: Prove generated redirects work at root and under BASE
|
||||
|
||||
Run:
|
||||
|
||||
```sh
|
||||
node --test tests/programme-redirects.test.mjs
|
||||
npm run build
|
||||
BASE=/wiki npm run build
|
||||
```
|
||||
|
||||
Inspect representative generated redirect HTML and assert its destination includes the configured base exactly once.
|
||||
|
||||
### Step 5: Commit
|
||||
|
||||
```sh
|
||||
git add astro.config.mjs src/config/legacy-bachelor-redirects.mjs tests/programme-redirects.test.mjs
|
||||
git commit -m "feat: redirect legacy bachelor routes to data science"
|
||||
```
|
||||
|
||||
## Task 3: Replace seven duplicated course bodies with shared MDX partials
|
||||
|
||||
**Files:**
|
||||
|
||||
- Create: `src/content/shared-courses/year-1/*.mdx` (7 files)
|
||||
- Rename: the 7 DSAI shared pages from `.md` to `.mdx`
|
||||
- Create: the 7 corresponding `src/content/docs/computer-science/year-1/period-*/...mdx` wrappers
|
||||
- Create: `tests/shared-programme-courses.test.mjs`
|
||||
- Modify: `astro.config.mjs`
|
||||
- Modify: `docs/supplemental-content.json`
|
||||
|
||||
### Step 1: Write failing shared-source tests
|
||||
|
||||
Define the seven route pairs in the test. For each pair, assert:
|
||||
|
||||
- both published wrappers exist and contain valid `title` and `description` frontmatter;
|
||||
- both import the same file under `src/content/shared-courses/year-1/`;
|
||||
- neither wrapper contains the course sections duplicated from the partial;
|
||||
- the partial is outside the docs collection and contains the substantive body;
|
||||
- each wrapper contains the standard historical caution;
|
||||
- no shared course appears as a second body file anywhere else.
|
||||
|
||||
Also assert Starlight config includes:
|
||||
|
||||
```js
|
||||
markdown: {
|
||||
processedDirs: ['./src/content/shared-courses/'],
|
||||
},
|
||||
```
|
||||
|
||||
Add the seven Computer Science wrappers to the supplemental registry with a provenance kind such as `shared-course-wrapper` and retain the DSAI registry entries with their migrated destinations.
|
||||
|
||||
### Step 2: Run the test and confirm red
|
||||
|
||||
```sh
|
||||
node --test tests/shared-programme-courses.test.mjs
|
||||
```
|
||||
|
||||
Expected: missing partials and Computer Science wrappers.
|
||||
|
||||
### Step 3: Extract each DSAI body exactly once
|
||||
|
||||
For each shared course, retain the existing frontmatter values and historical caution in its DSAI wrapper. Move everything after the caution into the matching partial. The wrapper structure must be:
|
||||
|
||||
```mdx
|
||||
---
|
||||
title: Course title
|
||||
description: Existing verified description
|
||||
---
|
||||
|
||||
import SharedCourse from '../../../../shared-courses/year-1/course-slug.mdx';
|
||||
|
||||
:::caution[Historical information]
|
||||
This information originated in the previous wiki and may be outdated.
|
||||
:::
|
||||
|
||||
<SharedCourse />
|
||||
```
|
||||
|
||||
Create the Computer Science wrapper with the same shared import and warning, but programme-specific frontmatter. Add an empty, documented programme-notes seam only when content actually diverges later; do not add speculative notes now.
|
||||
|
||||
### Step 4: Verify preservation and rendering
|
||||
|
||||
Run:
|
||||
|
||||
```sh
|
||||
node --test tests/shared-programme-courses.test.mjs tests/content-audit.test.mjs
|
||||
npm run audit:content
|
||||
npm run build
|
||||
```
|
||||
|
||||
Expected: both routes render the same substantive headings and links, exactly one `<h1>` per page, and the shared partials do not become public routes.
|
||||
|
||||
Update the audit count assertions to the actual new published-page total: `86 + 7 = 93`; supplemental total becomes `58 + 7 = 65`. The seven partials are excluded from both published counts.
|
||||
|
||||
### Step 5: Commit
|
||||
|
||||
```sh
|
||||
git add astro.config.mjs src/content/shared-courses src/content/docs/data-science-and-ai/year-1 src/content/docs/computer-science docs/supplemental-content.json tests/shared-programme-courses.test.mjs tests/content-audit.test.mjs
|
||||
git commit -m "refactor: share common bachelor course content"
|
||||
```
|
||||
|
||||
## Task 4: Import the five substantive Computer Science pages and clean overviews
|
||||
|
||||
**Files:**
|
||||
|
||||
- Create: `src/content/docs/computer-science/index.md`
|
||||
- Create: `src/content/docs/computer-science/year-1/index.md`
|
||||
- Create: five reviewed Computer Science course pages under `year-1/period-*`
|
||||
- Modify: `docs/supplemental-content.json`
|
||||
- Modify: `tests/programme-content.test.mjs`
|
||||
- Modify: `tests/content-audit.test.mjs`
|
||||
|
||||
### Step 1: Write failing content-selection tests
|
||||
|
||||
Assert the exact five unique course destinations exist, have valid frontmatter, contain the standard historical caution, and contain substantive headings or text from `d5d6730`.
|
||||
|
||||
Assert forbidden imports are absent:
|
||||
|
||||
```js
|
||||
assert.doesNotMatch(allComputerScienceContent, /^#Hello$/m);
|
||||
assert.doesNotMatch(allComputerScienceContent, /Empty Page/);
|
||||
assert.doesNotMatch(allComputerScienceContent, /course-description/i);
|
||||
```
|
||||
|
||||
Assert there are exactly `14` Computer Science published pages at this point: overview, Year 1 overview, five unique courses, and seven shared wrappers. Assert `previous-exams-and-documents.md` still exists.
|
||||
|
||||
### Step 2: Run the test and confirm red
|
||||
|
||||
```sh
|
||||
node --test tests/programme-content.test.mjs
|
||||
```
|
||||
|
||||
Expected: five unique pages and two overview pages are missing.
|
||||
|
||||
### Step 3: Copy only reviewed branch blobs through explicit patches
|
||||
|
||||
Use read-only `git show d5d6730:<path>` to inspect each source, normalize frontmatter and the standard warning, remove any body H1, and add only the five approved pages. Do not perform a merge or checkout from the branch.
|
||||
|
||||
Write a concise Computer Science overview and Year 1 overview based only on the published course set. State that the material is recovered historical wiki content and may not represent the current curriculum. Link to official Maastricht University curriculum information and to Previous Exams without inventing year 2 or year 3 content.
|
||||
|
||||
Register all seven new pages (five courses plus two overviews) in `docs/supplemental-content.json` with source commit `d5d6730`, original branch path where applicable, and a note that malformed/placeholder pages were excluded.
|
||||
|
||||
### Step 4: Audit and build
|
||||
|
||||
```sh
|
||||
node --test tests/programme-content.test.mjs tests/content-audit.test.mjs
|
||||
npm run audit:content
|
||||
npm run build
|
||||
```
|
||||
|
||||
Expected final published count for this content phase: `100` pages, with `72` supplemental destinations (`65 + 7`). Verify actual counts from the audit and encode them in the tests only after confirming the registry matches the filesystem.
|
||||
|
||||
### Step 5: Commit
|
||||
|
||||
```sh
|
||||
git add src/content/docs/computer-science docs/supplemental-content.json tests/programme-content.test.mjs tests/content-audit.test.mjs
|
||||
git commit -m "feat: publish reviewed computer science courses"
|
||||
```
|
||||
|
||||
## Task 5: Build pure programme navigation data and route selection
|
||||
|
||||
**Files:**
|
||||
|
||||
- Create: `src/config/programme-navigation.mjs`
|
||||
- Create: `tests/programme-navigation.test.mjs`
|
||||
- Modify: `src/config/recovered-course-sidebar.mjs`
|
||||
- Modify: `src/config/sidebar.mjs`
|
||||
|
||||
### Step 1: Write failing pure-function tests
|
||||
|
||||
Test `programmeForPathname()`, `programmeSwitchTargets()`, and `sidebarForPathname()` without Astro. Cover:
|
||||
|
||||
```js
|
||||
programmeForPathname('/computer-science/year-1/period-2/calculus/') === 'computer-science'
|
||||
programmeForPathname('/data-science-and-ai/year-3/') === 'data-science-and-ai'
|
||||
programmeForPathname('/bachelor/year-1/') === 'data-science-and-ai'
|
||||
programmeForPathname('/useful-information/') === null
|
||||
```
|
||||
|
||||
Switch mapping cases:
|
||||
|
||||
- shared CS course -> paired DSAI course;
|
||||
- shared DSAI course -> paired CS course;
|
||||
- unique CS course -> DSAI Year 1;
|
||||
- unique DSAI Year 2/3 course -> Computer Science overview;
|
||||
- programme overview/year page -> corresponding overview/year fallback where it exists;
|
||||
- global page -> both programme overviews with neither active.
|
||||
|
||||
Sidebar assertions must prove:
|
||||
|
||||
- exactly one detailed undergraduate programme tree is visible on programme pages;
|
||||
- global pages show compact links to both programme overviews;
|
||||
- Home, About, Previous exams, Master AI, Master DSDM, and Useful Information remain present for every route;
|
||||
- Useful Information retains all guide children.
|
||||
|
||||
### Step 2: Run and confirm red
|
||||
|
||||
```sh
|
||||
node --test tests/programme-navigation.test.mjs
|
||||
```
|
||||
|
||||
Expected: navigation module is missing.
|
||||
|
||||
### Step 3: Implement immutable navigation structures
|
||||
|
||||
Export:
|
||||
|
||||
```js
|
||||
export const sharedCoursePairs = Object.freeze({ /* 7 bidirectional route pairs */ });
|
||||
export const computerScienceSidebar = [/* overview, Year 1, periods and 12 courses */];
|
||||
export const dataScienceSidebar = [/* migrated overview, Years 1–3 and all existing pages */];
|
||||
export const globalSidebar = [/* Home, About, exams, masters, Useful Information */];
|
||||
export function programmeForPathname(pathname) { /* prefix match incl. /bachelor */ }
|
||||
export function programmeSwitchTargets(pathname) { /* pair/fallback policy */ }
|
||||
export function sidebarForPathname(pathname) { /* compose programme/global tree */ }
|
||||
```
|
||||
|
||||
Normalize the recovered-course keys/slugs from `bachelor/...` to `data-science-and-ai/...`. Keep course ordering by period/block, not alphabetically across the whole year. The Computer Science tree contains only Year 1 and only the twelve published courses.
|
||||
|
||||
Make `src/config/sidebar.mjs` export a default global/compact sidebar for Starlight's initial configuration and re-export the selector data needed by middleware. Avoid duplicating masters or Useful Information in two source files.
|
||||
|
||||
### Step 4: Run tests
|
||||
|
||||
```sh
|
||||
node --test tests/programme-navigation.test.mjs tests/useful-guides.test.mjs tests/pdf-archive.test.mjs
|
||||
```
|
||||
|
||||
Expected: all pass.
|
||||
|
||||
### Step 5: Commit
|
||||
|
||||
```sh
|
||||
git add src/config/programme-navigation.mjs src/config/recovered-course-sidebar.mjs src/config/sidebar.mjs tests/programme-navigation.test.mjs tests/useful-guides.test.mjs tests/pdf-archive.test.mjs
|
||||
git commit -m "feat: add route-aware programme navigation data"
|
||||
```
|
||||
|
||||
## Task 6: Apply route-aware sidebar data through Astro middleware
|
||||
|
||||
**Files:**
|
||||
|
||||
- Create: `src/middleware.ts`
|
||||
- Create: `tests/programme-middleware.test.mjs`
|
||||
|
||||
### Step 1: Write a failing middleware behavior test
|
||||
|
||||
Export a small handler factory or pure mutation helper so the Node test can provide a fake context with `url.pathname` and `locals.starlightRoute.sidebar`. Assert that it replaces only the sidebar and preserves the rest of route data.
|
||||
|
||||
Test Computer Science, DSAI, legacy `/bachelor`, master, Useful Information, and home paths. Include a no-Starlight-locals guard so non-Starlight routes/assets are unaffected.
|
||||
|
||||
### Step 2: Run and confirm red
|
||||
|
||||
```sh
|
||||
node --test tests/programme-middleware.test.mjs
|
||||
```
|
||||
|
||||
Expected: middleware module is missing.
|
||||
|
||||
### Step 3: Implement middleware using Starlight's supported route data
|
||||
|
||||
Use Astro's `defineMiddleware` and the pure selector:
|
||||
|
||||
```ts
|
||||
import { defineMiddleware } from 'astro:middleware';
|
||||
import { sidebarForPathname } from './config/programme-navigation.mjs';
|
||||
|
||||
export const onRequest = defineMiddleware(async (context, next) => {
|
||||
const response = await next();
|
||||
if (context.locals.starlightRoute) {
|
||||
context.locals.starlightRoute.sidebar = sidebarForPathname(context.url.pathname);
|
||||
}
|
||||
return response;
|
||||
});
|
||||
```
|
||||
|
||||
Adjust ordering to the Starlight 0.41 route-data lifecycle if the focused integration build shows route data must be mutated before `next()`. Keep all selection logic in the pure module, not in middleware.
|
||||
|
||||
### Step 4: Run test and focused builds
|
||||
|
||||
```sh
|
||||
node --test tests/programme-middleware.test.mjs tests/programme-navigation.test.mjs
|
||||
npm run build
|
||||
BASE=/wiki npm run build
|
||||
```
|
||||
|
||||
Inspect representative built HTML to confirm the active programme tree is present and the inactive detailed tree is absent.
|
||||
|
||||
### Step 5: Commit
|
||||
|
||||
```sh
|
||||
git add src/middleware.ts tests/programme-middleware.test.mjs
|
||||
git commit -m "feat: select programme sidebar per route"
|
||||
```
|
||||
|
||||
## Task 7: Add the accessible programme switch through a Sidebar override
|
||||
|
||||
**Files:**
|
||||
|
||||
- Create: `src/components/ProgrammeSwitch.astro`
|
||||
- Create: `src/components/Sidebar.astro`
|
||||
- Create: `tests/programme-switch.test.mjs`
|
||||
- Modify: `astro.config.mjs`
|
||||
- Modify: `src/styles/incognito.css`
|
||||
|
||||
### Step 1: Write failing structure/accessibility tests
|
||||
|
||||
Assert the override is registered as:
|
||||
|
||||
```js
|
||||
components: {
|
||||
Sidebar: './src/components/Sidebar.astro',
|
||||
},
|
||||
```
|
||||
|
||||
Assert `Sidebar.astro` imports and renders the custom switch followed by Starlight's default Sidebar component. Assert the switch:
|
||||
|
||||
- uses a `<nav aria-label="Bachelor programme">` landmark;
|
||||
- renders ordinary `<a>` links for both programmes;
|
||||
- applies `aria-current="page"` only to the active programme;
|
||||
- consumes the pure switch-target helper;
|
||||
- has no client directive and no inline script.
|
||||
|
||||
Add rendered-output checks using `linkedom` against representative built pages for desktop/mobile-shared markup and base-prefixed hrefs.
|
||||
|
||||
### Step 2: Run and confirm red
|
||||
|
||||
```sh
|
||||
node --test tests/programme-switch.test.mjs
|
||||
```
|
||||
|
||||
Expected: missing override and registration.
|
||||
|
||||
### Step 3: Implement the wrapper, not a copy of Starlight internals
|
||||
|
||||
`src/components/Sidebar.astro` should remain minimal:
|
||||
|
||||
```astro
|
||||
---
|
||||
import DefaultSidebar from '@astrojs/starlight/components/Sidebar.astro';
|
||||
import ProgrammeSwitch from './ProgrammeSwitch.astro';
|
||||
---
|
||||
|
||||
<ProgrammeSwitch />
|
||||
<DefaultSidebar />
|
||||
```
|
||||
|
||||
`ProgrammeSwitch.astro` reads `Astro.url.pathname`, obtains base-aware targets from the pure helper, and renders two compact links. Use Astro's base URL support so root and `/wiki/` builds do not hard-code `/`.
|
||||
|
||||
Style the control in `incognito.css` using existing Starlight color tokens. Keep a visible focus state, do not rely on color alone for active state, permit wrapping at narrow widths, and keep link targets at least as tall as surrounding sidebar links.
|
||||
|
||||
### Step 4: Verify component and output
|
||||
|
||||
```sh
|
||||
node --test tests/programme-switch.test.mjs
|
||||
npm run build
|
||||
npm run check:rendered
|
||||
npm run check:links
|
||||
BASE=/wiki npm run build
|
||||
npm run check:rendered
|
||||
BASE=/wiki npm run check:links
|
||||
```
|
||||
|
||||
Expected: accessible switch appears on all Starlight pages, correct option is active on programme pages, neither is active on global pages, and all links honor BASE.
|
||||
|
||||
### Step 5: Commit
|
||||
|
||||
```sh
|
||||
git add astro.config.mjs src/components/ProgrammeSwitch.astro src/components/Sidebar.astro src/styles/incognito.css tests/programme-switch.test.mjs
|
||||
git commit -m "feat: add accessible bachelor programme switch"
|
||||
```
|
||||
|
||||
## Task 8: Final integration audit, documentation reconciliation, and push
|
||||
|
||||
**Files:**
|
||||
|
||||
- Modify as needed: `README.md`
|
||||
- Modify as needed: `docs/migration-report.md`
|
||||
- Modify: tests containing obsolete counts/routes
|
||||
|
||||
### Step 1: Search for accidental legacy or rejected content
|
||||
|
||||
Run:
|
||||
|
||||
```sh
|
||||
rg -n "src/content/docs/bachelor|href=\"(?:\./|/)bachelor|slug: 'bachelor|#Hello|Empty Page" src docs tests scripts astro.config.mjs
|
||||
```
|
||||
|
||||
Expected: no old destination/sidebar/link references and no rejected branch content. Historical DokuWiki source IDs and the explicit redirect keys are allowed and should be reviewed individually.
|
||||
|
||||
### Step 2: Run the complete verification suite at the root base
|
||||
|
||||
```sh
|
||||
npm run verify
|
||||
```
|
||||
|
||||
Expected: Astro check, all Node tests, content audit, build, H1/unpublished-output audit, and internal-link audit all pass.
|
||||
|
||||
### Step 3: Repeat build/output verification with a non-root base
|
||||
|
||||
```sh
|
||||
BASE=/wiki npm run build
|
||||
npm run check:rendered
|
||||
BASE=/wiki npm run check:links
|
||||
```
|
||||
|
||||
Expected: all programme switch links, content links, Matomo assets, and redirect targets contain `/wiki/` exactly once where required.
|
||||
|
||||
### Step 4: Review the diff against the approved exclusions
|
||||
|
||||
Run:
|
||||
|
||||
```sh
|
||||
git diff --check
|
||||
git status --short
|
||||
git diff --stat origin/main...HEAD
|
||||
git log --oneline origin/main..HEAD
|
||||
```
|
||||
|
||||
Confirm:
|
||||
|
||||
- `previous-exams-and-documents.md` remains present;
|
||||
- no empty year 2/year 3 Computer Science files exist;
|
||||
- no malformed duplicate description exists;
|
||||
- seven shared bodies have one source each;
|
||||
- DSAI retained all prior pages under the new canonical prefix;
|
||||
- every old bachelor route redirects;
|
||||
- global sidebar groups remain visible.
|
||||
|
||||
### Step 5: Commit any final reconciliation
|
||||
|
||||
If final verification required documentation or assertion corrections:
|
||||
|
||||
```sh
|
||||
git add README.md docs tests
|
||||
git commit -m "docs: reconcile programme migration records"
|
||||
```
|
||||
|
||||
Do not create an empty commit.
|
||||
|
||||
### Step 6: Push main and verify the Forgejo remote
|
||||
|
||||
```sh
|
||||
git push origin main
|
||||
git ls-remote --heads origin main
|
||||
git rev-parse HEAD
|
||||
```
|
||||
|
||||
Expected: the remote `main` hash exactly equals local `HEAD`. Report the final commit range, verification commands, published course selection, redirect coverage count, and why `origin/isaacs-changes` was not merged wholesale.
|
||||
|
|
@ -0,0 +1,160 @@
|
|||
# Programme Sidebar and Course Integration Design
|
||||
|
||||
## Goal
|
||||
|
||||
Publish the substantive Computer Science course material from `origin/isaacs-changes` without merging that branch's broken file moves, empty placeholders, malformed description, content duplication, or archive deletion. Reorganize bachelor navigation so readers can switch between Computer Science and Data Science & AI while global wiki resources remain available.
|
||||
|
||||
## Source and scope
|
||||
|
||||
The source branch is `origin/isaacs-changes` at commit `d5d6730`. It diverged from `main` at `c590f77` and must not be merged or cherry-picked wholesale.
|
||||
|
||||
Publish these five substantive Computer Science pages from the branch after normalizing them to current repository conventions:
|
||||
|
||||
- Introduction to Computer Science
|
||||
- Computer Architecture
|
||||
- Algorithmic Design
|
||||
- Databases
|
||||
- Statistics
|
||||
|
||||
Also expose these seven courses in both bachelor programmes:
|
||||
|
||||
- Discrete Mathematics
|
||||
- Procedural Programming
|
||||
- Calculus
|
||||
- Logic
|
||||
- Objects in Programming
|
||||
- Data Structures and Algorithms
|
||||
- Linear Algebra
|
||||
|
||||
The branch's copies of those seven pages are byte-identical. Their common body content therefore has one source, while each programme receives its own public route and frontmatter wrapper.
|
||||
|
||||
Do not publish:
|
||||
|
||||
- `computer-science/course-description.md`, which lacks frontmatter and contains duplicate `#Hello` headings;
|
||||
- any of the 30 Computer Science Year 2 and Year 3 `Empty Page` placeholders;
|
||||
- duplicate full copies of identical shared-course bodies; or
|
||||
- the branch deletion of `previous-exams-and-documents.md`.
|
||||
|
||||
No other `origin/isaacs-changes` change is in scope.
|
||||
|
||||
## Public route model
|
||||
|
||||
Use programme-specific routes:
|
||||
|
||||
- `/computer-science/`
|
||||
- `/computer-science/year-1/`
|
||||
- `/computer-science/year-1/period-N/<course>/`
|
||||
- `/data-science-and-ai/`
|
||||
- `/data-science-and-ai/year-N/`
|
||||
- `/data-science-and-ai/year-N/block-N/<course>/`
|
||||
|
||||
The period/block naming follows each source programme's existing terminology. Do not rewrite course URLs to imply the two curricula have identical structures.
|
||||
|
||||
Move the current DSAI pages from `/bachelor/...` to `/data-science-and-ai/...`. Preserve every previous `/bachelor/...` URL with a permanent redirect to its exact DSAI replacement, including overview, year, project, honours, thesis, study-abroad, and course routes. Internal wiki links and the sidebar should use the new canonical URLs after migration.
|
||||
|
||||
The five newly recovered Computer Science pages live only under Computer Science routes. Empty later-year Computer Science routes are not created.
|
||||
|
||||
## Shared-course content model
|
||||
|
||||
Store the common body of each of the seven identical courses as a non-published MDX partial outside the `docs` collection. Create a thin MDX page at each programme-specific route with:
|
||||
|
||||
- programme-appropriate title and description frontmatter;
|
||||
- the standard historical-information caution;
|
||||
- an import of the shared body partial; and
|
||||
- an optional programme-specific notes section when verified differences exist.
|
||||
|
||||
The shared partial contains no page-level frontmatter, H1 heading, or historical caution. This prevents duplicate rendered titles and notices.
|
||||
|
||||
If a shared course later diverges, keep both public routes stable. Replace or extend only that programme wrapper; the other programme continues using the shared partial. Do not encode programme identity in the shared source.
|
||||
|
||||
## Programme overview pages
|
||||
|
||||
Create a clean Computer Science overview and Year 1 overview using only verified descriptions and links. Do not reuse or repair the malformed branch course-description text by inference.
|
||||
|
||||
Retitle and relocate the existing bachelor overview pages as Data Science & AI. Preserve their historical warning and current external Maastricht University guidance.
|
||||
|
||||
## Sidebar interaction
|
||||
|
||||
Add a small route-aware programme switch above the course-navigation portion of Starlight's global sidebar:
|
||||
|
||||
- **Computer Science**
|
||||
- **Data Science & AI**
|
||||
|
||||
The switch uses ordinary links, works without client JavaScript, is keyboard accessible, and marks the active programme with `aria-current`. It renders inside the existing Starlight sidebar on desktop and in the existing mobile navigation.
|
||||
|
||||
Use Starlight's supported `Sidebar` component override to prepend the switch while reusing the default `Sidebar` component. Use Starlight route-data middleware to filter the detailed bachelor course tree to the active programme.
|
||||
|
||||
Programme selection is derived from the current route and is never stored in cookies or local storage:
|
||||
|
||||
- Computer Science routes activate Computer Science navigation.
|
||||
- Data Science & AI routes and redirected legacy bachelor routes activate DSAI navigation.
|
||||
- Global pages show neither option as active and show compact links to both programme overviews instead of a detailed bachelor tree.
|
||||
|
||||
When a reader uses the switch from one of the seven shared-course routes, link to the paired route in the other programme. From a programme-specific course without an equivalent, link to the other programme's Year 1 overview. From other programme pages, link to the other programme overview.
|
||||
|
||||
The rest of the global navigation remains available in both programme contexts:
|
||||
|
||||
- Home
|
||||
- About Incognito
|
||||
- Previous exams and documents
|
||||
- Master AI
|
||||
- Master DSDM
|
||||
- Useful Information and all its current child pages
|
||||
|
||||
The programme switch changes only the detailed bachelor-course portion. It must not hide the master programmes or Useful Information.
|
||||
|
||||
## Navigation data boundaries
|
||||
|
||||
Keep navigation definitions as focused data structures:
|
||||
|
||||
- one Computer Science course tree;
|
||||
- one Data Science & AI course tree;
|
||||
- one global navigation section;
|
||||
- one explicit map of paired shared-course routes; and
|
||||
- one pure function that selects the active programme and switch destinations from a route ID.
|
||||
|
||||
The route middleware consumes those structures and assigns the final Starlight sidebar. The component override only renders the switch and delegates the link tree to Starlight's default component; it does not duplicate sidebar filtering logic.
|
||||
|
||||
## Migration records and provenance
|
||||
|
||||
Update the migration manifest, migration report, supplemental-content registry, and sidebar tests in lockstep with the route moves and new pages.
|
||||
|
||||
- Existing DSAI content retains its existing source provenance while its destination changes.
|
||||
- The five new Computer Science pages record their `wiki.msvincognito.nl` source URLs and `2026-08-02` capture provenance.
|
||||
- Shared programme wrappers record which source page supplied the common body.
|
||||
- Redirects are documented as compatibility routes, not duplicate published content.
|
||||
|
||||
The audit must continue to reject undeclared published Markdown/MDX files and any reintroduction of the excluded placeholder or malformed pages.
|
||||
|
||||
## Accessibility and responsive behavior
|
||||
|
||||
- Use a labelled navigation region for the programme switch.
|
||||
- Expose the current programme with both visual styling and `aria-current="page"`.
|
||||
- Keep touch targets at least as large as existing Starlight sidebar links.
|
||||
- Preserve Starlight's default sidebar persistence, focus behavior, and mobile menu footer by wrapping rather than copying the default component.
|
||||
- Ensure long programme labels wrap without horizontal scrolling at narrow widths.
|
||||
|
||||
## Testing and verification
|
||||
|
||||
Add focused automated coverage for:
|
||||
|
||||
- exact inclusion of the five substantive Computer Science pages;
|
||||
- exclusion of the malformed description and all empty placeholders;
|
||||
- one shared source body for each identical course and two programme-specific public routes;
|
||||
- programme-specific content overrides remaining possible;
|
||||
- complete old `/bachelor/...` to new DSAI redirect coverage;
|
||||
- route-to-programme detection and paired-course switch destinations;
|
||||
- route middleware retaining global navigation and showing only the active detailed bachelor tree;
|
||||
- accessible programme switch markup and active state;
|
||||
- sidebar visibility on Computer Science, DSAI, master, and Useful Information pages;
|
||||
- updated manifest, report, and supplemental registry consistency; and
|
||||
- absence of duplicate H1 headings, broken internal links, and unpublished-source leakage.
|
||||
|
||||
Run focused red/green tests first, then the full `npm run verify` workflow. Build once at `/` and once with a non-root `BASE` to cover canonical links, redirects, the sidebar override, and mobile-compatible output.
|
||||
|
||||
## References
|
||||
|
||||
- [Starlight Sidebar override](https://starlight.astro.build/reference/overrides/#sidebar)
|
||||
- [Starlight component overrides](https://starlight.astro.build/guides/overriding-components/)
|
||||
- [Starlight route-data middleware](https://starlight.astro.build/guides/route-data/#customizing-route-data)
|
||||
- [Starlight sidebar configuration](https://starlight.astro.build/guides/sidebar/)
|
||||
|
|
@ -1,191 +1,226 @@
|
|||
[
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-1/block-1/discrete-mathematics.md",
|
||||
"destination": "src/content/docs/computer-science/index.md",
|
||||
"source": "origin/isaacs-changes@d5d6730 (curated overview)",
|
||||
"category": "computer-science-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/computer-science/year-1/index.md",
|
||||
"source": "origin/isaacs-changes@d5d6730 (curated overview)",
|
||||
"category": "computer-science-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/computer-science/year-1/period-1/introduction-to-computer-science.md",
|
||||
"source": "origin/isaacs-changes@d5d6730",
|
||||
"category": "computer-science-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/computer-science/year-1/period-4/computer-architecture.md",
|
||||
"source": "origin/isaacs-changes@d5d6730",
|
||||
"category": "computer-science-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/computer-science/year-1/period-5/algorithmic-design.md",
|
||||
"source": "origin/isaacs-changes@d5d6730",
|
||||
"category": "computer-science-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/computer-science/year-1/period-5/databases.md",
|
||||
"source": "origin/isaacs-changes@d5d6730",
|
||||
"category": "computer-science-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/computer-science/year-1/period-5/statistics.md",
|
||||
"source": "origin/isaacs-changes@d5d6730",
|
||||
"category": "computer-science-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/data-science-and-ai/year-1/block-1/discrete-mathematics.mdx",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_1/block_1/discrete_mathematics",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-1/block-1/introduction-to-data-science-and-artifical-intelligence.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-1/block-1/introduction-to-data-science-and-artifical-intelligence.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_1/block_1/introduction_to_data_science_and_artifical_intelligence",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-1/block-1/procedural-programming.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-1/block-1/procedural-programming.mdx",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_1/block_1/procedural_programming",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-1/block-2/calculus.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-1/block-2/calculus.mdx",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_1/block_2/calculus",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-1/block-2/logic.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-1/block-2/logic.mdx",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_1/block_2/logic",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-1/block-2/objects-in-programming.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-1/block-2/objects-in-programming.mdx",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_1/block_2/objects_in_programming",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-1/block-4/data-structures-and-algorithms.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-1/block-4/data-structures-and-algorithms.mdx",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_1/block_4/data_structures_and_algorithms",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-1/block-4/linear-algebra.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-1/block-4/linear-algebra.mdx",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_1/block_4/linear_algebra",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-1/block-4/principles-of-data-science.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-1/block-4/principles-of-data-science.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_1/block_4/principles_of_data_science",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-1/block-5/computational-and-cognitive-neuroscience.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-1/block-5/computational-and-cognitive-neuroscience.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_1/block_5/computational_and_cognitive_neuroscience",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-1/block-5/numerical-methods.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-1/block-5/numerical-methods.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_1/block_5/numerical_methods",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-1/block-5/software-engineering.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-1/block-5/software-engineering.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_1/block_5/software_engineering",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-2/block-1/databases.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-2/block-1/databases.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_2/block_1/databases",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-2/block-1/graph-theory.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-2/block-1/graph-theory.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_2/block_1/graph_theory",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-2/block-1/probability-and-statistics.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-2/block-1/probability-and-statistics.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_2/block_1/probability_and_statistics",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-2/block-2/machine-learning.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-2/block-2/machine-learning.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_2/block_2/machine_learning",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-2/block-2/reasoning-techniques.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-2/block-2/reasoning-techniques.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_2/block_2/reasoning_techniques",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-2/block-2/simulation-and-statisical-analysis.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-2/block-2/simulation-and-statisical-analysis.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_2/block_2/simulation_and_statisical_analysis",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-2/block-4/human-computer-interaction-and-affective-computing.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-2/block-4/human-computer-interaction-and-affective-computing.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_2/block_4/human_computer_interaction_and_affective_computing",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-2/block-4/mathematical-modelling.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-2/block-4/mathematical-modelling.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_2/block_4/mathematical_modelling",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-2/block-4/natural-language-processing.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-2/block-4/natural-language-processing.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_2/block_4/natural_language_processing",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-2/block-5/game-theory.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-2/block-5/game-theory.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_2/block_5/game_theory",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-2/block-5/introduction-to-image-and-video-processing.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-2/block-5/introduction-to-image-and-video-processing.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_2/block_5/introduction_to_image_and_video_processing",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-2/block-5/linear-programming.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-2/block-5/linear-programming.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_2/block_5/linear_programming",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-2/block-5/philosophy-and-artificial-intelligence.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-2/block-5/philosophy-and-artificial-intelligence.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_2/block_5/philosophy_and_artificial_intelligence",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-3/block-1/prolog.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-3/block-1/prolog.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_3/block_1/prolog",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-3/block-1/robotics-and-embedded-systems.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-3/block-1/robotics-and-embedded-systems.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_3/block_1/robotics_and_embedded_systems",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-3/block-1/semantic-web.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-3/block-1/semantic-web.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_3/block_1/semantic_web",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-3/block-1/software-and-systems-verification.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-3/block-1/software-and-systems-verification.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_3/block_1/software_and_systems_verification",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-3/block-2/introduction-to-bio-informatics.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-3/block-2/introduction-to-bio-informatics.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_3/block_2/introduction_to_bio-informatics",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-3/block-2/logic-for-artificial-intelligence.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-3/block-2/logic-for-artificial-intelligence.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_3/block_2/logic_for_artificial_intelligence",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-3/block-2/parallel-programming.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-3/block-2/parallel-programming.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_3/block_2/parallel_programming",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-3/block-2/quantum-computation.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-3/block-2/quantum-computation.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_3/block_2/quantum_computation",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-3/block-2/recommender-systems.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-3/block-2/recommender-systems.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_3/block_2/recommender_systems",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-3/block-2/secure-web-applications.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-3/block-2/secure-web-applications.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_3/block_2/secure_web_applications",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-3/block-4/data-analysis.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-3/block-4/data-analysis.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_3/block_4/data_analysis",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-3/block-4/intelligent-systems.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-3/block-4/intelligent-systems.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_3/block_4/intelligent_systems",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/bachelor/year-3/block-4/operations-research-case-studies.md",
|
||||
"destination": "src/content/docs/data-science-and-ai/year-3/block-4/operations-research-case-studies.md",
|
||||
"source": "https://msvincognito.nl/wiki/study/bachelor/year_3/block_4/operations_research_case_studies",
|
||||
"category": "live-course-recovery"
|
||||
},
|
||||
|
|
@ -288,5 +323,40 @@
|
|||
"destination": "src/content/docs/useful-information/surviving-dacs.md",
|
||||
"source": "https://wiki.msvincognito.nl/useful-guides/survivingdacs",
|
||||
"category": "useful-guide-recovery"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/computer-science/year-1/period-1/discrete-mathematics.mdx",
|
||||
"source": "origin/isaacs-changes@d5d6730",
|
||||
"category": "shared-course-wrapper"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/computer-science/year-1/period-1/procedural-programming.mdx",
|
||||
"source": "origin/isaacs-changes@d5d6730",
|
||||
"category": "shared-course-wrapper"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/computer-science/year-1/period-2/calculus.mdx",
|
||||
"source": "origin/isaacs-changes@d5d6730",
|
||||
"category": "shared-course-wrapper"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/computer-science/year-1/period-2/logic.mdx",
|
||||
"source": "origin/isaacs-changes@d5d6730",
|
||||
"category": "shared-course-wrapper"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/computer-science/year-1/period-2/objects-in-programming.mdx",
|
||||
"source": "origin/isaacs-changes@d5d6730",
|
||||
"category": "shared-course-wrapper"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/computer-science/year-1/period-4/data-structures-and-algorithms.mdx",
|
||||
"source": "origin/isaacs-changes@d5d6730",
|
||||
"category": "shared-course-wrapper"
|
||||
},
|
||||
{
|
||||
"destination": "src/content/docs/computer-science/year-1/period-4/linear-algebra.mdx",
|
||||
"source": "origin/isaacs-changes@d5d6730",
|
||||
"category": "shared-course-wrapper"
|
||||
}
|
||||
]
|
||||
|
|
|
|||
1
package-lock.json
generated
1
package-lock.json
generated
|
|
@ -8,6 +8,7 @@
|
|||
"name": "incognito-wiki",
|
||||
"version": "0.1.0",
|
||||
"dependencies": {
|
||||
"@astrojs/markdown-remark": "7.2.2",
|
||||
"@astrojs/starlight": "0.41.6",
|
||||
"astro": "7.1.6",
|
||||
"sharp": "0.35.3"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,9 @@
|
|||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"engines": { "node": ">=22.12.0" },
|
||||
"engines": {
|
||||
"node": ">=22.12.0"
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
"build": "astro build",
|
||||
|
|
@ -18,6 +20,7 @@
|
|||
"verify": "npm run check && npm run audit:content && npm run build && npm run check:rendered && npm run check:links"
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/markdown-remark": "7.2.2",
|
||||
"@astrojs/starlight": "0.41.6",
|
||||
"astro": "7.1.6",
|
||||
"sharp": "0.35.3"
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ const OUTDATED_NOTICE = 'This information originated in the previous wiki and ma
|
|||
const PAGE_NOTICE = ':::note[Awaiting content]\nThis page is awaiting content.\n:::';
|
||||
const SECTION_NOTICE = ':::note[Awaiting content]\nThis section is awaiting content.\n:::';
|
||||
const EMPTY_PAGE_NOTICES = new Map([
|
||||
['bachelor/year-2/honours-programme.md', PAGE_NOTICE],
|
||||
['bachelor/year-3/honours-programme.md', PAGE_NOTICE],
|
||||
['data-science-and-ai/year-2/honours-programme.md', PAGE_NOTICE],
|
||||
['data-science-and-ai/year-3/honours-programme.md', PAGE_NOTICE],
|
||||
['useful-information/handy-locations.md', SECTION_NOTICE],
|
||||
]);
|
||||
|
||||
|
|
|
|||
|
|
@ -90,6 +90,7 @@ export async function checkInternalLinks({ distRoot, base }) {
|
|||
const pageUrl = new URL(`${normalizedBase.replace(/\/$/, '')}${route}`, 'https://built.invalid');
|
||||
const html = await readFile(sourcePath, 'utf8');
|
||||
const { document } = parseHTML(html);
|
||||
if (document.querySelector('meta[http-equiv="refresh"]')) continue;
|
||||
|
||||
for (const element of document.querySelectorAll('[href]')) {
|
||||
const href = element.getAttribute('href')?.trim() ?? '';
|
||||
|
|
|
|||
|
|
@ -7,19 +7,19 @@ const CANONICAL_ENTRIES = new Map([
|
|||
['pages/start.txt', ['src/content/docs/index.mdx', 'page']],
|
||||
['pages/study.txt', ['src/content/docs/index.mdx', 'merge']],
|
||||
['pages/study/msv_incognito.txt', ['src/content/docs/about-incognito.md', 'page']],
|
||||
['pages/study/bachelor.txt', ['src/content/docs/bachelor/index.md', 'page']],
|
||||
['pages/study/bachelor/year_1.txt', ['src/content/docs/bachelor/year-1/index.md', 'page']],
|
||||
['pages/study/bachelor/year_1/project_1-1.txt', ['src/content/docs/bachelor/year-1/project-1-1.md', 'page']],
|
||||
['pages/study/bachelor/year_1/project_1-2.txt', ['src/content/docs/bachelor/year-1/project-1-2.md', 'page']],
|
||||
['pages/study/bachelor/year_2.txt', ['src/content/docs/bachelor/year-2/index.md', 'page']],
|
||||
['pages/study/bachelor/year_2/honours_programme.txt', ['src/content/docs/bachelor/year-2/honours-programme.md', 'page']],
|
||||
['pages/study/bachelor/year_2/project_2-1.txt', ['src/content/docs/bachelor/year-2/project-2-1.md', 'page']],
|
||||
['pages/study/bachelor/year_2/project_2-2.txt', ['src/content/docs/bachelor/year-2/project-2-2.md', 'page']],
|
||||
['pages/study/bachelor/year_3.txt', ['src/content/docs/bachelor/year-3/index.md', 'page']],
|
||||
['pages/study/bachelor/year_3/bachelors_thesis.txt', ['src/content/docs/bachelor/year-3/bachelors-thesis.md', 'page']],
|
||||
['pages/study/bachelor/year_3/honours_programme.txt', ['src/content/docs/bachelor/year-3/honours-programme.md', 'page']],
|
||||
['pages/study/bachelor/year_3/project_3-1.txt', ['src/content/docs/bachelor/year-3/project-3-1.md', 'page']],
|
||||
['pages/study/bachelor/year_3/study_abroad.txt', ['src/content/docs/bachelor/year-3/study-abroad.md', 'page']],
|
||||
['pages/study/bachelor.txt', ['src/content/docs/data-science-and-ai/index.md', 'page']],
|
||||
['pages/study/bachelor/year_1.txt', ['src/content/docs/data-science-and-ai/year-1/index.md', 'page']],
|
||||
['pages/study/bachelor/year_1/project_1-1.txt', ['src/content/docs/data-science-and-ai/year-1/project-1-1.md', 'page']],
|
||||
['pages/study/bachelor/year_1/project_1-2.txt', ['src/content/docs/data-science-and-ai/year-1/project-1-2.md', 'page']],
|
||||
['pages/study/bachelor/year_2.txt', ['src/content/docs/data-science-and-ai/year-2/index.md', 'page']],
|
||||
['pages/study/bachelor/year_2/honours_programme.txt', ['src/content/docs/data-science-and-ai/year-2/honours-programme.md', 'page']],
|
||||
['pages/study/bachelor/year_2/project_2-1.txt', ['src/content/docs/data-science-and-ai/year-2/project-2-1.md', 'page']],
|
||||
['pages/study/bachelor/year_2/project_2-2.txt', ['src/content/docs/data-science-and-ai/year-2/project-2-2.md', 'page']],
|
||||
['pages/study/bachelor/year_3.txt', ['src/content/docs/data-science-and-ai/year-3/index.md', 'page']],
|
||||
['pages/study/bachelor/year_3/bachelors_thesis.txt', ['src/content/docs/data-science-and-ai/year-3/bachelors-thesis.md', 'page']],
|
||||
['pages/study/bachelor/year_3/honours_programme.txt', ['src/content/docs/data-science-and-ai/year-3/honours-programme.md', 'page']],
|
||||
['pages/study/bachelor/year_3/project_3-1.txt', ['src/content/docs/data-science-and-ai/year-3/project-3-1.md', 'page']],
|
||||
['pages/study/bachelor/year_3/study_abroad.txt', ['src/content/docs/data-science-and-ai/year-3/study-abroad.md', 'page']],
|
||||
['pages/study/master_ai.txt', ['src/content/docs/master-ai/index.md', 'page']],
|
||||
['pages/study/master_ai/year_1.txt', ['src/content/docs/master-ai/year-1/index.md', 'page']],
|
||||
['pages/study/master_ai/year_1/project_mai_1.txt', ['src/content/docs/master-ai/year-1/research-project-1.md', 'page']],
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import { mkdir, writeFile } from 'node:fs/promises';
|
|||
import { join } from 'node:path';
|
||||
|
||||
const PROGRAMMES = new Map([
|
||||
['bachelor', 'bachelor'],
|
||||
['bachelor', 'data-science-and-ai'],
|
||||
['master_ai', 'master-ai'],
|
||||
['master_dsdm', 'master-dsdm'],
|
||||
]);
|
||||
|
|
@ -42,7 +42,11 @@ export function destinationForPageId(pageId) {
|
|||
return null;
|
||||
}
|
||||
const routeParts = [PROGRAMMES.get(parts[1]), ...parts.slice(2).map(slug)];
|
||||
return `src/content/docs/${routeParts.join('/')}.md`;
|
||||
const sharedCourse = parts[1] === 'bachelor' && parts[2] === 'year_1' && new Set([
|
||||
'discrete_mathematics', 'procedural_programming', 'calculus', 'logic',
|
||||
'objects_in_programming', 'data_structures_and_algorithms', 'linear_algebra',
|
||||
]).has(parts.at(-1));
|
||||
return `src/content/docs/${routeParts.join('/')}.${sharedCourse ? 'mdx' : 'md'}`;
|
||||
}
|
||||
|
||||
export function classifyPreviousPage(pageId, representedPageIds = new Set(), source = '') {
|
||||
|
|
@ -61,7 +65,7 @@ function humanLabel(value) {
|
|||
function markdownRouteForPageId(pageId) {
|
||||
const destination = destinationForPageId(pageId);
|
||||
return destination
|
||||
? `/${destination.replace(/^src\/content\/docs\//, '').replace(/\.md$/, '')}/`
|
||||
? `/${destination.replace(/^src\/content\/docs\//, '').replace(/\.mdx?$/, '')}/`
|
||||
: `https://msvincognito.nl/wiki/${pageId.replaceAll(':', '/')}`;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ export async function checkRenderedOutput({ distRoot }) {
|
|||
for (const file of htmlFiles) {
|
||||
const path = relative(absoluteDistRoot, file).split(sep).join('/');
|
||||
const { document } = parseHTML(await readFile(file, 'utf8'));
|
||||
if (document.querySelector('meta[http-equiv="refresh"]')) continue;
|
||||
const h1Count = document.querySelectorAll('h1').length;
|
||||
if (h1Count !== 1) headingIssues.push({ file: path, h1Count });
|
||||
}
|
||||
|
|
|
|||
15
src/components/ProgrammeSwitch.astro
Normal file
15
src/components/ProgrammeSwitch.astro
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
import { programmeForPathname, programmeSwitchTargets } from '../config/programme-navigation.mjs';
|
||||
|
||||
const active = programmeForPathname(Astro.url.pathname.replace(import.meta.env.BASE_URL.replace(/\/$/, ''), ''));
|
||||
const targets = programmeSwitchTargets(Astro.url.pathname);
|
||||
const withBase = (path: string) => `${import.meta.env.BASE_URL.replace(/\/$/, '')}/${path.replace(/^\//, '')}`;
|
||||
---
|
||||
|
||||
<nav class="programme-switch" aria-label="Bachelor programme">
|
||||
<span class="programme-switch__label">Course information</span>
|
||||
<div class="programme-switch__links">
|
||||
<a href={withBase(targets.dataScience)} aria-current={active === 'data-science-and-ai' ? 'page' : undefined}>Data Science & AI</a>
|
||||
<a href={withBase(targets.computerScience)} aria-current={active === 'computer-science' ? 'page' : undefined}>Computer Science</a>
|
||||
</div>
|
||||
</nav>
|
||||
7
src/components/Sidebar.astro
Normal file
7
src/components/Sidebar.astro
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
import DefaultSidebar from '@astrojs/starlight/components/Sidebar.astro';
|
||||
import ProgrammeSwitch from './ProgrammeSwitch.astro';
|
||||
---
|
||||
|
||||
<ProgrammeSwitch />
|
||||
<DefaultSidebar />
|
||||
19
src/config/base-aware-markdown.mjs
Normal file
19
src/config/base-aware-markdown.mjs
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
export function baseAwareLinks({ base = '/' } = {}) {
|
||||
const prefix = base === '/' ? '' : `/${base.replace(/^\/+|\/+$/g, '')}`;
|
||||
return function transform(tree) {
|
||||
if (!prefix) return tree;
|
||||
const visit = (node) => {
|
||||
if ((node.type === 'link' || node.type === 'image')
|
||||
&& typeof node.url === 'string'
|
||||
&& node.url.startsWith('/')
|
||||
&& !node.url.startsWith('//')
|
||||
&& node.url !== prefix
|
||||
&& !node.url.startsWith(`${prefix}/`)) {
|
||||
node.url = `${prefix}${node.url}`;
|
||||
}
|
||||
if (Array.isArray(node.children)) node.children.forEach(visit);
|
||||
};
|
||||
visit(tree);
|
||||
return tree;
|
||||
};
|
||||
}
|
||||
22
src/config/legacy-bachelor-redirects.mjs
Normal file
22
src/config/legacy-bachelor-redirects.mjs
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
const routes = [
|
||||
'',
|
||||
'year-1/',
|
||||
'year-1/project-1-1', 'year-1/project-1-2',
|
||||
'year-1/block-1/discrete-mathematics', 'year-1/block-1/introduction-to-data-science-and-artifical-intelligence', 'year-1/block-1/procedural-programming',
|
||||
'year-1/block-2/calculus', 'year-1/block-2/logic', 'year-1/block-2/objects-in-programming',
|
||||
'year-1/block-4/data-structures-and-algorithms', 'year-1/block-4/linear-algebra', 'year-1/block-4/principles-of-data-science',
|
||||
'year-1/block-5/computational-and-cognitive-neuroscience', 'year-1/block-5/numerical-methods', 'year-1/block-5/software-engineering',
|
||||
'year-2/', 'year-2/project-2-1', 'year-2/project-2-2', 'year-2/honours-programme',
|
||||
'year-2/block-1/databases', 'year-2/block-1/graph-theory', 'year-2/block-1/probability-and-statistics',
|
||||
'year-2/block-2/machine-learning', 'year-2/block-2/reasoning-techniques', 'year-2/block-2/simulation-and-statisical-analysis',
|
||||
'year-2/block-4/human-computer-interaction-and-affective-computing', 'year-2/block-4/mathematical-modelling', 'year-2/block-4/natural-language-processing',
|
||||
'year-2/block-5/game-theory', 'year-2/block-5/introduction-to-image-and-video-processing', 'year-2/block-5/linear-programming', 'year-2/block-5/philosophy-and-artificial-intelligence',
|
||||
'year-3/', 'year-3/bachelors-thesis', 'year-3/project-3-1', 'year-3/study-abroad', 'year-3/honours-programme',
|
||||
'year-3/block-1/prolog', 'year-3/block-1/robotics-and-embedded-systems', 'year-3/block-1/semantic-web', 'year-3/block-1/software-and-systems-verification',
|
||||
'year-3/block-2/introduction-to-bio-informatics', 'year-3/block-2/logic-for-artificial-intelligence', 'year-3/block-2/parallel-programming', 'year-3/block-2/quantum-computation', 'year-3/block-2/recommender-systems', 'year-3/block-2/secure-web-applications',
|
||||
'year-3/block-4/data-analysis', 'year-3/block-4/intelligent-systems', 'year-3/block-4/operations-research-case-studies',
|
||||
];
|
||||
|
||||
export const legacyBachelorRedirects = Object.freeze(Object.fromEntries(
|
||||
routes.sort().map((route) => [`/bachelor/${route}`, `/data-science-and-ai/${route}`]),
|
||||
));
|
||||
68
src/config/programme-navigation.mjs
Normal file
68
src/config/programme-navigation.mjs
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
import { sidebar } from './sidebar.mjs';
|
||||
|
||||
const shared = {
|
||||
'period-1/discrete-mathematics': 'block-1/discrete-mathematics',
|
||||
'period-1/procedural-programming': 'block-1/procedural-programming',
|
||||
'period-2/calculus': 'block-2/calculus',
|
||||
'period-2/logic': 'block-2/logic',
|
||||
'period-2/objects-in-programming': 'block-2/objects-in-programming',
|
||||
'period-4/data-structures-and-algorithms': 'block-4/data-structures-and-algorithms',
|
||||
'period-4/linear-algebra': 'block-4/linear-algebra',
|
||||
};
|
||||
|
||||
const computerScience = {
|
||||
label: 'Computer Science',
|
||||
items: [
|
||||
{ slug: 'computer-science' },
|
||||
{ label: 'Year 1', items: [
|
||||
{ slug: 'computer-science/year-1' },
|
||||
{ label: 'Period 1', items: ['discrete-mathematics', 'introduction-to-computer-science', 'procedural-programming'].map((slug) => ({ slug: `computer-science/year-1/period-1/${slug}` })) },
|
||||
{ label: 'Period 2', items: ['calculus', 'logic', 'objects-in-programming'].map((slug) => ({ slug: `computer-science/year-1/period-2/${slug}` })) },
|
||||
{ label: 'Period 4', items: ['computer-architecture', 'data-structures-and-algorithms', 'linear-algebra'].map((slug) => ({ slug: `computer-science/year-1/period-4/${slug}` })) },
|
||||
{ label: 'Period 5', items: ['algorithmic-design', 'databases', 'statistics'].map((slug) => ({ slug: `computer-science/year-1/period-5/${slug}` })) },
|
||||
] },
|
||||
],
|
||||
};
|
||||
|
||||
const compact = { label: 'Bachelor programmes', items: [{ slug: 'computer-science' }, { slug: 'data-science-and-ai' }] };
|
||||
|
||||
export function programmeForPathname(pathname) {
|
||||
if (pathname.startsWith('/computer-science')) return 'computer-science';
|
||||
if (pathname.startsWith('/data-science-and-ai') || pathname.startsWith('/bachelor')) return 'data-science-and-ai';
|
||||
return null;
|
||||
}
|
||||
|
||||
export function programmeSwitchTargets(pathname) {
|
||||
let computerScience = '/computer-science/';
|
||||
let dataScience = '/data-science-and-ai/';
|
||||
for (const [cs, ds] of Object.entries(shared)) {
|
||||
if (pathname.includes(`/computer-science/year-1/${cs}`) || pathname.includes(`/data-science-and-ai/year-1/${ds}`)) {
|
||||
computerScience = `/computer-science/year-1/${cs}/`;
|
||||
dataScience = `/data-science-and-ai/year-1/${ds}/`;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return { computerScience, dataScience };
|
||||
}
|
||||
|
||||
export function sidebarForPathname(pathname) {
|
||||
const programme = programmeForPathname(pathname);
|
||||
const withoutProgrammes = sidebar.filter(({ label }) => label !== 'Computer Science' && label !== 'Data Science & AI');
|
||||
const dataScience = sidebar.find(({ label }) => label === 'Data Science & AI');
|
||||
const undergraduate = programme === 'computer-science' ? computerScience : programme === 'data-science-and-ai' ? dataScience : compact;
|
||||
return [...withoutProgrammes.slice(0, 3), undergraduate, ...withoutProgrammes.slice(3)];
|
||||
}
|
||||
|
||||
export function filterResolvedSidebar(entries, pathname) {
|
||||
const programme = programmeForPathname(pathname);
|
||||
return entries.filter((entry) => {
|
||||
if (entry.label === 'Computer Science') return programme !== 'data-science-and-ai';
|
||||
if (entry.label === 'Data Science & AI') return programme !== 'computer-science';
|
||||
return true;
|
||||
}).map((entry) => {
|
||||
if (!programme && (entry.label === 'Computer Science' || entry.label === 'Data Science & AI') && 'entries' in entry) {
|
||||
return { ...entry, entries: entry.entries.slice(0, 1) };
|
||||
}
|
||||
return entry;
|
||||
});
|
||||
}
|
||||
|
|
@ -1,68 +1,68 @@
|
|||
export const recoveredCourseSidebar = {
|
||||
'bachelor/year-1': [
|
||||
'data-science-and-ai/year-1': [
|
||||
{ label: 'Block 1', items: [
|
||||
{ slug: 'bachelor/year-1/block-1/discrete-mathematics' },
|
||||
{ slug: 'bachelor/year-1/block-1/introduction-to-data-science-and-artifical-intelligence' },
|
||||
{ slug: 'bachelor/year-1/block-1/procedural-programming' },
|
||||
{ slug: 'data-science-and-ai/year-1/block-1/discrete-mathematics' },
|
||||
{ slug: 'data-science-and-ai/year-1/block-1/introduction-to-data-science-and-artifical-intelligence' },
|
||||
{ slug: 'data-science-and-ai/year-1/block-1/procedural-programming' },
|
||||
] },
|
||||
{ label: 'Block 2', items: [
|
||||
{ slug: 'bachelor/year-1/block-2/calculus' },
|
||||
{ slug: 'bachelor/year-1/block-2/logic' },
|
||||
{ slug: 'bachelor/year-1/block-2/objects-in-programming' },
|
||||
{ slug: 'data-science-and-ai/year-1/block-2/calculus' },
|
||||
{ slug: 'data-science-and-ai/year-1/block-2/logic' },
|
||||
{ slug: 'data-science-and-ai/year-1/block-2/objects-in-programming' },
|
||||
] },
|
||||
{ label: 'Block 4', items: [
|
||||
{ slug: 'bachelor/year-1/block-4/data-structures-and-algorithms' },
|
||||
{ slug: 'bachelor/year-1/block-4/linear-algebra' },
|
||||
{ slug: 'bachelor/year-1/block-4/principles-of-data-science' },
|
||||
{ slug: 'data-science-and-ai/year-1/block-4/data-structures-and-algorithms' },
|
||||
{ slug: 'data-science-and-ai/year-1/block-4/linear-algebra' },
|
||||
{ slug: 'data-science-and-ai/year-1/block-4/principles-of-data-science' },
|
||||
] },
|
||||
{ label: 'Block 5', items: [
|
||||
{ slug: 'bachelor/year-1/block-5/computational-and-cognitive-neuroscience' },
|
||||
{ slug: 'bachelor/year-1/block-5/numerical-methods' },
|
||||
{ slug: 'bachelor/year-1/block-5/software-engineering' },
|
||||
{ slug: 'data-science-and-ai/year-1/block-5/computational-and-cognitive-neuroscience' },
|
||||
{ slug: 'data-science-and-ai/year-1/block-5/numerical-methods' },
|
||||
{ slug: 'data-science-and-ai/year-1/block-5/software-engineering' },
|
||||
] },
|
||||
],
|
||||
'bachelor/year-2': [
|
||||
'data-science-and-ai/year-2': [
|
||||
{ label: 'Block 1', items: [
|
||||
{ slug: 'bachelor/year-2/block-1/databases' },
|
||||
{ slug: 'bachelor/year-2/block-1/graph-theory' },
|
||||
{ slug: 'bachelor/year-2/block-1/probability-and-statistics' },
|
||||
{ slug: 'data-science-and-ai/year-2/block-1/databases' },
|
||||
{ slug: 'data-science-and-ai/year-2/block-1/graph-theory' },
|
||||
{ slug: 'data-science-and-ai/year-2/block-1/probability-and-statistics' },
|
||||
] },
|
||||
{ label: 'Block 2', items: [
|
||||
{ slug: 'bachelor/year-2/block-2/machine-learning' },
|
||||
{ slug: 'bachelor/year-2/block-2/reasoning-techniques' },
|
||||
{ slug: 'bachelor/year-2/block-2/simulation-and-statisical-analysis' },
|
||||
{ slug: 'data-science-and-ai/year-2/block-2/machine-learning' },
|
||||
{ slug: 'data-science-and-ai/year-2/block-2/reasoning-techniques' },
|
||||
{ slug: 'data-science-and-ai/year-2/block-2/simulation-and-statisical-analysis' },
|
||||
] },
|
||||
{ label: 'Block 4', items: [
|
||||
{ slug: 'bachelor/year-2/block-4/human-computer-interaction-and-affective-computing' },
|
||||
{ slug: 'bachelor/year-2/block-4/mathematical-modelling' },
|
||||
{ slug: 'bachelor/year-2/block-4/natural-language-processing' },
|
||||
{ slug: 'data-science-and-ai/year-2/block-4/human-computer-interaction-and-affective-computing' },
|
||||
{ slug: 'data-science-and-ai/year-2/block-4/mathematical-modelling' },
|
||||
{ slug: 'data-science-and-ai/year-2/block-4/natural-language-processing' },
|
||||
] },
|
||||
{ label: 'Block 5', items: [
|
||||
{ slug: 'bachelor/year-2/block-5/game-theory' },
|
||||
{ slug: 'bachelor/year-2/block-5/introduction-to-image-and-video-processing' },
|
||||
{ slug: 'bachelor/year-2/block-5/linear-programming' },
|
||||
{ slug: 'bachelor/year-2/block-5/philosophy-and-artificial-intelligence' },
|
||||
{ slug: 'data-science-and-ai/year-2/block-5/game-theory' },
|
||||
{ slug: 'data-science-and-ai/year-2/block-5/introduction-to-image-and-video-processing' },
|
||||
{ slug: 'data-science-and-ai/year-2/block-5/linear-programming' },
|
||||
{ slug: 'data-science-and-ai/year-2/block-5/philosophy-and-artificial-intelligence' },
|
||||
] },
|
||||
],
|
||||
'bachelor/year-3': [
|
||||
'data-science-and-ai/year-3': [
|
||||
{ label: 'Block 1', items: [
|
||||
{ slug: 'bachelor/year-3/block-1/prolog' },
|
||||
{ slug: 'bachelor/year-3/block-1/robotics-and-embedded-systems' },
|
||||
{ slug: 'bachelor/year-3/block-1/semantic-web' },
|
||||
{ slug: 'bachelor/year-3/block-1/software-and-systems-verification' },
|
||||
{ slug: 'data-science-and-ai/year-3/block-1/prolog' },
|
||||
{ slug: 'data-science-and-ai/year-3/block-1/robotics-and-embedded-systems' },
|
||||
{ slug: 'data-science-and-ai/year-3/block-1/semantic-web' },
|
||||
{ slug: 'data-science-and-ai/year-3/block-1/software-and-systems-verification' },
|
||||
] },
|
||||
{ label: 'Block 2', items: [
|
||||
{ slug: 'bachelor/year-3/block-2/introduction-to-bio-informatics' },
|
||||
{ slug: 'bachelor/year-3/block-2/logic-for-artificial-intelligence' },
|
||||
{ slug: 'bachelor/year-3/block-2/parallel-programming' },
|
||||
{ slug: 'bachelor/year-3/block-2/quantum-computation' },
|
||||
{ slug: 'bachelor/year-3/block-2/recommender-systems' },
|
||||
{ slug: 'bachelor/year-3/block-2/secure-web-applications' },
|
||||
{ slug: 'data-science-and-ai/year-3/block-2/introduction-to-bio-informatics' },
|
||||
{ slug: 'data-science-and-ai/year-3/block-2/logic-for-artificial-intelligence' },
|
||||
{ slug: 'data-science-and-ai/year-3/block-2/parallel-programming' },
|
||||
{ slug: 'data-science-and-ai/year-3/block-2/quantum-computation' },
|
||||
{ slug: 'data-science-and-ai/year-3/block-2/recommender-systems' },
|
||||
{ slug: 'data-science-and-ai/year-3/block-2/secure-web-applications' },
|
||||
] },
|
||||
{ label: 'Block 4', items: [
|
||||
{ slug: 'bachelor/year-3/block-4/data-analysis' },
|
||||
{ slug: 'bachelor/year-3/block-4/intelligent-systems' },
|
||||
{ slug: 'bachelor/year-3/block-4/operations-research-case-studies' },
|
||||
{ slug: 'data-science-and-ai/year-3/block-4/data-analysis' },
|
||||
{ slug: 'data-science-and-ai/year-3/block-4/intelligent-systems' },
|
||||
{ slug: 'data-science-and-ai/year-3/block-4/operations-research-case-studies' },
|
||||
] },
|
||||
],
|
||||
'master-ai/year-1': [
|
||||
|
|
|
|||
|
|
@ -5,37 +5,66 @@ export const sidebar = [
|
|||
{ label: 'About Incognito', link: '/about-incognito/' },
|
||||
{ slug: 'previous-exams-and-documents' },
|
||||
{
|
||||
label: 'Bachelor',
|
||||
label: 'Computer Science',
|
||||
items: [
|
||||
{ slug: 'bachelor' },
|
||||
{ slug: 'computer-science' },
|
||||
{ label: 'Year 1', items: [
|
||||
{ slug: 'computer-science/year-1' },
|
||||
{ label: 'Period 1', items: [
|
||||
{ slug: 'computer-science/year-1/period-1/discrete-mathematics' },
|
||||
{ slug: 'computer-science/year-1/period-1/introduction-to-computer-science' },
|
||||
{ slug: 'computer-science/year-1/period-1/procedural-programming' },
|
||||
] },
|
||||
{ label: 'Period 2', items: [
|
||||
{ slug: 'computer-science/year-1/period-2/calculus' },
|
||||
{ slug: 'computer-science/year-1/period-2/logic' },
|
||||
{ slug: 'computer-science/year-1/period-2/objects-in-programming' },
|
||||
] },
|
||||
{ label: 'Period 4', items: [
|
||||
{ slug: 'computer-science/year-1/period-4/computer-architecture' },
|
||||
{ slug: 'computer-science/year-1/period-4/data-structures-and-algorithms' },
|
||||
{ slug: 'computer-science/year-1/period-4/linear-algebra' },
|
||||
] },
|
||||
{ label: 'Period 5', items: [
|
||||
{ slug: 'computer-science/year-1/period-5/algorithmic-design' },
|
||||
{ slug: 'computer-science/year-1/period-5/databases' },
|
||||
{ slug: 'computer-science/year-1/period-5/statistics' },
|
||||
] },
|
||||
] },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Data Science & AI',
|
||||
items: [
|
||||
{ slug: 'data-science-and-ai' },
|
||||
{
|
||||
label: 'Year 1',
|
||||
items: [
|
||||
{ slug: 'bachelor/year-1' },
|
||||
{ slug: 'bachelor/year-1/project-1-1' },
|
||||
{ slug: 'bachelor/year-1/project-1-2' },
|
||||
...recoveredCourseSidebar['bachelor/year-1'],
|
||||
{ slug: 'data-science-and-ai/year-1' },
|
||||
{ slug: 'data-science-and-ai/year-1/project-1-1' },
|
||||
{ slug: 'data-science-and-ai/year-1/project-1-2' },
|
||||
...recoveredCourseSidebar['data-science-and-ai/year-1'],
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Year 2',
|
||||
items: [
|
||||
{ slug: 'bachelor/year-2' },
|
||||
{ slug: 'bachelor/year-2/project-2-1' },
|
||||
{ slug: 'bachelor/year-2/project-2-2' },
|
||||
{ slug: 'bachelor/year-2/honours-programme' },
|
||||
...recoveredCourseSidebar['bachelor/year-2'],
|
||||
{ slug: 'data-science-and-ai/year-2' },
|
||||
{ slug: 'data-science-and-ai/year-2/project-2-1' },
|
||||
{ slug: 'data-science-and-ai/year-2/project-2-2' },
|
||||
{ slug: 'data-science-and-ai/year-2/honours-programme' },
|
||||
...recoveredCourseSidebar['data-science-and-ai/year-2'],
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Year 3',
|
||||
items: [
|
||||
{ slug: 'bachelor/year-3' },
|
||||
{ slug: 'bachelor/year-3/bachelors-thesis' },
|
||||
{ slug: 'bachelor/year-3/project-3-1' },
|
||||
{ slug: 'bachelor/year-3/study-abroad' },
|
||||
{ slug: 'bachelor/year-3/honours-programme' },
|
||||
...recoveredCourseSidebar['bachelor/year-3'],
|
||||
{ slug: 'data-science-and-ai/year-3' },
|
||||
{ slug: 'data-science-and-ai/year-3/bachelors-thesis' },
|
||||
{ slug: 'data-science-and-ai/year-3/project-3-1' },
|
||||
{ slug: 'data-science-and-ai/year-3/study-abroad' },
|
||||
{ slug: 'data-science-and-ai/year-3/honours-programme' },
|
||||
...recoveredCourseSidebar['data-science-and-ai/year-3'],
|
||||
],
|
||||
},
|
||||
],
|
||||
|
|
|
|||
14
src/content/docs/computer-science/index.md
Normal file
14
src/content/docs/computer-science/index.md
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
---
|
||||
title: Computer Science
|
||||
description: Recovered historical Computer Science course information.
|
||||
---
|
||||
|
||||
:::caution[Historical information]
|
||||
This information originated in the previous wiki and may be outdated. Check the current Maastricht University programme information before relying on it.
|
||||
:::
|
||||
|
||||
This section contains the substantive Computer Science course information recovered from the previous Incognito wiki. Only courses with actual recovered content are published.
|
||||
|
||||
- [Year 1](./year-1/)
|
||||
- [Previous exams and documents](/previous-exams-and-documents/)
|
||||
|
||||
11
src/content/docs/computer-science/year-1/index.md
Normal file
11
src/content/docs/computer-science/year-1/index.md
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
title: Computer Science — Year 1
|
||||
description: Recovered historical first-year Computer Science course information.
|
||||
---
|
||||
|
||||
:::caution[Historical information]
|
||||
This information originated in the previous wiki and may be outdated. Check the current Maastricht University course information before relying on it.
|
||||
:::
|
||||
|
||||
The sidebar lists the Year 1 courses for which substantive historical content was recovered. Empty placeholders from the source branch are intentionally not published.
|
||||
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: Discrete Mathematics
|
||||
description: Historical course details for Discrete Mathematics, recovered from the previous Incognito wiki.
|
||||
---
|
||||
|
||||
import SharedCourse from '../../../../shared-courses/year-1/discrete-mathematics.mdx';
|
||||
|
||||
<SharedCourse />
|
||||
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
---
|
||||
title: Introduction to Computer Science
|
||||
description: Historical course details for Introduction to Computer Science, recovered from the previous Incognito wiki.
|
||||
---
|
||||
|
||||
:::caution[Historical information]
|
||||
This information originated in the previous wiki and may be outdated. Check the current Maastricht University course information before relying on it.
|
||||
:::
|
||||
|
||||
## Full course description
|
||||
|
||||
The course introduces algorithms, computer architecture and hardware, models of computation, computer networks, and operating systems. It develops abstraction, decomposition, pattern recognition, and algorithmic thinking, including practical work with a wirelessly controlled microcontroller device.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
None.
|
||||
|
||||
## Recommended reading
|
||||
|
||||
- *Computational Thinking for the Modern Problem Solver* by David Riley and Kenny A. Hunt
|
||||
- *Computer Science Illuminated* by Nell B. Dale
|
||||
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: Procedural Programming
|
||||
description: Historical course details for Procedural Programming, recovered from the previous Incognito wiki.
|
||||
---
|
||||
|
||||
import SharedCourse from '../../../../shared-courses/year-1/procedural-programming.mdx';
|
||||
|
||||
<SharedCourse />
|
||||
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: Calculus
|
||||
description: Historical course details for Calculus, recovered from the previous Incognito wiki.
|
||||
---
|
||||
|
||||
import SharedCourse from '../../../../shared-courses/year-1/calculus.mdx';
|
||||
|
||||
<SharedCourse />
|
||||
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: Logic
|
||||
description: Historical course details for Logic, recovered from the previous Incognito wiki.
|
||||
---
|
||||
|
||||
import SharedCourse from '../../../../shared-courses/year-1/logic.mdx';
|
||||
|
||||
<SharedCourse />
|
||||
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: Objects in Programming
|
||||
description: Historical course details for Objects in Programming, recovered from the previous Incognito wiki.
|
||||
---
|
||||
|
||||
import SharedCourse from '../../../../shared-courses/year-1/objects-in-programming.mdx';
|
||||
|
||||
<SharedCourse />
|
||||
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
---
|
||||
title: Computer Architecture
|
||||
description: Historical course details for Computer Architecture, recovered from the previous Incognito wiki.
|
||||
---
|
||||
|
||||
:::caution[Historical information]
|
||||
This information originated in the previous wiki and may be outdated. Check the current Maastricht University course information before relying on it.
|
||||
:::
|
||||
|
||||
## Full course description
|
||||
|
||||
This course covers digital logic, combinational and sequential circuits, hardware description languages, processor architecture, memory systems, and input/output systems. Students gain experience designing and simulating hardware components.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
None.
|
||||
|
||||
## Recommended reading
|
||||
|
||||
*Computer Architecture: A Quantitative Approach* by John L. Hennessy and David A. Patterson.
|
||||
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: Data Structures and Algorithms
|
||||
description: Historical course details for Data Structures and Algorithms, recovered from the previous Incognito wiki.
|
||||
---
|
||||
|
||||
import SharedCourse from '../../../../shared-courses/year-1/data-structures-and-algorithms.mdx';
|
||||
|
||||
<SharedCourse />
|
||||
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: Linear Algebra
|
||||
description: Historical course details for Linear Algebra, recovered from the previous Incognito wiki.
|
||||
---
|
||||
|
||||
import SharedCourse from '../../../../shared-courses/year-1/linear-algebra.mdx';
|
||||
|
||||
<SharedCourse />
|
||||
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
---
|
||||
title: Algorithmic Design
|
||||
description: Historical course details for Algorithmic Design, recovered from the previous Incognito wiki.
|
||||
---
|
||||
|
||||
:::caution[Historical information]
|
||||
This information originated in the previous wiki and may be outdated. Check the current Maastricht University course information before relying on it.
|
||||
:::
|
||||
|
||||
## Full course description
|
||||
|
||||
Following Data Structures and Algorithms, this course develops algorithm design and analysis through greedy algorithms, dynamic programming, the master theorem, NP-completeness, backtracking, linear programming, and branch-and-bound.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Desired prior knowledge: Data Structures and Algorithms and Discrete Mathematics.
|
||||
|
||||
## Recommended reading
|
||||
|
||||
Goodrich and Tamassia, *Algorithm Design and Applications* (2015).
|
||||
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
---
|
||||
title: Databases
|
||||
description: Historical course details for Databases, recovered from the previous Incognito wiki.
|
||||
---
|
||||
|
||||
:::caution[Historical information]
|
||||
This information originated in the previous wiki and may be outdated. Check the current Maastricht University course information before relying on it.
|
||||
:::
|
||||
|
||||
## Full course description
|
||||
|
||||
This course introduces relational database design, implementation, optimization, data modelling, relational algebra, and SQL. It also covers concurrency, recovery, indexing, triggers, and alternative models such as NoSQL, with a group database project.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
None.
|
||||
|
||||
## Recommended reading
|
||||
|
||||
*Readings in Database Systems*, fifth edition, by Peter Bailis, Joseph M. Hellerstein, and Michael Stonebraker.
|
||||
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
---
|
||||
title: Statistics
|
||||
description: Historical course details for Statistics, recovered from the previous Incognito wiki.
|
||||
---
|
||||
|
||||
:::caution[Historical information]
|
||||
This information originated in the previous wiki and may be outdated. Check the current Maastricht University course information before relying on it.
|
||||
:::
|
||||
|
||||
## Full course description
|
||||
|
||||
Statistics introduces probability distributions, random variables, expectation, standard deviation, independence, the central limit theorem, hypothesis testing, and confidence intervals.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
None.
|
||||
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: Discrete Mathematics
|
||||
description: Historical course details for Discrete Mathematics, recovered from the previous Incognito wiki.
|
||||
---
|
||||
|
||||
import SharedCourse from '../../../../shared-courses/year-1/discrete-mathematics.mdx';
|
||||
|
||||
<SharedCourse />
|
||||
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: Procedural Programming
|
||||
description: Historical course details for Procedural Programming, recovered from the previous Incognito wiki.
|
||||
---
|
||||
|
||||
import SharedCourse from '../../../../shared-courses/year-1/procedural-programming.mdx';
|
||||
|
||||
<SharedCourse />
|
||||
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: Calculus
|
||||
description: Historical course details for Calculus, recovered from the previous Incognito wiki.
|
||||
---
|
||||
|
||||
import SharedCourse from '../../../../shared-courses/year-1/calculus.mdx';
|
||||
|
||||
<SharedCourse />
|
||||
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: Logic
|
||||
description: Historical course details for Logic, recovered from the previous Incognito wiki.
|
||||
---
|
||||
|
||||
import SharedCourse from '../../../../shared-courses/year-1/logic.mdx';
|
||||
|
||||
<SharedCourse />
|
||||
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: Objects in Programming
|
||||
description: Historical course details for Objects in Programming, recovered from the previous Incognito wiki.
|
||||
---
|
||||
|
||||
import SharedCourse from '../../../../shared-courses/year-1/objects-in-programming.mdx';
|
||||
|
||||
<SharedCourse />
|
||||
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: Data Structures and Algorithms
|
||||
description: Historical course details for Data Structures and Algorithms, recovered from the previous Incognito wiki.
|
||||
---
|
||||
|
||||
import SharedCourse from '../../../../shared-courses/year-1/data-structures-and-algorithms.mdx';
|
||||
|
||||
<SharedCourse />
|
||||
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: Linear Algebra
|
||||
description: Historical course details for Linear Algebra, recovered from the previous Incognito wiki.
|
||||
---
|
||||
|
||||
import SharedCourse from '../../../../shared-courses/year-1/linear-algebra.mdx';
|
||||
|
||||
<SharedCourse />
|
||||
|
||||
|
|
@ -16,7 +16,7 @@ MSV Incognito is the study association for the Department of Advanced Computing
|
|||
## Explore the wiki
|
||||
|
||||
<CardGrid>
|
||||
<LinkCard title="Bachelor" href="./bachelor/" description="Programme and course information for the bachelor." />
|
||||
<LinkCard title="Bachelor" href="./data-science-and-ai/" description="Programme and course information for the bachelor." />
|
||||
<LinkCard title="Master AI" href="./master-ai/" description="Resources for the Artificial Intelligence master’s programme." />
|
||||
<LinkCard title="Master DSDM" href="./master-dsdm/" description="Resources for the Data Science for Decision Making master’s programme." />
|
||||
<LinkCard title="Useful Information" href="./useful-information/" description="Practical information for students." />
|
||||
|
|
|
|||
12
src/middleware.ts
Normal file
12
src/middleware.ts
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
import { defineMiddleware } from 'astro:middleware';
|
||||
import { filterResolvedSidebar } from './config/programme-navigation.mjs';
|
||||
|
||||
export const onRequest = defineMiddleware((context, next) => {
|
||||
try {
|
||||
const route = context.locals.starlightRoute;
|
||||
route.sidebar = filterResolvedSidebar(route.sidebar, context.url.pathname);
|
||||
} catch {
|
||||
// Non-Starlight routes such as the generated 404 page have no route data.
|
||||
}
|
||||
return next();
|
||||
});
|
||||
|
|
@ -132,3 +132,47 @@
|
|||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.programme-switch {
|
||||
padding: 0.75rem;
|
||||
margin: 0 0.5rem 0.75rem;
|
||||
border: 1px solid var(--sl-color-gray-5);
|
||||
border-radius: 0.6rem;
|
||||
}
|
||||
|
||||
.programme-switch__label {
|
||||
display: block;
|
||||
margin-bottom: 0.45rem;
|
||||
color: var(--sl-color-gray-2);
|
||||
font-size: var(--sl-text-xs);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.programme-switch__links {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 0.35rem;
|
||||
}
|
||||
|
||||
.programme-switch__links a {
|
||||
display: flex;
|
||||
min-height: 2.5rem;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 0.35rem;
|
||||
border-radius: 0.4rem;
|
||||
text-align: center;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.programme-switch__links a[aria-current='page'] {
|
||||
color: var(--sl-color-text-accent);
|
||||
background: var(--sl-color-accent-low);
|
||||
font-weight: 700;
|
||||
box-shadow: inset 0 0 0 1px var(--sl-color-accent);
|
||||
}
|
||||
|
||||
.programme-switch__links a:focus-visible {
|
||||
outline: 2px solid var(--sl-color-accent-high);
|
||||
outline-offset: 2px;
|
||||
}
|
||||
|
|
|
|||
15
tests/base-aware-markdown.test.mjs
Normal file
15
tests/base-aware-markdown.test.mjs
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
import assert from 'node:assert/strict';
|
||||
import test from 'node:test';
|
||||
import { baseAwareLinks } from '../src/config/base-aware-markdown.mjs';
|
||||
|
||||
test('prefixes root-relative Markdown links for subpath builds', () => {
|
||||
const tree = { type: 'root', children: [
|
||||
{ type: 'link', url: '/previous-exams-and-documents/' },
|
||||
{ type: 'link', url: 'https://example.com/' },
|
||||
{ type: 'image', url: '/media/file.pdf' },
|
||||
] };
|
||||
baseAwareLinks({ base: '/wiki' })(tree);
|
||||
assert.deepEqual(tree.children.map(({ url }) => url), [
|
||||
'/wiki/previous-exams-and-documents/', 'https://example.com/', '/wiki/media/file.pdf',
|
||||
]);
|
||||
});
|
||||
|
|
@ -44,8 +44,8 @@ test('the full migration audit accounts for every source and destination', async
|
|||
|
||||
assert.equal(result.sourceCount, 29);
|
||||
assert.equal(result.destinationCount, 28);
|
||||
assert.equal(result.pageCount, 86);
|
||||
assert.equal(result.supplementalCount, 58);
|
||||
assert.equal(result.pageCount, 100);
|
||||
assert.equal(result.supplementalCount, 72);
|
||||
});
|
||||
|
||||
test('published source pages leave the sole H1 to Starlight frontmatter rendering', async () => {
|
||||
|
|
@ -71,7 +71,7 @@ test('present-day association introductions use the current DACS name', async ()
|
|||
|
||||
test('programme overviews distinguish the original export from the recovered PDF archive', async () => {
|
||||
for (const destination of [
|
||||
'src/content/docs/bachelor/index.md',
|
||||
'src/content/docs/data-science-and-ai/index.md',
|
||||
'src/content/docs/master-ai/index.md',
|
||||
'src/content/docs/master-dsdm/index.md',
|
||||
]) {
|
||||
|
|
@ -85,8 +85,8 @@ test('programme overviews distinguish the original export from the recovered PDF
|
|||
|
||||
test('Bachelor year pages and the current migration report omit obsolete missing-asset notices', async () => {
|
||||
for (const destination of [
|
||||
'src/content/docs/bachelor/year-1/index.md',
|
||||
'src/content/docs/bachelor/year-2/index.md',
|
||||
'src/content/docs/data-science-and-ai/year-1/index.md',
|
||||
'src/content/docs/data-science-and-ai/year-2/index.md',
|
||||
]) {
|
||||
const content = await readFile(destination, 'utf8');
|
||||
assert.doesNotMatch(content, /Missing source asset|study:dke-schedule\.png|^## Schedule$/m);
|
||||
|
|
@ -235,8 +235,8 @@ test('audit accepts a published page declared in the supplemental registry', asy
|
|||
supplemental,
|
||||
});
|
||||
|
||||
assert.equal(result.pageCount, 86);
|
||||
assert.equal(result.supplementalCount, 58);
|
||||
assert.equal(result.pageCount, 100);
|
||||
assert.equal(result.supplementalCount, 72);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -319,19 +319,19 @@ test('audit rejects to-be-studied directories on either publication path', async
|
|||
const forbidden = [/\[\[/, /\{\{/, /~~NOCACHE~~/, /NEWPAGE>/, /indexmenu>/];
|
||||
|
||||
for (const file of [
|
||||
'src/content/docs/bachelor/index.md',
|
||||
'src/content/docs/bachelor/year-1/index.md',
|
||||
'src/content/docs/bachelor/year-1/project-1-1.md',
|
||||
'src/content/docs/bachelor/year-1/project-1-2.md',
|
||||
'src/content/docs/bachelor/year-2/index.md',
|
||||
'src/content/docs/bachelor/year-2/honours-programme.md',
|
||||
'src/content/docs/bachelor/year-2/project-2-1.md',
|
||||
'src/content/docs/bachelor/year-2/project-2-2.md',
|
||||
'src/content/docs/bachelor/year-3/index.md',
|
||||
'src/content/docs/bachelor/year-3/bachelors-thesis.md',
|
||||
'src/content/docs/bachelor/year-3/honours-programme.md',
|
||||
'src/content/docs/bachelor/year-3/project-3-1.md',
|
||||
'src/content/docs/bachelor/year-3/study-abroad.md',
|
||||
'src/content/docs/data-science-and-ai/index.md',
|
||||
'src/content/docs/data-science-and-ai/year-1/index.md',
|
||||
'src/content/docs/data-science-and-ai/year-1/project-1-1.md',
|
||||
'src/content/docs/data-science-and-ai/year-1/project-1-2.md',
|
||||
'src/content/docs/data-science-and-ai/year-2/index.md',
|
||||
'src/content/docs/data-science-and-ai/year-2/honours-programme.md',
|
||||
'src/content/docs/data-science-and-ai/year-2/project-2-1.md',
|
||||
'src/content/docs/data-science-and-ai/year-2/project-2-2.md',
|
||||
'src/content/docs/data-science-and-ai/year-3/index.md',
|
||||
'src/content/docs/data-science-and-ai/year-3/bachelors-thesis.md',
|
||||
'src/content/docs/data-science-and-ai/year-3/honours-programme.md',
|
||||
'src/content/docs/data-science-and-ai/year-3/project-3-1.md',
|
||||
'src/content/docs/data-science-and-ai/year-3/study-abroad.md',
|
||||
'src/content/docs/master-ai/index.md',
|
||||
'src/content/docs/master-ai/year-1/index.md',
|
||||
'src/content/docs/master-ai/year-1/research-project-1.md',
|
||||
|
|
@ -380,7 +380,7 @@ test('Handy Locations retains its awaiting-content notices', async () => {
|
|||
|
||||
test('Year 2 honours programme retains its awaiting-content notice', async () => {
|
||||
const content = await readFile(
|
||||
'src/content/docs/bachelor/year-2/honours-programme.md',
|
||||
'src/content/docs/data-science-and-ai/year-2/honours-programme.md',
|
||||
'utf8',
|
||||
);
|
||||
assert.match(content, /:::note\[Awaiting content\]/);
|
||||
|
|
@ -389,7 +389,7 @@ test('Year 2 honours programme retains its awaiting-content notice', async () =>
|
|||
|
||||
test('Year 3 honours programme retains its awaiting-content notice', async () => {
|
||||
const content = await readFile(
|
||||
'src/content/docs/bachelor/year-3/honours-programme.md',
|
||||
'src/content/docs/data-science-and-ai/year-3/honours-programme.md',
|
||||
'utf8',
|
||||
);
|
||||
assert.match(content, /:::note\[Awaiting content\]/);
|
||||
|
|
@ -398,7 +398,7 @@ test('Year 3 honours programme retains its awaiting-content notice', async () =>
|
|||
|
||||
test('Year 3 study abroad page identifies 2022 advice as historical', async () => {
|
||||
const content = await readFile(
|
||||
'src/content/docs/bachelor/year-3/study-abroad.md',
|
||||
'src/content/docs/data-science-and-ai/year-3/study-abroad.md',
|
||||
'utf8',
|
||||
);
|
||||
assert.match(content, /2022/);
|
||||
|
|
@ -407,12 +407,12 @@ test('Year 3 study abroad page identifies 2022 advice as historical', async () =
|
|||
|
||||
for (const { file, correctHref, shallowHref } of [
|
||||
{
|
||||
file: 'src/content/docs/bachelor/year-2/project-2-1.md',
|
||||
file: 'src/content/docs/data-science-and-ai/year-2/project-2-1.md',
|
||||
correctHref: '../../year-1/project-1-1/',
|
||||
shallowHref: '../year-1/project-1-1/',
|
||||
},
|
||||
{
|
||||
file: 'src/content/docs/bachelor/year-2/project-2-2.md',
|
||||
file: 'src/content/docs/data-science-and-ai/year-2/project-2-2.md',
|
||||
correctHref: '../../year-1/project-1-2/',
|
||||
shallowHref: '../year-1/project-1-2/',
|
||||
},
|
||||
|
|
|
|||
|
|
@ -98,6 +98,14 @@ test('ignores fragments, remote protocols, and Astro-generated assets', async ()
|
|||
});
|
||||
});
|
||||
|
||||
test('ignores links inside generated redirect documents', async () => {
|
||||
await withBuiltSite(async (root) => {
|
||||
await writeFile(join(root, 'index.html'), '<meta http-equiv="refresh" content="0;url=/target/"><a href="/target/">Redirect</a>');
|
||||
const result = await checkInternalLinks({ distRoot: root, base: '/wiki/' });
|
||||
assert.equal(result.broken.length, 0);
|
||||
});
|
||||
});
|
||||
|
||||
for (const { name, href } of [
|
||||
{ name: 'encoded slash', href: '/..%2Fmanual.pdf' },
|
||||
{ name: 'encoded backslash', href: '/..%5Cmanual.pdf' },
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ test('the PDF archive is registered in supplemental content and the sidebar', as
|
|||
const sidebar = await readFile('src/config/sidebar.mjs', 'utf8');
|
||||
assert.match(sidebar, /slug: 'previous-exams-and-documents'/);
|
||||
for (const overview of [
|
||||
'src/content/docs/bachelor/index.md',
|
||||
'src/content/docs/data-science-and-ai/index.md',
|
||||
'src/content/docs/master-ai/index.md',
|
||||
'src/content/docs/master-dsdm/index.md',
|
||||
]) {
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue