[lockfile-stats] Lockfile statistics audit — 233 workflows, 22.55 MB, 2026-05-21 #33855
Closed
Replies: 1 comment
-
|
This discussion has been marked as outdated by Lockfile Statistics Analysis Agent. A newer discussion is available at Discussion #34101. |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Executive Summary
Analysis of 233 compiled workflow lockfiles (
.github/workflows/*.lock.yml) on 2026-05-21 — total 22.55 MB, no files skipped.runscriptsFile Size Distribution
Sizes are tightly clustered: every lockfile is at least 62 KB, and the largest is only ~2.8× the smallest — suggesting a substantial shared compiled scaffold (engine setup, safe-output plumbing, MCP server boilerplate) that dominates the per-file footprint regardless of the user-authored content.
Top 10 largest lockfiles
5 smallest lockfiles
Trigger Analysis
workflow_dispatchschedulepull_requestissuesissue_commentpushworkflow_rundiscussiondiscussion_commentpull_request_review_commentTop trigger combinations:
schedule + workflow_dispatchworkflow_dispatchonlypull_request + workflow_dispatchpull_requestonlyNearly two-thirds of all workflows are scheduled, almost universally paired with
workflow_dispatchfor manual reruns. Only 8 workflows omitworkflow_dispatchentirely — a strong convention across the repo.Schedule cron patterns (top 30 — all crons are off-zero minutes)
Most-shared crons (each used by ≤2 workflows):
23 11 * * *,38 3 * * *,9 3 * * *,39 23 * * *,52 23 * * *,40 3 * * *— each appears twice.The remaining 153 scheduled workflows use unique crons with off-zero minute offsets (e.g.
5 14 * * 1-5,27 */6 * * *,49 */4 * * *). This is consistent with the "avoid:00/:30" guidance to spread scheduler load.Safe Outputs Analysis
.lock.ymlfiles, safe-outputs configuration is embedded as a JSON env var (GITHUB_AW_SAFE_OUTPUTS_*), not as YAML keys, so the regex-based extractor returned no key-level counts in this run. The lockfiles do reference thesafeoutputsMCP server / CLI throughout. A future bump (lockfile_stats_v2.py) should parse the embedded JSON env var to recover counts.What we can observe:
safeoutputsMCP server (it is the standard write channel for these agentic workflows).category:from the embedded safe-outputs JSON.Structural Characteristics
firewall-escape.lock.ymlsmoke-copilot.lock.ymlrunscriptsCompiled workflows are large but uniform: every workflow has at least 5 jobs and 67 steps, suggesting a fixed compiled skeleton (preflight, engine setup, MCP setup, agent run, safe-output dispatch, teardown) plus per-workflow tail.
Timeout distribution (across all jobs):
The 6–30 minute band covers 91% of all timeouts — consistent with single-turn agent runs sized to fit comfortably within GitHub-hosted runner billing increments.
Permission Patterns
All 233 lockfiles set
permissions: {}at the top level, then declare fine-grained permissions per job. This is the safest pattern: no implicit token scope at the workflow level, with each job's needs declared explicitly. (Per-job permission counts could not be aggregated in this run because the YAML parser was unavailable in the runtime; the regex pass over inlinepermissions: {}confirms the empty-top-level convention is universal.)Tool & MCP Patterns
MCP server frequency (count of references across all lockfiles):
githubplaywrightsentrygrafanaarxivdeepwikiTop 30 most-referenced MCP tools (all 124 occurrences each → loaded by 124 of 233 workflows)
Each of these tools shows exactly 124 references, which strongly suggests 124 workflows enable the full GitHub MCP read-toolset together rather than picking individual tools:
get_commit,get_file_contents,get_pull_request,get_pull_request_diff,get_pull_request_files,get_pull_request_review_comments,get_pull_request_reviews,get_pull_request_status,get_pull_request_comments,get_workflow_run,get_workflow_run_logs,get_workflow_run_usage,get_job_logs,download_workflow_run_artifact,list_branches,list_commits,get_tag,get_release_by_tag,get_latest_release,issue_read,get_discussion,get_discussion_comments,get_label,get_me,get_notification_details,get_code_scanning_alert,list_code_scanning_alerts,get_dependabot_alert,list_dependabot_alerts,get_secret_scanning_alert.Engine distribution:
Interesting Findings
schedule + workflow_dispatchis the dominant pattern (66.5% of all workflows). Only 3 workflows arepull_request-only; the repo is overwhelmingly oriented toward autonomous scheduled agents, not PR gatekeepers.smoke-*-claude/copilot/codexlockfiles cluster at the top of the size list (4 of the top 5 largest), reflecting the broader test/setup matrix smoke tests carry.githubMCP server is referenced 6,448 times across lockfiles — roughly 27.7 references per workflow on average, dwarfing every other MCP server combined (≈300). Reducing this footprint (selective tool enabling instead of full toolset opt-in) would meaningfully shrink lockfiles.permissions: {}at the top level — a strict, opt-in security posture is universal.:00or:30outside a handful of cases. The scheduler-spreading guidance is being followed broadly: most off-zero minutes (e.g.:23,:38,:49) are in active use.Historical Trends
No reliable prior-day comparison: the only history entry (
2026-05-20.json) was generated by an earlier broken analyzer version that reported 0 lockfiles. Today's run (schemav1) writes a clean baseline at/tmp/gh-aw/cache-memory/history/2026-05-21.json— future runs will be able to diff against it.Recommendations
lockfile_stats_v2.pyto parse the embeddedGITHUB_AW_SAFE_OUTPUTS_*JSON env vars so safe-output type counts and discussion categories can be recovered. Today's report has a gap there.:00/:30cron-avoidance convention — it is already nearly universal, worth codifying in a linter check.Methodology
/tmp/gh-aw/cache-memory/scripts/lockfile_stats_v1.py, which scanned all 233.lock.ymlfiles and emitted a single ≤50 KB JSON summary at/tmp/gh-aw/agent/lockfile-stats-summary.json. All discussion text below was derived from that summary, not from re-reading lockfiles.lockfile_stats_v1.pywas discovered to be broken (skipped all 233 files); it was overwritten in-place and rerun. Today's run is the new baseline.References:
Beta Was this translation helpful? Give feedback.
All reactions