Skip to content

fix: regenerate platform manifest for openadapt-flow 1.25.1 - #1067

Merged
abrichr merged 1 commit into
mainfrom
fix/platform-manifest-drift
Jul 28, 2026
Merged

fix: regenerate platform manifest for openadapt-flow 1.25.1#1067
abrichr merged 1 commit into
mainfrom
fix/platform-manifest-drift

Conversation

@abrichr

@abrichr abrichr commented Jul 28, 2026

Copy link
Copy Markdown
Member

platform-manifest.json advertised flow 1.24.0 and its sha256 digests while
PyPI's latest was 1.25.1, so validate-platform-manifest failed on main and
on every PR. The manifest is served publicly from raw.githubusercontent and is
OpenAdapt's only cryptographic claim about the current release, so while it is
stale anyone verifying a downloaded wheel against it fails.

Regenerated with scripts/generate_platform_manifest.py. Both new digests were
independently confirmed by downloading the artifacts from PyPI and hashing the
bytes, not just by trusting the generator's read of the JSON API:

375c516837a44bc8bea87ba0429967f92561d6df92eef41e624f55c281bed9ae wheel
15393bb978283e87f043e6fa5f05d7b1d3fc0f9a497a4cf9561a23e8fc5f76ac sdist

pyproject.toml pins flow by range (>=1.20.1,<2.0.0), so no pin change is
needed; the manifest records the published version.

Why it drifted, and why it will drift again

The launcher's own release workflow regenerates the manifest, so launcher
releases self-heal. Component releases do not. This workflow declares a
component-released repository_dispatch receiver and its comment stated the
sending side was already a one-step gh api ... /dispatches in the component
release workflows. That is false: none of openadapt-flow, openadapt-capture or
openadapt-desktop has such a step. The receiver has no sender, so the daily
cron is the only automatic detector. Flow published 1.25.0 and then 1.25.1 on
2026-07-27, hours after the manifest was last regenerated at 15:42 that day and
hours after the 06:17 cron, which is why this landed as a red main rather
than as a drift issue.

The false comment is corrected here, in the workflow and in
docs/platform-manifest.md, so the open loop is visible instead of looking
closed. The fix itself is deliberately not attempted in this PR: a
cross-repository dispatch cannot use a component repo's own GITHUB_TOKEN and
needs a contents: write token provisioned as a secret in three repositories,
which is a credential decision. Auto-opening a regeneration PR is separately
impossible today because Actions is not permitted to create pull requests in
this repository (can_approve_pull_request_reviews: false); adding that job
would produce a permanently red check rather than a fix.

Note: https://openadapt.ai/status.json (openadapt-web) is also still on flow
1.24.0. The validator treats that as a WARNING, not an error, so it does not
block, but it is the same drift on a second public surface.

🤖 Generated with Claude Code

https://claude.ai/code/session_01NyCHrzA1psrKMFfroYbzaM

`platform-manifest.json` advertised flow 1.24.0 and its sha256 digests while
PyPI's latest was 1.25.1, so `validate-platform-manifest` failed on `main` and
on every PR. The manifest is served publicly from raw.githubusercontent and is
OpenAdapt's only cryptographic claim about the current release, so while it is
stale anyone verifying a downloaded wheel against it fails.

Regenerated with `scripts/generate_platform_manifest.py`. Both new digests were
independently confirmed by downloading the artifacts from PyPI and hashing the
bytes, not just by trusting the generator's read of the JSON API:

  375c516837a44bc8bea87ba0429967f92561d6df92eef41e624f55c281bed9ae  wheel
  15393bb978283e87f043e6fa5f05d7b1d3fc0f9a497a4cf9561a23e8fc5f76ac  sdist

pyproject.toml pins flow by range (>=1.20.1,<2.0.0), so no pin change is
needed; the manifest records the published version.

Why it drifted, and why it will drift again
-------------------------------------------
The launcher's own release workflow regenerates the manifest, so launcher
releases self-heal. Component releases do not. This workflow declares a
`component-released` `repository_dispatch` receiver and its comment stated the
sending side was already a one-step `gh api ... /dispatches` in the component
release workflows. That is false: none of openadapt-flow, openadapt-capture or
openadapt-desktop has such a step. The receiver has no sender, so the daily
cron is the only automatic detector. Flow published 1.25.0 and then 1.25.1 on
2026-07-27, hours after the manifest was last regenerated at 15:42 that day and
hours after the 06:17 cron, which is why this landed as a red `main` rather
than as a drift issue.

The false comment is corrected here, in the workflow and in
docs/platform-manifest.md, so the open loop is visible instead of looking
closed. The fix itself is deliberately not attempted in this PR: a
cross-repository dispatch cannot use a component repo's own GITHUB_TOKEN and
needs a `contents: write` token provisioned as a secret in three repositories,
which is a credential decision. Auto-opening a regeneration PR is separately
impossible today because Actions is not permitted to create pull requests in
this repository (`can_approve_pull_request_reviews: false`); adding that job
would produce a permanently red check rather than a fix.

Note: https://openadapt.ai/status.json (openadapt-web) is also still on flow
1.24.0. The validator treats that as a WARNING, not an error, so it does not
block, but it is the same drift on a second public surface.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NyCHrzA1psrKMFfroYbzaM
@abrichr
abrichr merged commit c11ce10 into main Jul 28, 2026
12 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