Skip to content

Track runner disk capacity throughout agent execution - #68760

Closed
pelikhan wants to merge 5 commits into
mainfrom
pelikhan-security-report-disk-exhaustion
Closed

pelikhan wants to merge 5 commits into
mainfrom
pelikhan-security-report-disk-exhaustion

Conversation

@pelikhan

@pelikhan pelikhan commented Oct 14, 2026 •

Copy link
Copy Markdown
Collaborator

The Daily Security Observability Report failed after the runner exhausted disk space, but missing logs and artifacts prevented identifying the largest disk consumer. This adds lightweight, privacy-preserving disk-headroom observations alongside GitHub API rate-limit telemetry.

Changes

  • Sample filesystem headroom at setup, every 30 seconds, and shutdown, including builds and downloads. Persist only coarse space bands: exhausted, critical below 1 GiB, low below 5 GiB, and healthy, plus coarse inode headroom. Exact capacities, counts, percentages, paths, and device identifiers are not disclosed.
  • Use at most four native filesystem-capacity calls and one compact write per sample. Filesystem notifications replace idle polling; there are no directory scans, external tools, network calls, or heavyweight dependencies.
  • Use symlink-safe, descriptor-anchored file operations for monitor-owned files. Measurement and lifecycle failures warn without failing the agentic run; shutdown happens before redaction/upload, with post-job cleanup as a fallback.
  • Preserve sanitized observations in agent, fallback, and usage artifacts and typed runner.disk_usage unified-session events. Strip legacy precise fields and raw diagnostics during collection, and preserve telemetry during downloaded-cache pruning.
  • Update documentation and schemas, regenerate all 344 workflow locks, refresh nine WASM golden fixtures, and teach Aider's attribution filter to recognize runner telemetry as a non-engine event.

Limitations

These observations measure filesystem headroom, not directory-size attribution, and do not enforce limits or delete files. Resources sharing a filesystem intentionally report the same bands. A runner crash can still prevent artifact upload; absent telemetry is not evidence of sufficient disk space.

Validation

  • 459 runtime tests, type checking, schema checks, storage tests, focused compiler/Aider tests, and the final pre-push gate passed.
  • WASM build and golden tests passed; all 344 workflow locks are synchronized.
  • Both originally failing checks were PR-caused: stale WASM golden fixtures and missing Aider attribution handling, not CGO failures. Both are addressed.
  • A broader local impacted-test command encountered unchanged macOS completion/chi-square failures whose corresponding tests passed the original Linux CI; those unrelated failures were left untouched.
  • No workflows were dispatched or rerun. Diagnosis scratch files were removed from the workspace and were never committed.

pelikhan and others added 4 commits October 14, 2026 10:03
Record available disk bytes and free inodes every 30 seconds, preserve observations in artifacts and unified sessions, and stop the sampler before redaction and upload.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Use coarse capacity bands, sanitized diagnostics, native low-frequency sampling, descriptor-anchored non-following file access, and warning-only lifecycle and collection failures. Refresh WASM golden fixtures and require attribution for runner.disk_usage in the Aider parser.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Include the shared disk usage helpers in the standalone session parser bundle so reconstruction does not fail with a missing module.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Archive only sanitized coarse disk headroom telemetry. Keep sampler diagnostic logs local to the runner and assert their exclusion from both agent and fallback artifacts.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@pelikhan
pelikhan marked this pull request as ready for review October 14, 2026 18:15
Copilot AI max review requested due to automatic review settings October 14, 2026 18:15
@github-actions

github-actions Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

✅ Ponytail Reviewer completed successfully!

Generated by Ponytail Reviewer for #68760

@github-actions

github-actions Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

✅ Test Quality Sentinel completed test quality analysis.

Test Quality Sentinel

Outcome: reported_no_action

The agent completed and reported no action. A no-op output alone does not verify that all required work was completed or that publication was possible.

Agent messages are omitted from this comment. The category uses structured run status, not interpretation of agent prose.

