Skip to content

release: 1.3.0 to main - #309

Merged
Polichinel merged 12 commits into
mainfrom
development
Sep 19, 2026
Merged

Polichinel merged 12 commits into
mainfrom
development

Conversation

@Polichinel

Copy link
Copy Markdown
Collaborator

Promotes development to main for 1.3.0.

Since 1.2.0: views-frames 2.0.0 and pipeline-core 3.3.0 (bytes unchanged, CI-proven), the tied-draws fix, corrected UPLOAD_ENABLED docstrings in both products, the CRAF'd intent contract, refreshed orientation docs with a guard, and CHANGELOG.md carrying all of it.

No new failure modes. The interlock is unchanged and closed.

Cutting this tag is what lets views-models pin current code — the launcher installs from the tag, not PyPI.

🤖 Generated with Claude Code

https://claude.ai/code/session_01ANY1CCy9Xo7zjMY4XJ69v9

Polichinel and others added 12 commits August 26, 2026 15:16
Both products documented a precondition on first live enablement, and both
had been satisfied:

  unfao  "faoapi's C-161 closure notice"          met 2026-07-20; the residual
                                                  it left open shipped in faoapi
                                                  v1.5.4 on 2026-08-21
  crafd  "the views-crafdapi selection guard      met 2026-08-12, views-crafdapi#53;
          deployed in production"                 their production serves real data

