chore: sync workflow templates - #623
Conversation
Automated sync from stranske/Workflows Template hash: 1da4b4051d91 Changes synced from sync-manifest.yml
There was a problem hiding this comment.
Pull request overview
Syncs workflow-consumer template updates by expanding weekly agent-metrics tooling/contracts to include Codex CLI freshness metrics and richer artifact-selection metadata.
Changes:
- Add
codex-cli-freshnessas a recognized/priority weekly metrics artifact family. - Extend metrics aggregation to bucket + summarise Codex CLI freshness records and to track verifier CLI versions.
- Expand the download manifest’s embedded selection details into a richer, reusable shape.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| scripts/aggregate_agent_metrics.py | Recognizes codex-cli-freshness entries, summarizes them, and adds verifier CLI-version counting to the markdown + JSON contract. |
| .github/scripts/weekly_metrics_download_manifest.js | Refactors manifest “selection” block creation into compactSelectionDetails() and includes additional selection metadata. |
| .github/scripts/weekly_metrics_artifacts.js | Adds codex-cli-freshness to known artifacts and priority families for selection. |
| .github/scripts/terminal_disposition.js | Captures llm_cli_version into terminal disposition normalization for downstream aggregation/reporting. |
| status = str(entry.get("status") or "unknown") | ||
| statuses[status] += 1 | ||
| package = str(entry.get("package") or "unknown") | ||
| packages[package] += 1 | ||
| pinned = str(entry.get("pinned_version") or "unknown") | ||
| latest = str(entry.get("latest_version") or "unknown") | ||
| pinned_versions[pinned] += 1 |
There was a problem hiding this comment.
In _summarise_codex_cli_freshness, status, package, pinned_version, and latest_version are converted with str(...) but not normalized (trim/lower). This can split counts across values that differ only by case/whitespace and can make derived fields like outdated_records / latest_unavailable_records inaccurate (they rely on exact string keys). Consider normalizing these strings (e.g., .strip().lower() and, if needed, mapping _ to -) before counting and before looking up specific statuses.
| return { | ||
| path: selectionPath, | ||
| schema: cleanString(selection.schema), | ||
| status: cleanString(selection.status || 'pass'), |
There was a problem hiding this comment.
compactSelectionDetails() stores selection.status via cleanString(selection.status || 'pass') without normalizing casing. Since later logic treats 'error' as a sentinel (buildInitialManifest/finalizeManifest compare to 'error'), a non-lowercase value like 'Error' would silently fail to propagate an error status. Consider normalizing this field (e.g., cleanString(...).toLowerCase() or reuse normalizeStatus() with allowed values).
| status: cleanString(selection.status || 'pass'), | |
| status: normalizeStatus(selection.status || 'pass', ['pass', 'error'], 'pass'), |
Sync Summary
Files Updated
Files Skipped
Review Checklist
Source: stranske/Workflows
Source SHA:
9a17c457d376f9288ca9abc64a8590b6b2440c44Template hash:
1da4b4051d91Sync branch:
sync/workflows-1da4b4051d91Consumer repo:
stranske/TemplateManifest:
.github/sync-manifest.yml