Source of Truth
This project treats source code, tests, and authored notes as durable study material. Generated docs and PDFs must be reproducible from those inputs, and employer-specific interview prep must never enter this tree. This page is the whole contract.
Authored Material
| Path | Purpose |
|---|---|
src/algo/ | Algorithm implementations and docstrings |
tests/ | Examples and property-based correctness checks |
src/concepts/ | Technical concept modules |
src/practice/ | Code-reading and decomposition exercises |
reference-sheets/ | Printable notes, quick-reference sheets, and the practice method (sheets 10–11) |
reference-sheets/appendix-topics.json | Structured appendix topics rendered into the booklet compile-safely |
Generated Material
| Output | Command |
|---|---|
booklet.tex / booklet.pdf / docs/assets/booklet.pdf | just packet |
reference-sheets/pdf/*.pdf | just pdf-all |
site/ | just docs-build |
Three Layers
| Layer | What | Where | Public? |
|---|---|---|---|
| L1 — knowledge | algorithms, tests, concepts, reference sheets 01–09 | this repo | ✅ |
| L2 — practice method | sheets 10–11, just interview / just rep, spaced repetition | this repo | ✅ |
| L3 — private overlay | employer/panel front & back matter, people, dates, tailored positioning, personal rep logs | a private downstream repo | ⛔ never here |
The distinction that keeps this publishable:undefinedis a method ("how to stay calm and narrate at a whiteboard" — a general, teachable skill);undefinedis a dossier (who is on Tuesday's panel). Method publishes; dossier never touches this tree. If a sentence only makes sense for one employer, it is L3.
The Graph Edge Is One-Way
private superset repo THIS REPO (public)
───────────────────── ──────────────────
bazel_dep + path/git override ──────▶ module(name = "dsa_study_packet")
\includepdf{@dsa_study_packet //:booklet (neutral PDF)
//:booklet}
+ private front/back matter (L3)
→ private //:study_packets
The private repo depends on this one; this repo knows nothing about any downstream. Composition is overlay, not bundle: the neutral booklet is compiled here from this tree (so it cannot contain employer text), and a private lane \includepdfs the finished PDF between its own front and back matter. The two bodies of text only ever meet as adjacent pages in a private output — never in source. Delete the private repo and this SSOT is unchanged and complete. examples/overlay-demo/ is a self-contained, fork-me demonstration of the pattern with placeholder content.
The Boundary Is Enforced
scripts/check_public_boundary.py (just public-boundary) fails if any tracked file contains secret-shaped content or secret-file paths: tracked SOPS or dotenv files, age keys, GitHub tokens, private-key blocks, legacy secret tripwires. Name-specific tripwires (employers, panels, private repo names) are deliberately not listed here — the private downstream repo scans this tree with its own marker list, so the public guard cannot itself disclose what it guards against. Neutrality is a machine check, not a promise. Personal rep scores (.challenges/reps.md) are gitignored by default — publish aggregates deliberately, or not at all.
Who Owns The Practice Method
L2 is one loop described from five angles. Each surface owns exactly one question about it; none restates another's answer.
| Surface | Owns | Does not own |
|---|---|---|
| Sheet 10 | the CLARP method + self-review rubric — how to perform | no calendar, no daily loop |
| Sheet 11 | the 14-day calendar + daily loop — when. Its prose feeds scripts/practice_day.py closely — edit sheet 11 itself for loop changes, never this table | no method detail, no rubric |
| Evidence page | why — research citations and the video shelf | no calendar, no rubric scoring |
AGENTS.md persona | how the resident interviewer behaves during a rep; regenerates the .github surfaces via just gen-agents | no citations, no calendar |
Skills (practice-day, interviewer) | routing — which rung, which just command runs next | no method content of its own |
A change landing on the wrong row is the drift tell: a calendar edit inside sheet 10, a rubric row inside the evidence page, or a citation inside AGENTS.md all mean the edit belongs one row up or down this table instead.
Runbook
| I want to… | Do this | Layer |
|---|---|---|
| Add/extend a study or practice sheet | reference-sheets/NN-*.md + one-line docs/reference/NN-*.md wrapper; nav + PDF pick it up | L1/L2 |
| Add an algorithm | src/algo/<topic>/<problem>.py + tests; booklet and site regenerate | L1 |
| Prep for a specific employer/panel | Create a lane in the private downstream repo; author front/back matter there | L3 |
| Keep practice tapes / mock scripts / rep scores | Private repo or gitignored local dir — never tracked here | L3 |