# Unified CUB registry, 2026-08-15 — R2 locator

Status: uploaded to R2 and verified directly (`wrangler r2 object get`
byte-matches the local file for all 4 objects). NOT yet visible via the
public `lib.trustfortress.ai` API surface (`/api/list`, `/objects/...`
both 404 as of upload time) — that surface reads from a D1 catalog that
syncs via a 6-hour cron or a protected manual `/api/reindex`
(`REINDEX_TOKEN`, not held in this session). Expect it live within one
cron cycle of the upload timestamp below, or immediately if reindexed
manually.

| Item | Value |
| --- | --- |
| Bucket | `trustfortress-resource-library` |
| Prefix | `cubie-tf/unified-cub-registry/2026-08-15/` |
| Owner | `iamdatanick/cubie-tf` (union index also covers `cubie-research`) |
| Source: cubie-tf | branch `worktree-cub-3x-verify-2026-08-14` @ `be240d7eb37051829f7f77ebb257d27c6d7ff6a6`, **PR #1394 unmerged** as of upload |
| Source: cubie-research | `origin/main` @ `d6e2d7f21a5640b84b955fcc9a527564d81b0966`, clean checkout independent of any local in-progress branch |
| Generator | `cubie-research/tools/gen_unified_cub_registry.py`, `CUBIE_TF_REF` override (see Reproduce) |
| Reason outside Git | Full registry (2,597 rows) is a generated artifact, not source; matches the existing R2-not-Git pattern used for the 2026-08-13 predecessor export |
| Predecessor | `C:\Users\NickV\Downloads\unified_cub_registry_2026-08-13.{json,csv}` (2,593 rows) — delivered to Downloads only, never published to R2; this is the first R2 publish of this artifact family |

## Why this isn't the canonical live registry publish

This export is generated from an **unmerged** PR branch, not `origin/main`.
`tools/validate_central_registry.py --strict` (the gate `post_registry.ps1`
runs before any publish to the canonical `lib.trustfortress.ai/api/cubs`
registry) was run against it deliberately and reports expected
`stale_head`/`canonical_content_drift` against `origin/main` — this is
correct, not a defect: it confirms the diff is exactly this branch's own
changes (Tasks 4/5/8/11 authored content, Task 10's 34 aliases + 17
reverse-mapping flips) and nothing else. `post_registry.ps1` was
deliberately NOT run — publishing unreviewed branch content as the
canonical public API would misrepresent still-open work as settled. Once
PR #1394 merges, the canonical registry needs the same manual
`gen_unified_cub_registry.py` + `post_registry.ps1` run against
`origin/main` (proven fallback path — GitHub Actions auto-publish has a
known recent history of billing-related wedges; receipt convention:
comment on `cubie-tf` issue #883).

## Objects

| Object | Bytes | SHA-256 | Public URL |
| --- | ---: | --- | --- |
| `unified_cub_registry_2026-08-15.json` | 2,217,885 | `ada51c8eed244cef9b5e99c729f28907b1f3410b6b860cc5f7095753791dbd54` | `https://lib.trustfortress.ai/objects/cubie-tf%2Funified-cub-registry%2F2026-08-15%2Funified_cub_registry_2026-08-15.json` |
| `unified_cub_registry_2026-08-15.csv` | 1,261,722 | `18833977478b2a67e1d57a3f252b4b2667cee0e836265dc289e0b02b80de77fd` | `https://lib.trustfortress.ai/objects/cubie-tf%2Funified-cub-registry%2F2026-08-15%2Funified_cub_registry_2026-08-15.csv` |
| `unified_cub_registry_2026-08-15.jsonl` | 2,146,874 | `468e0c528d8b810ba93f52d52cb80d9c2a7eff13fd77ab969adcd200a23023c7` | `https://lib.trustfortress.ai/objects/cubie-tf%2Funified-cub-registry%2F2026-08-15%2Funified_cub_registry_2026-08-15.jsonl` |
| `FINAL_SHEET_CUB_SESSION_2026-08-15.md` | 25,059 | `8c87bb41f4754302c54a0117133aaae790b9b0414e8348f6c9b9ef02d733adba` | `https://lib.trustfortress.ai/objects/cubie-tf%2Funified-cub-registry%2F2026-08-15%2FFINAL_SHEET_CUB_SESSION_2026-08-15.md` |

`.csv` and `.jsonl` are row-for-row flattenings of the same 2,597 `cubs[]`
entries in the `.json` (nested `files`/`file_shas`/`shas` objects rendered
as `key=value; key=value` in CSV cells, kept as nested JSON per line in
JSONL). `FINAL_SHEET...md` embeds real, byte-accurate Coq statement text
(git-shown at the branch head, not paraphrased) for the 42 theorems this
session authored, re-anchored, or investigated, plus the Task 10/11 owner
decisions still open (CUB-3046-3050 ID-collision renumber; CUB-1673 +
95-117-ID vacuous-stub pattern scoping) and an explicit report on
triple-kernel status (Lean kernel-checked live; Coq/Verus PENDING — no
toolchain on PATH in this workspace).

## Reproduce

```bash
CUBIE_TF_PATH=/path/to/cubie-tf \
CUBIE_TF_REF=be240d7eb37051829f7f77ebb257d27c6d7ff6a6 \
python3 cubie-research/tools/gen_unified_cub_registry.py --out unified_cub_registry_2026-08-15.json
# cubie-research side reads its own working tree (not ref-parameterized) --
# run from a clean origin/main checkout, not a checkout with local
# in-progress branches, to avoid picking up unrelated unpushed work.
```

Per-file SHA-256 in the export's own `file_shas` map lets any row's proof
content be independently re-derived and re-hashed against the recorded
source head, per the generator's own `meta.reproduce` block.
