Skip to content

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-docs GitHub Actions workflow builds the static site (pure-Python — the docs-gen generators + mkdocs build --strict, no WeasyPrint) and wrangler 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 books GitHub Release (built once by an on-demand release-books workflow — 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.md proposes hosting it on Fly.io (reusing the existing docker/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_secure defaults 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 books mirrors 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 curated phase_meta.yaml summary, 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.md T8; 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 /verify page 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. See LYNX_CORTEX_ADDENDUM.md §A18.

Reference mode — study any chapter

  • Single source of truth: data/curriculum/phase_meta.yaml declares, for every phase (00–41 + X1–X5), its direct conceptual prerequisites and the concepts it teaches. scripts/build_phase_meta.py (run by just 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.md now links to that phase's README (220 links).
  • Portal: curriculum.py reads the same YAML; the phase view shows informational prerequisite badges (✓ when done — never locking), and the dashboard gains a guided/reference toggle (lynx_study_mode cookie via GET /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.pydocs/javascripts/lang-pairs.js) that resolves the README.md ↔ README.es.md index asymmetry mkdocs introduces.
  • Portal: nav EN/ES toggle now hits GET /locale/{lang}, which writes a lynx_locale cookie (1y, SameSite=Lax) and 303s back. The cookie wins over Student.locale (admin default) and config.locale_default (anon fallback), so every learner can override the admin-set default without schema migration. curriculum.py is now locale-aware: README + theory file discovery prefers .es.md siblings, falls back to .md for partial translations. High-visibility chrome (nav, login, dashboard, phase view) uses a t() helper backed by miniportal/i18n.py.

Full bilingual mirror (Tier 1 + 2 + 3)

  • Curriculum coverage 100%: every English .md under docs/, every root-level plan/contract/guide, every src/<mod>/BLUEPRINT.md, and PHASE_41_FINDINGS.md now have paired .es.md siblings (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 42 PHASE_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), and learners/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.md as a hero + 90-second demo + feature cards layout.
  • New pages: getting-started.md (first 30 minutes) and this changelog.
  • Custom CSS: docs/stylesheets/extra.css polishes the hero block, grid cards, and lab-checklist UL style.
  • Progressive JS: docs/javascripts/extra.js opens 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.caret for 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.