# Git branches and tags — how this repository is organised **Snapshot:** 2026-10-23, after `v3-exceptions`. `master` = `96a3080` (the exceptions M5 docs commit) plus this map update; `origin/master` = `2a30d8c`. The exceptions M1–M5 commits are local and **not pushed yet**. 304 tags (302 `v3-*` checkpoints). Mental model: > **Branches move; tags don't.** Only `master` is active. Tags are > labels on commits (checkpoints), not lines of development. ## Branches | Branch | State | What it is | | --- | --- | --- | | **`master`** | `96a3080` + map, 5 commits ahead of origin | The only active branch; all current work is here. | | `ast-stage-c` | `0f611c0` (2026-10-08), local only | Old stage branch, fully merged into master. Stale. | | `generics-inc1` | `6639c19`, 6 commits behind `origin/generics-inc1` | Old generics work, fully merged into master. Stale. | | `resolve-check` | `95ca4d6`, in sync with origin | Old branch merged into master. Stale. | `git branch --merged master` lists all of them: **nothing is unmerged**. The old branches may be deleted locally with `git branch -d ast-stage-c generics-inc1 resolve-check` (optional and harmless). Remote branches: `origin/master`, `origin/generics-inc1`, `origin/resolve-check` (there is no `origin/ast-stage-c`). ## Feature tags — the session's real history Each points at the commit that landed a feature, all with green gates: | Tag | Commit | Work | | --- | --- | --- | | `v3-corpus-triage` | `aa4f49b` | PIM multi-index arrays, typed subranges, ordinal `FOR` (+12) | | `v3-empty-string` | `f87bcc9` | ISO `""` as `CHAR` (+6) | | `v3-libc-prototypes` | `c02fd41` | typed libc prototypes, `printf` varargs (+6) | | `v3-system-types` | `713650f` | SYSTEM sized types + qualified `SYSTEM` (+8) | | `v3-proc-types` | `f236600` | ISO procedure-type syntax (+4) | | `v3-byte` | `7621f16` | true 8-bit `BYTE`/`SBYTE` | | `v3-word16` | `a5d0f16` | true 16-bit `WORD16`/`CARDINAL16`/`INTEGER16` | | `v3-sysclock` | `4d05afe` | ISO `SysClock` (+2) | | `v3-smallfix` | `87e8605` | small conformance items (+6) | | `v3-rangechecks` | `54d84b9` | runtime subrange range checks (+3 trap tests) | | `v3-packedset` | `6b2df4c` | ISO `PACKEDSET`, 1/2/4-byte storage | | `v3-exceptions` | `02b3763` | ISO exceptions M1–M4: parser, runtime, libraries, traps | These are immutable checkpoints. Useful commands: ```sh git show --stat v3-smallfix git diff v3-sysclock v3-smallfix # what the last step changed ``` ## Session tags — why there are three similar names | Tag | Points at | Meaning | | --- | --- | --- | | `v3-session-2026-10-19` | `c9c1121` | Previous session's final summary. | | `v3-session-2026-10-23` | `2d1c658` | **Moving** session tag, advanced once for the range-check summary. | | `v3-session-2026-10-23-end` | `adba8eb` | Immutable PACKEDSET/range-check stop point (earlier the same day). | | `v3-session-2026-10-23-exceptions-end` | `96a3080` | **Final immutable 2026-10-23 exceptions session tag.** | | `v3-session-2026-10-22` | `c2664ac` | **Moving** session tag. Advanced several times and force-pushed to the final commit. | | `v3-session-2026-10-22-final` | `0e81019` | **Early checkpoint** created before the session continued (byte/word16/SysClock/smallfix came after). Historical noise now. | | `v3-session-2026-10-22-end` | `c2664ac` | **Final immutable session tag.** Use this one. | For "where did the 2026-10-23 session end?": - **canonical:** `v3-session-2026-10-23-end`; - `v3-session-2026-10-23` is the earlier range-check checkpoint and is a *moving* tag by convention. For "where did the 2026-10-22 session end?": - **canonical:** `v3-session-2026-10-22-end` (or `master`, same commit); - `v3-session-2026-10-22` is equivalent now, but it is a *moving* tag by convention — avoid moving tags in the future; - `v3-session-2026-10-22-final` is **not** the end; it is an earlier checkpoint at `0e81019`. To remove the stale checkpoint (tag only, no commits/code): ```sh git tag -d v3-session-2026-10-22-final git push origin :refs/tags/v3-session-2026-10-22-final ``` ## Why 304 tags? The project convention is one `v3-*` tag per green step across all sessions (two-phase parse slices, generics increments, Unicode, stdlib, …). They are a searchable history of passing states, not branches. `git tag --list | wc -l` = 304 (302 `v3-*`) is expected; only the recent ones above matter for the current session. ## Current state - `master` = `96a3080` + this map, **5 commits ahead** of `origin/master` (`2a30d8c`). - `v3-exceptions` and `v3-session-2026-10-23-exceptions-end` are local; push them with `master` when ready. Earlier PACKEDSET/history tags are already on the remote. - Next session: start from `master` and read `docs/handoff-2026-10-23-next.md`.