release: 2.0.0 — to_dataframe() and the dataframe extra removed (#72) - #84
Merged
Merged
Conversation
Version 1.1.0 → 2.0.0 (MAJOR, ADR-022 §5). CHANGELOG gains the `[2.0.0] —
2026-09-18` section with the §7 checklist worked through; the register gains the
dated release block. §3.2 notifications posted before the tag and cited by comment
ID (views-pipeline-core#515, views-reporting#289). Consumer state measured at the
cut: views-pipeline-core's released 3.2.0 still calls the removed method and pins
^1.0.0; views-reporting's main admits 2.0.0, its released v0.3.3 does not.
The release review found fifteen guard and doc defects, fixed here and each seen
red on an injected defect:
- Import purity: one walker, one path-keyed allowlist set to the measured census
(a stem key gave profiles/__init__.py the root package's allowance; a string
literal under ANY call made `float("nan")` an import whenever a `nan` package
was importable). Literals are read only under import machinery and its aliases,
`name=` included; `exec`/`eval` are forbidden everywhere; the runtime probe also
saves and loads a MetricFrame. The runtime-dependency pin reads both pyproject
layouts and the extras' contents.
- Logging: `metrics` and `config_schema` added to the logging guard's Level-0
list and to the standard's §5.1 list so the three classifications agree.
- Report: `to_dict()` documents and a test pins that `schemas` is the live
structure; `get_schema_results()` is tested on all three schemas; the public
surface is pinned as an allowlist (class and instance); the FM1 raise is
asserted silent.
- Doc guard: scans the CHANGELOG section of the version being cut (it had frozen
it as history), splits with the shared fence-aware parser, uses word-anchored
removal framings, and drops the five block-wide 2.0-era markers that had widened
the older guards' exemption.
- CI probe: passes an int `timestamp` and the ISO string as `evaluation_timestamp`
(the contract's field is int; the exemplar had mis-stamped provenance), asserts
the type, and derives the row count.
- Docs: README no longer attributes EvaluationReport to the emit layer; the CIC
scopes FM1 to `get_schema_results()`, cites the transplanted extra-absent test,
and is dated; the CHANGELOG states plainly that both releases were cut on the
same day.
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This was referenced Sep 18, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Story S8 (#72) · Epic #66 · Tracking #73. Release 2.0.0 into
development; thedevelopment→mainPR, thev2.0.0tag and the draft GitHub Release follow this merge. MAJOR under ADR-022 §5: the surface 1.1.0 deprecated is removed.The release commit
pyproject.toml1.1.0 → 2.0.0;CHANGELOG.mdgains## [2.0.0] — 2026-09-18with the ADR-022 §7 checklist worked through; the register gains the dated block. The CHANGELOG guard was red on the version bump before the section was written and green after.§3.2 notifications posted before the tag and cited by comment ID: views-pipeline-core#515 (comment 5733334619), views-reporting#289 (comment 5733334868). Consumer state, measured on a fresh fetch 2026-09-18: views-pipeline-core's released 3.2.0 still calls the removed method in
stage.pyand pins^1.0.0, so 2.0.0 reaches them only when S10 raises the pin; views-reporting'smainpins>=1.0.0,<3.0.0and calls nothing removed, while its released v0.3.3 still pins<2.0.0. The checklist says plainly that 1.1.0 and 2.0.0 are cut on the same day: §2 counts cycles in releases, and the notes plus the notifications are the notice for a consumer who never installed 1.1.0.Review findings addressed (15 of 15 from
/code-review max, 2 from/review-diff)The release diff reviewed is
v1.1.0..HEAD, i.e. S7 plus the release commit; the findings were on S7's guards, and they are fixed here because a release should not ship guards known to have holes.profiles/__init__.pyinherited the root package's allowance; a hardimport views_framesthere passedfind_specis a probe, not an import)find_spec;float("nan")became an import whenever ananpackage was importable or anan/directory sat onsys.pathname=included, with nofind_specgate;exec/evalforbidden everywhere; a synthetic positive control for every spelling claimedsave/load; pandas inMetricFrame.save()was invisible_extras_table; asserts the extras' contents, the runtime set under either layout, and that views-frames stays optionalmetrics/config_schemaclassified Level 0 by one guard but not by the logging guard or the standardto_dict()returns the live dict; the only pin was deleted withto_dataframeget_schema_results()tested onmonthonly after the deletions[2.0.0]section as history; ad-hoc heading regex[Unreleased]plus the section for the pyproject version, split with the shared fence-aware parser_REMOVAL_FRAMINGmatched "is used to", "was the",removed_cols_HISTORICAL_MARKERSwidened the older guards' exemptioninttimestamptimestamp=int,evaluation_timestamp=str, type asserted, row count derivedEvaluationReportto the emit layer; CIC scoped FM1 to the class, cited no test for the frames branch, dated 2026-08-02C-37 evidence
Every fixed guard was seen red on the review's own injection:
import views_framesinprofiles/__init__.py,import_module(name="pandas"),exec("import pandas"), an aliasedimport_module("modin")in Level 0, pandas insave(), a month-onlyget_schema_results, a deep-copyingto_dict,to_recordson the report andas_rowson the base, a logging FM1 raise, a stale sentence inside[2.0.0], "is used to",removed_cols, "was the", and "since 2.0.0 + PandasAdapter" against the older guards. The false-red probe (os.path.join("tests", ...)in a package file) now passes.Independent guard audit (
/falsify guard, clean-context subagent): 64 mutations over 14 guards; nothing decorative; five guards WEAK with concrete survivors, all closed in this commit and re-verified red:getattr(importlib, "import_module")("pandas")or a spec-loaded pandas inside a kernel the runtime probe never called survived; the probe now evaluates every implemented kernel in all four cells and asserts none was skipped.from views_evaluation.evaluation import metric_framein Level 0 survived the crossing check; the walker now records imported names for absolute imports too.views-framesunder a PEP 621[project] dependencieslist survived, and a correct PEP 621 extras entry with a version specifier fired falsely. Both layouts handled; hard vs declared sets asserted separately.__getattr__shim servingto_dataframeunder a split token beat thedir()listing. The removed names are probed behaviourally on instances and__getattr__is banned._logger = ...andfrom logging import getLoggerbeat the text regex. The guard now checks for Logger objects bound at module level.[2.0.0]section was invisible (fence-stripped body),examples/README.mdwas unscanned, and line numbers were off by one. Raw-text section scanning with real line numbers;examples/**/*.mdscanned;removesdropped from the framing list.Residuals stated in the docstrings: string concatenation of a module name, a
# deprecatedtrailer or an identifier namedremovedon the same line as the method, andwarnings.warnbefore the FM1 raise.Gate
994 passed · ruff clean ·
validate_docs.shpassed · the CI probe body executes locally and emits 12 rows.🤖 Generated with Claude Code