39 Commits

Author SHA1 Message Date
Rohit Ghumare d18b8fe5a9 fix(book): wrap inline code and fail incomplete PDF builds (#460)
* fix(book): keep inline table code inside PDF margins

* fix(book): preserve Unicode and fail incomplete PDF builds

* fix(book): wrap inline code in PDF prose without extra symbols

* fix(book): wrap long plain-text identifiers in PDF tables

* fix(book): preserve Unicode sequences in table wrapping
2026-09-07 17:04:38 +05:30
Rohit Ghumare f068c1e63f fix(book): wrap long code lines and reference URLs in PDFs (#459) 2026-09-07 15:44:04 +05:30
Rohit Ghumare bcd09d9102 fix(book): preserve literal tokens in EPUB and PDF (#458) 2026-09-07 15:08:32 +05:30
Rohit Ghumare 2cde5bc42b fix(site): sync counts, repair actions, and harden public resources (#456) 2026-09-07 13:00:23 +05:30
Rohit Ghumare 6cdb135c5c feat: add AI Engineering Learning Paths (#444) 2026-08-30 09:53:30 +01:00
Rohit Ghumare 6571f5430a feat(site): improve motion, responsive UX, and agent readiness (#426) 2026-08-23 19:21:54 +01:00
Rohit Ghumare 6a5b08d11e Merge commit '1e904b38a80edf5f0a2c762b6069e6bbd9370b47' into feat/course-site-learning-dx
# Conflicts:
#	.claude/skills/learn/SKILL.md
#	.claude/skills/start-learning/SKILL.md
#	site/lesson.html
#	site/test_build_artifacts.js
#	skills/learn/SKILL.md
#	skills/start-learning/SKILL.md
2026-08-23 14:58:35 +01:00
Rohit Ghumare 1e904b38a8 fix(course): address review edge cases 2026-08-23 14:47:52 +01:00
Rohit Ghumare 0c6ba7f9c4 Merge remote-tracking branch 'origin/feat/agent-skills-course' into feat/course-site-learning-dx
# Conflicts:
#	.claude/skills/learn/SKILL.md
#	.claude/skills/start-learning/SKILL.md
#	site/lesson.html
#	site/test_build_artifacts.js
#	skills/learn/SKILL.md
#	skills/start-learning/SKILL.md
2026-08-23 14:02:21 +01:00
Rohit Ghumare 7c78c02769 fix(scripts): harden skill bundle installation 2026-08-23 13:51:03 +01:00
Rohit Ghumare f8305f1fce fix(site): preserve course UX compatibility
Bump shared asset cache keys and align copied-command guidance with the repository-root contract. Preserve legacy MCP learner state and keep reduced-motion controls accurately labeled.
2026-08-22 04:28:02 +01:00
Rohit Ghumare 853595fdba feat(skills): install and render complete skill bundles
Progressive-disclosure skills must keep companion references, scripts, assets, and evals intact across discovery, installation, and lesson rendering.
2026-08-21 13:28:02 +01:00
Rohit Ghumare cd5bd53d82 fix(i18n): make translation publishing retry-safe (#401) 2026-08-09 19:13:33 +01:00
Rohit Ghumare 69502d8e93 feat: add AI-native certification curriculum and learning surfaces (#395)
* fix(i18n): force-add translated lessons past main's inherited .gitignore

The dispatched backfill (run 30768876598, 100 shards, all green) published
nothing: the translations branch was never created (404). Every shard's
publish step logged "no changes".

Root cause: when origin/translations doesn't exist yet, the publish step
creates it from the current checkout, which is main's tree, .gitignore
included. main's .gitignore intentionally excludes i18n/*/phases/ and
i18n/*/.cache/ to keep lesson translations off main, but that same rule
silently drops the plain `git add "i18n/$LANG_CODE"` inside the new
translations-branch worktree, so nothing was ever staged, committed, or
pushed across all 100 jobs.

Reproduced locally (a repo with the same .gitignore + the same add call
reports "no changes"; git add -f stages correctly) before applying the fix.

Force-add: the translations branch exists specifically to hold this content.

* feat(cert/00): add certification strategy

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/01): add product and model selection

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/02): add model routing and token economics

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/03): add prompting and task decomposition

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/04): add context, memory, and caching

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/05): add output evaluation and validation

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/06): add governance and responsible use

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/07): add workflow design and handoffs

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/08): add Messages API lifecycle

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/09): add defensive structured outputs

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/10): add tool use and agent loops

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/11): add MCP server integration

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/12): add Agent SDK harnesses and hooks

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/13): add application security controls

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/14): add evals and observability

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/15): add Claude Code team workflows

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/16): add multi-agent orchestration

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/17): add sessions, subagents, and context

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/18): add resilient tool contracts

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/19): add Claude Code skills and CI

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/20): add extraction, batch, and review

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/21): add long-context reliability

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/22): add discovery and SLA design

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/23): add architecture tradeoffs

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/24): add RAG evidence pipelines

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/25): add least-privilege integrations

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/26): add production operations

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/27): add enterprise governance

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/28): add lifecycle communication

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/29): add associate capstone

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/30): add developer capstone

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/31): add architect foundations capstone

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* feat(cert/32): add architect professional capstone

Adds the lesson, runnable lab, deterministic tests, practice, and inspectable artifacts for this certification topic.

* chore(cert): define curriculum contract

Documents certification lesson invariants and keeps the AI tutor wrapper while excluding generated site data.

* docs(cert): define program and verified sources

Adds the independent curriculum policy, onboarding, prerequisites, research notes, and dated source register.

* feat(cert/ccao-f): add associate route and practice

Maps the associate blueprint to an ordered route, diagnostic, and original full-length practice assessment.

* feat(cert/ccdv-f): add developer route and practice

Maps the developer blueprint to an ordered route, diagnostic, and original full-length practice assessment.

* feat(cert/ccar-f): add architect foundations route

Maps the architect foundations blueprint to an ordered route, diagnostic, and original full-length practice assessment.

* feat(cert/ccar-p): add architect professional route

Maps the architect professional blueprint to an ordered route, diagnostic, and original full-length practice assessment.

* feat(skill): add AI-native certification tutor

Teaches certification routes step by step in compatible agent harnesses and keeps learner state outside the book workflow.

* test(cert): enforce certification contracts

Audits lesson, assessment, reference, and answer-position invariants and runs all certification labs in CI.

* docs(readme): publish certification entry points

Adds the GitHub tutor and website entry points across the canonical README and synchronized translations.

* feat(glossary): expand the learning reference

Adds deeper original definitions, learning areas, source links, filters, and navigable term detail.

* feat(site): redesign the interactive roadmap

Keeps the canonical top-to-bottom dependency graph while adding branded focus, path guidance, and reliable navigation.

* feat(site): integrate interactive learning surfaces

Adds certification routes, lessons, assessments, progress, navigation, artifact rendering, narration fixes, and deploy routing.
2026-08-09 15:45:01 +01:00
Rohit Ghumare 7953bfad74 fix(i18n): shard translation CI by phase + commit README translations + fix language picker (#387)
* fix(i18n): shard translation CI by phase, commit README translations, limit picker to supported languages

The translate workflow ran one job per language, but a full 503-lesson language
run is ~27h on a CPU runner. Every job hit the 5.5h limit and was killed before
its publish step, so it banked nothing and the translations branch never got
created: it would retry and die forever.

CI sharding
- Matrix is now one job per (language, phase). The largest phase (19, 85
  lessons) is ~4.5h, comfortably under the limit; most are 1-1.6h. max-parallel
  raised to 20.
- Cache is per-(language, phase) (i18n/<lang>/.cache/<phase>.json) and each job
  publishes only its own i18n/<lang>/phases/<phase>/ slice, so disjoint shards
  merge without clobbering. translate_lessons.py gains --phase __root__ for the
  README and a per-phase cache path.

README translations (committed to main, not CI)
- scripts/build_readme_i18n.py rebuilds i18n/<lang>/README.md by replacing only
  the translated line-spans in a copy of the English README; the banner, badges,
  584-row lesson table, and every link are preserved byte-for-byte (round-trip
  identity asserted every run). Root-relative links are rewritten to resolve two
  levels deep.
- scripts/readme_translations.py holds hand-authored translations (highest
  quality for a landing page) for 12 languages: es, fr, pt, de, it, zh, ja, ko,
  hi, ar, ru, tr. Unmapped blocks fall back to English.
- README language bar points at the committed files and lists all 12. i18n/
  README.md is un-ignored; lesson artifacts stay ignored.
- CI guard: build_readme_i18n.py --check fails on drift; the counts bot
  regenerates them when it syncs the English stats block.

Language picker
- build.js emits only source + ci:true languages into langs.js, so the site
  switcher offers only languages the site can actually serve (English + the 5
  ci languages) instead of all 40 registry entries. Cache-bust bumped.

Fixes the timed-out run in the translate workflow.

* feat(learning): AI-native learning flow, learn-first homepage, evidence-backed learner wall

The course gains a terminal-first learning experience driven by any coding
agent, and the homepage leads with it.

Learning skills (skills/ canonical, .claude/skills/ mirror for cloners)
- start-learning: one-time onboarding. Three-question interview, placement
  quiz, writes LEARNING.md (mission, entry phase, 20-phase path, progress log,
  review queue) that every later session reads and updates.
- learn: the tutor loop. Warm-up recall from the previous lesson's quiz, then
  the next lesson taught interactively (problem, concept, build, use), then the
  post-stage quiz, then progress recorded. Works cloned or entirely over
  raw.githubusercontent.com; no setup required.
- course-guide: topic router over the README contents. A topic, question, or
  bug in; the exact lessons plus the right next command out.
- find-your-level: 503-lesson count, agent-neutral question flow, raw-fetch
  fallback for ROADMAP.md, hand-off to start-learning/learn.
- check-understanding: no-clone fallback fetching lesson docs from raw.
- npx skills add rohitg00/ai-engineering-from-scratch installs exactly these
  five for any SKILL.md agent (verified against this tree: 5 found, no dupes,
  none of the 388 lesson artifacts). CI guard: skills/ and .claude/skills/
  must stay identical.

README
- "Start learning in 30 seconds" section up top; Getting Started reordered
  with terminal learning as Option A; skills table covers all five; the
  toolkit section no longer claims npx installs the 388 outputs (it never
  did; they install via scripts/install_skills.py).

Homepage
- Masthead install card: the two-command flow with real agent marks and a
  copy chip (icon, hover invert, press scale, copied state, clipboard
  fallback). Colophon "cp" button upgraded to the same component and its
  label-swap no longer destroys the icon.
- Cycling figure plate fills the masthead's empty right side and explains
  the course: FIG_001 forward pass draws itself and runs signal pulses;
  FIG_002 types out a /learn agent session with a blinking caret; FIG_003
  learning curves with graph grid, area fill, on-curve milestone markers
  (computed on the bezier), axis arrowheads, and a rider dot. Sequential
  fade between plates so text can never double-expose; fixed per-tier
  width/offset so the plate never clips at any viewport; reduced-motion
  shows a static plate.
- Learner wall: seamless JS-filled marquee (clones halves until the loop
  covers any viewport, constant scroll speed, no blank gaps) with real
  marks for every name that has a redistributable SVG (simple-icons plus
  official Wikimedia files in site/logos/); IIT Bombay and Windsor are
  type-set because only fair-use logos exist. Anonymized pull quote from a
  Google AI engineer beneath. Grayscale with dark-theme invert.
- Mobile: command wraps instead of horizontal scrolling.
2026-08-02 21:57:30 +01:00
Rohit Ghumare dda194f840 fix(quiz): correct answer is always in the same position (slot B) (#381)
Every "Test Your Understanding" quiz placed the correct answer in option B.
Across the 2026 questions in 338 quiz files the correct answer sat at index 1
in 61.5% of cases (uniform would be ~25%), and 107 files had every answer at B,
making the quizzes guessable without reading them.

scripts/debias_quizzes.py rewrites each question's option order with a
deterministic, content-seeded permutation and updates the correct index to
follow the moved answer. It is idempotent: options are canonicalised to a sorted
base before permuting, so re-running produces byte-identical output. Questions
whose options reference each other by position ("all of the above", "both A and
B") are left untouched. The correct-answer value, the option set, and every
explanation are preserved exactly; only order and the index change.

Result: A 23.8% / B 26.3% / C 23.5% / D 26.4%.

The script doubles as a CI guard: `--check` exits non-zero if any quiz is not
de-biased, wired into the curriculum workflow so new lessons cannot regress.

Fixes #368
2026-08-01 14:24:15 +01:00
Rohit Ghumare 3227f17628 feat(i18n): free NLLB-200 translation pipeline, zero repo bloat (#379)
English stays canonical. Translations generate to a separate translations
branch (never main); the site, README, and books all consume them. Default
engine is NLLB-200 in the CI runner: no API key, no Vercel cost.

One pipeline, three surfaces, none bloating main:
- lessons: 503 docs -> translations branch, fetched at runtime with English
  fallback; English path byte-identical to before
- README: translated to the same branch, linked from the README header
- books: build_book.py --lang reads translated markdown and emits
  aiefs-vol{n}-{slug}-<lang>.epub/.pdf release assets (English fallback)

- languages.json: 40-language registry (FLORES-200 + ci flag) driving the
  script, the site switcher, and the CI matrix
- scripts/translate_lessons.py: prose-only walker keeps code/math/figures/
  tables/HTML/bold/links/metadata out of the model (byte-lossless across all
  503 lessons + README); per-language sha256 cache written per lesson so runs
  resume and never redo unchanged English; providers pluggable (nllb default)
- .github/workflows/translate.yml + translate-requirements.txt: one job per
  language, restores its cache, translates changed docs, pushes race-safe
- site switcher (40 languages, English fallback); build.js emits gitignored
  site/langs.js from the registry
- docs/i18n.md: architecture, no-waste guarantee, cost, quality sample
2026-08-01 12:53:35 +01:00
Rohit Ghumare d1cb9d1933 feat: book edition pipeline, fundamentals-first headlines, animated figures, verified bug fixes (#348)
Book pipeline: six-volume EPUB/PDF compilation built by CI from lesson
sources (book/, scripts/build_book.py, themed title pages with edition
stamps, site-matching print theme), attached to every GitHub release.
Homepage Books section and README section link the latest release.

Fundamentals-first headline policy across the course: 16 lesson titles
and 30+ taglines/section headings now lead with the concept (agent
state machines, actor model, role-based teams, memory paging, serving
engine internals, permission modes); framework and product names are
demoted to attributed in-body examples. README, ROADMAP, quizzes, and
prerequisite references synced. New agent-memory taxonomy section maps
memory types to representative implementations.

Vendor-neutral model policy: runnable defaults read the LLM_MODEL env
var with undated aliases; dated snapshot ids removed; multi-provider
phrasing in the setup lesson.

Lessons deepened with original material: prediction-game origins of
perplexity (05/16), scripted-era chatbot lineage 1950-2001 (05/17),
causal-triangle derivation from prefix averaging plus GPT-5 date fix
(07/07). Three new animated site figures back them (figures-history.js).

llms.txt now carries per-lesson raw markdown links so agents can fetch
full lesson text directly.

Bug fixes verified with executed repros: capstone solved flag keyed to
test results, 405B cost estimator overflow, f-string crash on
Python <3.12, no-torch demo path, negative stable BCE, all-zero
stationary distribution, inverted Cohens d, per-lesson quiz panel,
lesson-fetch retry with honest errors, decision-trees doc completed,
editor shortcuts, rustc run command, Docker python3.12 build with doc
sync, git lesson fork flow, FIPA receiver field, fnm under Rosetta,
15 curl-verified link fixes, remaining imdb dataset id spot.
2026-07-25 20:24:56 +01:00
Sheroy Cooper fef83fa67f fix(scripts): build README count catalog when absent (#334) 2026-07-25 17:26:45 +01:00
Rohit Ghumare 41ca13515f feat(phase-14/15): expand crewai-role-based-crews to phase median (#146)
* feat(phase-14/15): expand crewai-role-based-crews to phase median

* fix(phase-14/15): wire Task.context through SequentialCrew kickoff

* fix(phase-14/15): route tools by name, persist Flow memory, deterministic embed seed
2026-05-22 22:05:56 +01:00
Rohit Ghumare b90acdc8e3 chore(scripts): extract shared frontmatter parser into _lib (#143)
* chore(scripts): extract shared frontmatter parser into _lib

* fix(scripts): tighten _lib frontmatter delimiter + column-0 key anchoring
2026-05-22 20:12:15 +01:00
Rohit Ghumare 63dbe03418 Merge branch 'main' into feat/lesson-run-script 2026-05-20 21:41:29 +01:00
Rohit Ghumare a0e2bb26d2 Merge pull request #128 from rohitg00/feat/readme-counts-drift-check
feat(scripts): check_readme_counts.py auto-derives counts from catalog
2026-05-20 21:40:47 +01:00
Rohit Ghumare 998010698d fix(check_readme_counts): validate patterns before --fix early-return 2026-05-20 21:19:48 +01:00
Rohit Ghumare 08e58064c5 fix(lesson_run): header-only requires regex + DEVNULL stdout 2026-05-20 21:12:09 +01:00
Rohit Ghumare 337b66bf2b feat(scripts): check_readme_counts.py auto-derives counts from catalog
README.md hardcoded counts ("428 lessons", "373 skills, 99 prompts, and
6 agents", ...) drift every time the curriculum grows. catalog.json is
already filesystem-truth via build_catalog.py + the existing catalog-drift
CI gate, so pin the README counts to it.

The new script (stdlib only, 3.10+) declares a table of regex patterns
anchored to README context (badge URLs/alt text, hero blockquote, 'spine'
prose, toolkit section, sponsor section), each mapped to a totals.<field>
in catalog.json. Per-phase counts in the Contents table (12 lessons,
22 lessons, ...) are deliberately not matched.

CLI:
  python3 scripts/check_readme_counts.py            # exit 1 on drift
  python3 scripts/check_readme_counts.py --json     # machine-readable
  python3 scripts/check_readme_counts.py --fix      # rewrite in place

Wired in as a third job (readme-counts-drift) in
.github/workflows/curriculum.yml, runs after catalog-drift, strict by
default (no continue-on-error).

Ran --fix once to clear current drift:
  - 428 -> 435 lessons in 5 locations (badge URL, badge alt, hero
    blockquote, 'spine' prose, 'portfolio of N artifacts', sponsor
    section)
  - "6 agents" claim was fabricated: 0 outputs/agent-*.md files exist
    on disk. The toolkit directory tree was edited to drop agents/ and
    mcp-servers/ rows (folders exist but are empty), and the
    "373 skills, 99 prompts, and 6 agents" prose now reads
    "373 skills and 99 prompts".

Action SHAs pinned to actions/checkout@34e114876b
and actions/setup-python@a26af69be9,
persist-credentials: false on both.
2026-05-20 18:04:18 +01:00
Rohit Ghumare d160e50aed feat(scripts): link_check.py validates external URLs across all docs 2026-05-20 18:03:55 +01:00
Rohit Ghumare f838172e5f feat(scripts): lesson_run.py smoke-compiles every lesson's Python code 2026-05-20 18:02:22 +01:00
Rohit Ghumare a44109056d Merge pull request #123 from rohitg00/feat/build-catalog-script
feat(scripts): build_catalog.py emits filesystem-truth catalog.json
2026-05-20 16:27:14 +01:00
Rohit Ghumare 31fa139935 fix(install_skills): resolve conflict with main + address CodeRabbit findings 2026-05-20 16:22:11 +01:00
Rohit Ghumare 2499147c63 ci(curriculum): pin action SHAs, disable credential persistence, declare Python 3.10+ 2026-05-20 16:19:08 +01:00
Rohit Ghumare 9330ef31d4 fix(catalog): skip orphan lesson dirs with no docs/code/outputs/quiz 2026-05-20 14:58:39 +01:00
Rohit Ghumare 051c5cd875 ci(curriculum): drift gate on catalog.json + warn-only audit 2026-05-20 14:56:40 +01:00
Rohit Ghumare 4841068a5c feat(scripts): build_catalog.py emits filesystem-truth catalog.json 2026-05-20 14:28:36 +01:00
Rohit Ghumare 09a4c2ea16 fix(scripts): merge tree on --force, do not nuke existing files 2026-05-20 14:21:47 +01:00
Rohit Ghumare f216666e0c feat(scripts): install_skills.py copies every course skill into your agent 2026-05-20 14:17:10 +01:00
Rohit Ghumare ae0190e4ea feat(scripts): scaffold_workbench.py drops pack into any target repo 2026-05-20 14:12:22 +01:00
Rohit Ghumare 26d3c9a9ed feat(scripts): audit_lessons.py invariant checks for every lesson dir 2026-05-20 13:58:00 +01:00
Rohit Ghumare 306d347a7b chore: add scaffold-lesson.sh
Generates a lesson directory skeleton with code/, notebook/, docs/,
outputs/ and a docs/en.md prefilled from LESSON_TEMPLATE.md. Enforces
NN-kebab-case slug and rejects overwrites. Prints the exact ROADMAP.md
markdown-link row and atomic commit command so contributors cannot
accidentally skip either.
2026-04-22 14:47:52 +01:00