Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions local-candidates/flow-1.35.0-measured/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
__pycache__/
76 changes: 76 additions & 0 deletions local-candidates/flow-1.35.0-measured/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# Flow 1.35.0 measured admission candidate

The retained 1.35.0 evidence refuses admission. The default attended continuation
omits its execution target, and the repair campaign cannot qualify the encrypted
anchor path. Each gap has three retained reproductions. The 33 base-condition
trials and three idempotency trials passed their expected outcomes.

This directory prepares an unsigned release candidate for review. `prepare.py`
checks the published wheel and sdist, their GitHub asset digests, the annotated
tag, and the successful qualification and three-OS lifecycle runs for source
`6d1f80aa4775e6aa398c3251c8d53e7ec61d0c0c`.

The measured evidence must come from the installed 1.35.0 wheel. The script
checks every retained file against its manifest, rejects repeated trial
identities and reused observations, and derives the campaign totals from the
individual trials. Missing classes, omitted counters, altered files, an
incorrect runtime, or a failed admission condition stop preparation.

```bash
python local-candidates/flow-1.35.0-measured/prepare.py \
--measured-manifest /absolute/path/to/measured-manifest.json \
--out local-candidates/flow-1.35.0-measured/candidate.json
```

Without `--measured-manifest`, the output is an `evidence-incomplete` release
inventory. It cannot assert measured acceptance. The tests in
`tests/test_measured_flow_candidate.py` exercise the validator with explicit
test fixtures; they aren't qualification trials.

The evidence scope is the local synthetic SQLite and pixel fixture. Synthetic
reviewer inputs exercise the real decision APIs. They do not establish customer
qualification, an actual human review, or approval to issue an admission.

`prepare.py` never reads a signing key or changes a registry. After review, the
existing issuer must bind the exact retained manifest and contract digests,
preserve the previous admission in sequence, and issue the matching signed
objects. The live ledger and its projections require a separate reviewed
change. Flow 1.34.0 remains the published admission until that change succeeds.

The corrected successor must use a new immutable version. To inspect an
unpublished 1.35.1 wheel and sdist with their measured evidence:

```bash
python local-candidates/flow-1.35.0-measured/prepare.py \
--unpublished-wheel /absolute/path/to/openadapt_flow-1.35.1-py3-none-any.whl \
--unpublished-sdist /absolute/path/to/openadapt_flow-1.35.1.tar.gz \
--source-commit EXACT_BUILD_COMMIT \
--measured-manifest /absolute/path/to/1.35.1/evidence-manifest.json \
--out local-candidates/flow-1.35.1-measured/candidate.json
```

This mode verifies the local archive metadata and hashes. The source commit
comes from the build record and requires review against the retained build
provenance. Even complete measured evidence produces only
`ready-for-release-review`. It records publication as false and retains the
required merge, protected-main qualification, three-OS lifecycle, immutable
publication, artifact parity, and admission steps. The 1.35.0 refusal stays
separate from the successor's evidence.

For a complete candidate, every counted trial must retain a normalized
observation with the same identity and counters as its manifest entry. The
verifier reads the referenced native reports and checks their outcome, success
flag, and model-call counts. Each uncertain-delivery, attended, and repair
trial must satisfy its own event requirements. Events from one trial cannot
satisfy another trial's requirement.

Attended acceptance requires a native `VERIFIED` effect report. A receipt that
only reports decision completion cannot replace that effect proof. The wheel
check compares every inventoried runtime member with the retained installation
proof and rejects omitted members or extra installed files.

