Make the sensing loop durable and pin the reserve to Scaleway

The weekday brief only counts when the file is on origin/main. Hub
events without git objects are failures. The open-weight SoT moves
from the VAULT 850 GiB quota to a dedicated Scaleway bucket (One Zone
IA for R, Glacier for S) so V4-Flash and K3 are economically in-scope.

Catalogs the real DeepSeek-V4-Flash-0731 (MIT ~167 GiB MoE, not 12B)
and nominates Qwen3.8-27B. Bucket create remains FI-WP-0004-T08.

Assistant: grok
Assistant-Session: 01a09c6a-1cfc-75b1-a78d-c13eaf22241d
This commit is contained in:
tegwick 2026-09-13 22:45:43 +02:00
parent 8832652ad3
commit a78187c33e
18 changed files with 1125 additions and 226 deletions

View file

@ -1,17 +1,19 @@
# Backup storage policy — open-weight model reserve
**Status:** facility + path pinned (workstation VAULT HD)
**Status:** facility pin **Scaleway Object Storage** (2026-09-13)
**Related:** `INTENT.md`, `SCOPE.md`, `inventory/collection-policy.md`,
`docs/decisions/2026-07-24-nas-strategic-reserve.md`
**Adjacent:** `disaster-control` BackupPolicy (platform backups — different concern)
`docs/decisions/2026-09-13-scaleway-object-reserve.md`
**Supersedes storage pin:** 2026-07-28 VAULT HD (now staging only)
**Adjacent:** `disaster-control` BackupPolicy and `rapp-postgres` WAL
archive — **different buckets, different lifecycles**
---
## Purpose
Define where Freedom Intelligence stores **open-weight model blobs** (and justified
companions), how much capacity we allow, and how this reserve relates to other
lab backup facilities.
Define where Freedom Intelligence stores **open-weight model blobs** (and
justified companions), how much we allow ourselves to spend, and how this
reserve relates to other lab backup facilities.
Git never stores weight tensors. Git stores:
@ -25,16 +27,16 @@ Git never stores weight tensors. Git stores:
| Requirement | Policy |
| ----------- | ------ |
| **Class** | Backup / bulk durable storage — **not** hot cluster PVCs or app disks |
| **Facility** | Workstation VAULT HD (`D:`) under `D:\vault\coulomb\` (interim pin 2026-07-28) |
| **Durability** | Survives WSL rebuilds; weights live on the VAULT volume, not the git/WSL root |
| **Performance** | Sequential read for restore/training pull is enough; low latency not required |
| **Access** | Operator and approved lab hosts only; not a public mirror |
| **Separation** | Do not co-mingle with age-encrypted operational backups (Forgejo dumps, k3s state) without a clear subdirectory and different lifecycle rules |
| **Class** | Backup / bulk durable object storage — **not** hot cluster PVCs |
| **Facility** | Scaleway Object Storage `nl-ams` via `reef-storage` |
| **Durability** | Provider 11-nines claim; independent of Host Europe `railiance01` and of the workstation HD |
| **Performance** | Sequential restore for training/inference pull is enough |
| **Access** | Operator and approved lab hosts; not a public mirror |
| **Separation** | **Never** the postgres backup bucket (`railiance-platform-pg-backup` expires at 30 days) |
Platform backup paths such as `/opt/backup/railiance/{infra,cluster}/` and
`~/.cache/railiance/backups/` are **operational recovery** lanes. Model weights
belong on the **VAULT model tree**, not on railiance hot disks.
`~/.cache/railiance/backups/` are **operational recovery** lanes. Model
weights belong in the FI object bucket.
---
@ -42,56 +44,33 @@ belong on the **VAULT model tree**, not on railiance hot disks.
| Field | Value |
| ----- | ----- |
| **Host / facility** | Workstation-attached bulk HD **VAULT** (Windows `D:`) |
| **Raw capacity** | ~1.86 TB total (~1.76 TB free as of 2026-07-28 pin) |
| **Base path (Windows)** | `D:\vault\coulomb\freedom-intelligence\` |
| **Base path (WSL, when D: automounted)** | `/mnt/d/vault/coulomb/freedom-intelligence/` |
| **Layout under base** | See [On-disk layout](#on-disk-layout) |
| **Mount on lab hosts** | Local attach on operator workstation; WSL via drvfs `D:``/mnt/d` when enabled |
| **Credentials** | Local filesystem ACL on the workstation HD; never commit secrets |
| **Facility** | Scaleway Object Storage, region `nl-ams` |
| **Endpoint** | `https://s3.nl-ams.scw.cloud` |
| **Bucket** | `railiance-fi-open-weight-reserve` (planned until FI-WP-0004-T08) |
| **Attributes** | `reef:storage/substrate/object-stores/fi-open-weight-reserve.yaml` |
| **Credentials** | OpenBao / `railiance-platform` — never git |
**Interim note:** Earlier policy assumed a dedicated ~1 TB NAS. Operator chose this
VAULT volume under `D:\vault\coulomb\` for now. Soft quota **850 GiB** for the
model tree still applies (self-imposed discipline; disk is larger).
**Local staging (not SoT):** workstation VAULT HD
`D:\vault\coulomb\freedom-intelligence\` /
`/mnt/d/vault/coulomb/freedom-intelligence/` for `huggingface_hub`
downloads and an optional R-spine cache.
Do **not** bulk-download multi-GB models into this git workspace or into hot
root filesystems (`/` on WSL, `C:`).
Do **not** bulk-download multi-GB models into this git workspace or into
hot root filesystems (`/` on WSL, `C:`, railiance PVCs).
### Path shape (pinned)
### Prefix shape (pinned)
```text
D:\vault\coulomb\freedom-intelligence\ # Windows
/mnt/d/vault/coulomb/freedom-intelligence/ # WSL when D: mounted
├── models/
│ └── {org}__{name}/
│ └── {revision}/
│ ├── blobs/ # weight files, shards
│ └── MANIFEST.txt # optional local copy of hashes
├── companions/ # adapters, tokenizers only when separate
└── staging/ # incomplete downloads; not catalog-ready
s3://railiance-fi-open-weight-reserve/
├── models/{org}__{name}/{revision}/ # R / W (One Zone IA)
├── strategic/{org}__{name}/{revision}/ # S (Glacier)
├── companions/
├── staging/
└── manifests/{org}__{name}/{revision}/MANIFEST.json
```
Map each `{org}__{name}/{revision}` to an inventory catalog entry.
Directories `models/`, `staging/`, and `companions/` were created 2026-07-28.
---
## On-disk layout
| Path element | Rule |
| ------------ | ---- |
| `org__name` | Hugging Face-style id with `/``__` |
| `revision` | Git commit SHA, tag, or release id used at download time |
| `blobs/` | Actual files; prefer original names from source |
| `staging/` | Incomplete transfers; purge or resume; never mark collected until complete + verified |
Optional layout tags (directory name or catalog field):
| Tag | Meaning |
| --- | ------- |
| runnable | Fits current run envelope (R tier) |
| strategic | Capability reserve; may exceed current hardware (S tier) |
`collection.storage_path` is the `s3://` URI.
---
@ -99,20 +78,24 @@ Optional layout tags (directory name or catalog field):
| Parameter | Policy |
| --------- | ------ |
| **Device** | VAULT HD (`D:`) — model tree under `D:\vault\coulomb\freedom-intelligence\` |
| **Soft quota (model reserve)** | **850 GiB** (self-imposed; disk is larger) |
| **Hard stop** | **920 GiB** used under the freedom-intelligence base path |
| **Growth review** | When catalog total ≥ **70% soft quota (~595 GiB)** |
| **Gate** | **Euros per month**, not GiB |
| **Soft budget** | **€15 / month** ex VAT for this bucket |
| **Hard backstop** | Founder Scaleway project billing alert (no provider euro hard-stop) |
| **Growth review** | When the running month is ≥ **70% of soft budget (~€10.50)** |
| **Per-pull threshold** | See `inventory/collection-policy.md` |
| **Eviction** | Prefer drop **W** (watch) and easily re-obtained quants; protect unique **S** SOTA bases and the **R** spine |
| **Eviction** | Prefer drop **W** and easily re-obtained quants; protect unique **S** SOTA bases and the **R** spine |
### Portfolio guidance on 1 TB
Rough cost (2026-09-13 Scaleway list prices):
* Always keep the **runnable spine (R / former P0)** resident.
* Use remaining space for a **small number of most-capable open models (S)**,
preferably well-provenance compressed weights when full precision would exhaust the disk.
* Do **not** attempt to mirror entire HF orgs.
* Full bf16 of multiple 600B-class models will **not** fit; prioritize top capability identities.
| Mix | Class | ≈ € / month |
| --- | ----- | ----------: |
| R-spine ~45 GiB | One Zone IA | 0.54 |
| V4-Flash ~167 GiB | Glacier | 0.42 |
| Kimi K3 ~1454 GiB | Glacier | 3.69 |
| Those three together | | **~4.65** |
Glacier restore is €0.009/GB — pay it when we actually need the weights
on a GPU host.
---
@ -121,12 +104,14 @@ Optional layout tags (directory name or catalog field):
For every completed collection:
1. Record source URL and revision in the catalog entry.
2. Store checksums (`sha256` of each blob or upstream manifest digest).
2. Store checksums (`sha256` of each blob or upstream manifest digest)
in `MANIFEST.json` (local staging **and** `manifests/` prefix).
3. Record download date (UTC) and downloader identity.
4. Prefer official org releases over anonymous re-uploads.
5. Keep license text or SPDX id in catalog; refuse unclear licenses.
Verification: **catalog claims must match on-disk checksums** before status `collected`.
Verification: **catalog claims must match object checksums** before
status `collected`.
---
@ -134,11 +119,11 @@ Verification: **catalog claims must match on-disk checksums** before status `col
| Class | Retention |
| ----- | --------- |
| **Strategic capability (S)** | Keep until explicit deprecation or displacement by a clearly stronger open successor |
| **Runnable spine (R)** | Keep while still the lab default for local ops / FT |
| **Strategic capability (S)** | Keep until explicit deprecation; Glacier |
| **Runnable spine (R)** | Keep while still the lab default; One Zone IA |
| **Working set** | Active experiment bases + optional one superseded revision |
| **Staging** | Max 14 days incomplete, then purge |
| **Deprecated / evicted** | Metadata retained in catalog; blobs may be deleted |
| **Deprecated / evicted** | Metadata retained in catalog; objects may be deleted |
---
@ -146,35 +131,37 @@ Verification: **catalog claims must match on-disk checksums** before status `col
| Topic | Policy |
| ----- | ------ |
| **At rest** | NAS default; extra age/GPG of multi-hundred-GB trees optional |
| **In transit** | Trusted lab network / local attach |
| **Offsite copy** | Optional later; coordinate with disaster-control if added so model bulk does not break ops backup SLAs |
| **At rest** | Scaleway provider-managed |
| **In transit** | TLS to `s3.nl-ams.scw.cloud` |
| **Workstation copy** | Optional R-spine on VAULT; not a second SoT |
| **Ops backups** | Do not mix with Forgejo/k3s dumps |
---
## What must not live here
* Closed weights or artifacts whose terms forbid offline retention
* Secrets, API keys, customer data, or ungoverned training corpora with personal data
* Operational backups (databases, k3s state, Forgejo dumps) as the primary home
* Git LFS dumps of full model trees as a substitute for the NAS
* Closed weights or artifacts whose terms forbid offline retention
* Secrets, API keys, customer data, or ungoverned training corpora
* Operational backups (databases, k3s state, Forgejo dumps)
* Git LFS dumps of full model trees
* Objects in `railiance-platform-pg-backup`
---
## Operator checklist
- [x] Choose facility: bulk durable storage for model reserve (2026-07-24 intent)
- [x] Set soft quota: **850 GiB** / hard stop **920 GiB**
- [x] Pin path: **`D:\vault\coulomb\freedom-intelligence\`** (2026-07-28)
- [x] Create `models/`, `staging/`, `companions/`
- [x] Document Windows + WSL path forms above
- [x] Ensure WSL can see `D:` (`/mnt/d`) when downloads run from Linux (verified 2026-07-28)
- [x] Choose facility: Scaleway object storage (2026-09-13)
- [x] Set capacity gate: **€15 / month** soft
- [x] Pin prefix layout above
- [ ] Create bucket + scoped key (FI-WP-0004-T08)
- [ ] Smoke PUT/GET
- [ ] First S collect: DeepSeek-V4-Flash-0731 (FI-WP-0004-T09)
### Pin log
| Date | Operator | Change |
| ---- | -------- | ------ |
| 2026-07-24 | foundation | Policy created; path unpinned |
| 2026-07-24 | operator direction | Facility intent = 1 TB local NAS; soft quota 850 GiB; strategic unrunnable models in scope |
| 2026-07-28 | operator direction | **Interim pin:** workstation VAULT HD `D:\vault\coulomb\freedom-intelligence\`; layout created; soft quota retained |
| 2026-07-28 | operator | WSL mount verified: `D:``/mnt/d` (1.9T, writable) |
| 2026-07-24 | operator direction | Facility intent = 1 TB local NAS; soft quota 850 GiB |
| 2026-07-28 | operator direction | **Interim pin:** workstation VAULT HD |
| 2026-09-13 | FI-WP-0004 | **SoT pin:** Scaleway `nl-ams`; VAULT demoted to staging; euro gate replaces GiB quota |