Generated from Test Quality Sentinel · haiku45 · 4.12 AIC · ⌖ 10.1 AIC · ◇ 3.07 AIC · ⊞ 8.2K · ◷

🧪 Test quality analysis by Test Quality Sentinel

@github-actions

github-actions Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

🧠 Matt Pocock Skills Reviewer has completed the skills-based review. ✅

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer

@github-actions

github-actions Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

✅ PR Code Quality Reviewer completed the code quality review.

🔎 Code quality review by PR Code Quality Reviewer

@github-actions

github-actions Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

✅ Design Decision Gate 🏗️ completed the design decision gate check. See the comment below for the result and any generated ADR draft.

Design Decision Gate 🏗️

Outcome: reported_no_action

The agent completed and reported no action. A no-op output alone does not verify that all required work was completed or that publication was possible.

Agent messages are omitted from this comment. The category uses structured run status, not interpretation of agent prose.

Generated from Design Decision Gate 🏗️ · opus50 · 14.2 AIC · ⌖ 46.3 AIC · ◇ 30.6 AIC · ⊞ 1.9K · ◷

🏗️ ADR gate enforced by Design Decision Gate 🏗️

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ponytail review: two localized cuts identified; details are inline.

net: -31 lines possible.

Generated by ✂️ Ponytail Reviewer for #68760 · codex · gpt56 · 18.2 AIC · ⌖ 5.31 AIC · ⊞ 14.2K
Comment /ponytail to run again

}

/** @param {string} content @returns {string} */
function sanitizeDiskDiagnostics(content) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

L24-38: delete: Sanitizing the local monitor diagnostic log. That log is explicitly excluded from uploads and has no later reader; remove this helper and the collection-time rewrite.

if (!logDiskUsage("setup")) return;
log = openDiskFile(path.join(runtime.anchor, "disk_usage_monitor.log"), fs.constants.O_WRONLY | fs.constants.O_CREAT);
fs.ftruncateSync(log, 0);
const env = Object.fromEntries(["RUNNER_TEMP", "GITHUB_WORKSPACE", "RUNNER_TRACKING_ID"].flatMap(key => (process.env[key] === undefined ? [] : [[key, process.env[key]]])));

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

L101: delete: RUNNER_TRACKING_ID from the detached sampler environment. No logger code reads it; pass only RUNNER_TEMP and GITHUB_WORKSPACE.

@github-actions

Copy link
Copy Markdown
Contributor

Comment Memory

Peek at saved memory (pr-code-quality-reviewer)
reviewed_at: 2026-10-14T18:19:19Z
review_event: REQUEST_CHANGES
top_themes:
- shutdown acknowledgement shorter than fallback check interval
- primary disk telemetry suppresses usage fallback when parsing yields no valid events
- usage artifact drops disk telemetry when collector helper fails
files_reviewed:
- actions/setup/js/disk_usage_logger.cjs
- actions/setup/js/disk_usage.cjs
- actions/setup/js/unified_session.cjs
- actions/setup/post.js
- actions/setup/sh/collect_usage_artifact_files.sh
comment_count: 3

Note

This comment is managed by comment memory.

Expand the saved memory block to view or edit the persistent context for this thread.
Edit only the text inside the backtick fences; workflow metadata and the footer are regenerated automatically.

Learn more about comment memory

🔎 Code quality review by PR Code Quality Reviewer · copilot · gpt54 · 77.2 AIC · ⌖ 7.51 AIC · ⊞ 21.4K · ◷
Comment /review to run again

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Request changes

The new disk telemetry path still has shutdown and fallback gaps that can lose or mutate observations in degraded runs.

Blocking themes
  • stopDiskUsageMonitor() waits 5 seconds even though the documented missed-notification fallback does not re-check for 30 seconds, so the explicit stop step does not actually guarantee the sampler is quiescent before redaction and upload.
  • Unified-session collection always prefers the primary disk_usage.jsonl once the file exists, even when no valid records survived parsing, which drops the sanitized usage/ fallback copy.
  • Usage artifact collection warns on collector/runtime failures without copying the already-sanitized primary telemetry into usage/, so downstream audit/logs consumers lose the data entirely in degraded cleanup paths.

