# Stocks in the Future — system map An edit map of this Rails app: what the nouns are, how they move, and what else moves when you change one. **The app tree is the source of truth** — cards cite `path:line` and never restate behaviour. Read a card, then read the source it points at. Built on ICM: folders carry sequencing, hierarchy carries context, files carry state. ## Where things live | Folder | What it holds | |---|---| | `objects/` | one card per noun, clustered by how an editor asks | | `processes/` | the six movements that actually run | | `effects/` | change-impact index — "changing X? open these cards" | | `_meta/` | schema: the closed set of node types and labels | | `_templates/` | blank object/process cards — a new card is a copy | ## Route by what you are doing | If you are… | Go to | Then stop at | |---|---|---| | orienting cold | `CONTEXT.md` | universes + traps, then one card | | asking "what is X?" | `objects/_index.md` | the one card it names | | asking "how does X happen?" | `processes/CONTEXT.md` | the one movement card | | about to change something | `effects/CONTEXT.md` | the cards it lists | | checking coverage | `objects/_index.md` | `status:` column | ## Names that collide Read this table before editing. Full detail and citations: `CONTEXT.md`. | You will hear | It actually is | |---|---| | "SIF dollars" | `portfolio_transactions.amount_cents` — integer cents, no `Money` type | | "balance" | derived, never stored. `portfolios` has **no cash column** | | "grade" | two things: `Grade` = level 5–8; `GradeEntry#math_grade` = letter `"A+"`..`"F"` | | "admin" | a boolean column, **not** an STI type. Only `Student`/`Teacher` are types | | "log in" | by `username`, **not** email | | "the student's classroom" | two rival paths: `users.classroom_id` **and** `classroom_enrollments` | | "Stocks for Good" | same app. Code says `StocksInTheFuture` | ## The one rule A card may be wrong; the source cannot. If a card and the code disagree, the code wins — fix the card the same day and set `status: stale` if you cannot. --- `AGENTS.md` and `routing.md` are generated copies of this file. Never hand-edit them — edit `CLAUDE.md` and run `_meta/sync-twins.sh`.