English · Español
Changelog¶
A high-signal feed of structural decisions and curriculum-shape changes. For per-phase progress see each PHASE_NN_REPORT.md.
Unreleased¶
Online deployment — Cloudflare Pages (docs) + Fly.io (portal)¶
- "GitHub builds, Cloudflare publishes": a
deploy-docsGitHub Actions workflow builds the static site (pure-Python — thedocs-gengenerators +mkdocs build --strict, no WeasyPrint) andwrangler pages deploys it to Cloudflare Pages on every push. The docs are fully static (Material's only plugin is client-side search), so Pages is a clean fit. - Books off the critical path: the docs deploy pulls the four books from a
fixed
booksGitHub Release (built once by an on-demandrelease-booksworkflow — WeasyPrint libs + a cached math-SVG store) into the published site, so the build stays fast and the ~48 MB of binaries never enter git history. They download from the public Pages site even though the repo is private. - Portal stays dynamic: the FastAPI + SQLite + Argon2id portal cannot run on
Cloudflare Pages (static only);
DEPLOY_PORTAL_BLUEPRINT.mdproposes hosting it on Fly.io (reusing the existingdocker/portal.Dockerfile+ a persistent volume) with Cloudflare in front for DNS/TLS/CDN. The hardening pass is mostly configuration — the app is already env-driven,cookie_securedefaults true, and the master-pass auto-provisions the admin on first boot.
Offline books — PDF + EPUB, EN + ES¶
- Study-on-a-plane editions: the whole curriculum is now generated into four
offline books —
lynx-cortex-{en,es}.{pdf,epub}— so the course is readable on an e-reader, a tablet, or paper. Each phase is a chapter; theory, labs, breaks and quizzes are sections. ~1,970 pages (EN) / ~2,020 (ES) each. - Typeset, not scraped: a dedicated generator (
scripts/build_books.py,just books) cleans the source first — strips the generated widget/marker blocks, raw<script>, the language-switcher and opposite-language preview blockquotes; de-links dead cross-file links; turns Mermaid into a labelled source listing — so nothing prints as a broken tag or truncated table. Every one of ~4,400 equations is rendered to a cached vector image (matplotlib mathtext); the ~1.4% it can't draw (matrices,cases) degrade to readable LaTeX source, never a broken glyph. - Real book chrome: a navy cover with the Cortex crest, a linked table of contents (PDF: with page numbers + dotted leaders; EPUB: native nested nav to section level), running headers/footers, per-chapter page breaks, and tables that wrap instead of overflowing.
- Linked from the course: a Download page (EN+ES) in the docs
nav, plus an Offline book · PDF / EPUB link in the portal footer. The books
are git-ignored regenerable artifacts (
just booksmirrors them into the docs site + portal static); honest limitations (interactive widgets are online-only, 6 Mermaid diagrams show as source) are documented on the download page.
Final polish — footers, phase transitions, presentation¶
- Branded footers: the docs site gains a Cortex University copyright line; the portal gains a footer with the institution, motto, and quick links.
- Phase transitions: the portal phase view now has prev/next phase cards for a smooth walk through the curriculum; docs pages fade in on navigation.
- Bugfix: the portal phase view no longer scrapes the README (which since
the generated marker blocks landed could surface a raw
<!-- … -->comment as the summary) — it now uses the curatedphase_meta.yamlsummary, falling back to scraping only when absent. - QA: a full audit (docs links, bilingual parity, i18n coverage, routes,
auth/CSRF, branding) confirmed no broken links and no functional issues; the
reported login/set-password "CSRF gaps" are the documented design (CSRF is
scoped to the authenticated write surface per
THREATS.mdT8; set-password is invite-token + rate-limited per T9).
Interactive learning layer + academic records (§A19)¶
- Study planner (
study-plan.md): pick a weekly pace (⅕/10/40 h → slow/moderate/intensive/extreme); a recomputed Gantt + per-phase cards show weeks, finish date, cognitive load, theory/lab split, concepts, skills, and the milestone you unlock. - Concept hover-tooltips: the first occurrence of any glossary term per page reveals a definition card (site-wide, EN+ES, conservative matching).
- Interactive widgets: an auto-generated concept-map on every phase README plus marquee components — n8n-style pipeline flow, live UTF-8 byte buffer, softmax temperature explorer, tensor strides, causal attention heatmap.
- Further reading per phase (canonical papers/books) + a frontier concepts page (SSM/Mamba, speculative decoding, MoE, GQA/MLA, YaRN, DPO…).
- Portal — marks & graduation: 0-100 marks per phase from quiz/exam history with Fail/Pass/Merit/Distinction/Excellence bands; a per-phase result panel, a marks dashboard (strong/weak points), a student profile + photo, a student ID card, an academic transcript, and a realistic Cortex University Master's certificate — all PDF-exportable via the browser's Print → Save as PDF. The certificate is gated on real personal data, an accepted Terms / Code of Conduct declaration, and a passing mark.
- Terms, Code of Conduct & Legal Statement (
terms.md): the credential is real but unaccredited (valid within Cortex University's own standards, not ECTS); knowledge must be independently validated; integrity is the student's responsibility. Shown as a course-preamble page and enforced as a versioned acceptance gate in the portal; the documents carry a disclaimer. - Signed by two professors + name-based variant: the certificate is now
co-signed by Professor Borja Tarrasó (AI Security & Fundamentals) and
Professor Claude Anthropic (Artificial Intelligence), each with a
generated handwritten-style signature (
scripts/gen_signatures.py). The student's name deterministically selects "one or another" certificate — the design variant (sapphire/gold vs garnet) and which professor leads. - University branding: the official Cortex University logos are now used throughout — the documentation site logo + favicon, a branded boot splash on load, per-section header emblems (phase vs lab), an About page, a badge on interactive widgets, the heraldic crest on the certificate, and the marks crest on the marks page and transcript. Each is sized and placed for its context (the certificate crest is blend-matched to the paper).
- Verifiable credentials: every certificate / transcript / ID card now
carries an HMAC-signed verification token and a short verification code.
A public
/verifypage authenticates a pasted token (valid signature ⇒ "Authentic", with the decoded holder/mark/date; any tampering ⇒ rejected). Documents gained engraved running headers/footers, a transcript cover page, and the validity code on every page.
Self-paced mode (§A18)¶
- Phase gates are now advisory for the learner: learner-side DoD items
(labs, quizzes, reflections) may be deferred and a phase closed
administratively, with deferrals recorded honestly in
checkpoint.json(deferred≠ done). Claude-side quality gates and record honesty are unchanged. Phase 00 is the first phase closed under this policy. SeeLYNX_CORTEX_ADDENDUM.md§A18.
Reference mode — study any chapter¶
- Single source of truth:
data/curriculum/phase_meta.yamldeclares, for every phase (00–41 + X1–X5), its direct conceptual prerequisites and the concepts it teaches.scripts/build_phase_meta.py(run byjust docs) projects it into generated, marker-delimited Requires/Teaches blocks under the H1 of all 94 phase READMEs (EN+ES) and validates slugs, coverage, and acyclicity on every build. - Docs site: new Study any chapter index — a mermaid dependency graph plus a per-phase table (requires / unlocks / teaches), fully linked, in both languages.
- Glossary backlinks: every "Phase NN" mention in
GLOSSARY.md/GLOSSARY.es.mdnow links to that phase's README (220 links). - Portal:
curriculum.pyreads the same YAML; the phase view shows informational prerequisite badges (✓ when done — never locking), and the dashboard gains a guided/reference toggle (lynx_study_modecookie viaGET /mode/{mode}). Guided foregrounds "continue where you left off"; reference exposes concept tags and prerequisite links on every row.
Always-switchable language UX¶
- Docs site: an EN/ES button in the Material header lets the reader flip
the page language at any moment. Preference persists in localStorage so the
next page load stays in the chosen language; the auto-redirect kicks in on
any same-host navigation. Internal links are rewritten to honor the
preference so the table-of-contents, nav, and inline links all flow through
the preferred locale. Powered by a build-time URL map
(
scripts/build_lang_pairs.py→docs/javascripts/lang-pairs.js) that resolves theREADME.md ↔ README.es.mdindex asymmetry mkdocs introduces. - Portal: nav
EN/EStoggle now hitsGET /locale/{lang}, which writes alynx_localecookie (1y, SameSite=Lax) and 303s back. The cookie wins overStudent.locale(admin default) andconfig.locale_default(anon fallback), so every learner can override the admin-set default without schema migration.curriculum.pyis now locale-aware: README + theory file discovery prefers.es.mdsiblings, falls back to.mdfor partial translations. High-visibility chrome (nav, login, dashboard, phase view) uses at()helper backed byminiportal/i18n.py.
Full bilingual mirror (Tier 1 + 2 + 3)¶
- Curriculum coverage 100%: every English
.mdunderdocs/, every root-level plan/contract/guide, everysrc/<mod>/BLUEPRINT.md, andPHASE_41_FINDINGS.mdnow have paired.es.mdsiblings (685 Spanish files total). Phases 00–41, extension track X1–X5, root status docs (ROADMAP,GLOSSARY,CURRICULUM_GUIDE,HIRING_PATH,TECHNOLOGIES,PROPOSAL_REVIEW), and all 42PHASE_NN_PLAN.md. - Conventions: Spain register (
ordenador,vídeo,currículo); concept loanwords stay English with first-mention gloss (embedding,attention,framework,RAG,CUDA); §A13 verb corpus verbatim; code identifiers, file paths, shell commands, and commit messages never translated. - By design not mirrored:
.claude/commands/and.claude/agents/(tool config consumed by Claude, not learner prose),docs/spanish-glossary.md(it is the Spanish reference), andlearners/borja/personal workspace (user input unconstrained per §A17). See Claude commands reference for the user-facing audit of those.
Docs UX polish¶
- Theme: switched accent palette to indigo with explicit light/dark toggle; added sticky navigation tabs, sections, expand, and footer features.
- Landing page: rewrote
docs/index.mdas a hero + 90-second demo + feature cards layout. - New pages:
getting-started.md(first 30 minutes) and this changelog. - Custom CSS:
docs/stylesheets/extra.csspolishes the hero block, grid cards, and lab-checklist UL style. - Progressive JS:
docs/javascripts/extra.jsopens external links in new tabs; everything else stays Material's native behavior. - Markdown extensions: added
pymdownx.tabbed,pymdownx.keys,pymdownx.smartsymbols,pymdownx.tilde,pymdownx.mark,pymdownx.caretfor richer prose.
Earlier¶
- Addendum §A13: replaced the original C-string scope (9 functions) with the English-verb grammar scope (20 verbs x 5 tenses x 3 persons, with paired Spanish). Phase 32 capstone re-aimed at a grammar tutor.
- Phase 41 — Learner Portal: added the optional multi-student portal phase after Phase 40, with passwordless onboarding, journals, quizzes, and SM-2 spaced repetition.
For the canonical history, read commits on main and the per-phase reports.