Skip to content

fix(#439): bump VIEWS_POSTPROCESSING_PIN 1.1.1 → 1.4.0 in both launchers - #522

Merged
Polichinel merged 2 commits into
developmentfrom
fix/439-bump-postprocessing-pin-1.4.0
Sep 29, 2026
Merged

Polichinel merged 2 commits into
developmentfrom
fix/439-bump-postprocessing-pin-1.4.0

Conversation

@Polichinel

Copy link
Copy Markdown
Collaborator

Closes #439.

Two lines, one value. It is the only thing standing between the FAO findability fix and a pod.

-VIEWS_POSTPROCESSING_PIN="1.1.1"
+VIEWS_POSTPROCESSING_PIN="1.4.0"

in postprocessors/un_fao/run.sh:38 and postprocessors/un_crafd/run.sh:34.

Why this is not a no-op

The launcher does not install views-postprocessing from PyPI. It installs from a git ref — tools/launcher/postprocessor.sh:132:

pip install "git+https://${GITHUB_TOKEN}@.../views-postprocessing.git@${VIEWS_POSTPROCESSING_PIN}"

and refuses the run at :164 if the installed ref does not match the pin.

So views-postprocessing#314 being merged does nothing for a pod, and releasing it to PyPI (1.4.0 is there) does nothing either. Verified empirically rather than reasoned: the 2026-09-29 pod ended up with views-postprocessing 1.1.1 while PyPI was at 1.3.0.

Why this was invisible: the two halves of the same incident reach a pod by different mechanisms — views-pipeline-core transitively from PyPI through views-hydranet's dependency range, views-postprocessing from a git tag by exact pin. "Is the fix released?" therefore has two different correct answers depending on which half you mean, and nothing states that anywhere. views-postprocessing#310 is the same family.

What 1.4.0 carries

Verified before committing, not assumed

  • tag 1.4.0 resolves on the remote the launcher actually pulls from — 8db8c9fbff181a0858737724d8bf5a68634c725d
  • no other reference to 1.1.1 remains in the repo outside historical reports
  • the ref-vs-pin guard at postprocessor.sh:164 still reads the same variable
  • bash -n clean on both files

Both launchers, deliberately

un_crafd carries the identical pin and the identical exposure. Leaving CRAF'd on 1.1.1 would fix one partner delivery and silently leave the other on the version with the defect.

Not pinned to development

That would have been the lazy choice and it is worse than a moving target here: the :164 guard compares the installed ref against the pin string, so a branch name satisfies the check designed to catch staleness while installing whatever landed most recently. It would pass the guard and still be unreproducible for a partner-visible delivery.

Expect a behaviour change

A delivery that previously completed can now stop. 1.4.0 adds two refusal situations and no new exception types. A DeliveryNotFindableError names every object that does not resolve and states explicitly when nothing in the run is servable.

Process note

Edited under an explicit lift of the standing "do not modify run.sh" rule, granted by the maintainer for this change.

🤖 Generated with Claude Code

https://claude.ai/code/session_01GG2cY2HaqmUMpwUyR5V82K

Polichinel and others added 2 commits September 29, 2026 22:36
…hers

Closes #439. Two lines, one value, and it is the only thing standing between the FAO
findability fix and a pod.

WHY THIS IS NOT A NO-OP. The launcher does NOT install views-postprocessing from PyPI. It
installs from a git ref:

    tools/launcher/postprocessor.sh:132
    pip install "git+https://${GITHUB_TOKEN}@.../views-postprocessing.git@${VIEWS_POSTPROCESSING_PIN}"

and refuses the run at :164 if the installed ref does not match the pin. So
views-postprocessing#314 being merged does nothing for a pod, and releasing it to PyPI
(1.4.0 is there) does nothing either. Verified empirically rather than reasoned: the
2026-09-29 pod ended up with views-postprocessing 1.1.1 while PyPI was at 1.3.0.

This was invisible because the two halves of the same incident reach a pod by DIFFERENT
mechanisms — views-pipeline-core transitively from PyPI through views-hydranet's dependency
range, views-postprocessing from a git tag by exact pin. "Is the fix released?" therefore
has two different correct answers depending on which half is meant, and nothing states
that anywhere. views-postprocessing#310 is the same family.

WHAT 1.4.0 CARRIES: #314, the C-94 findability guard that verifies every artefact by name
rather than trusting a returned file id — the defect that let the 2026-09-29 delivery
report "Postprocessor Run Completed" while being unservable; and #315, a guard deriving
the port's documented datastore contract from source so the prose cannot drift from the
code.

VERIFIED BEFORE COMMITTING, not assumed:
  - tag 1.4.0 resolves on the remote the launcher actually pulls from (8db8c9fb)
  - no other reference to 1.1.1 remains in the repo outside historical reports
  - the ref-vs-pin guard at postprocessor.sh:164 still reads the same variable
  - `bash -n` clean on both files

BOTH LAUNCHERS, deliberately. un_crafd carries the identical pin and the identical
exposure; leaving CRAF'd on 1.1.1 would fix one partner delivery and silently leave the
other on the version with the defect.

NOT pinned to `development`, which would have been the lazy choice and is worse than a
moving target here: the :164 guard compares the installed ref against the pin STRING, so a
branch name satisfies the check designed to catch staleness while installing whatever
landed most recently. It would pass the guard and still be unreproducible for a
partner-visible delivery.

Expect a behaviour change: a delivery that previously completed can now stop. 1.4.0 adds
two refusal situations and no new exception types. A DeliveryNotFindableError names every
object that does not resolve and states explicitly when nothing in the run is servable.

Edited under an explicit lift of the standing "do not modify run.sh" rule, granted for this
change.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GG2cY2HaqmUMpwUyR5V82K
/review-diff on the pin bump, and the finding is one the value hid: the rationale blocks in
both launchers document 1.1.0 and then 1.1.1 in detail, and stopped there. The value said
1.4.0 with no recorded reason.

These blocks are not commentary. `tools/launcher/postprocessor.sh:26` says "EVERY STEP
BELOW IS A SCAR. Read the comment before reordering anything." A future reader would have
found a version two moves ahead of its own history and no way to learn what it carries.

Which is the exact pattern the views-postprocessing session named against itself twice
today — fixing the visible half of a finding and leaving the half that bites. The value is
the visible half. The scar record is the half that explains it.

un_fao now records the 2026-09-29 incident as the reason: the findability guard in 1.1.1
checked TWO artefacts out of the 110 a run uploads, and by returned file id rather than by
name, so the first-ever FAO delivery uploaded 109 of 110, logged "Postprocessor Run
Completed", fired a success alert and was refused by views-faoapi. It also records that the
producer half of that defect is views-pipeline-core#552, shipped in 3.3.4 and reached from
PyPI, while this pin is the other half and is reached from a git tag — which is precisely
why "is the fix released?" had two different correct answers and this line was missed for
hours.

un_crafd records the same, framed by the shared-prefix argument its own block already makes
twice: both launchers install into one conda prefix, so moving only the leg that failed
downgrades the environment out from under the armed FAO delivery (C-139). CRAF'd runs the
identical `_assert_delivery_is_findable`, so the defect is byte-identical there and has
simply not fired on that leg yet — the same sentence the 1.1.1 note had to write about #268.

Also replaced the verification recipe. The old one greps for `success is not True`, which
verifies the 1.1.0-era C-79 fix and is still correct but says nothing about what 1.4.0 adds.
The new one greps `DeliveryNotFindableError` in `delivery/findability.py` — verifying the
build by what it REFUSES rather than by what it claims, which is the lesson of the whole
incident.

No behaviour change in this commit; the pin value is unchanged from the previous one.
ruff clean, 8037 passed, `bash -n` clean on both files.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GG2cY2HaqmUMpwUyR5V82K
@Polichinel
Polichinel merged commit 94068de into development Sep 29, 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