Skip to content

Sync main: views-pipeline-core 3.0.0 — six register entries close - #217

Merged
Polichinel merged 5 commits into
mainfrom
development
Aug 3, 2026
Merged

Sync main: views-pipeline-core 3.0.0 — six register entries close#217
Polichinel merged 5 commits into
mainfrom
development

Conversation

@Polichinel

Copy link
Copy Markdown
Collaborator

Brings main current with the views-pipeline-core 3.0.0 bump (#216), requested by #172.

⚠ Merging deploys

views-models/postprocessors/un_fao/run.sh installs this repo with pip install git+…@main. The next FAO run picks this up, and this one changes the framework underneath the delivery. Pinning that launcher to a tag remains the fix; it is a two-repo change and not made here.

What closes — each verified in the installed wheel, not the changelog

entry what closed it
C-73 (Tier 2) search_files_by_metadata now pages. It used to return the newest of the oldest 25 and ship a stale run rather than failing
C-58 (Tier 2) create_bucket gone; a missing container fails loud before any write instead of silently provisioning new production storage
C-13 install_request_timeout() is called by pipeline-core itself, bounding every outbound call at a single chokepoint
C-62 geopandas, torch, shapely, pyogrio, seaborn, statsmodels, plotly gone; 155 → 118 packages
C-07 appwrite and pytest declared here instead of free-ridden
C-44 the bump itself

The framework was previously untested — that is now fixed

Measured with a plugin over the whole run: views_pipeline_core was imported zero times by the suite. Every manager test is a source scan. So a green suite said nothing whatsoever about a major framework release.

tests/test_framework_contract.py (new, 8 tests) asserts the contract: overridden hook signatures match the base, no unimplemented abstract methods, the MRO register C-40 describes, and every inherited attribute resolves. Three mutations proven.

All 13 upstream breaking changes were checked against our surface; none bites.

Two CI failures worth recording

Both were mine, and both are the same shape — verified in my environment, asserted generally:

  1. ruff check . was green locally and red in CI by 815 findings. My ruff was 0.14.13; CI resolved 0.16.1, which widened its default rule set. Inheriting a moving default is ADR-003's forbidden inference applied to tooling. The rule set is now declared (select = ["E4","E7","E9","F"]) and verified against both versions.
  2. Then ruff linted views-crafdapi, the sibling CI checks out into the workspace — 745 findings in someone else's repository. That is the third tool here to walk the sibling checkout; the coordinate-value and partner-contact scans both did, and the latter would have turned main red with a message asserting a file was "in this public repository" when it was not.

Corrections to my own register claims, made in the same PR

  • Cluster M's scope line still said "Full for … C-72 …" three lines below the paragraph correcting exactly that. C-72 does not close — its fix changes delivered wire bytes.
  • C-62 claimed the bump removed most of the Dependabot surface. It did not: 29 of 31 alerts survive at unchanged versions (Pillow via matplotlib ← pyod, GitPython via wandb). The tree shrank; the vulnerability surface barely moved.
  • C-07 said "the residual is pandas alone." Wrong twice: numpy is an undeclared module-scope runtime import, and pandas is TYPE_CHECKING-only.

New: C-83 (Tier 2)

get_queryset() swallows import errors and returns None; declared_data_format(None) defaults to 'dataframe'; our guard then tells the operator to set data_format: 'feature_frame' in a file that already says so. A queryset that failed to import is indistinguishable from one declaring the wrong format — on the live FAO path, while someone is fixing a failed run. Reproduced both ways.

Verification

410 collected
370 passed / 40 xfailed / 0 failed   isolated venv from PyPI, exact resolved set
370 passed / 40 xfailed / 0 failed   conda env, editable sibling
356 passed / 16 skipped / 38 xfailed CI (green, including the new lint step)

Wire fixtures verify byte-for-byte; pyarrow and views-frames pins deliberately untouched. Register 83 / 17 open / 66 resolved.

Polichinel and others added 5 commits August 3, 2026 14:49
…close

Requested by views-postprocessing#172. 3.0.0 reached PyPI 2026-08-03; our cap
excluded it, so this was a decision rather than a maintenance chore. The operator
took it.

What closes, each verified in the installed wheel rather than from the changelog
- C-73 (Tier 2) search_files_by_metadata now pages (Query.limit + Query.offset,
  MAX_METADATA_PAGES). It used to return the newest of the OLDEST 25 and ship a
  stale run rather than failing. get_predictions_by_metadata now raises
  MetadataSearchIncomplete instead of returning [] on a failed search -- without
  that, paging would have traded a false-stale answer for a false-absent one.
- C-58 (Tier 2) create_bucket is gone; a missing container fails loud BEFORE any
  write, instead of silently provisioning new production storage.
- C-13 install_request_timeout() is called by pipeline-core itself, and the SDK has
  a single outbound HTTP call site, so uploads, downloads and searches are all
  bounded.
- C-62 geopandas, torch, shapely, pyogrio, seaborn, statsmodels, plotly gone;
  155 -> 118 packages.
- C-07 appwrite and pytest declared here instead of free-ridden.
- C-44 the bump itself.

The appwrite extra is not optional despite the name
The partner managers import views_pipeline_core.modules.{appwrite,datastore}, which
import the SDK unguarded. Proven: with the SDK removed, importing the manager raises
ImportError naming the extra. Built wheel metadata carries
views-pipeline-core[appwrite], so views-models' `pip install git+...@main` gets it.

pytest was never declared here and arrived through pipeline-core, which dropped it
in 3.0.0. Without the dev group CI would have failed as "pytest: command not found".

New: tests/test_framework_contract.py
Measured with a plugin over the whole run: views_pipeline_core was imported ZERO
times by the suite. Every manager test is a source scan. So 362 green tests were
entirely orthogonal to a major framework release. This file asserts the contract --
overridden hook signatures match the base, no unimplemented abstract methods, the
MRO C-40 describes, and every inherited attribute resolves. Three mutations proven
(hook gains a parameter; MRO reordered; an undeclared inherited attribute appears).
All 13 upstream breaking changes checked against our surface; none bites. The
PredictionFrame leaf-class move was already satisfied -- we import it from
views_frames, construct positionally, never read .y_pred.

Three of my own register claims were wrong and are corrected
- Cluster M's scope line still said "Full for ... C-72 ..." three lines below the
  paragraph correcting exactly that. C-72 does NOT close: its fix changes delivered
  wire bytes and needs a three-repo re-vendor of the ADR-013 s10 fixture.
- C-62 claimed the bump removed most of the Dependabot surface. It did not: 29 of
  31 alerts survive at unchanged versions (Pillow now via matplotlib<-pyod,
  GitPython via wandb). The tree shrank; the vulnerability surface barely moved.
- C-07 said "the residual is pandas alone". Wrong twice: numpy is an undeclared
  module-scope runtime import in five modules, and pandas is TYPE_CHECKING-only.

New: C-83 (Tier 2). get_queryset() swallows import errors and returns None;
declared_data_format(None) defaults to 'dataframe'; our guard then tells the
operator to set data_format: 'feature_frame' in a file that already says so. A
queryset that failed to import is indistinguishable from one declaring the wrong
format -- on the live FAO path, while someone is fixing a failed run.

Also: ruff now runs in CI (a declared linter nobody runs is a claim without a
check); README dependency table completed with pyarrow and the dev group.

370 passed / 40 xfailed / 0 failed in BOTH an isolated venv built from PyPI with
the exact resolved set and the conda editable env. ruff clean. Wire fixtures still
verify byte-for-byte; pyarrow and views-frames pins deliberately untouched.

Register 82/16/66 -> 83/17/66.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…y 815 findings

The ruff CI step added in the previous commit went red immediately, and the cause is
worth recording rather than just fixing.

`ruff check .` was green locally and I claimed it was green, full stop. It was green
on MY ruff (0.14.13). CI resolved 0.16.1 from the dev group's `>=0.6,<1.0`, and the
newer release widened its default rule selection: **815 findings** on a tree nobody
had touched, including DTZ005 and import-sorting rules this codebase has never been
held to.

Inheriting a moving default is ADR-003's forbidden inference applied to tooling: the
rule set was never declared, so "ruff passes" meant "ruff passes here, today, on
whatever version happens to be installed."

`[tool.ruff.lint] select = ["E4", "E7", "E9", "F"]` — the classic defaults this
repository has in fact been linted against throughout, which is why it is green on
them. Verified with BOTH ruff 0.14.13 and 0.16.1: All checks passed.

Widening beyond that is deliberate, separate work. 815 findings is a backlog, not a
gate, and a gate that starts red gets switched off (ADR-014 §3).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
… to walk it

The ruff step went red again, this time on 745 findings inside
`_siblings/views-crafdapi/tests/` — someone else's repository, checked out into the
workspace so our cross-repo assertions can run.

This is the THIRD tool in this repo to fall into the same hole. The coordinate-value
scan walked it, and the partner-contact scan walked it and would have turned `main`
red with a message asserting a file was "in this public repository" when it was in a
different one. Both were fixed by scoping to `git ls-files`. A bare walk from the
repo root is no longer a safe default here, and the config now says so where the next
person will read it.

`extend-exclude = ["_siblings"]`, plus `_siblings/` in .gitignore so a local checkout
cannot commit it.

Reproduced CI exactly before pushing: sibling cloned into `_siblings/`, ruff 0.16.1,
run from the repo root -> All checks passed. Suite unaffected at 370 passed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
feat(deps): bump views-pipeline-core to 3.0.0 — six register entries close
The dev->main sync merges with a merge commit, so main gains a commit that
development does not have. prevent_merge_when_branch_behind.yml requires main to be
an ancestor of the PR head, so the next sync is blocked until that commit comes back.

Purely topological — main carries no content development lacks (verified: the only
diff is development being ahead by the 3.0.0 bump). Same back-merge as 231bec.
@Polichinel
Polichinel merged commit 3286eab into main Aug 3, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant