Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
499 commits
Select commit Hold shift + click to select a range
b00dc68
Merge pull request #250 from views-platform/worktree-liveness-datafac…
Polichinel Jul 19, 2026
5c13875
feat(liveness): S3 Appwrite production_forecasts check + real collect…
Polichinel Jul 19, 2026
621afa8
Merge pull request #251 from views-platform/worktree-liveness-appwrit…
Polichinel Jul 19, 2026
6d32e8e
feat(liveness): S4 FAO delivery check — per-stream freshness of unfao…
Polichinel Jul 19, 2026
077c6d6
Merge pull request #252 from views-platform/worktree-liveness-unfao-d…
Polichinel Jul 19, 2026
e5cb6ab
fix(liveness): server-side ordering — Appwrite pagination bug produce…
Polichinel Jul 19, 2026
a80f68d
Merge pull request #253 from views-platform/fix/liveness-appwrite-pag…
Polichinel Jul 19, 2026
324543d
feat(liveness): S5 wandb execution check — did the team compute this …
Polichinel Jul 19, 2026
6d2c4ff
Merge pull request #254 from views-platform/worktree-liveness-wandb-e…
Polichinel Jul 19, 2026
c912c0e
feat(liveness): S6 VPN store check — truthful VPN_REQUIRED for gjoll …
Polichinel Jul 19, 2026
af7b05a
Merge pull request #255 from views-platform/worktree-liveness-vpn-store
Polichinel Jul 19, 2026
aa10cbf
feat(liveness): S7 WET->DRY consolidation + the one-command dashboard…
Polichinel Jul 19, 2026
364a5e7
Merge pull request #256 from views-platform/worktree-liveness-runner
Polichinel Jul 19, 2026
0dfe3f8
docs(liveness): S8 README + register closure — C-100 Mitigated (#246)
Polichinel Jul 19, 2026
4628b05
Merge pull request #257 from views-platform/worktree-liveness-docs
Polichinel Jul 19, 2026
f275600
docs(register): C-101 liveness verdict-truthfulness gaps (T2) + C-102…
Polichinel Jul 19, 2026
45326a0
fix(liveness): falsify-audit fixes — C-101 Resolved, C-102 documented
Polichinel Jul 19, 2026
b979460
Merge pull request #258 from views-platform/worktree-liveness-falsify…
Polichinel Jul 19, 2026
0e08089
docs(register): C-103 liveness test taxonomy vs ADR-005 + coverage ga…
Polichinel Jul 19, 2026
248c325
test(liveness): ADR-005 'live' category + taxonomy fix + 100% branch …
Polichinel Jul 19, 2026
06cd0c5
Merge pull request #259 from views-platform/worktree-liveness-taxonomy
Polichinel Jul 19, 2026
7efee26
feat(liveness): probe both data levels (cm + pgm) in the old_api serv…
Polichinel Jul 19, 2026
a5f3468
Merge pull request #260 from views-platform/worktree-liveness-pgm-probe
Polichinel Jul 19, 2026
ab0937d
docs(reports): ADR-013 wire-contract review, views-models seat — worl…
Polichinel Jul 19, 2026
deef155
Merge pull request #261 from views-platform/docs/adr013-seat-review
Polichinel Jul 19, 2026
dafb188
docs(adr-017): amendment 2026-07-19 — production receipt, ADR-013 ali…
Polichinel Jul 19, 2026
b6abad7
Merge pull request #263 from views-platform/docs/adr017-amendment
Polichinel Jul 19, 2026
d185bce
docs(register): C-104 (sample-count key fragmentation + decoy validat…
Polichinel Jul 20, 2026
effec38
Merge pull request #264 from views-platform/docs/register-c105
Polichinel Jul 20, 2026
0a916f1
feat(tests): family-agnostic sample-count reader + decoy-divergence g…
Polichinel Jul 20, 2026
843b412
Merge pull request #265 from views-platform/feat/s3-agnostic-sample-c…
Polichinel Jul 20, 2026
13f896e
chore(rusty_bucket): thin constituents to 16 samples/model (interim, …
Polichinel Jul 20, 2026
860eace
Merge pull request #266 from views-platform/feat/rusty-bucket-s16-int…
Polichinel Jul 20, 2026
746ef91
fix(un_fao): drop the dead orange_ensemble ghost comment (closes #77)
Polichinel Jul 20, 2026
75a9b47
Merge pull request #267 from views-platform/fix/77-drop-orange-ensemb…
Polichinel Jul 20, 2026
7dc56a9
docs(register): C-97 → Mitigated (wire manifest = deterministic addre…
Polichinel Jul 20, 2026
0ab28b4
Merge pull request #268 from views-platform/docs/230a-c97-c102-correc…
Polichinel Jul 20, 2026
d066996
docs(register): C-105 (checkout drift) new + merge model-proliferatio…
Polichinel Jul 20, 2026
41b00b5
Merge pull request #269 from views-platform/docs/register-c105-checko…
Polichinel Jul 20, 2026
24f2208
test(coherence): add ParametricConflictology + ParametricHurdleConfli…
Polichinel Jul 20, 2026
0a2d7d9
Merge pull request #270 from views-platform/fix/algorithm-coherence-p…
Polichinel Jul 20, 2026
6742b04
docs(register): C-106 strategic root — config-vs-behavior verificatio…
Polichinel Jul 20, 2026
f370fe1
Merge pull request #271 from views-platform/docs/register-c106-strategic
Polichinel Jul 20, 2026
0d64c72
test(runtime): C-106 exit — a runtime smoke that CI actually runs
Polichinel Jul 20, 2026
6f8c5d0
Merge pull request #272 from views-platform/feat/c106-runtime-smoke
Polichinel Jul 20, 2026
c2fd74f
docs(register): C-106 -> Mitigated (runtime smoke shipped, PR #272)
Polichinel Jul 20, 2026
105767a
Merge pull request #273 from views-platform/docs/c106-mitigated
Polichinel Jul 20, 2026
3d9f402
docs(register): C-107 — tools/liveness has no CIC/ADR (review-base-docs)
Polichinel Jul 20, 2026
03f7c7f
Merge pull request #274 from views-platform/docs/register-c107-livene…
Polichinel Jul 20, 2026
05a1ec5
docs(cic): govern tools/liveness with a CIC — closes #275, C-107 Miti…
Polichinel Jul 21, 2026
c2cc3b0
Merge pull request #276 from views-platform/docs/cic-liveness-275
Polichinel Jul 21, 2026
2ea5480
docs(adr-017): accept Source/Composition/Delivery ADR + pin the inert…
Polichinel Jul 27, 2026
a1a2e26
Merge pull request #279 from views-platform/docs/adr-017-accepted
Polichinel Jul 27, 2026
86e8f2e
chore(creds): document the credential schema + self-diagnosis; regist…
Polichinel Jul 27, 2026
f4947c0
Merge pull request #281 from views-platform/chore/credential-hygiene
Polichinel Jul 27, 2026
36d06c6
chore: datafactory install pins -> PyPI floor (views-datafactory>=1.9.0)
Polichinel Jul 27, 2026
801a797
Merge pull request #283 from views-platform/chore/datafactory-pypi-pins
Polichinel Jul 28, 2026
1ca5557
chore(env): drop the three harvest tokens from consumer envs (þing-01…
Polichinel Jul 28, 2026
712c035
Merge pull request #289 from views-platform/chore/thing01-286-drop-ha…
Polichinel Jul 28, 2026
c4014de
feat(un_fao): read Appwrite coordinates from the PLATFORM-001 registr…
Polichinel Jul 28, 2026
861188b
Merge pull request #290 from views-platform/chore/thing01-287-launche…
Polichinel Jul 28, 2026
59bd551
docs(þing-01): mark C-108 subsumed by PLATFORM-001 (#285) + document …
Polichinel Jul 28, 2026
7b4d9c1
Merge pull request #291 from views-platform/chore/thing01-285-288-docs
Polichinel Jul 28, 2026
aac64cf
fix(un_fao): export APPWRITE_DATASTORE_API_KEY from run.sh (#293)
Polichinel Jul 31, 2026
819d110
fix(un_fao): report actual coordinate state; use mktemp for stderr ca…
Polichinel Jul 31, 2026
04db5fa
Merge pull request #295 from views-platform/fix/293-unfao-runsh-crede…
Polichinel Jul 31, 2026
2f7bc7a
test: stop two tests returning a verdict on local workspace state
Polichinel Jul 31, 2026
9e46b82
tools: add verify_committed.sh — run the suite against COMMITTED state
Polichinel Jul 31, 2026
21a248c
tools: harden verify_committed.sh per pre-merge review
Polichinel Jul 31, 2026
a03cd4f
Merge pull request #296 from views-platform/fix/red-tests-local-works…
Polichinel Jul 31, 2026
e7ccaf0
fix(liveness,gitignore): read our OWN .env; close the .gitignore gaps…
Polichinel Jul 31, 2026
bbab6f1
feat(ci): gitleaks over full history, exit code is the verdict (#300)
Polichinel Jul 31, 2026
1777aeb
refactor(tools): group by responsibility — C-60 had regressed while m…
Polichinel Jul 31, 2026
b4226e5
Merge pull request #303 from views-platform/fix/298-299-liveness-own-…
Polichinel Aug 2, 2026
1a71a76
Merge pull request #305 from views-platform/feat/300-gitleaks-ci
Polichinel Aug 2, 2026
5f00c9a
Merge pull request #306 from views-platform/refactor/tools-structure-…
Polichinel Aug 2, 2026
c0d86ad
fix(un_fao): assert the installed build can produce what config_meta …
Polichinel Aug 2, 2026
3473861
Merge pull request #312 from views-platform/fix/294-unfao-capability-…
Polichinel Aug 2, 2026
53fba73
docs(CLAUDE.md): the contract is 'The Appwrite Seam Contract', not PL…
Polichinel Aug 2, 2026
309acb7
fix(un_fao): the registry is the only source of coordinates, and its …
Polichinel Aug 2, 2026
59a7ff5
Merge pull request #313 from views-platform/docs/304-claude-md-contra…
Polichinel Aug 2, 2026
2554d73
Merge pull request #314 from views-platform/fix/308-309-registry-sing…
Polichinel Aug 2, 2026
4bfa08f
feat: bootstrap.sh + one writer for the Appwrite environment (#309, #…
Polichinel Aug 2, 2026
662a621
fix: address all code-review findings on #315, incl. a reintroduced #293
Polichinel Aug 2, 2026
23db865
fix: round-2 review findings — four defects in the round-1 fixes
Polichinel Aug 2, 2026
6fb4ffe
fix: round-3 review findings — a partial fix and a test that did not …
Polichinel Aug 2, 2026
8e8ef47
docs(tools): platform_env_load already validates — drop the redundant…
Polichinel Aug 2, 2026
84299d3
Merge pull request #315 from views-platform/feat/309-311-platform-env…
Polichinel Aug 2, 2026
f3736db
docs(register): C-113 — an orphan feature branch passed every merge gate
Polichinel Aug 2, 2026
ea6f682
Merge pull request #319 from views-platform/docs/c113-orphan-branch
Polichinel Aug 2, 2026
6e8a489
feat(#302): liveness preflight in monthly_run.sh + fix the detector i…
Polichinel Aug 2, 2026
5f1fe2d
Merge pull request #321 from views-platform/feat/302-monthly-run-pref…
Polichinel Aug 2, 2026
01fd590
docs(#304): cite The Appwrite Seam Contract by name, and unpin a stal…
Polichinel Aug 2, 2026
e6e8ca2
Merge pull request #322 from views-platform/docs/304-seam-contract-re…
Polichinel Aug 2, 2026
9072d24
fix(C-39): 24 run.sh regressed to #!/bin/zsh since April — re-fix and…
Polichinel Aug 2, 2026
0c7ae97
Merge pull request #323 from views-platform/fix/310-c39-zsh-shebang-r…
Polichinel Aug 2, 2026
cbb3e23
fix(C-39): mark the 18 non-executable run.sh executable, and pin both…
Polichinel Aug 2, 2026
e43ff51
Merge pull request #324 from views-platform/fix/310-run-sh-exec-bit
Polichinel Aug 2, 2026
cd38ef6
fix(deps): drop the unearned views-frames declaration from two ensembles
Polichinel Aug 2, 2026
a2f655c
Merge pull request #325 from views-platform/fix/drop-unused-views-fra…
Polichinel Aug 2, 2026
11c90a7
fix(deps): make the 131 requirements.txt parseable, bounded and consi…
Polichinel Aug 2, 2026
7d22f60
Merge pull request #326 from views-platform/fix/requirements-hygiene
Polichinel Aug 2, 2026
3b1fb51
feat(C-117): record which package versions produced each forecast
Polichinel Aug 3, 2026
275a00f
Merge pull request #328 from views-platform/feat/117-environment-prov…
Polichinel Aug 3, 2026
ca72d9c
fix(ci): make the signal true — CI has been red every day this week
Polichinel Aug 3, 2026
b308bdc
fix(ci): three failures the fixed collection finally made visible
Polichinel Aug 3, 2026
e673bae
Merge pull request #332 from views-platform/fix/ci-green-for-release
Polichinel Aug 3, 2026
fe13c57
Merge origin/main into development — reconcile the 8-commit divergence
Polichinel Aug 3, 2026
0a1a3fb
docs(monthly-run): the guide did not mention anything that shipped th…
Polichinel Aug 3, 2026
2b4fb7f
feat(deps): adopt views-pipeline-core 3.0.0 — the declared requiremen…
Polichinel Aug 3, 2026
b30ac94
Merge pull request #334 from views-platform/chore/reconcile-main-into…
Polichinel Aug 3, 2026
e1674af
chore(models): fleet config hygiene + unblock dev→main parity (Epic #…
Polichinel Aug 3, 2026
c37d1ef
fix(tests): the parity exemption was general, its guard was not
Polichinel Aug 3, 2026
b966633
Merge pull request #335 from views-platform/chore/s1_5-fleet-config-h…
Polichinel Aug 3, 2026
addbecd
fix(catalogs): read the target key models actually declare (#336)
Polichinel Aug 3, 2026
0ebf821
fix(catalogs): stage only the READMEs the job actually writes
Polichinel Aug 4, 2026
22b7a14
Merge pull request #337 from views-platform/fix/336-catalog-target-key
Polichinel Aug 4, 2026
e19f5e5
fix(ensembles): two ensembles were missing required scaffold directories
Polichinel Aug 4, 2026
915bc5e
Merge pull request #338 from views-platform/fix/336-ensemble-scaffold…
Polichinel Aug 4, 2026
899817a
Automated changes by GitHub Actions
actions-user Aug 4, 2026
fff3abe
chore(G2): record the envs/views_ensemble repair (#329 resolved)
Polichinel Aug 4, 2026
5b865d6
Merge pull request #339 from views-platform/chore/g2-env-repair-record
Polichinel Aug 4, 2026
af3e8b4
docs(register): the delivery composition — C-121..C-124, D-07, D-08
Polichinel Aug 4, 2026
bf570c3
docs(adr-017): Amendment 1 — the delivery file, and the rule that err…
Polichinel Aug 4, 2026
1042f9f
docs(ADR): split ADR-017 into 017 + 019 + 020 + a living map
Polichinel Aug 4, 2026
c129904
docs(ADR): fix the five findings /falsify raised against 017/019/020/map
Polichinel Aug 4, 2026
e76e447
docs(ADR): split ADR-017 into 017 + 019 + 020 + a living delivery map…
Polichinel Aug 4, 2026
3f19ef1
feat(#343): declare the FAO delivery in deliveries/un_fao.py
Polichinel Aug 4, 2026
b375a29
fix(#343): address code-review findings on the delivery vocabulary
Polichinel Aug 4, 2026
93c09a1
feat(#343): declare the FAO delivery in deliveries/un_fao.py (#351)
Polichinel Aug 4, 2026
a504e34
feat(#344): the delivery coherence rules as edit-time checks
Polichinel Aug 4, 2026
649fc03
fix(#344): the reconciled=False error named no file, contradicting th…
Polichinel Aug 4, 2026
8a702da
fix(#344): CI caught a real invariant break — evolve it rather than s…
Polichinel Aug 4, 2026
b267a3b
feat(#344): the delivery coherence rules as edit-time checks (#352)
Polichinel Aug 4, 2026
d1b67c7
feat(#345): errors must descend, and the meta-test that stops it rotting
Polichinel Aug 4, 2026
367f925
feat(#345): errors must descend, and the meta-test that stops it rott…
Polichinel Aug 4, 2026
4d1c7a0
feat(#346): derive is_in_production, and report what is declared
Polichinel Aug 4, 2026
a6fc31d
feat(#346): derive is_in_production, and report what is declared (#354)
Polichinel Aug 4, 2026
83b63f3
feat(#347): the FAO config derives its source from the delivery decla…
Polichinel Aug 4, 2026
6a46b4f
fix(#347): the parity-scope guard executed a config that now needs __…
Polichinel Aug 4, 2026
f482632
feat(#347): the FAO config derives its source from the delivery decla…
Polichinel Aug 4, 2026
b31fbb3
feat(#348): intent arms the delivery, and arming is withheld on disag…
Polichinel Aug 5, 2026
69f9e0b
fix(#348): the arming tests assumed this checkout agrees with itself
Polichinel Aug 5, 2026
314a719
feat(#348): intent arms the delivery, and arming is withheld on disag…
Polichinel Aug 5, 2026
38169fd
feat(#349): the delivery map's claims are executable, and two were stale
Polichinel Aug 5, 2026
98a8bce
feat(#349): the delivery map's claims are executable, and two were st…
Polichinel Aug 5, 2026
85bca16
feat(#360): one freshness threshold, and it is the declared one
Polichinel Aug 5, 2026
92329b4
feat(#360): one freshness threshold, and it is the declared one (#361)
Polichinel Aug 5, 2026
9302a0c
feat(models): S2 — migrate pink_pirate/blue_stranger/purple_alien vie…
Polichinel Aug 8, 2026
986bde8
Merge pull request #365 from views-platform/chore/s2-viewser-datafact…
Polichinel Aug 8, 2026
df88ee7
Automated changes by GitHub Actions
actions-user Aug 8, 2026
f0b4436
feat(#242): roster conformance for 7 models, retire the parity suite
Polichinel Aug 10, 2026
efe97f5
fix: exempt in-flight models from the source-migration checks too
Polichinel Aug 10, 2026
43a9f15
Merge pull request #369 from views-platform/feat/242-roster-conformance
Polichinel Aug 10, 2026
654d64b
docs(ADR-015): §6 the count that matters is the count a model PRODUCES
Polichinel Aug 10, 2026
2b13bf0
Merge pull request #370 from views-platform/docs/242-adr015-dxk
Polichinel Aug 10, 2026
ce3d24f
test(#371): load every config through CoreConfigSniffer, in the exist…
Polichinel Aug 11, 2026
c017841
Merge pull request #374 from views-platform/feat/371-sniffer-contract-ci
Polichinel Aug 11, 2026
2a624a4
test(ADR-012): assert the lr_/by_ target prefixes, three months after…
Polichinel Aug 11, 2026
20dc93f
Merge pull request #375 from views-platform/test/adr012-prefix-guard
Polichinel Aug 11, 2026
3e7b405
docs(C-132): record the decided gate declaration where the rewiring w…
Polichinel Aug 11, 2026
90963c0
Merge pull request #376 from views-platform/docs/record-c132-metric-d…
Polichinel Aug 11, 2026
6c4d6c3
feat(#127): commit the un_fao global-land flip that production has be…
Polichinel Aug 11, 2026
de42a7a
test: C-110 is closed, and the key guard says region belongs in the d…
Polichinel Aug 11, 2026
5d9fc87
Merge pull request #377 from views-platform/feat/127-un-fao-land-gaul
Polichinel Aug 11, 2026
8ecab0a
fix(C-133): the coverage copy the manager actually reads was the ungu…
Polichinel Aug 11, 2026
4aeb3d7
refactor(ADR-021): derive REGION, delete the cross-check and its AST …
Polichinel Aug 11, 2026
c6ab4cd
docs(ADR-021): coverage is declared once, in the delivery
Polichinel Aug 11, 2026
f677d7b
fix: the new test imported config_queryset, which CI cannot import
Polichinel Aug 11, 2026
f4eb3be
Merge pull request #378 from views-platform/feat/adr021-coverage-derived
Polichinel Aug 11, 2026
64f6764
docs(ADR-021): §3 named no manifest, and the one it implied would bre…
Polichinel Aug 11, 2026
8745cd7
Merge pull request #379 from views-platform/fix/adr021-manifest-corre…
Polichinel Aug 11, 2026
a0b5e01
feat(#333): the un_crafd launcher, and the delivery protocol gets one…
Polichinel Aug 11, 2026
859aa25
Merge pull request #380 from views-platform/feat/333-un-crafd-launcher
Polichinel Aug 11, 2026
1c71121
fix(C-135): arming and the pin must move together — the FAO one alrea…
Polichinel Aug 11, 2026
8451adc
Merge pull request #381 from views-platform/fix/364-pin-safety-guard
Polichinel Aug 11, 2026
603d715
chore(#372): adopt views-pipeline-core 3.0.1 in the two exact pins
Polichinel Aug 11, 2026
dffb823
Merge pull request #382 from views-platform/chore/372-adopt-pipeline-…
Polichinel Aug 11, 2026
cd2993b
feat(#146): violet emits 4x4, rusty_bucket takes the roster and decla…
Polichinel Aug 11, 2026
d42d090
Merge pull request #383 from views-platform/feat/146-violet-4x4-and-r…
Polichinel Aug 11, 2026
085a623
Automated changes by GitHub Actions
actions-user Aug 11, 2026
fb25b0e
feat(#242): violet_visitor joins the roster — un-fenced, and the exem…
Polichinel Aug 12, 2026
c96a8b3
Merge pull request #384 from views-platform/feat/242-violet-onto-roster
Polichinel Aug 12, 2026
893bce3
Automated changes by GitHub Actions
actions-user Aug 12, 2026
994ebbb
fix(#310): the 129 clones say so, and none of them rewrite your shell…
Polichinel Aug 13, 2026
636c3bc
docs(register): C-136/137/138 — where pandas still is in the HydraNet…
Polichinel Aug 13, 2026
7e0739c
fix(#364): pin both FAO launchers to a released tag, and keep numpy w…
Polichinel Aug 13, 2026
c1f7adf
fix(#385): the launcher verifies the build it installed, instead of a…
Polichinel Aug 13, 2026
6149cac
docs(#393): this repo's ADR-017 is vmo_017, because three repos have …
Polichinel Aug 13, 2026
60d0774
fix(#392): a failed install stops the run — and #386 unblocked itself…
Polichinel Aug 13, 2026
dd99d27
docs(violet_visitor): mark config_sweep.py PARKED/stale — comment-only
Polichinel Aug 14, 2026
196b69d
fix(security): two production collections were readable and writable …
Polichinel Aug 14, 2026
9540866
fix(#404): four roster configs declare ss_feedback, and can be loaded…
Polichinel Aug 21, 2026
9ae4256
fix(#409): bound the live viewser calls, so bare pytest returns (#414)
Polichinel Aug 23, 2026
d0c6969
fix(#403): move both launchers to 1.1.1, and teach the guard what 1.1…
Polichinel Aug 23, 2026
d94eb64
feat(#45): arm the CRAF'd delivery — it has now received one (#399)
Polichinel Aug 24, 2026
121c471
docs+tools: the partner bring-up scripts, and the roster's horizon fi…
Polichinel Aug 24, 2026
bf71720
fix(#411): the FAO surface judges the ADR-013 manifest, not a legacy …
Polichinel Aug 24, 2026
48e0fb5
feat(#413): a liveness surface for the CRAF'd delivery (#417)
Polichinel Aug 24, 2026
02c277c
docs(register): C-142 — the CIC sync gate fails on the release PR whi…
Polichinel Aug 24, 2026
2cd50df
docs(#425): ADR-019's four documentation corrections — the doc now sa…
Polichinel Aug 25, 2026
bc20ea6
docs(#426): reconciled is three-valued — document what the checks alr…
Polichinel Aug 25, 2026
95b2497
feat(#427): provides on Source — which target comes from which source…
Polichinel Aug 26, 2026
58d4f6c
feat(#428): the coverage refusal — every required target claimed exac…
Polichinel Aug 26, 2026
44d3c9d
feat(#429): split the reconciliation rule from coverage — #420 HARD 2…
Polichinel Aug 26, 2026
c60e24c
feat(#430): let a multi-source delivery be refused honestly, and stop…
Polichinel Aug 26, 2026
42133d2
docs(#424): ADR-019's status line records what S4, S5 and S6 changed …
Polichinel Aug 26, 2026
166852b
docs(security): commit the credentials audit four tracked files alrea…
Polichinel Sep 7, 2026
b5a04e6
risk(register): C-146 — a conformance test that never constructs the …
Polichinel Sep 7, 2026
91ae857
risk(register): C-146 — close the Tier 1 branch on evidence, not on s…
Polichinel Sep 7, 2026
8ac68a8
feat(ADR-017): config_maturity.py on the 13 baseline models — graduat…
Polichinel Sep 7, 2026
a947e40
docs(ADR-017): state what maturity asks, and that a baseline can be g…
Polichinel Sep 7, 2026
5880bfe
revert(#444): remove the 14 config_maturity.py files — a half-migrati…
Polichinel Sep 7, 2026
df0e1ac
fix(#452): make `graduate` reachable — R2 is about members, and a lea…
Polichinel Sep 7, 2026
af0415b
fix(#459): adopt views-baseline 1.0.2 — raise the floor ×37, and make…
Polichinel Sep 9, 2026
340fc35
fix(#317): one satisfiable views-r2darts2 spec across all 31 models (…
Polichinel Sep 9, 2026
6843398
config(rusty_bucket): the eight-member roster, two unloadable configs…
Polichinel Sep 14, 2026
18e204b
Automated changes by GitHub Actions
actions-user Sep 14, 2026
4f536fd
config(#465): gate_threshold 0.5 → 0.14 / 0.16 / 0.20 on the three ha…
Polichinel Sep 15, 2026
eed3e19
test(#464): redirect the scaffold builder at its root, so nothing wri…
Polichinel Sep 15, 2026
c1e4a83
chore: cleanup after the September publishes — C-50/C-42 resolved, co…
Polichinel Sep 15, 2026
17e61f6
feat(#449): maturity readers accept both vocabularies, CI on pipeline…
Polichinel Sep 17, 2026
1195853
feat(#449): rename the 50 sources on pipeline-core 3.x to config_matu…
Polichinel Sep 17, 2026
956a8ff
Automated changes by GitHub Actions
actions-user Sep 17, 2026
4e04cac
fix(#477): the nine point baselines declare aggregate_method — refuse…
Polichinel Sep 17, 2026
9386f75
chore(#478): CI on pipeline-core 3.3.0; update_readme.py survives a m…
Polichinel Sep 19, 2026
475c901
build(deps): all 31 r2darts2 models → views-r2darts2[manager]>=0.2.3,…
Polichinel Sep 19, 2026
08cb386
fix(#486): bad_romance declares its point metrics and baselines — the…
Polichinel Sep 19, 2026
8a44533
docs(register): C-81 — #483's guard is narrower than this entry; C-89…
Polichinel Sep 19, 2026
594b9e1
feat(#489): the eleven pgm datafactory r2darts2 models, from staging_…
Polichinel Sep 19, 2026
ad8ae6c
Automated changes by GitHub Actions
actions-user Sep 19, 2026
9a6ab6e
feat(#484): the eight HydraNets refuse to train on CPU — require_cuda…
Polichinel Sep 19, 2026
56c5c8a
docs(register): C-150 status is the canonical 'Open' — development is…
Polichinel Sep 19, 2026
3f2d98e
feat(#490): config_maturity.py for the 31 cm r2darts2 models — only t…
Polichinel Sep 19, 2026
bc90f89
Automated changes by GitHub Actions
actions-user Sep 19, 2026
55eab03
feat(#474): the catalog says which data source each model reaches — v…
Polichinel Sep 19, 2026
566166b
chore(#499): the integration runner excludes nothing by default — pur…
Polichinel Sep 19, 2026
455b967
feat(#499): the eight HydraNets read global land; total_lessons 40 fo…
Polichinel Sep 19, 2026
a3fb5fb
docs(register): C-151 — viewser's toolz<0.12 pin re-breaks every data…
Polichinel Sep 19, 2026
37c4fca
feat(#499): the eight HydraNets' volume is the whole PRIO-GRID raster…
Polichinel Sep 19, 2026
b2cd4a0
fix(#499): the eleven pgm darts models declare entity_id: priogrid_id…
Polichinel Sep 23, 2026
dce807e
feat(#505): collapse posterior draws to the point predictions researc…
Polichinel Sep 28, 2026
1b9cebc
feat(#499): the eight HydraNets train 300 lessons for the real calibr…
Polichinel Sep 28, 2026
59595c8
docs(register): C-153 — the datafactory credential is readable in tra…
Polichinel Sep 28, 2026
a2bfe3a
docs(#499): the first RunPod deployment — post-mortem, cost note, ope…
Polichinel Sep 28, 2026
94068de
fix(#439): bump VIEWS_POSTPROCESSING_PIN 1.1.1 → 1.4.0 in both launch…
Polichinel Sep 29, 2026
597070d
fix(#516,#517,#509,#518,#523,#499): a fresh pod reproduces the run th…
Polichinel Sep 29, 2026
d6d4a66
fix(#499): preflight checked 3 of 9 publish variables, and its disk f…
Polichinel Sep 29, 2026
aef7d68
fix(#536): align little_talks and mister_bluesky to the point deliver…
Polichinel Oct 7, 2026
2905371
feat(#533,#534,#535): the darts calibration chain — collapse, pod run…
Polichinel Oct 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
48 changes: 48 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# views-models — credential schema (NAMES ONLY; NEVER commit real values)
#
# HOW TO USE
# cp .env.example .env # .env is gitignored — verified
# then fill the values from the Appwrite console (and the data-source providers).
# Check completeness at any time: python tools/check_credentials.py
#
# WHERE VALUES COME FROM (as of 2026-07-27): the Appwrite console + the data-source
# providers. There is not yet a durable secrets source of truth — that is a tracked
# investigation (see reports/security/appwrite_credentials_audit.md and the
# "secrets-management architecture" GitHub issue). Do NOT invent an interim scheme here.
#
# Legend: [SECRET] = a real credential, guard carefully. [id] = non-secret identifier.
#
# QUOTE ANY VALUE CONTAINING A SPACE. (#293)
# This file is not only read by python-dotenv — `postprocessors/un_fao/run.sh` **sources** it as a
# bash script. An unquoted value with a space is parsed as an assignment plus a command:
#
# APPWRITE_UNFAO_BUCKET_NAME=UNFAO Bucket -> sets ...NAME=UNFAO, then runs `Bucket`
# APPWRITE_UNFAO_BUCKET_NAME="UNFAO Bucket" -> correct
#
# The *_NAME coordinates below are the ones that carry spaces in practice. Quoting them costs
# nothing and prevents a silently truncated identifier. Quoted form is shown as the example value.

# ── Appwrite — REQUIRED to publish a forecast to the shelf (rusty_bucket --prediction_store)
# and for the un_fao postprocessor. This is the set run-0 needs.
APPWRITE_ENDPOINT= # [id] Appwrite server URL
APPWRITE_DATASTORE_PROJECT_ID= # [id] Appwrite project id
APPWRITE_DATASTORE_API_KEY= # [SECRET] the write credential
APPWRITE_PROD_FORECASTS_BUCKET_ID= # [id] the shelf bucket (production_forecasts)
APPWRITE_PROD_FORECASTS_BUCKET_NAME="" # [id] QUOTE IT — this value contains a space
APPWRITE_PROD_FORECASTS_COLLECTION_ID= # [id] metadata collection
APPWRITE_PROD_FORECASTS_COLLECTION_NAME="" # [id] QUOTE IT — this value contains a space
APPWRITE_METADATA_DATABASE_ID= # [id] metadata database
APPWRITE_METADATA_DATABASE_NAME="" # [id] QUOTE IT — this value contains a space

# ── Appwrite — the FAO-facing store (unfao_bucket). Needed by the un_fao postprocessor
# and the faoapi serving side.
APPWRITE_UNFAO_BUCKET_ID= # [id]
APPWRITE_UNFAO_BUCKET_NAME="" # [id] QUOTE IT — this value contains a space
APPWRITE_UNFAO_COLLECTION_ID= # [id]
APPWRITE_UNFAO_COLLECTION_NAME="" # [id] QUOTE IT — this value contains a space
APPWRITE_UNFAO_APPROVED_FILE_IDS= # [id] curation allow-list (may be empty)
APPWRITE_UNFAO_QUARANTINED_FILE_IDS= # [id] curation quarantine list (may be empty)

# ── Other platform secrets referenced by code (data ingest; NOT needed for a --saved
# run-0, but required for fresh data fetches). Confirm scope before relying on these.
VIEWS_DATAFACTORY= # datafactory access (confirm exact meaning)
145 changes: 145 additions & 0 deletions .github/workflows/bootstrap.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
name: Bootstrap

# `./bootstrap.sh` runs in CI against a fixture registry and a fake secret (#311).
#
# Why this job exists, and it is the point rather than a nicety. Prose describing setup
# rots silently: nothing fails when it stops being true, and the person who discovers that
# is the one least equipped to fix it — a new starter, on day one. A setup path verified
# once, on one laptop, rots exactly the same way.
#
# This job is the only thing standing between "the setup script works" and "the setup
# script worked in July". It uses a FIXTURE registry and a FAKE secret, so it needs no
# credentials and no network, which is what lets it run on every push instead of never.

on:
push:
branches: [main, development]
pull_request:
branches: [main, development]
workflow_dispatch:

permissions:
contents: read

jobs:
bootstrap:
name: bootstrap.sh against a fixture
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: '3.11' # tomllib; bootstrap.sh checks this itself and says so

- name: Build a fixture registry and a fake secret
run: |
set -euo pipefail
mkdir -p fixture
cat > fixture/coordinate_registry.toml <<'TOML'
[connection.APPWRITE_ENDPOINT]
class = "connection"
value = "https://fixture.invalid/v1"

[connection.APPWRITE_DATASTORE_PROJECT_ID]
class = "connection"
value = "fixture-project"

[target.APPWRITE_UNFAO_BUCKET_ID]
class = "target"
value = "unfao_bucket"

[target.APPWRITE_CRAFD_BUCKET_ID]
class = "target"
status = "planned — a reserved name with no value (a FIXTURE shape; the real registry has none since v1.4.0)"
TOML
# The fake secret. Never a real one: this repo is public and so are its logs.
echo 'APPWRITE_DATASTORE_API_KEY=FAKE-CI-SECRET-NOT-A-REAL-CREDENTIAL' > .env

- name: Run bootstrap.sh — no arguments
env:
APPWRITE_REGISTRY: ${{ github.workspace }}/fixture/coordinate_registry.toml
run: ./bootstrap.sh

- name: Run it again — idempotence is what makes it testable
env:
APPWRITE_REGISTRY: ${{ github.workspace }}/fixture/coordinate_registry.toml
run: |
set -euo pipefail
before="$(sha256sum .env)"
./bootstrap.sh
after="$(sha256sum .env)"
[ "$before" = "$after" ] || {
echo "::error::bootstrap.sh modified .env on a re-run — it must be idempotent"; exit 1; }
echo "second run left .env byte-identical"

- name: A missing registry must fail, and name the cause
env:
APPWRITE_REGISTRY: /nonexistent/coordinate_registry.toml
run: |
set -uo pipefail
# `status=$?` after a plain assignment never runs here. GitHub invokes every
# step as `bash -e`, and `set -uo pipefail` does NOT clear `-e`, so a failing
# command substitution aborts the step before the status is read. Every
# scenario below asserts a NON-ZERO exit, so all four were unreachable: this
# workflow has been red since the day it landed and never tested anything.
# `|| status=$?` keeps the failure local while leaving `-e` on for genuinely
# unexpected failures elsewhere in the step.
status=0
out="$(./bootstrap.sh 2>&1)" || status=$?
echo "$out"
[ "$status" -ne 0 ] || { echo "::error::a missing registry must be fatal (#308)"; exit 1; }
echo "$out" | grep -q "APPWRITE_REGISTRY=" || {
echo "::error::the failure must name the override variable"; exit 1; }
echo "failed correctly, naming the cause"

- name: A .env declaring a registry-owned coordinate must fail
env:
APPWRITE_REGISTRY: ${{ github.workspace }}/fixture/coordinate_registry.toml
run: |
set -uo pipefail
echo 'APPWRITE_ENDPOINT=https://wrong.invalid' >> .env
status=0
out="$(./bootstrap.sh 2>&1)" || status=$?
echo "$out"
[ "$status" -ne 0 ] || { echo "::error::two writers to one name must be fatal (#309)"; exit 1; }
echo "$out" | grep -q "APPWRITE_ENDPOINT" || {
echo "::error::the failure must name the conflicting variable"; exit 1; }
echo "failed correctly, naming the variable"

- name: A missing secret must fail rather than hang
env:
APPWRITE_REGISTRY: ${{ github.workspace }}/fixture/coordinate_registry.toml
run: |
set -uo pipefail
rm -f .env
# stdin is not a terminal here, which is the case that would hang if bootstrap
# prompted unconditionally. A hung CI job is a worse failure than a red one.
status=0
out="$(timeout 30 ./bootstrap.sh < /dev/null 2>&1)" || status=$?
echo "$out"
[ "$status" -ne 124 ] || { echo "::error::bootstrap.sh HUNG waiting for input"; exit 1; }
[ "$status" -ne 0 ] || { echo "::error::a missing secret must be fatal"; exit 1; }
echo "failed correctly without hanging"

- name: The secret must never reach the log
env:
APPWRITE_REGISTRY: ${{ github.workspace }}/fixture/coordinate_registry.toml
run: |
set -uo pipefail
# RESTORE the secret first. The previous step deletes .env, and without this the
# run would exit at the stdin check having never handled a secret at all — the
# grep below would then pass because the string was never in scope, not because
# redaction works. A check that cannot fail is worse than no check.
echo 'APPWRITE_DATASTORE_API_KEY=FAKE-CI-SECRET-NOT-A-REAL-CREDENTIAL' > .env
status=0
out="$(./bootstrap.sh 2>&1)" || status=$?
[ "$status" -eq 0 ] || {
echo "$out"
echo "::error::this step must exercise the secret-present path; bootstrap failed instead"
exit 1; }
if grep -q "FAKE-CI-SECRET-NOT-A-REAL-CREDENTIAL" <<< "$out"; then
echo "::error::bootstrap.sh rendered the secret value — it must report presence only"
exit 1
fi
echo "secret handled and never rendered"
57 changes: 57 additions & 0 deletions .github/workflows/cic_sync_check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: CIC Sync Check
on:
pull_request:
branches: [main, development]

jobs:
cic-sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Check CIC-governed files have matching CIC updates
run: |
set -uo pipefail

BASE="${{ github.event.pull_request.base.sha }}"

declare -A CIC_MAP
CIC_MAP["tools/catalogs/create_catalogs.py"]="docs/CICs/CatalogExtractor.md"
CIC_MAP["tools/scaffold/build_model_scaffold.py"]="docs/CICs/ModelScaffoldBuilder.md"
CIC_MAP["tools/scaffold/build_ensemble_scaffold.py"]="docs/CICs/EnsembleScaffoldBuilder.md"
CIC_MAP["tools/scaffold/build_package_scaffold.py"]="docs/CICs/PackageScaffoldBuilder.md"
CIC_MAP["tools/partitions/domain.py"]="docs/CICs/PartitionBoundaries.md"
CIC_MAP["tools/partitions/fileops.py"]="docs/CICs/PartitionFileOps.md"
CIC_MAP["tools/partitions/bump.py"]="docs/CICs/PartitionBump.md"
CIC_MAP["run_integration_tests.sh"]="docs/CICs/IntegrationTestRunner.md"
# The tools/liveness shared contract: the verdict->exit-code map and the
# crash-containing runner ARE the contract (per-surface modules are not).
CIC_MAP["tools/liveness/report.py"]="docs/CICs/LivenessChecks.md"
CIC_MAP["tools/liveness/__main__.py"]="docs/CICs/LivenessChecks.md"

CHANGED_FILES=$(git diff --name-only "$BASE"...HEAD)

MISSING=()
for source in "${!CIC_MAP[@]}"; do
cic="${CIC_MAP[$source]}"
if echo "$CHANGED_FILES" | grep -qx "$source"; then
if ! echo "$CHANGED_FILES" | grep -qx "$cic"; then
MISSING+=("$source -> $cic")
fi
fi
done

if [ "${#MISSING[@]}" -gt 0 ]; then
echo "::error::CIC-governed files changed without updating their CIC contract:"
for m in "${MISSING[@]}"; do
echo " $m"
done
echo ""
echo "Update the CIC document to reflect behavioral changes (ADR-006)."
echo "If the change is purely cosmetic (whitespace, comments), add [cic-skip] to the PR title."
exit 1
fi

echo "CIC sync check passed."
54 changes: 54 additions & 0 deletions .github/workflows/roster_configs_load.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: Roster Configs Load

# C-259 exit: tests/test_roster_configs_load.py constructs each of the 8 HydraNet
# roster configs through HydraNetConfig for real. test_roster_conformance.py compares
# 184 config values against a reference dict and never builds the object — which is
# how two production ensemble members sat unloadable from August to September while
# every test passed (#404, #458 §1b). The load test is the guard for that, and it
# `importorskip("views_hydranet")`, so in run_tests.yml — which installs only
# pipeline-core — it has always SKIPPED. This job is where it runs.
#
# Why a separate job, like runtime_smoke.yml:
# * run_tests.yml's install is pinned on purpose (its header says why). Adding a
# package there is a change to what "the suite is green" means for every PR.
# * The dependency set here is tiny and different, and a red here means one thing:
# a roster config does not load.
#
# What it installs, and why: views-hydranet --no-deps, plus torch from the CPU-only
# index. Importing config_initializer is torch-free, but CONSTRUCTING a config is not —
# get_config -> validate_loss_reg -> views_hydranet/utils/utils.py:7 imports torch
# (found 2026-09-15 by running this job locally: all 8 configs failed with
# ModuleNotFoundError before torch was added). The CPU wheel is what a validator
# needs; the CUDA build views-hydranet's metadata would resolve to is several times
# larger and buys nothing here. pipeline-core and views-frames are not needed on this
# path and are not installed.
#
# Why a RELEASED pin and not a git ref: runtime_smoke.yml was pinned to a pre-fix
# commit for five weeks and stayed green while every baseline model was broken (C-106,
# #460). A released version tracks what the models actually install. Keep the ==pin
# below in step with the 8 models' `views-hydranet~=` floor when either moves: 0.1.0 at
# #462 (2026-09-15), 0.1.1 at #484 (2026-09-19, require_cuda).
on:
push:
branches: [main, development]
pull_request:
branches: [main, development]

jobs:
roster-configs-load:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Install the config layer (CPU-only torch — a validator imports it; see header)
run: |
pip install pytest "numpy<3" "pydantic>=2,<3"
pip install torch --index-url https://download.pytorch.org/whl/cpu
pip install --no-deps "views-hydranet==0.1.1"

- name: Roster configs load — every member constructs through HydraNetConfig
run: pytest tests/test_roster_configs_load.py -v
25 changes: 22 additions & 3 deletions .github/workflows/run_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,33 @@ jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4

- uses: actions/setup-python@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'

# PINNED, and the pin is the point. This was `pip install views_pipeline_core pytest`,
# unpinned, so CI silently tested against whatever PyPI served that day: no past green
# run recorded which version it had actually proved.
#
# 3.3.0 (published 2026-09-19). 3.2.0 was the first release a config_maturity.py source
# runs on (pipeline-core #495, #497; why PR #444 broke 14 models while this suite, then
# on 3.0.1, stayed green). 3.3.0 adds: the queryset loader raises with an install hint
# instead of returning None (their #514 -- tools/catalogs/update_readme.py isolates that
# call, #478); ADR-064 refuses a DataFrame prediction carrying an entity absent from the
# input's last month; wandb <1.0 and views-frames <3, so this venv resolves wandb 0.30
# and views-frames 2.0.0 -- the same resolution the ensembles get, since they pin
# neither. The ensembles declare >=3.0.0,<4.0.0, so 3.3.0 is inside what production
# installs.
#
# Bump this deliberately, together with the ensembles' requirements.txt floors, never
# on its own -- CI testing a version production does not install is the skew this pin
# removes. Named trigger for the NEXT bump: at 4.0 viewser becomes an optional extra
# (their ADR-063); anything here that reaches viewser through pipeline-core without
# installing the extra stops importing.
- name: Install dependencies
run: pip install views_pipeline_core pytest
run: pip install "views_pipeline_core==3.3.0" pytest packaging

- name: Run tests
run: pytest
49 changes: 49 additions & 0 deletions .github/workflows/runtime_smoke.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Runtime Smoke

# C-106 exit: the main `run_tests.yml` suite verifies declarations (config,
# structure, contracts) but never executes a model. This job runs ONE real
# model config through the real config -> catalog -> model path and asserts the
# produced forecast honors the config (sample count, shape, no NaN/Inf,
# determinism) — the runtime signal that config-green cannot give.
#
# It is deliberately DECOUPLED from the main suite's dependency situation:
# * It does NOT install views_pipeline_core, so it dodges the published-core
# skew (C-42/C-73) that keeps run_tests.yml red (C-80). The baseline model
# layer + catalog import zero pipeline-core (verified 2026-07-20).
# * views_baseline / views_frames are installed --no-deps (numpy/pandas only),
# pinned for reproducibility so a red smoke means a views-models regression,
# not sibling drift. Bump the pins deliberately.
#
# views-baseline now installs from PyPI at a released version rather than a git ref,
# which is what the earlier note here asked for once it started publishing releases.
# views-frames moves with it only because 1.0.2 requires >=1.10.2,<2 and the old
# v1.8.1 pin no longer satisfies that.
#
# This also closes a real gap. The git pin was b53fc41 (2026-07-20), 35 commits
# behind v1.0.2, and its catalog.py still read the `targets` key at 7 sites — the key
# views-pipeline-core retired in 507ae11 on 2026-08-02. So this job asserted against
# code no model could run: it went green for the five weeks in which every baseline
# model was broken by that retirement (the breakage is views-models#445).
on:
push:
branches: [main, development]
pull_request:
branches: [main, development]

jobs:
runtime-smoke:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Install runtime deps (no pipeline-core — dodges the published-core skew)
run: |
pip install pytest numpy pandas
pip install --no-deps "views-frames==1.11.0" "views-baseline==1.0.2"

- name: Runtime smoke — execute a model train+forecast, assert output honors config
run: pytest tests/test_runtime_smoke.py -v
Loading
Loading