These are all fixable, but they undercut the reliability guarantees this telemetry feature is trying to add.

🔎 Code quality review by PR Code Quality Reviewer · copilot · gpt54 · 77.2 AIC · ⌖ 7.51 AIC · ⊞ 21.4K
Comment /review to run again

}
logDiskUsage("shutdown");
fs.writeFileSync(fd, "stop");
const deadline = Date.now() + 5000;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The 5-second shutdown wait is shorter than the 30-second fallback check interval, so any missed fs.watch notification leaves the detached sampler running past redaction and artifact collection.

💡 Why this matters

If the watcher is unsupported or simply drops an event, the next check() does not run until SAMPLE_INTERVAL_MS elapses. stopDiskUsageMonitor() warns after 5 seconds and immediately returns into collectDiskUsageArtifact(false), so the workflow can redact/upload while the detached worker is still alive and capable of appending more samples.

A safer fix is to make the stop path actively converge within the 5-second budget: either poll the control fd on a short interval after writing stop, or align the fallback check cadence with the acknowledgement timeout.

fs.writeFileSync(fd, "stop");
for (let i = 0; i < 50 && fs.fstatSync(fd).nlink !== 0; i += 1) {
  await new Promise(resolve => setTimeout(resolve, 100));
  check();
}

That keeps the explicit "stop before redaction/upload" guarantee true even when fs.watch() is unreliable.

const timestamp = diskTimestamp(record.timestamp);
events.push({ type: "runner.disk_usage", data, ...(timestamp ? { timestamp } : {}) });
}
sources.push({ component: "runner", phase: "agent", path: candidate, events });

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This unconditionally prefers the primary disk_usage.jsonl copy even when every record was discarded, so a truncated or malformed primary file suppresses the sanitized usage/disk_usage.jsonl fallback.

💡 Why this matters

The collector warns on malformed JSON and invalid legacy records, but it still pushes events and breaks even when events.length === 0. In that state gh aw audit/gh aw logs lose all runner.disk_usage observations despite the usage artifact carrying a clean fallback copy specifically for degraded artifact downloads.

Please only prefer the primary file when at least one valid event was recovered, otherwise continue to the next candidate:

if (events.length === 0) continue;
sources.push({ component: "runner", phase: "agent", path: candidate, events });
break;

That preserves the current primary-first behavior without turning a single bad primary line into total telemetry loss.

@@ -77,6 +78,14 @@ done
if [ -f /tmp/gh-aw/agent/graders/grader_manifest.json ]; then mkdir -p /tmp/gh-aw/usage/graders && cp /tmp/gh-aw/agent/graders/grader_manifest.json /tmp/gh-aw/usage/graders/grader_manifest.json || true; fi
if [ -f /tmp/gh-aw/agent/graders/grader_results.json ]; then mkdir -p /tmp/gh-aw/usage/graders && cp /tmp/gh-aw/agent/graders/grader_results.json /tmp/gh-aw/usage/graders/grader_results.json || true; fi
if [ -f /tmp/gh-aw/github_rate_limits.jsonl ]; then cp /tmp/gh-aw/github_rate_limits.jsonl /tmp/gh-aw/usage/github_rate_limits.jsonl || true; fi
if [ -f /tmp/gh-aw/disk_usage.jsonl ]; then
if command -v node >/dev/null 2>&1 && [ -n "${RUNNER_TEMP:-}" ]; then
node "${RUNNER_TEMP}/gh-aw/actions/disk_usage_logger.cjs" collect 2>/dev/null ||

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When this collector invocation fails, the script only warns and never copies the already-sanitized /tmp/gh-aw/disk_usage.jsonl into usage/, so the usage artifact silently loses runner telemetry in degraded runs.

💡 Why this matters