These checks establish consistency among the retained bytes. They don't prove
that an execution took place. Reviewers must inspect the retained measurement
code, installation provenance, and independent oracle references before they
accept the observation. The public verifier does not contain private oracle
recipes or grant authority to its test fixtures.
198 changes: 198 additions & 0 deletions local-candidates/flow-1.35.0-measured/candidate.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
{
"admission_issued": false,
"canonical_policy_commit": "9b61391713203998e584f4834e4812bb41b40f6e",
"evidence_class": "remote-safe-synthetic",
"limitations": [
{
"detail": "BoundAttendedExecutor continuation omits execution_target_kind. The qualified default continuation cannot observe the environment and refuses after successful live revalidation.",
"id": "attended-resume-target-kind",
"status": "observed integration failure"
},
{
"detail": "The repair campaign reads plaintext template/context inputs. It fails campaign proof for the actual encrypted, template-armed OCR repair candidate and refuses approval.",
"id": "encrypted-repair-anchor",
"status": "observed integration failure"
}
],
"measured_manifest_sha256": "sha256:6b7ee4704e42776f707f4b176996b08ffa6bfda1501bc68b65faf7b3dbb59cff",
"measured_scope": {
"application": "Pillow synthetic clinic fixture",
"operator_principal": "Explicit synthetic local protocol inputs; no real human/authentication provider proof",
"required_path": "Default real attended and encrypted repair paths; added deployment adapters/plaintext diagnostics do not substitute for those paths",
"runtime": "Exact installed unmodified Flow 1.35.0 wheel",
"system_of_record": "Local SQLite"
},
"proposed_release_identity": {
"channel": "production",
"previous_admission_sha256": "sha256:d2983b86d5428c892421b191f6943a63cf4f9a0b1629e324d099f5df6fa5dcda",
"schema_version": "openadapt.monotonic-production-release/v1",
"sequence": 2
},
"release_observation": {
"artifacts": [
{
"github_url": "https://github.com/OpenAdaptAI/openadapt-flow/releases/download/v1.35.0/openadapt_flow-1.35.0-py3-none-any.whl",
"kind": "python-wheel",
"name": "openadapt_flow-1.35.0-py3-none-any.whl",
"pypi_url": "https://files.pythonhosted.org/packages/09/89/6c00cae30e9a75f5c2473178550012a8afeeab83c9f465e3039b051a2374/openadapt_flow-1.35.0-py3-none-any.whl",
"sha256": "sha256:2bd0122d506aade41a018cdac1f06a139adef7e85d4ca0b186bb56ee94dc3297",
"size_bytes": 2121501
},
{
"github_url": "https://github.com/OpenAdaptAI/openadapt-flow/releases/download/v1.35.0/openadapt_flow-1.35.0.tar.gz",
"kind": "python-sdist",
"name": "openadapt_flow-1.35.0.tar.gz",
"pypi_url": "https://files.pythonhosted.org/packages/d8/aa/8086768b5a0df9f901a972d4e2bce829a18a24429d2969bdcda1f0e48b5d/openadapt_flow-1.35.0.tar.gz",
"sha256": "sha256:45668042b346fd40ec881f8d43ed8b395c86aa075729168d4787877e03ee6ef3",
"size_bytes": 21116872
}
],
"observed_at": "2026-09-08T21:46:10.121623+00:00",
"release_url": "https://github.com/OpenAdaptAI/openadapt-flow/releases/tag/v1.35.0",
"runs": {
"qualification": {
"conclusion": "success",
"id": 33822314626,
"jobs": [
{
"conclusion": "success",
"name": "docs-consistency"
},
{
"conclusion": "success",
"name": "scope"
},
{
"conclusion": "success",
"name": "windows-mock"
},
{
"conclusion": "success",
"name": "effectbench-standalone"
},
{
"conclusion": "success",
"name": "interop-types"
},
{
"conclusion": "success",
"name": "python-compatibility"
},
{
"conclusion": "success",
"name": "phi-guard"
},
{
"conclusion": "success",
"name": "mypy-strict-safety"
},
{
"conclusion": "success",
"name": "lint"
},
{
"conclusion": "success",
"name": "linux-atspi-x11"
},
{
"conclusion": "success",
"name": "test"
},
{
"conclusion": "success",
"name": "wheel"
},
{
"conclusion": "success",
"name": "e2e-browser"
},
{
"conclusion": "success",
"name": "test-matrix (ubuntu-latest, 3.12)"
},
{
"conclusion": "success",
"name": "test-matrix (ubuntu-latest, 3.11)"
},
{
"conclusion": "success",
"name": "test-matrix (macos-latest, 3.12)"
},
{
"conclusion": "success",
"name": "test-matrix (ubuntu-latest, 3.10)"
}
],
"source_commit": "6d1f80aa4775e6aa398c3251c8d53e7ec61d0c0c",
"url": "https://github.com/OpenAdaptAI/openadapt-flow/actions/runs/33822314626"
},
"release": {
"conclusion": "success",
"id": 33826859321,
"jobs": [
{
"conclusion": "success",
"name": "validate-tag"
},
{
"conclusion": "skipped",
"name": "backfill-github-release"
},
{
"conclusion": "skipped",
"name": "validate-dispatch"
},
{
"conclusion": "skipped",
"name": "create-release-tag"
},
{
"conclusion": "success",
"name": "publish-tag"
}
],
"source_commit": "6d1f80aa4775e6aa398c3251c8d53e7ec61d0c0c",
"url": "https://github.com/OpenAdaptAI/openadapt-flow/actions/runs/33826859321"
},
"three_os_lifecycle": {
"conclusion": "success",
"id": 33822325382,
"jobs": [
{
"conclusion": "success",
"name": "lifecycle (macos-latest)"
},
{
"conclusion": "success",
"name": "lifecycle (ubuntu-latest)"
},
{
"conclusion": "success",
"name": "lifecycle (windows-latest)"
}
],
"source_commit": "6d1f80aa4775e6aa398c3251c8d53e7ec61d0c0c",
"url": "https://github.com/OpenAdaptAI/openadapt-flow/actions/runs/33822325382"
}
},
"source_commit": "6d1f80aa4775e6aa398c3251c8d53e7ec61d0c0c",
"tag": "v1.35.0",
"tag_object": "4e851c65e8fbfd676c2851360f567e2bb7af4945",
"version": "1.35.0"
},
"required_campaign_classes": [
"healthy",
"safe_halt",
"idempotency_replay",
"uncertain_delivery",
"declared_attended",
"governed_repair"
],
"schema_version": "openadapt.unsigned-measured-release-candidate/v1",
"scope": "Executed local synthetic SQLite and pixel fixture; synthetic reviewer inputs; no customer qualification or actual human approval.",
"state": "evidence-incomplete",
"target": "flow",
"validation_errors": [
"measured trials are missing for declared_attended, governed_repair"
]
}
Loading