Neither named the gate that actually holds: views-appwrite#171, the
non-production Appwrite decision, without which the upload path cannot be
rehearsed against a real store at all (#18).

This is not cosmetic staleness. product.py is the single source of truth for
this switch, so a reader asking why nothing uploads got a wrong answer — in
both partners, pointing at two different innocent repositories. It is the
mechanism by which views-faoapi spent a month believing the hold was on their
side before asking (#294, 2026-08-22).

Found by /falsify, 2026-08-26. Its two stubs are disposed of in the same
change rather than carried:

  S5  DISCHARGED — this fix is what it asked for.
  S6  WITHDRAWN — it asserted the correction-procedure banner disappears, which
      cannot happen until FAO answers Note 07 Decision B.1. A test that can only
      go green on an external party's reply is decoration (C-102), and #292
      tracks the item better. Withdrawing it also corrects the audit: the nine
      mislabelled cells WERE disclosed to FAO as Note 07 Topic G on 2026-08-21,
      and the audit reported that disclosure as missing.

Kept short deliberately. The first draft ran to twenty lines and put
views-postprocessing/{unfao,crafd} over the 700-line partner budget that
test_doc_accuracy enforces. The budget was right and the prose was not; the
reasoning that did not fit lives in this message and on #294.

Noted, not fixed: crafd/ now sits at 699/700. The budget exists to notice
exactly that, and the next line added there will fail. Out of scope here.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ame-a-satisfied-gate

fix(product): the upload interlock named a gate that no longer gates
…o contract

/review-base-docs found the mechanical layer healthy — validate_docs.sh passes,
every doc a test can reach is accurate — and the human layer stale in exactly
the places nothing reads. Five findings, four fixed here.

**The CRAF'd manager had an intent contract in no form at all.** No CIC file and
no class docstring, while its line-for-line twin has a 189-line contract. ADR-006
mandates one for orchestration and state-owning classes; the CIC README names
both categories. The partner package was cloned and the contract was not.

It is written as a DELTA, deliberately. Two 189-line documents describing one
behaviour is not redundancy, it is two things that can disagree — which is C-75
verbatim, where this directory's files asserted opposite things about the same
call for weeks. The new file states purpose, what it inherits, and a table of
what differs. If the managers ever diverge behaviourally, C-33's extraction
trigger has fired and the form should be revisited with the code.

Registering it in _CIC_SUBJECT made the collaborator guard fire immediately: the
document named the sibling CLASS in backticks, which crafd.py never references.
The guard was right and the backticks were wrong — a markdown link to a sibling
DOCUMENT is not a claim that the class reaches for a collaborator. Fixed by
saying what was meant, not by exempting the file.

**Both orientation documents omitted delivery/findability.py**, which shipped
2026-08-18. README and role_and_seams.md — the two files a new contributor opens
first — both last touched 2026-08-04. Now listed in both, and a new guard asserts
delivery/ stays complete in both. Mutation-proven: deleting the line reddens it.
Scoped to delivery/ because it is the one directory both docs enumerate
exhaustively; firing on the README's deliberate contract/wire/ abbreviation would
be crying wolf (ADR-014 §3).

**The sibling CIC was four days stale** — reviewed 2026-08-21, class changed
2026-08-25. It covered findability and TornRunError but not observed_through, the
#297 boundary stamp. That gap was mine. Recorded, review date moved.

**CLONING.md's "sixteen lines differ" is now fourteen** — the third time that
number went stale, in the paragraph that warns it will. Removed rather than
corrected; the diff command beside it is the source of truth and a number next to
it is a liability.

Two audit findings NOT fixed, and one of them was my error:

- **ADR-004 does have trigger conditions.** The audit reported none; it has five.
  What it does not have is an owner. Reading them produced a better finding:
  at least three have FIRED — downstream systems depend on this repo, breaking
  changes now incur real coordination cost (views-models#403 took eight days;
  #439 is open), and ADR-013 §10 pins bytes across time. Recorded on the ADR with
  evidence. Writing the successor is an architectural decision, not a docs fix.
- **pyproject's python range stays wrong.** Narrowing >=3.11,<3.15 to <3.12 is
  one line and correct, but it invalidates poetry.lock and forces a full
  re-resolve that would move pyarrow off the 16.1.0 the ADR-013 §10 fixtures pin
  (C-72). Attempted, measured, reverted. #295 owns it; the README now states the
  truth, which was the safe half.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ocs-and-the-crafd-contract

docs: the orientation documents froze on 2026-08-04, and CRAF'd had no contract
…in 48 hours

Two updates to the inbound-visibility entry, both measured.

The pin half: views-models moved both launchers 1.1.0 -> 1.1.1 on 2026-08-24,
closing views-models#403 and the C-99 exposure this entry was written about.
1.2.0 published two days later and both launchers are behind again;
views-models#439 asks for the same move a second time. The eight-day lag was
not an incident, it is the steady state. Nothing about the first fix made the
second lag less likely.

The issue half: all 66 open issues org-wide naming this repository were read
and triaged (down from 84 on 2026-08-21). Run because a /falsify audit had
sampled eight and stated the limit rather than claiming the sweep was clean.

Nothing is blocked by this repository that was not already known. The live asks
are ours-to-them, not the reverse, and the commitment made on views-crafdapi#55
was honoured — the source-scraping check was replaced by one that reads the
public registry.

What the sweep found that no mechanism would have: #123 and
views-datafactory#341 are the same decision, filed from both sides on
2026-07-20, owned by nobody for 37 days. Not a block — a block has an owner and
a queue position. Recorded on #123. That argues for repeating the sweep rather
than mechanising it, which is the opposite of what this entry previously
implied.

Still no mechanism proposed; the C-86 trade is unchanged.

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

docs(register): C-112 — the sweep was done, and the pin gap recurred in 48 hours
…oday (#286)

views-pipeline-core 3.3.0 reached PyPI on 2026-09-19 with
views-frames ">=1.10.2,<3.0.0" (their #488). Every earlier release pinned
<2.0.0, which made `poetry lock` refuse this move outright; our own <2 pin
was the last thing in the way.

pyproject: views-frames ">=1.10.2,<2" -> ">=2.0.0,<3".

The re-lock moved six packages and nothing else:

  views-frames           1.10.2 -> 2.0.0    the goal
  views-pipeline-core     3.0.1 -> 3.3.0    our range already allowed it
  views-evaluation        1.0.0 -> 2.0.0    pulled by pipeline-core 3.3.0
  stepshift, views-transformation-library, xarray — transitive

  pyarrow                16.1.0 -> 16.1.0   UNMOVED: the ADR-013 §10 byte-parity
                                            fixtures are pinned to it (C-72)
  levenshtein            0.20.9 -> 0.20.9   UNMOVED: the cp311-only ceiling (C-104)

Pre-flight was done on 2026-08-18 and holds: no in-place `.values` mutation
(the one migration row that can break working code), no CONFORMANCE_FLOOR
assertion, no call to assert_summarizer_contract. The byte question was
measured on 2026-08-21: shards emitted through views_frames.io.arrow hash
identically under 1.10.2 and 2.0.0 at the pinned toolchain, equal to the
committed fixture. This is a re-lock, not a fixture re-vendor.

Also picks up views-frames 1.11.0's fix to the MAP-containment law, which
was wrong on tied draws — ~6% of rows on zero-inflated count posteriors,
this platform's primary data shape (their C-88). This repo volunteered to
take that first.

views-evaluation 2.0.0's [frames] extra still caps views-frames <2
(views-evaluation#91). Not in our resolve: pipeline-core 3.3.0 requests
views-evaluation without that extra, and this repo does not depend on
views-evaluation or views-reporting directly. Checked against the lock.

Verified in CI, not locally: the developer machine holds no interpreter that
can install this lockfile (C-104), so the 3.11 CI job is the first execution
of the locked environment. That is why this is a PR and not a push.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ANY1CCy9Xo7zjMY4XJ69v9
…mes-2

chore(deps): adopt views-frames 2.0.0 — the upstream blocker lifted today (#286)
…not the historical file

Entry authored 2026-09-14 in another session and left uncommitted in the
working tree for five days. Committed as written, plus the one `---` fence
the integrity guard required between it and C-112.

Tier 3: nothing silent, nothing corrupt — the numbers and join keys are
right. The cost lands on an FAO engineer joining the forecast and historical
files and finding their value columns named differently, and on the release
note that committed to one naming for both.

Register 112 -> 113 concerns, 31 -> 32 open. Integrity suite green.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ANY1CCy9Xo7zjMY4XJ69v9
…er-rename

docs(register): C-242 — the consumer rename reached the forecast and not the historical file
…changed

Bumps 1.2.0 -> 1.3.0. MINOR: two dependencies cross a major version and a
statistics fix on tied draws comes in; no new failure modes, no behaviour
change to the delivery, delivered bytes identical.

The changelog entry leads with "no new failure modes" because that is the
sentence a launcher needs — 1.2.0's entry led with three, and a consumer
reading the next one should learn in one line that this is not that.

Why this release exists now rather than later: the launcher in views-models
installs from a git TAG (tools/launcher/postprocessor.sh:57), not from PyPI
and not from poetry.lock. Everything merged since 1.1.1 is invisible to a
server until a tag exists that a pin can name. 1.2.0 exists but was never
pinned; this tag is what views-models#439 will ask for instead.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ANY1CCy9Xo7zjMY4XJ69v9
release: 1.3.0 — views-frames 2.0.0 and pipeline-core 3.3.0, bytes unchanged
@Polichinel
Polichinel merged commit 53e6b70 into main Sep 19, 2026
5 of 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