stopDiskUsageMonitor() already rewrites the primary disk_usage.jsonl in place with coarse, scrubbed records before this script runs. If node is missing, RUNNER_TEMP is unset, or disk_usage_logger.cjs collect errors, we currently keep the primary/fallback artifacts but drop the usage copy that downstream audit/logs collection relies on.

Please keep a direct copy fallback on the warning path, for example:

if node "${RUNNER_TEMP}/gh-aw/actions/disk_usage_logger.cjs" collect 2>/dev/null; then
  :
else
  cp /tmp/gh-aw/disk_usage.jsonl /tmp/gh-aw/usage/disk_usage.jsonl || \
    echo "::warning::Failed to collect disk capacity telemetry"
fi

That way degraded cleanup still preserves the telemetry we already paid to collect.

Collect sanitized disk telemetry through the existing github-script runtime, make sampler environment coverage deterministic, and correct the disk snapshot documentation link.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Skills-Based Review 🧠

Applied /tdd and /grill-with-docs. This is a well-engineered, defense-in-depth feature: descriptor-anchored symlink-safe file ops, fixed privacy bands (no raw bytes/paths/device IDs persisted), bounded telemetry size/duration, and 448 lines of tests covering TOCTOU races, malicious symlinks, malformed JSONL, and size limits. No blocking issues found.

📋 Key Themes & Highlights

Positive Highlights

  • ✅ Privacy by construction: normalizeDiskUsage allowlists fields and re-derives availableSpaceBand/inodeHeadroom from a fixed enum rather than trusting the stored string, so legacy/opaque fields can never leak through even if an old record format is read.
  • ✅ Symlink safety: openDiskDirectory/openDiskFile use non-following opens plus proc-fd descriptor anchors, with explicit tests for file and directory symlink attacks ("does not read telemetry through an attacker-controlled symlink").
  • ✅ Fail-safe lifecycle: every failure path (start, stop, interval sampling, collection) warns via a fixed-label warning annotation rather than throwing, and the monitor self-bounds to 72h/16MiB so a stuck worker cannot balloon disk/log usage.
  • ✅ Consistent wiring: new DiskUsageFilename constant, artifact-path registration, the hardcoded runner-temp actions path in the generated lock step, and the agent-job-name gating all match existing conventions elsewhere in the compiler/setup scripts.

Minor observations (non-blocking)

  • sanitizeDiskDiagnostics discards an entire diagnostic line once it fails to match the expected warning-annotation shape; intentional fail-closed behavior per the tests, but could make debugging a corrupted log harder from the artifact alone. Acceptable given the privacy goals.
  • The monitor script path is now hardcoded in several places (setup.sh, clean.sh, the Go compiler step, and the usage-collector shell script). This mirrors existing patterns elsewhere in the codebase, so it is consistent, but a shared constant could reduce future drift if the actions subdirectory name ever changes.

Overall this is thorough, well-tested work that directly addresses the originating disk-exhaustion incident without compromising runner privacy. Approving.

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer · copilot · sonnet50 · 132.7 AIC · ⌖ 14.5 AIC · ⊞ 10.4K
Comment /matt to run again

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Critical privacy leaks, missing usage uploads, and unresolved lifecycle and test defects block approval.

3 open findings
What changed in this PR

Adds runner disk-headroom monitoring to help diagnose disk-exhaustion failures using coarse telemetry.

Changes:

  • Wire monitoring into setup, pre-redaction shutdown, and cleanup fallbacks.
  • Integrate telemetry with artifacts, cache retention, and typed session events.
  • Refresh workflow locks, WASM fixtures, and Aider attribution filtering.
