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
38 changes: 38 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,44 @@ and this project adheres to [Semantic Versioning](https://semver.org/).

## [Unreleased]

## [0.8.0] - Unreleased candidate

Source manifests currently identify `0.8.0-rc.1`; no final release is implied.
See [release notes and migration](docs/release-notes-0.8.0.md) and the
[checkpoint qualification](docs/release-qa-0.8.0.md) before choosing a consumer pin.

### Added

- Typed generic model operations and capability discovery, including bounded
Image-to-Text requests and explicit model/projector roles. Availability still
depends on the selected model, serving profile and qualified runtime.
- Authenticated local owner discovery, explicit existing-library enumeration,
owner retention and generation fencing for embedding consumers.
- Digest-bound local imports and conditional S3 single-object/authored-bundle
acquisition, with immutable selection and retained download custody.
- Pinned inference-enabled headless candidate assembly for Linux x86_64,
Windows x86_64 and macOS ARM64. The release inventory now requires sixteen
artifacts; assembly and startup do not qualify pretrained inference.

### Changed

- Older download metadata requires an explicit offline schema-7 upgrade with
stopped-reader/writer confirmation and an exact metadata-only backup.
- Hugging Face detail resolution follows explicit model selection; cached
discovery and live download authority remain distinguishable.
- Installed speech has conditional custody and qualification plumbing;
production Audio-to-Text remains unavailable until its admission gates pass.

### Fixed

- Desktop startup failures keep recovery and metadata upgrade actionable,
including small windows and failed replacement startup attempts.
- Startup preserves retained downloads whose destination folders are missing,
without recreating folders or finalizing absent outputs.
- Receipt-bound GGUF selection survives owned library moves, and explicit
headless legacy-schema preflight avoids creating a new failed owner claim.
- Candidate packaging selects notices matching the current source version.

## [0.7.0] - Unreleased candidate

See [0.7.0 release notes](docs/release-notes-0.7.0.md) for capabilities,
Expand Down
121 changes: 121 additions & 0 deletions docs/plans/v080-qualification/execution-ledger.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
# Qualification continuation ledger

## 2026-10-14 — resumed actual state

Original candidate and remote PR70 head remain
`df53db08e2ba224edfaf713522ddd410f7d4ac44`; the worktree was clean at resumption.
Build 38522709859 is in progress. Workflow/release and frontend/desktop jobs passed;
the remaining source/native jobs are still active. No submitted GitHub review
or inline thread exists; the separate independent report was requested.

Fresh pnpm 10.33.0 audit: production has zero advisories; all dependencies report
one moderate sprintf-js advisory GHSA-hp3w-g68c-fv3c. The existing dependency review
already owns its build-only path and absence of a compatible minimal removal.
No lockfile or dependency update has been selected. Cargo audit tool setup and
frozen no-script dependency setup are underway; no results are assumed.

## 2026-10-14 — CI failure, bounded fixture repair and local evidence

Headless job 115716297437 failed exactly one unit test on df53: the worker did not
reach `pause_is_rejected_after_final_file_commit_and_during_cleanup`'s blocked
cleanup cutpoint within one second (2,069 passed, one failed, 13 ignored).
The [retained excerpt](reports/ci-df53-headless-failure.txt) names the source/run/job.
The same candidate's full Rust quality job passed. This is separate from the
earlier catalogue test, which did not reproduce locally.

Amended the plan before changing only the cleanup test. Its fixture admission,
cutpoint and settlement waits now share a bounded ten-second budget and report
the selected cutpoint/worker stage. Both actual cleanup cutpoints, refused pause,
Downloading-before-release, Completed settlement and zero retained claims remain
asserted; no production timeout or custody semantics changed.

- Focused no-default test passed: 1/1, 0 ignored, 0.67 seconds after compilation.
- Full no-default unit cohort run concurrently with Clippy passed 2,067 and failed
three unrelated one/three-second fixtures, with 13 ignored; 147.74 seconds.
These failures and that noncanonical resource-contention condition are retained,
not relabeled as passing or used to broaden this repair.
- Once compilation/lint finished, the unchanged full cohort passed **2,070/2,070**,
13 ignored, in **41.56 seconds**. The three other tests needed no source changes.
- `cargo clippy --locked --offline --manifest-path rust/Cargo.toml -p pumas-library
--no-default-features --tests -- -D warnings` and Rust formatting passed.
- These local runs used pinned Rust/Cargo 1.92.0, an isolated task target,
`CARGO_INCREMENTAL=0 CARGO_PROFILE_DEV_DEBUG=0`; this changes debug metadata/cache
use, not optimization or assertion semantics. No package/model inference claim.

## Current dependency/package observations

Cargo audit completed with zero vulnerability entries, three maintenance notices,
and one lru unsoundness warning. The concrete S3 SDK key/access path does not expose
the warning's panicking-key/pop trigger. Current pnpm production audit has zero
advisories; its one moderate build-only sprintf-js finding retains the existing
owned disposition. [Dependency review](reports/dependency-review.md) retains raw
audits, exact notice hashes and bounded source reasoning without suppression.
Default and S3 notice inventories regenerated byte-identically (378/428 entries).

The exact df53 Linux inference CI job 115716297315 passed native pinned ORT loader,
strict production build/archive verification, authenticated owner startup/drain,
and the real ORT/untrained-graph lifecycle. Artifact 11875745665 is 30,659,590 bytes,
GitHub ZIP SHA-256 `2dc6dd91e0f7f6258b5f7c96a433d45653190cb939eb6bad12c4c03283627a91`.
Evidence artifact 11875865202 ZIP SHA-256 is
`a51626da4d0460ffd083618ffa2461ade5126bb012044789c3490c6f92e498bf`.
These are old-candidate identities, not relabeled as the repaired source.

GitHub connector retrieval of artifact 11875745665 succeeded as file reference
`file_00000000a08081fd9504dd4b9ca6d671`; the executor's subsequent byte transfer
was denied by its HTTP proxy tunnel (403). No ZIP bytes reached local storage,
so inner archive/binary hashes and a local replay are unavailable, not passed.
The same denial occurred for audio artifact 11874379748. No alternate host or
authorization bypass was attempted. Original CI is still running; no push has
cancelled it, and final native/model/publication gates remain explicit.

## 2026-10-14 — terminal repair qualification and handoff

Original Build 38522709859 completed failure: eight applicable jobs passed and
the headless fixture failure above remained its sole failing job. Its terminal
snapshot is [retained](reports/ci-df53-terminal.json). After that terminal result,
committed and pushed the scoped repair as
`aa40e155846cdac6cd94b6f5c2fd6a35cddce16e`, tree
`f016a43b50f815f77177aafec2655e763abe3aad`.

Repair Build [38526618039](https://github.com/MrScripty/Pumas-Library/actions/runs/38526618039)
completed **success: all nine applicable jobs passed**. This includes full Rust
quality, headless no-default/HF and RPC, enabled-S3 tests/lint, frontend/desktop,
Linux inference review packaging, confined audio dependencies, and native source
QA on Linux, Windows and macOS. Tag-only package/assembly jobs were skipped.
The [final machine receipt](reports/qualification.json) retains exact job IDs,
per-command headless totals and current artifact identities. The separately
required ignored Linux kernel read-confinement test actually ran and passed.

The exact aa40 Linux review package is artifact 11877010982, 30,659,584 bytes,
GitHub ZIP SHA-256
`3dfdca18419edf3b1125f2ad6e6577c2d9b480caa293e3a612d979a7bbac4303`.
Its native pinned ORT loader, extraction/authenticated owner startup, untrained
256-dimensional graph execution, loaded packaged-runtime identity, unload and
graceful stop passed in CI. This establishes neither trained-model quality nor
the final sixteen-artifact matrix. No local byte transfer of this replacement
was attempted after the two earlier proxy denials; no inner hash is invented.

Inspected Pantograph's published consumer receipt at handoff
`3649df2d3c4c718aa278e809f27cbc2a915f8c47`: actual source
`039cee079d273a8d4968df56a4b35e8eb8aacbbe` qualified Pumas df53 through public
Chrema and Candle. Its owner reports 19 integration, 598 library (2 existing
ignores), 4 HTTP tests and independent consumer review. No API repair was needed.
The df53-to-aa40 Rust diff is solely in the existing test module; the production
prefix is byte-identical. Parent decides final pin/lineage acceptance; this is
not a substituted aa40 consumer run or an independent review of all PR70 changes.
GitHub still has no submitted PR70 review or inline thread; no separate Pumas
independent diff report was supplied.

The [decision report](reports/release-blockers.md) reduces remaining release gates
to source/review/pin acceptance, required native final artifacts, minimal trained
model/runtime execution, final-file metadata/review and aligned final version/
parent promotion. It explicitly excludes unrelated future capability expansion.
The original candidate receipt remains unchanged; main remains ef9eead9 after
refresh. Local inference artifacts and user source work remain preserved.

This final followup changes evidence only. Its commit may trigger a new automatic
Build; the terminal acceptance above belongs to immutable aa40, not an unobserved
later documentation head. No tag, release, model download or user migration ran.
Final mechanical checks passed: all report JSON parsed, relative Markdown links
resolved, receipt source tree/lock/earlier-receipt hashes matched, all CI jobs were
terminal with nine successes, artifact metadata bound aa40, and `git diff --check`.
11 changes: 11 additions & 0 deletions docs/plans/v080-qualification/issues.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Qualification issues

| Finding | State / owner / next evidence |
| --- | --- |
| Original Build 38522709859 failed | Closed with retained terminal snapshot; eight applicable jobs passed, one fixture failed. Never relabeled green. |
| Exact-head no-default cleanup test failed at one-second cutpoint wait | Closed on aa40: bounded fixture repair, focused/full local cohort, Clippy/format and all nine applicable Build 38526618039 jobs passed. |
| Independent Pumas diff report not present on PR70 | Parent disposition remains open. Published independent Pantograph consumer review inspected for df53 only; not a PR70 diff review or aa40 pin adoption. |
| Known sprintf-js moderate advisory | Existing build-only disposition; verify current exact lock path, preserve it without suppression |
| lru 0.16.4 unsoundness notice | Reviewed exact AWS SDK cache: private String key, no panicking custom Drop or pop access. Specific advisory trigger absent; keep warning and S3-owner revisit trigger visible. |
| Artifact transfer to executor denied | GitHub connector retrieval succeeded; executor proxy tunnel denied both audio and exact df53 inference artifact file-reference transfers with 403. Local byte inspection/replay unavailable; do not substitute old artifacts or infer inner hashes. |
| Actual final package/model/platform acceptance | Exact aa40 Linux review archive passed real untrained ORT execution in CI. Final sixteen-artifact/native/trained-model/metadata gates remain parent/platform-owned; exact minimal list in reports/release-blockers.md. |
99 changes: 99 additions & 0 deletions docs/plans/v080-qualification/plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# v0.8 qualification continuation

**Status:** Complete. **Acceptance:** Q1–Q4 evidence satisfied within stated scope;
final source adoption and release approval remain parent-owned.
**Current phase:** terminal qualification handoff.
**Next slice:** parent selects the source pin and completes the remaining native
artifact, trained-model, metadata and version/promotion gates in the decision report.

## Objective and admission

The parent's 2026-10-14 continuation explicitly starts this new plan after the
accepted preparation plan. Deliver a concrete release-blocking list with actual
CI, security, notices and package evidence. Preserve the immutable candidate
`df53db08e2ba224edfaf713522ddd410f7d4ac44`, its earlier receipt, shared history,
and the user's inference work. Do not assume errored continuations executed.
No candidate/final tag, release publication or huge model download is authorized.
Pantograph PR78 head `34dfedd27dde9a30274226e1ea26ec1e1b2de8e3` supplies a real
cross-repository untrained-CPU fixture. Its owner qualifies the Pumas candidate
separately; coordinate findings through the parent, without changing its pin.

## Claims

| ID | Observable result | Kind / environment / mode | State |
| --- | --- | --- | --- |
| Q1 | Build 38522709859 reaches a recorded terminal status for `df53db08`; failed applicable jobs are dispositioned | integration / required-real GitHub CI / automated | satisfied: original failed; repaired aa40 Build 38526618039 succeeded |
| Q2 | Current Cargo/pnpm audits and default/S3 notice collection have concrete results and shipped-versus-build dispositions | contract / representative Linux plus current advisory databases / automated and manual | satisfied: raw audits, exact closure triage and identical regenerated notices |
| Q3 | Available exact-source package identity, inventory, runtime and startup/inference evidence are inspected without overstating synthetic/pretrained or platform coverage | release-artifact / actual available target / automated and manual | satisfied: exact aa40 Linux review CI; local bytes unavailable |
| Q4 | Independent review is inspected, or precisely recorded unavailable; only actual remaining release blockers are handed to parent | contract / real report and source evidence / manual | satisfied: published consumer review inspected; separate Pumas diff review unavailable; final gates named |

## Scope and decisions

Write set: this plan directory; current `docs/release-qa-0.8.0.md` and directly
affected release-information links. Retain `v080-readiness/reports/candidate.json`
unchanged as the immutable earlier receipt. No production change is admitted
until a reproduced CI/review/security finding identifies its exact owning paths
and the relevant regression/acceptance evidence is added to this plan.

**Admitted repair:** CI headless job 115716297437 failed only
`pause_is_rejected_after_final_file_commit_and_during_cleanup`: its real worker
did not reach the fixture's terminal-cleanup observation within one second.
The 2,069 other unit tests passed. Add only this test's bounded setup/settlement
budget and stage diagnostics in
`rust/crates/pumas-core/src/model_library/hf/download.rs`. This is a fixture
admission wait, not a product latency promise; preserve both cleanup cutpoints,
false pause admission, unchanged Downloading state until release, Completed
settlement and zero retained destination claims. Run the focused test and full
no-default core unit cohort, Rust format and affected lint when available.
Rust/Async and Verification Oracles guidance apply to the test's separate worker
runtime and blocking channel observations. No production download code, ownership
authority or schema changes are admitted.

The existing sixteen-file artifact plan, RELEASING.md and binding support matrix
govern package claims. Native Windows/macOS and final model acceptance cannot be
inferred from Linux source tests or untrained graph execution. Installed speech
remains unavailable and is not promoted into a release prerequisite merely
because its future scope exists. Unrelated consumers need not release together.

Reuse current release scripts and accepted dependency dispositions. Current pnpm
audit already distinguishes zero production advisories from the known moderate
build-only sprintf-js finding. Audit raw counts are not shipped exposure proof.
Use cargo-audit 0.22.2 (official crates.io package, Rust 1.88 minimum, compatible
with pinned 1.92) under task-local tool/cache roots. Frozen JS dependency setup
must not rewrite manifests or locks; skip dependency lifecycle scripts for notice
collection. No home config/credentials or user libraries are qualification inputs.

Canonical standards read in preparation still apply. Additional reads select
Dependencies, Licensing and Security for current dependency/provenance review,
and the existing Build/Release/Verification/Platforms rules for artifact claims.
The application standards router remains unavailable; no executable certificate
is claimed. **Composed-design review:** not-applicable, because this slice uses
existing authorities/tools and changes evidence, not runtime composition.

## Milestone and gates

**Milestone:** qualified candidate evidence. **State:** Complete within scope.
Gate Q1–Q4: retain exact SHA/run/job/artifact identities, passed/failed/skipped and
not-run results, authoritative advisories and actual closure; inspect staged and
cumulative diffs, commit/push the coherent handoff, update draft PR70. Do not push
while its original exact-head run is active, to avoid cancelling that run.
The candidate's runtime/source identity stays pinned even if a later evidence-only
commit records its result. A source repair creates a separately named candidate.

## Blockers, assumptions and stopping conditions

- Both source cohorts reached terminal status. Original df53 failed one fixture;
repaired aa40 passed all nine applicable jobs. Tag-only jobs were skipped.
- GitHub has no submitted reviews or inline threads for PR70; CodeRabbit states
drafts are not auto-reviewed. The published Pantograph consumer report was
inspected; no separate PR70 diff review was supplied. Parent owns disposition.
- Package verification depends on the actual downloadable artifact and native
host compatibility. Inspect the existing CI-produced candidate first; do not
rebuild/rename a different source or treat a development binary as the package.
- Replan before a source, dependency-resolution, workflow, migration or artifact
contract change. Stop expanding when current evidence identifies the minimal
remaining pre-tag/publication gates under the accepted release policy.

[Ledger](execution-ledger.md) · [Issues](issues.md) ·
[Prior preparation](../v080-readiness/plan.md) ·
[Final receipt](reports/qualification.json) · [Release gates](reports/release-blockers.md)
Loading
Loading