Conversation
The post step now sends one structured stickydisk_mount_report to the vm-agent's /internal endpoint (BLACKSMITH_AGENT_ADDR + BLACKSMITH_METRICS_HTTP_PORT, the channel the checkout action already uses) with what only the guest knows: whether the disk was mounted or the step fell back to a plain directory, why a commit was skipped (commit: false, early deny, if-missing with an existing disk, on-change unchanged, prior step failure, setup error, not mounted, post error) and the format/mount/unmount durations. The host joins it into its per-mount lifecycle row by expose id. Exactly one report is sent per post run, from a finally block, so every early return is covered. Sending is best-effort: it is skipped when the endpoint is not configured, bounded by a 3s timeout, and every error is swallowed at debug level. The main step saves the expose id as soon as GetStickyDisk returns so a guest-side format/mount failure still reports against the exposed disk, and saves the format/mount durations to state. Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
sendMountReport resolved on any HTTP response, so a 4xx/5xx from the agent was logged as a successful report. Non-2xx statuses now reject like a network error: still swallowed, debug-only, never affecting the job. The report timeout drops from 3000 ms to 1500 ms. The agent is on the runner's local network and the post step is on the customer's critical path, so a stalled agent should cost at most 1.5 s. Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
piob-io
marked this pull request as ready for review
September 9, 2026 20:52
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit e3681a5. Configure here.
The format decision is known before the mount step runs, so a mount failure after mkfs must not leave the post report claiming the disk was never formatted. The if-missing check in post never sees this state on the failure path: it returns early on setup_error before consulting it. Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
ajwerner
reviewed
Sep 10, 2026
format_ms, mount_ms and unmount_ms are assigned in finally blocks so a failed mkfs, mount or exhausted unmount retry still reports the time it spent instead of zero, which the host row would read as the phase never having run. Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
ajwerner
approved these changes
Sep 10, 2026
ajwerner
left a comment
There was a problem hiding this comment.
Reviewed the follow-up changes; failed-phase timings are preserved in the source and rebuilt action bundles.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
The post step sends one structured report to the vm-agent so the host's per-mount lifecycle record can include what only the guest knows. The host record never depends on it: the report is additive, best-effort, and dropped silently if the agent is old or unreachable.
src/mount-report.ts(new) — same transport as the checkout action's/internalsender:false) when either env var is missing; resolvestrueonly on a 2xx response, any other status is a failed send like a network error; every failure swallowed atcore.debug, never surfaced to the job.MOUNT_REPORT_TIMEOUT_MS = 1500. The agent is on the runner's local network, so a healthy round trip is milliseconds, and the post step sits on the customer's critical path: a stalled agent costs at most 1.5s (down from the initial 3s).skip_reasonis""when the commit was requested.src/post.ts— the report is built up front from state, each existing skip branch tags itsskip_reason, andsendMountReportruns in afinallyso exactly one report leaves per post run, including the early "not mounted" returns and the catch-all error path.src/main.ts:STICKYDISK_EXPOSE_IDis saved right afterGetStickyDiskreturns instead of after mount, so a guest-side format/mount failure still reports against the disk the host exposed (and the post step now sendsshouldCommit=falsefor it rather than skipping the RPC).mkfs/resize2fsandmount+chowndurations are timed and saved asSTICKYDISK_FORMAT_MS/STICKYDISK_MOUNT_MS.Receiver side is in FastActions/fa#5523 (joins the report onto the buffered row by
expose_id; sticky-disk-key fallback for failed exposes that have no expose id).Tests (
src/__tests__/mount-report.test.ts) cover env parsing, the envelope, a real local HTTP server receiving the POST, a local server answering 500, missing endpoint, refused connection, and a silent server hitting the timeout.Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled. (Staging)Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.Link to Devin session: https://app.devin.ai/sessions/9ad0c14a6daf4eadb0e5c47ecb6b8931
Open in Devin Desktop: https://app.devin.ai/desktop/session/9ad0c14a6daf4eadb0e5c47ecb6b8931?variant=devin
Requested by: @piob-io