Skip to report
Chief / OperationalLayer · Bettter Ops4 Nov 2026

One library: every Drive and sheet source in one registry, the contracts to move them, and a live coverage view

46 Drive, Sheets, Excel and copied data sources of the five projects are in one registry: 12 are retired on the projects' branches, 19 wait in 14 ready import packages for the platform, and the control room shows the progress live.

Deployed and verified on ops.bettter.us · PR #20 open (not merged)

The 46 sources by status (registry, 4 Nov, after the platform's packages)

Retired: no reader left (on the projects' branches)12 sources
Import package ready for the platform19 sources
In the library, a reader still uses the copy5 sources
Not in the library yet1 sources
Kept (not library data) or frozen copy9 sources
Source: docs/library-sources.md (PR #20), from the projects' docs/library-migration.md and this session's scan of each repository

Sources retired per project (of its dependencies)

Adapter (of 13)2 retired
Builder (of 8)6 retired
Builder Tech (of 9)4 retired
Platform (of 6)0 retired
OperationalLayer (of 1)0 retired
Source: registry docs/library-sources.md, 4 Nov 2026; kept and frozen sources excluded

Drive and Sheets link lines left in code on each main (4 Nov baseline; drops when the projects' PRs merge)

Adapter26 lines
Builder3 lines
Builder Tech2 lines
Platform44 lines
OperationalLayer0 lines
Source: git grep on each repository's origin/main outside migration/ and library-import/ (opsdash/context/drive_refs.py); target 0

How a source leaves Drive

  1. Package

    The owning project writes library-import/<package>/manifest.json: records, files with SHA-256, the source by name and row.

  2. Check

    tools/check_import.py: schema, keys, checksums, no links.

  3. Import

    The platform runs it as one import batch: idempotent, reversible, prod backed up first.

  4. Switch

    Readers move to the Library API with a SHA-256 file cache; tests use Library API exports.

  5. Retire

    Drive reading removed from every runtime, build, report and test path; the registry records the date.

The control room's new Library page (live)

Bettter Ops Library page: 12 of 33 sources retired, a coloured bar per project
https://ops.bettter.us/#/library, 4 Nov 2026 08:22 UTC, browser-use screenshot after the second deploy. Click a colour to list those sources.

What the library holds, and the Drive references left in each repo

Library page lower half: library contents per category (663 Blazers RM, 0 Trousers) and per-project counts of Drive and Excel references in code
Same page. Per-category SDA, pair and file counts show a dash until the platform serves GET /ops/coverage.

Control room, before and after

Before (live, 4 Nov 07:55)

  • Library health: records, files, missing DXFs, Drive links stored (0)
  • No view of the Drive and sheet sources the projects still read
  • No route for the library

After (live, 4 Nov 08:01)

  • Same library health, unchanged
  • A card: sources retired, missing, packages, still edited, per project
  • A Library page: sources, references left in code, contents, imports, living sources

The new card on the control room

Control room card: one library, Drive dependency, five tiles and a bar per project, above the promotion log with the test promote of 4 Nov
https://ops.bettter.us/ after the deploy; the promotion log shows the live promote/roll-back check on the test engine.
Owner decisions needed
  • Pattern makers' trackers and their Drive folders: the Adapter recommends an "adaptation pair" form in the platform admin (the pattern makers stop using the sheet); alternatives: the adapter's review platform writes pairs through a new write scope, or a snapshot package per change (keeps Drive alive). Until then each change is a new snapshot, so no edit is lost.
  • 17 pairs where the library's RM pattern is another file than the one the pattern maker adapted: which file is the RM's pattern?
  • RM sheet: lock it as a read-only archive; tailcoats (26 rows): their own category or Blazers.
  • Chest windows: 33 sizes where the SDA tab and the library disagree (Design Builder package exceptions).
  • Team rules and construction limits: keep the master in git with a snapshot per round, or edit them in the library.
  • Merge PR #20 (and the projects' PRs). The ops.bettter.us deploy runs from the branch; the 05:30 UTC refresh from main replaces it until the merge.
What each project did (from its migration page)
ProjectResultRegression
Design Builder (v1.3.0 live, PR #13)0 Drive/workbook readers; fixtures are a Library API export; chest windows and team rules as packagesgate 58 of 58; picks identical for 4 live brands; 65 tests
Design Builder Tech (v0.7.3, branch)RM sheet and Drive downloader removed; data from Library API snapshots; examples from GET /examples; 3 packages114 tests (110 before); pocket limits equal; lab images byte-identical
Adapter (branch)trackers read from snapshots, every pattern file from the library by SHA-256; 4 packages (167 examples, 31 RM, 14 references incl. file sets; retires 7 examples and 10 sizes the owner left out)ground-truth map 50 rows byte-identical; 151 of 168 pairs map once imported (simulated)
Platform (QA, PRs #45, #46)serves /examples (with the status filter), /references, /ops/coverage, /ops/imports and the reversible package importer on QA; 4 packages of its own: the RM sheet's trousers tab (523 RM), six more SDA tabs (427 SDA), the sheet's pattern folders, the adapter's pairsschemas checked with ajv; DB conformance suites green; prod after the QA imports and an RDS snapshot
OperationalLayer (live)registry, contracts, Library page, company materials packageall routes, promote and roll back, 17 tests
Contract changes (v1, additive)
ChangeFor
Import packages: library-import.md, import-manifest schema, tools/check_import.pyevery project with data not yet in the library
Reference files: GET /references, kinds reference_document/data/video/imagedecks, videos, rulebooks, tracker snapshots, workbooks, size charts
Adaptation pairs: optional fields on SDA examples, GET /examplesthe Adapter's and Builder Tech's pairs
Import batches: package, origin, reverted; GET /ops/importsthe control room, reversibility
GET /ops/coverage and optional health countsthe control room's Library page
Size constraint source; demo keys read their own referencesDesign Builder
Examples of pending SDAs, height labels, pair registration and rule clauses, house-block ids, brand dna_role, RM fabric_testsDesign Builder Tech
Reference file sets and sda_ids, file role and derived_from, import action retireAdapter
Portable regex patterns (no (?i)); check.py refuses inline flagsplatform (ajv)
File kind reference_cad for CAD project files and archives (.gdb, .zprj, .zip)Adapter
Registry summary per project
ProjectSourcesIn libraryMissingPackage readyKept / frozenStill edited
Adapter1219025
Builder1262042
Builder Tech752004
Platform420020
OperationalLayer200111
All3714131912
Verification
  • python3 docs/contracts/check.py: 54 schemas, 73 examples, 0 problems.
  • Today's live Library API responses (/ops/health, /ops/usage, /ops/feedback, the validation queue) validate against the extended schemas: 0 errors.
  • python3 -m unittest discover -s opsdash/tests: 17 tests pass (registry, reference counts, import packages, collector back-off, control room).
  • Deployed with opsdash/deploy/deploy.sh at 07:58 UTC (server backup kept). Every page and asset answers 200; the old sslip.io name still redirects (301).
  • browser-use on the live site: all routes render, the control room headline is unchanged, and the Library page filters on click. Promote v1.0.0 to v1.1.0 and roll back on the test engine both switched (HTTP 200). Owner signed out afterwards.
  • The company-materials package passes check_import.py with its staged files (4 files, 316,120,814 bytes).
Not achieved yet
  • No import has run: 19 sources wait in 14 ready packages; the platform imports them on QA first, then releases to prod after an RDS snapshot.
  • Prod does not serve /ops/coverage, /ops/imports, /examples or /references yet (by design until the QA imports pass). The Library page switches by itself within 6 hours of prod serving them.
  • The projects' PRs are not merged, so the Drive references on each main are still the 4 Nov counts (Adapter 26, Builder 3, Builder Tech 2, platform 44 lines).
  • One source is not packaged yet (the adapter alignment data the tech builder pins); the platform's own Drive-based import tool and one-off SDA import remain in its repo.
  • The published contracts site is not republished; the changes are in PR #20.