Skip to content

aptitude-course — repo map

Deep reference for the aptitude-course repository, generated from source. For the product-level story see the product page.

This is a content repository, not an application: the 36-week APTITUDE course corpus as Markdown, plus a small Python toolchain that makes it machine-readable. Its one consumer-facing artifact is manifest.json, the schema-versioned index the adepthood app vendors at a pinned SHA (CONSUMPTION.md:17-25).

Top-level map

Path Purpose Contracted?
markdown/<NN-stage>/ The course corpus: 10 stage folders (01-beige10-clearlight) of numbered chapter files with YAML frontmatter Yes — via manifest path refs
markdown/resources/ 5 non-stage-gated site resources (about, aptitude-stages, archetypal-wavelength, liminal-creep, wavelength-explainer) Yes — site_resources[]
manifest.json Generated machine-readable index (schema_version: "1.1.0", 209 chapters, 5 site resources, 10 stage intros) Yes — the contract itself
schema/manifest.schema.json JSON Schema (draft 2020-12) for the manifest (schema/manifest.schema.json:1-8) Yes
scripts/ The 4-script toolchain (see Manifest pipeline) No — internal
google_docs/ Original Google-Docs exports (.zip + .html) and the curriculum CSV database No — explicitly internal (CONSUMPTION.md:31-39)
markdown/backup/, markdown/meta/, markdown/images/ Pre-normalization backups, generated corpus statistics, extracted images No — internal
convert_docs.sh Legacy one-shot importer: unzips google_docs/*.zip and pandoc-converts each HTML export to GFM in markdown/ (convert_docs.sh:4-16) No — internal
CONTENT_FORMAT.md Canonical spec: Markdown dialect + frontmatter schema (CONTENT_FORMAT.md:1-14) Governs the contract
CONSUMPTION.md Canonical spec: published surface, semver rules, release tagging, update handshake Governs the contract
.github/workflows/content-ci.yml Content CI: manifest drift check, markdownlint, internal-link check Gatekeeper

The corpus, enumerated

209 chapters across 10 stages (counts derived from manifest.json; each stage folder also holds a 00-table-of-contents.md and README.md, which the generator deliberately skips — scripts/build_manifest.py:91-93):

stage Folder Archetype (per CONTENT_FORMAT.md §4) Chapters
1 01-beige Beige — Survival 17
2 02-purple Purple — Mythic 15
3 03-red Red — Power 14
4 04-blue Blue — Conformity 15
5 05-orange Orange — Rationality 29
6 06-green Green — Plurality 24
7 07-yellow Yellow — Integrative 26
8 08-teal Teal — True Self 24
9 09-ultraviolet Ultraviolet — Unity 21
10 10-clearlight Clear Light — Emptiness 24

All 209 chapter entries have content_type: chapter; release_day ranges 0-28; every manifest path resolves on disk (verified against the checkout). Each of the 10 stages contributes exactly one derived stage_intros[] entry (its chapter 1), and site_resources[] carries the 5 resource essays.

The Markdown dialect (what a chapter may contain)

Bodies are CommonMark with a deliberately small feature set — headings, emphasis, lists, links, images, blockquotes, code, GFM pipe tables, thematic breaks (CONTENT_FORMAT.md §2.1). Raw HTML is banned outright because "the app renders Markdown natively … and does not execute HTML" (CONTENT_FORMAT.md §2, §2.2), and CI enforces it: the markdownlint config runs with "default": false and switches on only no-inline-html plus four structural rules (no-reversed-links, no-empty-links, no-missing-space-atx, no-multiple-space-atx) (.markdownlint-cli2.jsonc:8-17) — stylistic rules are deliberately off because "the corpus is literary prose" (.markdownlint-cli2.jsonc:3-6).

Frontmatter contract (per chapter, CONTENT_FORMAT.md §3.1): required id, stage (1-10), chapter, order, slug (must match the filename slug), title, content_type (chapter | essay | prompt | video), release_day (≥ 0); optional summary and media[]. Identity rules: id unique repo-wide and never reused; (stage, chapter) unique; slug derived mechanically from the filename (CONTENT_FORMAT.md §3.2). Example, verbatim from markdown/01-beige/01-what-is-beige.md:1-11:

---
id: beige-1
stage: 1
chapter: 1
order: 1
slug: what-is-beige
title: "What is Beige?"
content_type: chapter
release_day: 0
media: []
---

Curriculum database (internal source material)

google_docs/database_of_course_curriculum/ holds six CSVs distilled from the original course spreadsheet — internal to this repo but the shared ancestor of the ecosystem's ontology:

CSV Rows (incl. header) Shape
APTITUDE Complete Map.csv 11 One row per stage: Week, Mode, Spiral Dynamics Color, Growing Up Stage, Free Will relationship, books, practice, habit, and the four AQAL-quadrant exercises (I/IT/ITS/WE)
The Archetypal Wavelength - Modes of the Wavelength.csv 18 dosage,stage,mode,orientation,rising,peaking,withdrawal,diminishing,bottoming out,restoration — Medicine/Toxicity rows per stage
The Archetypal Wavelength - Self-Care Strategies.csv 52 Per-phase self-care strategies
APTITUDE - Quotes.csv 58 Course quotes
APTITUDE - Alternative Practices.csv 16 Alternative practices per stage
APTITUDE - Book Recommendations.csv 11 Reading list

The same mode/orientation/six-phase columns appear as WavelengthWatch's seed CSVs (backend/data/a-w-curriculum.csv there) and as the six phase names in wavelength-demo (src/data/modes.ts:14-21 there) — this spreadsheet is the common origin.

Relationship to adepthood

The adepthood app is the manifest's consumer: it "vendors a pinned commit of this repository (the SHA lives in the app's CONTENT_VERSION)" and may rely on exactly three surfaces — manifest.json, the Markdown bodies it references, and their assets (CONSUMPTION.md:17-30). Reads go through the manifest, never by globbing; durable identity is frontmatter id (CONSUMPTION.md:41-48). Details in Consumption contract.


Grounded in aptitude-course@064c6ca, 2026-07-31.