feat(runtime): expose precise SnapshotProgress during setup - #97
feat(runtime): expose precise SnapshotProgress during setup#97IOHelpMe wants to merge 3 commits into
Conversation
|
|
GPT-5.6 follow-up review is implemented in The reporter is now serialized, retries failed progress posts without creating concurrent requests, and shuts down deterministically. Callback input is validated at the HTTP boundary, progress is cleared across completion/cancellation/retry lifecycles, and OCI progress cannot report 100% before copy, manifest fetch/decode, and metadata writes have all succeeded. A post-copy write-failure regression specifically proves failed pulls remain below 100% and return to idle. Fresh local verification:
All passed. This remains the slim SnapshotProgress HIG-24 scope; ETA, stage/speed telemetry, procedure progress, and Scroll changes are intentionally not part of this PR. Merge this PR before highcard-dev/monorepo#318. Remote CI update: |
|
GPT-5.6 follow-up is implemented in This extends the existing slim Fresh verification:
Merge order: this PR → highcard-dev/scrolls#70 → highcard-dev/monorepo#318. |
|
Remote CI final status: build, unit-tests, integration-tests, and validate-api all pass. The only red job is prerelease, which successfully downloads the built artifacts and then receives 403 Resource not accessible by integration when the fork PR token tries to create GitHub release pr-97. This is a fork-token permission restriction, not a product/test failure, so no code workaround was added: https://github.com/highcard-dev/druid-cli/actions/runs/30043103676/job/89328599533 |
|
Follow-up after senior review:
Latest fix commit: |
|
CI follow-up: the failing prerelease job was caused by GitHub correctly giving fork pull requests a read-only token, so release creation returned 403. Commit 6102f0b keeps all validation jobs for forks but gates prerelease and Docker publishing to same-repository branches. No elevated pull_request_target workflow or write access for untrusted fork code was introduced. |
6102f0b to
cad3b6b
Compare
|
Clean rewrite completed at cad3b6b. The PR now keeps SnapshotProgress unchanged and forwards only its percentage through a small authenticated worker callback into the existing health.progress field. Initialize/update/restore OCI pulls are covered; no queue contract, procedure progress, speed, bytes, or ETA were added. Verified with go test ./..., go vet ./..., and git diff --check. |
|
CI follow-up: validate-api, unit-tests, build, and integration-tests all passed. The only red job is the downstream prerelease publisher: softprops/action-gh-release receives HTTP 403 Resource not accessible by integration when trying to create tag/release pr-97 from this fork PR. This is a GitHub Actions token-permission/infrastructure issue, not a test or product-code failure; no scope-expanding workaround was added. |
|
Local Windows/WSL E2E validation for the slim SnapshotProgress path:
Because each tested Scroll artifact is effectively a single OCI layer, the unchanged SnapshotProgress source can legitimately expose only the synthesized 0% followed by completion. This PR still does not infer intermediate procedure/download progress and does not extend SnapshotProgress. |
|
Follow-up after live ARK validation and senior review (d8a8e13):
Validation: go test ./..., focused regressions, git diff --check, and live ARK source-vs-health investigation. No queue/OpenAPI/Scroll changes, no speed/ETA, and SnapshotProgress remains unchanged. |
|
@MarcStdt Ready for review. SnapshotProgress remains the only source of truth; it now preserves real tenths instead of rounding valid SteamCMD samples to whole percentages. The existing callback/health schema is unchanged, and the focused plus full Go tests pass. The upstream LinuxGSM buffering fix is highcard-dev/scrolls#71. |
|
CI note for review: unit, integration, API validation, and build are green. Only |
druid-infra
left a comment
There was a problem hiding this comment.
Compared against the current repo patterns and architecture notes. One design concern called out inline: this adds a handwritten callback route where the repo has otherwise been moving API shape back under generated OpenAPI contracts. No other blocking issues from this pass.
There was a problem hiding this comment.
This works, but it does step outside the repo’s current API pattern. CONTEXT.md says the REST surface should come from the generated OpenAPI handlers, with only /health and websocket attach kept manual. Since this adds another handwritten callback route, I’d strongly prefer adding the progress endpoint to the callback OpenAPI contract and regenerating internal/callbackapi instead of letting the route/client shape drift in two places.
|
the scope is still to big please remove the progress reading from pod logs, rater only rely on SnapshotProgress. |
Summary
SnapshotProgressacross setup and lifecycle operationsWhy
The existing whole-percent storage rounded away valid sub-percent SteamCMD samples, while console backpressure could delay newer samples. Atomic fixed-point tenths preserve those real values without extending
SnapshotProgressor the public schema; no progress is estimated or fabricated. LinuxGSM pipe buffering is fixed separately in highcard-dev/scrolls#71.Verification
go test ./...git diff --checkMerge highcard-dev/monorepo#318 after this PR. Scrolls#71 can merge independently; all three are required for the complete LGSM path.