File Description
pkg/​workflow/​testdata/​TestWasmGolden_CompileFixtures/​with-imports.golden Refresh monitoring and artifact expectations.
pkg/​workflow/​testdata/​TestWasmGolden_CompileFixtures/​smoke-copilot.golden Refresh monitoring and artifact expectations.
pkg/​workflow/​testdata/​TestWasmGolden_CompileFixtures/​playwright-cli-mode.golden Refresh monitoring and artifact expectations.
pkg/​workflow/​testdata/​TestWasmGolden_CompileFixtures/​basic-copilot.golden Refresh monitoring and artifact expectations.
pkg/​workflow/​testdata/​TestWasmGolden_AllEngines/​pi.golden Refresh monitoring and artifact expectations.
pkg/​workflow/​testdata/​TestWasmGolden_AllEngines/​gemini.golden Refresh monitoring and artifact expectations.
pkg/​workflow/​testdata/​TestWasmGolden_AllEngines/​copilot.golden Refresh monitoring and artifact expectations.
pkg/​workflow/​testdata/​TestWasmGolden_AllEngines/​codex.golden Refresh monitoring and artifact expectations.
pkg/​workflow/​testdata/​TestWasmGolden_AllEngines/​claude.golden Refresh monitoring and artifact expectations.
pkg/​workflow/​compiler_yaml_post_agent.go Add agent telemetry uploads. Critical: rejected oversized telemetry remains uploadable unsanitized. Moderate: the usage copy is not uploaded.
pkg/​workflow/​compiler_yaml_artifacts.go Add fallback telemetry uploads. Critical: rejected oversized telemetry remains uploadable unsanitized.
pkg/​workflow/​compiler_yaml_ai_execution.go Stop monitoring before redaction. Nit: the redaction comment is misplaced.
pkg/​constants/​job_constants.go Define the telemetry filename.
pkg/​cli/​logs_storage_limit.go Preserve disk telemetry during cache pruning.
pkg/​cli/​logs_storage_limit_test.go Test telemetry retention during pruning.
actions/​setup/​setup.sh Start agent monitoring. Moderate: unsupported platforms produce warnings. Moderate: handled worker write failures lose their diagnostics.
actions/​setup/​session_parsers.go Embed disk-event normalization helpers.
actions/​setup/​post.js Add fallback shutdown. Moderate: non-Linux jobs receive warnings even when monitoring never started.
actions/​setup/​js/​unified_session_payload.cjs Normalize disk events. Critical: native provenance bypasses sanitization during merging. Nit: the duplicate EVENT_FIELDS entry is unused.
actions/​setup/​js/​types/​unified_session.d.ts Define typed disk observations.
actions/​setup/​js/​setup_sh_file_lists.test.cjs Check lifecycle wiring. Moderate: the ordering assertion passes when the stop call is absent.
actions/​setup/​js/​constants.cjs Export the telemetry path. Nit: the export is unused and lacks JSDoc.
actions/​setup/​clean.sh Add script-mode monitor shutdown.
.github/​workflows/​workflow-normalizer.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​workflow-health-manager.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​workflow-generator.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​windows.lock.yml Refresh Bash shutdown and artifact paths.
.github/​workflows/​windows-grower.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​weekly-issue-summary.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​video-analyzer.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​update-astro.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​unbloat-docs.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​ubuntu-image-analyzer.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​typist.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​tidy.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​test-quality-sentinel.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​terminal-stylist.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​technical-doc-writer.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​super-linter.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​step-name-alignment.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​static-analysis-report.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​stale-pr-cleanup.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​squad.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​squad-plan.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​squad-implement-worker.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​squad-game-planner.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​spec-librarian.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​spec-extractor.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​spec-enforcer.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​smoke-workflow-call-with-inputs.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​smoke-work-queue.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​smoke-test-tools.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​smoke-project.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​smoke-pi-auto.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​smoke-github-codex.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​smoke-drive.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​smoke-codex-bare-auto.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​smoke-codex-auto.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​smoke-claude-dynamic.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​smoke-claude-copilot.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​smoke-claude-copilot-auto.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​smoke-claude-auto.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​smoke-ci.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​smoke-azure-pi.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​smoke-azure-codex.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​smoke-agy.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​skillet.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​shared/​aider.md Classify runner telemetry as non-engine events.
.github/​workflows/​sergo.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​security-review.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​security-compliance.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​scout.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​schema-feature-coverage.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​safe-output-health.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​research.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​repo-tree-map.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​release.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​refiner.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​q.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​python-data-charts.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​purelock.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​plan.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​pdf-summary.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​outcome-collector.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​org-health-report.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​objective-impact-report.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​notion-issue-summary.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​necromancer.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​metrics-collector.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​mergefest.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​mcp-inspector.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​linter-miner.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​lint-monster.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​layout-spec-maintainer.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​jsweep.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​issue-monster.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​hippo-embed.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​grumpy-reviewer.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​gpclean.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​go-pattern-detector.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​go-logger.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​go-fan.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​firewall.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​firewall-escape.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​feature-grower.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​example-permissions-warning.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​example-failure-category-filter.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​eslint-refiner.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​eslint-monster.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​eslint-miner.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​eslint-factory-dispatcher.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​engine-conformance-pydantic-ai.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​engine-conformance-pi.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​engine-conformance-opencode.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​engine-conformance-kiro.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​engine-conformance-goose.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​engine-conformance-gemini.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​engine-conformance-dispatcher.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​engine-conformance-deepseek-harness.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​engine-conformance-cursor.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​engine-conformance-crush.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​engine-conformance-copilot.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​engine-conformance-codex.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​engine-conformance-claude.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​engine-conformance-agy.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​dev.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​dev-hawk.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​detection-analysis-report.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​delight.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​deep-report.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​daily-work-queues-report.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​daily-work-queue-formal-verification.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​daily-token-consumption-report.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​daily-team-status.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​daily-team-evolution-insights.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​daily-secrets-analysis.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​daily-report-dispatcher.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​daily-repo-chronicle.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​daily-regulatory.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​daily-performance-summary.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​daily-observability-report.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​daily-news.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​daily-model-resolution.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​daily-issues-report.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​daily-firewall-report.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​daily-fact.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​daily-evals-report.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​daily-credit-limit-test.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​daily-compiler-quality.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​daily-cli-performance.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​daily-choice-test.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​craft.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​copilot-opt.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​copilot-agent-analysis.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​contribution-check.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​codex-github-remote-mcp-test.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​code-simplifier.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​cloclo.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​ci-coach.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​changeset.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​bot-detection.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​blog-auditor.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​aw-issue-clustering.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​avenger.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​audit-workflows.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​artifacts-summary.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​architecture-guardian.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​archie.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​approach-validator.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​api-consumption-report.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​agy-conformance-reusable.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​agent-job-health.lock.yml Refresh shutdown and artifact paths.
.github/​workflows/​ace-editor.lock.yml Refresh shutdown and artifact paths.

🧠 Review effort: Max

Comment on lines +531 to +534
if (event.type === "runner.disk_usage") {
const { normalizeDiskUsage, diskTimestamp } = require("./disk_usage.cjs");
const timestamp = diskTimestamp(event.timestamp);
return { type: event.type, data: normalizeDiskUsage(event.data) ?? {}, ...(timestamp ? { timestamp } : {}) };
@@ -91,6 +91,7 @@ func (c *Compiler) generateAgentOutputFallbackUpload(yaml *strings.Builder, data
agentExecutionExitCodePath,
constants.TmpGhAwDirSlash + "agent_usage.jsonl",
constants.TmpGhAwDirSlash + "agent_usage.json",
constants.TmpGhAwDirSlash + constants.DiskUsageFilename.String(),
@@ -68,6 +68,7 @@ func (c *Compiler) collectArtifactPaths(data *WorkflowData, engine CodingAgentEn
// Collect GitHub API rate-limit log for observability.
// Written by github_rate_limit_logger.cjs during REST API calls.
paths = append(paths, constants.TmpGhAwDirSlash+constants.GithubRateLimitsFilename.String())
paths = append(paths, constants.TmpGhAwDirSlash+constants.DiskUsageFilename.String())
@pelikhan pelikhan closed this Oct 14, 2026
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.

2 participants